我最近在iOS中使用VideoToolbox API获得了HEVC / H.265解码的功能。使用libx265中的x265编解码器,来自FFMPEG的传入RTP流。
经过大量修改后,我使用传入的VPS,SPS和PPS nalus创建了CMFormatDescription-然后等待CRA_NUT nalu(21)关键帧。一旦通过,我就可以解码接收到的下一波视频数据包。太好了!
但是我现在想接受由Nvidia的Video Coding SDK编码的RTP流。区别在于,虽然不是在序列参数之后到达CRA_NUT nalu-我现在收到IDR_W_RADL(19),VideoToolbox似乎不喜欢它-结果我从解压缩会话的回调中获得了kVTVideoDecoderBadDataErr。
由于VideoToolbox的文档非常稀疏-调试起来非常困难。 VideoToolBox是否总是希望CRA_NUT nalu作为关键帧?还是有什么方法可以使其接受IDR_W_RADL关键帧? VideoToolbox是否期望标准的顺序?
相反,有什么方法可以配置nvidia视频编解码器sdk以返回CRA_NUT关键帧?我已经浏览了api,但找不到任何东西-我似乎总是会得到IDR_W_RADL以及序列参数。
答案 0 :(得分:1)
好吧,问题不在于VideoToolbox-我的逻辑错误很愚蠢,它阻止了某些帧到达解码器! VideoToolBox毫不费力地接受IDR_W_RADL帧!很有魅力。