我正在尝试使用AVPlayer、iOS 13.7和Xcode 12.0获取.mp3 url的持续时间。
首先,AVAudioPlayer可以使用,但它不能使用远程URL,所以我改为AVPlayer,这样我就可以使用来自API的链接。
这是我的获取持续时间方法:
private func getDuration() -> TimeInterval? {
guard let url = url else {
return nil
}
let audioAsset = AVURLAsset(url: url, options: nil)
let duration = CMTimeGetSeconds(audioAsset.duration)
return duration
}
在调试中,url是正确的,下载.mp3文件。audioAsset.duration
返回下一个值:
CMTime
- value : 0
- timescale : 0
▿ flags : CMTimeFlags
- rawValue : 17
- epoch : 0
CCD_ 2产生NaN。
有没有任何方法可以只使用AVPlayer获得远程url持续时间?
谢谢你抽出时间。
我找到了答案!
经过大量调试和链接尝试,实际问题是AVURLAsset使用的链接可以直接播放到浏览器中。
例如,对于这样的链接:https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3
,您将获得持续时间,但对于结尾没有扩展名的可下载.mp3或.m4a,它将无法获得持续时间。我猜这是关于元数据是如何保存在两者上的。