h264的rtp分包问题

来源:互联网 发布:淘宝高佣活动 编辑:程序博客网 时间:2024/06/10 02:32

由于原有的摄像头只支持h264+rtp的形式,为了支持国标28181,必须要将h264先转成ps流,再进行rtp打包。 两个知识点:

1 h264 nalu

       h264的主要目标为:高压缩和网络亲和。 实现方案vcl和nal,NALU头结构:NALU类型(5bit)、重要性指示位(2bit)、禁止位(1bit)。如果nalu是存储在介质上的,紧密相连就无法判断nal的起始和结束位置。解决方案:在每个nal前添加起始码0x000001.

    我们必须考虑当NAL内部出现了0X000001和0X000000

解决方案:

H.264提出了“防止竞争”机制:

0X000000——0X00000300

0X000001——0X00000301

0X000002——0X00000302

0X000003——0X00000303

2 RTP负载打包 -- NAL单元

对于 NALU 的长度小于 MTU 大小的包, 一般采用单一 NAL 单元模式.
对于一个原始的 H.264 NALU 单元常由 [Start Code] [NALU Header] [NALU Payload三部分组成, 其中 Start Code 用于标示这是一个
NALU 单元的开始, 必须是 "00 00 00 01" 或 "00 00 01", NALU 头仅一个字节, 其后都是 NALU 单元内容.
打包时去除 "00 00 01" 或 "00 00 00 01" 的开码, 把其他数据封包的 RTP 包即可.
如Sequence Parameter Set:
00 00 00 01 67 42 00 1E E9 01 40 7B 20
打包为RTP Payload时,直接去掉[00 00 00 01]即可:
67 42 00 1E E9 01 40 7B 20


0 0
原创粉丝点击