ios - 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 以及序列参数。
解决方案
好的,问题不在于 VideoToolbox - 我有一个愚蠢的逻辑错误,它阻止了某些帧通过解码器!VideoToolBox 毫不费力地接受 IDR_W_RADL 帧!很有魅力。
推荐阅读
- git - 如何在发送拉取请求之前同步我的分叉和合并
- kotlin - Kotlin/对任何 Kotlin 库的原生支持?
- java - 如何将几个 IF 转换为一个 LOOP
- sql - 从 UI 调用 SQL 存储过程
- python - 将元素附加到列表并从另一个列表中删除
- python - 使用正则表达式,获取字符后的字符串,特殊情况
- arrays - 数组 r 中的 24 个值的平均值
- javascript - 使用 ajax 调用中的 json 填充脚本后无法访问脚本中的数据变量
- javascript - React 中屏蔽输入的 onChange 问题
- android - AdapterView 不支持 addView(View) - LinearLayout 嵌套在 ListView 中