h264封装到RTP数据包进行传输
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基础上添加了头尾信息的封装格式,所以解封装过程主要是数据拷贝。
评论