2011-11-18 18 views

Odpowiedz

115

Aby uzyskać dostęp do aktualnie odtwarzany element za pomocą currentItem właściwość:

AVPlayerItem *currentItem = yourAVPlayer.currentItem; 

Następnie można łatwo uzyskać czas o wartości

CMTime duration = currentItem.duration; //total time 
CMTime currentTime = currentItem.currentTime; //playing time 
+9

się re jest również wygodną metodą CMTimeGetSeconds, aby uzyskać NSTimeInterval: NSTimeInterval duration = CMTimeGetSeconds (currentItem.duration); NSTimeInterval currentTime = CMTimeGetSeconds (currentItem.currentTime); – slamor

+0

Musiałem ustawić wywołanie go w głównej kolejce, aby przywrócić prawidłową wartość (lub inną kolejkę, w której działa avplayer). –

+0

jak dać tę właściwość LABEL? –

20
_audioPlayer = [self playerWithAudio:_audio]; 
_observer = 
[_audioPlayer addPeriodicTimeObserverForInterval:CMTimeMake(1, 2) 
              queue:dispatch_get_main_queue() 
             usingBlock:^(CMTime time) 
             { 
              _progress = CMTimeGetSeconds(time); 
             }]; 
5
 AVPlayerItem *currentItem = player.currentItem; 
    NSTimeInterval currentTime = CMTimeGetSeconds(currentItem.currentTime); 
    NSLog(@" Capturing Time :%f ",currentTime); 
+0

Odtwarzam utwór z adresu URL. ale w czasie CMTime i CMTime currentTime otrzymuję 0. jaki jest tutaj problem dla wartości 0? czy ktoś zna rozwiązanie? – Moxarth

3

Swift:

let currentItem = yourAVPlayer.currentItem 

let duration = currentItem.asset.duration 
var currentTime = currentItem.asset.currentTime 
+0

uzyskać CMTime z .currentItem.asset.duration trwa 3-4 sekund? Jak rozwiązać ten problem? Nadal używam wątku, ale nie mogę go rozwiązać? –

6

Używając Swift 2.0, użyj tego;

let currentPlayerItem = AVPlayer.currentItem 
let duration = currentPlayerItem?.asset.duration 
var currentTime = AVPlayer.currentTime() 
+0

Próbowałem użyć AVPlayer.currentTime(), ale bez powodzenia, uzyskanie złego błędu dostępu – KavyaKavita

+0

uzyskać CMTime z .currentItem.asset.duration trwa 3-4 sekund? Jak rozwiązać ten problem? Nadal używam wątku, ale nie mogę go rozwiązać? –

6

Swift 3

let currentTime:Double = player.currentItem.currentTime().seconds 

można uzyskać sekund bieżącego czasu poprzez dostęp własność currentTime()seconds. To zwróci wartość Double, która reprezentuje sekundy w czasie. Następnie możesz użyć tej wartości, aby skonstruować czytelny czas na zaprezentowanie użytkownikowi.

pierwsze, obejmują metodę powrotu zmiennych czasowych dla H:mm:ss które będą wyświetlane użytkownikowi:

func getHoursMinutesSecondsFrom(seconds: Double) -> (hours: Int, minutes: Int, seconds: Int) { 
    let secs = Int(seconds) 
    let hours = secs/3600 
    let minutes = (secs % 3600)/60 
    let seconds = (secs % 3600) % 60 
    return (hours, minutes, seconds) 
} 

Następnie metoda, która konwertuje wartości, które pobrane powyżej w czytelnej ciąg:

func formatTimeFor(seconds: Double) -> String { 
    let result = getHoursMinutesSecondsFrom(seconds: seconds) 
    let hoursString = "\(result.hours)" 
    var minutesString = "\(result.minutes)" 
    if minutesString.characters.count == 1 { 
     minutesString = "0\(result.minutes)" 
    } 
    var secondsString = "\(result.seconds)" 
    if secondsString.characters.count == 1 { 
     secondsString = "0\(result.seconds)" 
    } 
    var time = "\(hoursString):" 
    if result.hours >= 1 { 
     time.append("\(minutesString):\(secondsString)") 
    } 
    else { 
     time = "\(minutesString):\(secondsString)" 
    } 
    return time 
} 

teraz zaktualizować UI z poprzednich obliczeń:

func updateTime() { 
    // Access current item 
    if let currentItem = player.currentItem { 
     // Get the current time in seconds 
     let playhead = currentItem.currentTime().seconds 
     let duration = currentItem.duration.seconds 
     // Format seconds for human readable string 
     playheadLabel.text = formatTimeFor(seconds: playhead) 
     durationLabel.text = formatTimeFor(seconds: duration) 
    } 
} 
Powiązane problemy