AVPlayer音频在比特率峰值后停止播放

8
我的iOS应用使用AVPlayer从本地设备存储解码带有AAC音轨的H.264视频。当内容的比特率出现峰值时,音频会在峰值播放后短暂(不到一秒钟)中断,但视频播放仍然正常。通过Safari播放视频似乎没有问题,这种行为可以在6s到8 plus的几个型号的iPhone上重复出现。
我一直在寻找生成的任何消息、调用的委托带有错误信息或有趣的KVO,但到目前为止没有任何有用的信息。我该怎么做才能获得一些更详细的信息,以指导我走向正确的方向?

手机的处理能力是有限的。你可能已经达到了它们的极限……? - matt
请问您能确认一下 iOS 版本吗? - Abhishek
@Abhishek 离开我的测试设置,但 iOS 版本接近最新。在问题中忘记指定内容存储在设备上,而不是流式传输。 - Kaganar
请提供视频格式和其他视频规格,尽可能详细。这将有助于解决问题。 - Abhishek
1
你能具体说明你在哪个属性上使用了KVO吗?你尝试过在AVPlayerItem的状态上设置KVO吗?playerItem.addObserver(self, forKeyPath: #keyPath(AVPlayerItem.status), options: [.old, .new], context: &playerItemContext) - Todor Brachkov
显示剩余3条评论
1个回答

3
AVPlayer配置为以自定义方式加载数据,但是实现这些方法的代码未能完全满足请求模式(苹果文档在这方面不够明确)。AVPlayer的视频部分反复要求更多数据,因此最终拉取了所有数据。然而,由于没有报告错误状态,也没有提供所有数据,音频部分耐心地等待数据到来--假设数据仍在等待中。
简而言之,似乎视频处理代码中有条款将缺失的数据视为某种停顿并继续执行,而音频没有这个功能。这不是一个坏设计--如果音频中断,它非常明显,而且它也是远比视频流小得多的流,因此出现问题的可能性要小得多。
尽管在发帖之前花费了相当多的时间研究这个问题,但缺乏任何有用的信号使得很难追踪问题。最终我推断出,如果从流中产生输出没有错误,那么问题必须在流的传递中,一旦我开始调整数据加载代码,问题就显露出来了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接