h264封装到RTP数据包进行传输

RTP数据包结构

报文下面的数据称为有效载荷(payload)

h264编码原理

h264是一种视频压缩技术,主要包含三种帧:

  • i帧(关键帧): 不借助其他帧的独立完整帧
  • p帧: 需要参考前面帧的预测帧
  • b帧: 需要参考前后帧的双向预测帧

使用GOP(Group Of Pictures)组来防止丢包。因为p帧这种全部参考前面帧的,一旦丢包后面就都会乱掉。

h264结构

h264分为两层:

  • 网络提取层(NAL)
  • 视讯编码层(VCL)

编码后的数据流在网络提取层中传输。例如一个由100张图片组成的视频,每张图片压缩后都会得到一个独立的NAL单元(总共100个NAL)。

NAL的第一个字节用于标识当前帧类型(i/p/b帧)。

IDR帧

IDR帧是一种特殊的I帧:

  • I帧是关键帧,可以独立解码
  • 当IDR帧出现时会清空之前的参考帧(即时刷新Refresh)

MP4与h264

使用ffmpeg可以将MP4解析成h264文件:

1
ffmpeg -i test.mp4 -codec copy -bsf:h264 mp4toannexb -f h264 test.h264

PS: MP4本质上是在h264基础上添加了头尾信息的封装格式,所以解封装过程主要是数据拷贝。