How do I get current playing time and total play time in AVPlayer? How do I get current playing time and total play time in AVPlayer? ios ios

How do I get current playing time and total play time in AVPlayer?


You can access currently played item by using currentItem property:

AVPlayerItem *currentItem = yourAVPlayer.currentItem;

Then you can easily get the requested time values

CMTime duration = currentItem.duration; //total timeCMTime currentTime = currentItem.currentTime; //playing time


_audioPlayer = [self playerWithAudio:_audio];_observer =[_audioPlayer addPeriodicTimeObserverForInterval:CMTimeMake(1, 2)                                           queue:dispatch_get_main_queue()                                      usingBlock:^(CMTime time)                                      {                                          _progress = CMTimeGetSeconds(time);                                      }];


Swift 3

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

You can get the seconds of your current time by accessing the seconds property of the currentTime(). This will return a Double that represents the seconds in time. Then you can use this value to construct a readable time to present to your user.

First, include a method to return the time variables for H:mm:ss that you will display to the user:

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

Next, a method that will convert the values you retrieved above into a readable string:

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}

Now, update the UI with the previous calculations:

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