【问题标题】:AVPlayer audio stops after bitrate spikeAVPlayer 音频在比特率尖峰后停止
【发布时间】:2018-04-14 02:57:30
【问题描述】:

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

我一直在寻找任何生成的消息、使用错误信息调用的委托或有趣的 KVO,但到目前为止还没有任何有用的信息。我可以做些什么来获得一些可以为我指明正确方向的更详细的信息?

【问题讨论】:

  • 手机可以处理的内容是有限制的。你可能只是在打他们……?
  • @matt 有限制,但是视频在其他应用程序中可以正常播放。如果用户观察到他们的视频在其他应用程序中正常播放,但不是我的应用程序,那么看似明显的结论是我的应用程序有问题。此外,这些视频似乎在 Apple 公布的限制范围内。音频应该被切断也很奇怪 - 通常音频处理要轻得多等待,在这种情况下它是恒定比特率(而视频不是恒定比特率)。
  • 请确认ios版本好吗?
  • 另外,如果您尝试在 AVPlayer 中播放任何其他 hls 流,您会遇到同样的问题吗?
  • 你能指定你在什么属性上使用了 KVO 吗?您是否尝试过在 AVPlayerItem 状态上设置 KVO:playerItem.addObserver(self, forKeyPath: #keyPath(AVPlayerItem.status), options: [.old, .new], context: &playerItemContext)

标签: ios objective-c video avplayer


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多