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

AVPlayer audio stops after bitrate spike

我的 iOS 应用程序使用 AVPlayer 从本地设备存储中解码带有 AAC 音轨的 H.264 视频。具有比特率尖峰的内容会导致音频在播放尖峰后不久(不到一秒)下降,但视频播放会继续正常进行。通过 Safari 播放视频似乎工作正常,并且此行为在 iPhone 6s 到 8 plus 的多种型号上可重复。

我一直在寻找生成的任何消息、调用的带有错误信息的委托或有趣的 KVO,但到目前为止没有任何有用的信息。我应该怎么做才能获得某种更详细的信息,从而为我指明正确的方向?

事实证明,AVPlayer 配置为使用以自定义方式加载数据的方法。这些方法的实现未能遵循完全满足请求的模式。 (Apple 文档对此含糊不清。)AVPlayer 的视频部分反复请求更多数据,因此最终它的所有数据都被提取了。然而,音频部分耐心地等待数据进入,因为既没有报告错误状态也没有提供所有数据——假设它正在等待。

所以,简而言之,听起来视频处理代码中有规定将丢失的数据视为某种形式的停滞并继续前进,而音频没有该功能。不错的设计 - 如果音频中断,那将非常明显,而且它也是迄今为止较小的流,因此不太可能。

尽管在发布之前花了好几天时间解决这个问题,但由于缺乏任何有用的信号,很难追查到这个问题。我最终推断,如果从流中生成输出没有错误,那么问题一定出在流的传递中,一旦我开始调整数据加载代码,问题就会暴露出来。