#swift #avplayer #nan #ios13
#swift #avplayer #nan #ios13
Вопрос:
Я пытаюсь получить продолжительность звука с помощью AVPlayer [не AVAudioPlayer], но он всегда извлекает NaN.
вот что я делаю:
let urlString = dataModel.currentPodcast.url.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
let asset = AVAsset(url: URL.init(string: urlString!)!)
playerItem = AVPlayerItem(asset: asset)
DispatchQueue.main.async {
player = AVPlayer(playerItem: playerItem)
}
self.epTotalTime.text = self.secondsToFormattedString(player.currentItem.asset.duration)
итак, я попытался сделать это:
durationObserver = playerItem?.observe(AVPlayerItem.status, changeHandler: { observedPlayerItem, change in
if (observedPlayerItem.status == AVPlayerItem.Status.readyToPlay) {
self.epTotalTime.text = self.secondsToFormattedString(totalSeconds: CMTimeGetSeconds(observedPlayerItem.asset.duration))
}
})
и здесь TotalSeconds по-прежнему составляет NaN:
private func secondsToFormattedString(totalSeconds: Float64) -> String {
guard !(totalSeconds.isNaN || totalSeconds.isInfinite) else {
return "--:--"
}
let hours:Int = Int(totalSeconds.truncatingRemainder(dividingBy: 86400) / 3600)
let minutes:Int = Int(totalSeconds.truncatingRemainder(dividingBy: 3600) / 60)
let seconds:Int = Int(totalSeconds.truncatingRemainder(dividingBy: 60))
if hours > 0 {
return String(format: "%i:i:i", hours, minutes, seconds)
} else {
return String(format: "i:i", minutes, seconds)
}
}
Комментарии:
1. Каков формат воспроизводимого элемента? Это формат, который обещает длительность? Некоторые форматы потокового вещания не имеют длительности (это могут быть прямые трансляции). Сначала вы должны проверить
CMTIME_IS_INDEFINITE(duration)
.2. @RobNapier Это mp3-файл (подкасты). он работал в течение 2 недель, чем остановился
3. Если бы это сработало, а затем остановилось, я бы посмотрел на данные, поступающие с сервера. Он по-прежнему обеспечивает продолжительность? Изменился ли сервер? И
CMTIME_IS_INDEFINITE(duration)
возвращает true? (Это означало бы, что он не считывает длительность)4. Сервер @RobNapier не изменился, и CMTIME_IS_INDEFINITE (продолжительность) возвращает true. Если я сохраню файл, этот код сработает.