periodTimeObserver для отсчета продолжительности в AVPlayer с Swift
У меня есть наблюдатель времени для AVPlayer, который прекрасно работает. Я пытаюсь получить его отсчет от продолжительности аудио 0.
Это работает и ведет обратный отсчет, сейчас у меня просто проблемы с форматированием.
если вы увидите картинку ниже, вы поймете, что я имею в виду. Он идет от целых минут: секунд 3:00 до странных чисел 3:-1 и т. Д.
Есть идеи, что я сделал не так?
вот код для таймера:
let interval = CMTime(value: 1, timescale: 1)
self.audioPlayer?.addPeriodicTimeObserver(forInterval: interval, queue: DispatchQueue.main, using: { (progressTime) in
let secondsProgress = CMTimeGetSeconds(progressTime)
let secondsStringProgress = String(format: "%02d", Int((secondsProgress.truncatingRemainder(dividingBy: 60))))
let minuitesStringProgress = String(format: "%02d", Int(secondsProgress) / 60)
//self.countDownLabel.text = "\(minuitesStringProgress):\(secondsStringProgress)"
if let duration = self.audioPlayer?.currentItem!.asset.duration {
let secondsDuration = CMTimeGetSeconds(duration)
let secondsStringDuration = String(format: "%02d", Int((secondsDuration.truncatingRemainder(dividingBy: 60))))
let minuitesStringDuration = String(format: "%02d", Int(secondsDuration) / 60)
let secondsString = String(format: "%02d", Int(secondsStringDuration)! - Int(secondsStringProgress)!)
let minuitesString = String(format: "%02d", Int(minuitesStringDuration)! - Int(minuitesStringProgress)!)
self.countDownLabel.isHidden = false
self.countDownLabel.text = "\(minuitesString):\(secondsString)"
self.horizontalSlider.value = Float(secondsProgress / secondsDuration)
self.circleSlider.value = Float(secondsProgress / secondsDuration)
}
})
1 ответ
Решение
Я использую эту функцию для отображения форматированной даты
func getFormatedTime(FromTime timeDuration:Int) -> String {
let minutes = Int(timeDuration) / 60 % 60
let seconds = Int(timeDuration) % 60
let strDuration = String(format:"%02d:%02d", minutes, seconds)
return strDuration
}
использовать как это
let strDuration = self.getFormatedTime(FromTime: recordingDuration)
или прямо так в addPeriodicTimeObserver
метод
recordingDuration = Float(CMTimeGetSeconds((self.playerItem?.asset.duration)!))-Float(CMTimeGetSeconds((self.playerItem?.currentTime())!))
передать это getFormatedTime
установить текст возвращаемого значения
всего две строки кода