首页 > 解决方案 > iOS上的H.265(HEVC)解码-可以解码帧之前的正确NALU顺序是什么

问题描述

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

经过大量修改后,我使用传入的 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 以返回 CRA_NUT 关键帧?我查看了 api 但找不到任何东西——我似乎总是得到 IDR_W_RADL 以及序列参数。

标签: iosvideo-toolboxnvenc

解决方案


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


推荐阅读