2011-11-18 13 views

risposta

115

è possibile accedere elemento attualmente in riproduzione utilizzando currentItem proprietà:

AVPlayerItem *currentItem = yourAVPlayer.currentItem; 

allora si può facilmente ottenere il tempo richiesto valori

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

la re è anche il metodo conveniente CMTimeGetSeconds per ottenere NSTimeInterval: NSTimeInterval duration = CMTimeGetSeconds (currentItem.duration); NSTimeInterval currentTime = CMTimeGetSeconds (currentItem.currentTime); – slamor

+0

ho dovuto impostare la chiamata nella coda principale affinché restituisca il valore corretto (o qualsiasi coda in cui il tuo avplayer è in esecuzione). –

+0

come dare questa propensione a 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

sto riproducendo canzoni dall'URL. ma a CMTime duration e CMTime currentTime sto ottenendo 0. qual è il problema qui per il valore 0? qualcuno conosce la soluzione? – Moxarth

3

Swift:

let currentItem = yourAVPlayer.currentItem 

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

ottenere CMTime da .currentItem.asset.duration richiede 3-4 secondi? Come risolvere questo problema? Ho ancora usato thread ma non risolto? –

6

Con Swift 2.0, utilizzare questo;

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

Ho provato a utilizzare AVPlayer.currentTime(), ma non è fortunato, ottenendo un errore di accesso errato – KavyaKavita

+0

ottenere CMTime da .currentItem.asset.duration richiede 3-4 secondi? Come risolvere questo problema? Ho ancora usato thread ma non risolto? –

6

Swift 3

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

È possibile ottenere i secondi del tuo tempo corrente accedendo alla proprietà seconds del currentTime(). Ciò restituirà un Double che rappresenta i secondi nel tempo. Quindi puoi usare questo valore per costruire un tempo leggibile da presentare al tuo utente.

In primo luogo, includere un metodo per restituire le variabili di tempo per H:mm:ss che mostrerà all'utente:

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) 
} 

successivo, un metodo che permette di convertire i valori recuperati in precedenza in una stringa leggibile:

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 
} 

Ora, aggiornare l'interfaccia utente con i calcoli precedenti:

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) 
    } 
} 
Problemi correlati