iOS 上的 H.265 (HEVC) 解码 - 在解码帧之前正确的 NALU 顺序是什么

H.265 (HEVC) Decoding on iOS - what is the correct NALU order before frames can be decoded

我最近在 iOS 中使用 VideoToolbox api 进行了 HEVC / H.265 解码。传入的 RTP 流来自 FFMPEG,使用 libx265 中的 x265 编解码器。

经过多次修改,我使用传入的 VPS、SPS 和 PPS nalus 创建了我的 CMFormatDescription - 然后我等待 CRA_NUT nalu (21) 关键帧。一旦通过,我就可以解码接收到的下一波视频数据包。太棒了!

但是我现在想接受由 Nvidia 的视频编码 SDK 编码的 RTP 流。不同之处在于,不是 CRA_NUT nalu 在序列参数之后到达 - 我现在收到 VideoToolbox 似乎不喜欢的 IDR_W_RADL (19) - 结果我从我的 kVTVideoDecoderBadDataErr解压会话回调

由于 VideoToolbox 的文档非常少 - 很难调试。 VideoToolBox 是否总是期望 CRA_NUT nalu 作为关键帧?或者有什么办法让它接受 IDR_W_RADL 关键帧?是否有 VideoToolbox 期望的标准序列?

相反,有没有办法将 nvidia 视频编解码器 sdk 配置为 return CRA_NUT 关键帧?我查看了 api 但找不到任何东西 - 我似乎总是得到 IDR_W_RADL 以及序列参数。

好的,问题不在于 VideoToolbox - 我有一个愚蠢的逻辑错误,它阻止了某些帧进入解码器! VideoToolBox 可以毫不费力地接受 IDR_W_RADL 帧!很有魅力。