文章

H264 NAL网络提取层

NAL:network abstraction layer网络提取层

H264 NAL网络提取层

NAL层的不同是为了根据不同的网络把VCL数据进行打包成不同的格式,进行传输

NAL头

用于区分不同的NAL数据,常用0x00000001或0x000001(start code)

1
2
3
4
5
如果数据内部出现0x00000001或0x000001,源数据需要进行如下替换
0x00000000 --->> 0x0000000300
0x00000001 --->> 0x0000000301
0x00000002 --->> 0x0000000302
0x00000003 --->> 0x0000000303

NALU

在网络传输过程中,NAL中的数据经过下图,封装成NALU(nal unit)单元

  • SODB在后面添加了结尾若干比特“0”,字节对齐成了RBSP
  • RBSP对数据进行循环检测替换加入防止字节竞争,成EBSP
  • EBSP添加一个字节的header后成NALU

NALU HEADER

nalu header的结构如下:

1
2
3
4
5
+---------------+
|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+
|F|NRI|  Type   |
+---------------+
  • F:0表示payload内容没有错误,1表示payload内容可能有错误
  • NRI:用来表示当前NALU单元的重要性(00~11),00为最低,表示不是用于帧间预测的参考帧,可丢弃
  • Type:表示当前NALU类型

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
      NALU TYPE:
      NAL Unit  Packet    Packet Type Name               Section
      Type      Type
      -------------------------------------------------------------
      0        reserved                                     -
      1-23     NAL unit  Single NAL unit packet             5.6
      24       STAP-A    Single-time aggregation packet     5.7.1
      25       STAP-B    Single-time aggregation packet     5.7.1
      26       MTAP16    Multi-time aggregation packet      5.7.2
      27       MTAP24    Multi-time aggregation packet      5.7.2
      28       FU-A      Fragmentation unit                 5.8
      29       FU-B      Fragmentation unit                 5.8
      30-31    reserved
    

    具体:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
      nal_unit_type	NAL类型
      1	非IDR图像中不采用数据划分的片段
      2	非IDR图像中A类数据划分片段
      3	非IDR图像中B类数据划分片段
      4	非IDR图像中C类数据划分片段
      5	IDR图像的片(IDR)
      6	补充增强信息单元(SEI)
      7	序列参数集(SPS)
      8	图像参数集(PPS)
      9	分界符
      10	序列结束
      11	码流结束
      12	填充
      13…23	保留
      24…31	不保留(RTP打包时会用到)
    

    常见帧头:

    1
    2
    3
    4
    
      00 00 00 01 67    (SPS)
      00 00 00 01 68    (PPS)  
      00 00 00 01 65    (IDR帧)  
      00 00 00 01 61    (P帧)
    
本文由作者按照 CC BY 4.0 进行授权