Как получить текущее время воспроизведения и общее время воспроизведения в AVPlayer?

возможно ли получить время воспроизведения и общее время воспроизведения в AVPlayer? Если да, то как я могу это сделать?

6 ответов


вы можете получить доступ к воспроизводимому элементу с помощью currentItem свойства:

AVPlayerItem *currentItem = yourAVPlayer.currentItem;

тогда вы можете легко получить запрошенные значения времени

CMTime duration = currentItem.duration; //total time
CMTime 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

вы можете получить секунды вашего текущего времени, обратившись к seconds свойства currentTime(). Это вернет Double что представляет секунды во времени. Затем вы можете использовать это значение для создания читаемого времени для представления пользователю.

во-первых, включите метод для возврата переменных времени для H:mm:ss что вы будете отображать пользователю:

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

далее, метод, который преобразует значения вы получили выше в читаемую строку:

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
}

теперь обновите пользовательский интерфейс с предыдущими вычислениями:

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

С Swift 2.0, используйте это:

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

     AVPlayerItem *currentItem = player.currentItem;
     NSTimeInterval currentTime = CMTimeGetSeconds(currentItem.currentTime);
     NSLog(@" Capturing Time :%f ",currentTime);

Swift:

let currentItem = yourAVPlayer.currentItem

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