基于H.264的RTP打包原理和FU-A分片实例分析

1. H.264码流结构

  H.264编码规范从逻辑上划分为视频编码层(VCL)和网络提取层(NAL)。
  VCL数据是由编码器直接输出的原始数据比特串(SODB),它表示图像被压缩后的编码比特流。
  VCL数据要在网络上传输或者存储到磁盘上之前,需要先被封装或映射进NAL单元(NALU)中,每个NAL单元之前需要添加StartCodePrefix,最后形成H.264码流,H.264码流结构如图1-1所示(annex-b byte stream format,详见H.264建议书附录B部分)。
基于H.264的RTP打包原理和FU-A分片实例分析_第1张图片

图1-1 H.264码流结构

  关于H.264码流结构的详细内容可以参考我的另一篇文章:
  《 H.264码流格式》

2. NALU结构

  H.264码流由NALU序列组成,通过RTP协议封装和传输H.264码流实际上就是对H.264序列中NALU的封装和传输。在介绍RTP打包封装H.264码流之前,我们先来简单了解NALU的结构。
  NAL单元(NAL Unit,简称NALU)由1个NAL头(NAL Header)和1个RBSP(或EBSP)组成。
  NAL头(NAL Header)长度为1个字节,由“forbidden_zero_bit”、“nal_ref_idc”和“nal_unit_type”三个字段组成。NAL Header结构如果图2-1所示:
基于H.264的RTP打包原理和FU-A分片实例分析_第2张图片

图2-1 NAL Header结构

  F:forbidden_zero_bit,1位,初始为0,当NAL单元在网络传输过程中识别为错误时,可设置该字段为 1,以便接收方纠错或丢掉该单元。
  NRI:nal_ref_idc,2 位,用来指示该NALU 的重要性等级。值越大,越重要,解码器在解码处理不过来的时候,可以丢掉重要性为0的NALU

你可能感兴趣的:(音视频编解码,RTSP+RTCP+RTP,RTSP流媒体协议,RTP协议,RTP打包分析,h-264码流结构,流媒体协议)