Video streaming H264 NAL单元前缀

Video streaming H264 NAL单元前缀,video-streaming,h.264,rtp,video-encoding,Video Streaming,H.264,Rtp,Video Encoding,我需要一些关于H264 NAL单元分隔符前缀(00 01和00 01)的说明,我正在使用Intel Media SDK生成H264并将其打包到RTP中。问题是,到目前为止,我只寻找00 01作为单位分隔符,基本上只能在比特流中找到AUD、SPS、PPS和SEI单位。查看内存,我发现SEI之后有一个字节序列00 01 25,可能是IDR单元的开始,但我的搜索算法没有检测到它,因为缺少零字节。有谁能澄清00 00 01和00 01前缀之间的区别吗?看一看,第一台机组以及AUD、SPS、PPS和SEI

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

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;
}
if(本单元中的第一个访问单元)||
IsAccessUnitBoundaryNal(nal\u单位\u类型)){
输出大小+=1;//这些nal单元的额外零字节
此访问单元中的第一个最后访问单元=false;
}
...
静态布尔值为AccessUnitBoundarynal(内部单位类型){
//通过检查
//数据包类型。
if(nal_unit_type==6 | |//补充增强信息
nal_unit_type==7 | |//图片参数集
nal_unit_type==8 | |//序列参数集
nal_unit_type==9 | |//访问单元分隔符
(nal_单元类型>=14&&nal_单元类型From,B.1.2字节流nal单元语义:

零字节是一个等于0x00的单字节

当满足以下任一条件时,应存在零字节语法元素

  • nal_单元()中的nal_单元类型等于7(序列参数集)或8(图片参数集)
  • 字节流NAL单元语法结构包含子条款7.4.1.2.3规定的解码顺序的访问单元的第一个NAL单元