AVPlayer url持续时间Xcode 12 [关闭]

Posted

技术标签:

【中文标题】AVPlayer url持续时间Xcode 12 [关闭]【英文标题】:AVPlayer url duration Xcode 12 [closed] 【发布时间】:2020-11-26 09:51:08 【问题描述】:

我正在尝试使用 AVPlayer、ios 13.7 和 Xcode 12.0 获取 .mp3 网址的持续时间。

首先,使用 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

CMTimeGetSeconds(audioAsset.duration) 给出NaN。

有什么方法可以只使用 AVPlayer 来获取远程 url 的持续时间吗?

感谢您的宝贵时间。

【问题讨论】:

您没有将AVURLAsset 对象提供给AVPlayer 这个持续时间在给 AVPlayer 的模型中。播放器播放url,但时长始终为nan。 【参考方案1】:

我找到了答案!

经过大量调试和链接尝试,实际问题是 AVURLAsset 与可以直接在浏览器中播放的链接一起工作。

例如,对于这样的链接:https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3,您将获得持续时间,但对于末尾没有扩展名的可下载 .mp3 或 .m4a 将不会获得持续时间。猜猜这是关于元数据如何保存在它们上面的。

【讨论】:

以上是关于AVPlayer url持续时间Xcode 12 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7中的iOS 7 AVPlayer AVPlayerItem持续时间不正确

持续时间不是来自AVPlayer currentItem

AVPlayer 项目的持续时间为 nan

AVPlayer 的 addPeriodicTimeObserverForInterval 中的 CMTime:回调永远不会达到项目的持续时间

AVPlayer 不播放音频

使用 MPRemoteCommandCenter 为 AVPlayer 和 AVAudioPlayer 添加当前时间和持续时间的位置