iOS VideoToolBox 解码 HEVC Open-GOP 视频的问题排查

iOS VideoToolBox 解码 HEVC Open-GOP 视频的问题排查

💡 原文中文,约1900字,阅读约需5分钟。
📝

内容提要

最近项目中遇到一个问题,用户上传一个 H.265 编码的视频,在 iOS 平台上解码时出现异常。经过调研分析,发现问题出在视频格式的解码处理流程上,特别是在 Open-GOP 格式下。解决办法是丢弃 B 帧,需要用到 H.265 相关的知识内容来确定 B 帧。

🎯

关键要点

  • 用户上传的 H.265 编码视频在 iOS 平台解码时出现异常。
  • 问题出在 Open-GOP 格式的视频解码处理流程上。
  • 使用 AssetReader 解码时在频繁 Seek 场景下会出现卡死。
  • VideoToolBox 解码在 iOS 16 上出现花屏,iOS 17 上解码失败,错误码为 -12909。
  • AssetReader 解码被认为是黑盒,开发者可操作空间小,重点放在 VideoToolBox 上。
  • VideoToolBox 解码流程与 MediaCodec 不同,需要前置操作,如判断 NALU 类型和提取 VPS、SPS、PPS。
  • H.265 视频需要多提取一个 VPS 的 NALU,确认 VideoToolBox 使用流程无误后,问题在于视频格式的解码处理流程。
  • Open-GOP 格式的 GOP 结构导致 Seek 到 I 帧后 B 帧缺少参考内容,解码失败。
  • 解决办法是丢弃 B 帧,第一种补上参考帧的方法耗时不可取。
  • 需要用到 H.265 的 NALU 类型知识来确定 B 帧。
🏷️

标签

➡️

继续阅读