如何解决 iPhone 6 或 iPhone 6s 上从后台切换到前台播放视频会显示为 1 到 2 秒的绿屏

iPhone 6 搭载的是 A8 芯片,iPhone 6s 搭载的是 A9 芯片。

该问题是由于切换到后台后,解码器会话会失效,当再次进入前台时,需要再次创建会话,但由于使用的视频通道没有变,继续播放接收到的很大可能是 P 帧,iOS P 帧的解码分为以下两种情况:

  • A9 及以下芯片的解码器新的会话会解码无完整 GOP 的 P 帧,并将无法渲染的画面用绿色填充,即视频解码渲染开发中常说的绿屏
  • 而 A9 以上的芯片则算法是直接不解码无完整 GOP 的 P 帧,因此没这个问题。

解决

因此需要分为两步处理来解决此问题:

  1. 切换到前台后需要重新创建会话。
  2. 接受到 I帧后才进行I、P、B 帧的解码。

复现绿屏

那么如何验证无完整 GOP 的 P 帧,会渲染为绿色呢?

可以在 iPhone 6s 及以下和 iPhone 6s 以上的机型进行不解码 I 帧的测试,即可复现绿屏。

  • 在 iPhone 13 上 P/B 帧调用 [self decode] 返回的都是空,因此播放视图显示为默认的黑色。
  • 在 iPhone 6 或 iPhone 6s 上 P/B 帧渲染为绿色,直到下次获取 I 帧后才正常。应该是 iPhone 6 的 A8 芯片和 iPhone 6s 的 A9 芯片硬解码算法在解码 P 帧的时候没有对无 I 帧进行优化,而是直接解码,因此不完整的 GOP 将被渲染为绿色。

如何解决 iPhone 6 或 iPhone 6s 上从后台切换到前台播放视频会显示为 1 到 2 秒的绿屏

https://ganzhixiong.com/p/50a476a4/

Author

干志雄

Posted on

2025-04-30

Updated on

2025-04-30

Licensed under

Comments