首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >H264 NAL单元前缀

问H264 NAL单元前缀
EN

Stack Overflow用户
提问于 2014-05-07 19:40:14
回答 1查看 16.6K关注 1票数 5

我需要一些关于RTP单元分隔符前缀(00 00 00 01和00 00 01)的说明,我正在使用英特尔媒体开发工具包生成H264并将其打包到H264中。问题是,到目前为止,我只寻找00 00 00 01作为单元分隔符,并且基本上只能在比特流中找到AUD、SPS、PPS和SEI单元。查看内存,我看到在SEI之后有一个字节序列00 00 01 25,它可能是IDR单元的开始,但我的搜索算法没有检测到它,因为缺少一个零字节。有人能澄清00 00 00 01和00 00 01前缀之间的区别吗?看一下Chromium code,第一个单元以及AUD、SPS、PPS和SEI似乎都有一个额外的零:

代码语言:javascript
复制
if (first_nal_in_this_access_unit ||
    IsAccessUnitBoundaryNal(nal_unit_type)) {
    output_size += 1;  // Extra zero_byte for these nal units
    first_nal_in_this_access_unit = false;
}

...

static bool IsAccessUnitBoundaryNal(int nal_unit_type) {
    // Check if this packet marks access unit boundary by checking the
    // packet type.
    if (nal_unit_type == 6 ||  // Supplemental enhancement information
        nal_unit_type == 7 ||  // Picture parameter set
        nal_unit_type == 8 ||  // Sequence parameter set
        nal_unit_type == 9 ||  // Access unit delimiter
        (nal_unit_type >= 14 && nal_unit_type <= 18)) {  // Reserved types
            return true;
        }
    return false;
}

1)我假设我应该寻找两个前缀,但是然后我理解我需要检查下一个NAL单元的类型,以便知道当前NAL单元的长度(以便知道前缀是3个字节还是4个字节,并且不消耗可能是前一个NAL单元的结尾的零字节作为前缀)。

2) PPS、SPS和SEI大小是否固定?如果是这样的话,我可以在查找下一个前缀时跳到单元的末尾。

我希望有更多经验的人可以对上面的问题发表意见。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-07 19:45:23

来自H.264 spec,B.1.2字节流NAL单元语义:

​

​

zero_byte是一个等于0x00的单字节。

当满足以下任一条件时,应存在zero_byte语法元素。

  • nal_unit( )内的nal_unit_type等于7(序列参数集)或8(图片参数集)
  • 字节流NAL单元语法结构包含解码顺序中访问单元的第一个NAL单元,如7.4.1.2.3小节所指定。
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23516805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档