我正在尝试获取从远程URL加载的mp3文件的总时长,但返回的是NAN
。我正在使用AVPlayer
(而不是AVAudioPlayer
)。
let duration = CMTimeGetSeconds((self.player?.currentItem?.asset.duration)!)
print(duration)// returns NAN
我正在尝试获取从远程URL加载的mp3文件的总时长,但返回的是NAN
。我正在使用AVPlayer
(而不是AVAudioPlayer
)。
let duration = CMTimeGetSeconds((self.player?.currentItem?.asset.duration)!)
print(duration)// returns NAN
AvPlayer
在播放远程mp3时总是返回Nan
,您需要在模型中附加持续时间并在服务器上硬编码其持续时间。
对于VOD内容,您可以使用以下代码获取其时长:
self.player.currentItem?.duration.seconds ?? 0.0
当HLS直播时,如果是NAN,则可以通过以下方式访问直播点:
guard let item = player.currentItem else {
return
}
let seekableDuration = item.seekableTimeRanges.last?.timeRangeValue.end.seconds ?? 0.0
self.statusObservation = nil // remove observer for outdated items
self.statusObservation = self.avPlayer?.currentItem?.observe(\AVPlayerItem.status) { [weak self] item, _ in
guard let self = self else { return }
// prevent reading duration from an outdated item:
guard item == self.avPlayer?.currentItem else { return }
if item.status == .readyToPlay {
item.duration.seconds // the duration you need.
}
}
基本上,当远程AVPlayerItem刚刚被设置时,AVPlayer对该资源一无所知。 它需要一些时间来检索元数据,其中包括总持续时间。