RTP发送H264图像发灰解决方法

硬件平台:海思 3515 自己写的RTP打包程序。
使用RTP打包发送按包获取的编码码流, 如果是静态图像,图像就发灰(类似图片的会灰阶处理一样),如果图像是运动的,那么图片色彩正常。经测试和I帧有关。比如,现在帧率是25,I帧间隔是100.那么每四秒会出现一次刷新(图像变灰,一直持续)。经过好心人帮助得知这是 I帧丢失造成的。经过抓包分析果然丢失了一个字节的数据!!下面是分析:
下图是好心人发给我的一个H264文件分析的程序界面:
RTP发送H264图像发灰解决方法 - zmurder - 起点的博客

 下图是抓包工具的截图:
RTP发送H264图像发灰解决方法 - zmurder - 起点的博客

 
这两个是一个数据源。
首先看第一个NALU
(来自h264文件数据分析)00 00 00 01 67 42 E0 1E DB 02 C0 49 10
此数据00 00 00 01是h264的起始码 67开始往后就是NALU数据 其中67是NALU头(7表示此NALU的type为ssp) 后面的全是载荷数据 RBSP 
        
抓包工具显示:80 e0 00 00 00 00 0e 10 00 00 00 0a 67 42 e0 1e db 02 c0 49 10
数据分析如下:
80:RTP头部分,包含 V(2位),P(1位),,X(1位),CC(5位)
e0: RTP头部分 ,M(1位),PT(7位)
00 00:   RTP头部分 ,序号
00 00 0e 10:   RTP头部分 ,时间戳
00 00 00 0a:   RTP头部分 ,ssrc
67:NALU头( 由于数据长度小于每包发送的长度(1400)此处就是NALU除去起始码的第一个字节
42 e0 1e db 02 c0 49 10 :RBSP

再看第二个NALU
(来自h264文件数据分析)  00 00 00 01 68 CE 30 A4 80
此数据00 00 00 01是h264的起始码 68开始往后就是NALU数据 其中68是NALU头(8表示此NALU 的type  是pps) 后面的全是载荷数据   RBSP   

抓包工具显示: 80 e0 00 01 00 00 1c 20 00 00 00 0a 68 ce 30 a4 80
数据分析如下:
80:RTP头部分,包含 V(2位),P(1位),,X(1位),CC(5位)
e0:   RTP头部分  ,M(1位),PT(7位)
00 01:     RTP头部分  ,序号
00 00 1c 20:     RTP头部分  ,时间戳(此时间戳与上一时间戳差值为3600  =90000/25)
00 00 00 0a:     RTP头部分  ,ssrc
68:NALU头(由于数据长度小于每包发送的长度(1400)此处就是NALU除去起始码的第一个字节)
ce 30 a4 80  :RBSP

再看第三个NALU
(来自h264文件数据分析)00 00 00 01 06 E5 01 72 80 
此数据00 00 00 01是h264的起始码 06开始往后就是NALU数据 其中06是NALU头(6表示此NALU 的type  是SEI) 后面的全是载荷数据   RBSP    

抓包工具显示:80 e0 00 02 00 00 2a 30 00 00 00 0a 06 e5 01 72 80
80:RTP头部分,包含 V(2位),P(1位),,X(1位),CC(5位)
e0:   RTP头部分  ,M(1位),PT(7位)
00 02:     RTP头部分  ,序号
00 00 2a 30:     RTP头部分  ,时间戳(此时间戳与上一时间戳差值为3600  =90000/25)
00 00 00 0a:     RTP头部分  ,ssrc
06:NALU头(由于数据长度小于每包发送的长度(1400)此处就是NALU除去起始码的第一个字节)
 e5 01 72 80    :RBSP

再看第四个NALU
(来自h264文件数据分析)00 00 00 01 65 B8 00 00 AC 5E 04 45 0A C6 A2 39 。。。。。共18942字节
此数据00 00 00 01是h264的起始码 65开始往后就是NALU数据 其中65是NALU头(5表示此NALU  的type  是IDR(I帧)) 后面的全是载荷数据   RBSP   

抓包工具显示: 80 60 00 03 00 00 38 40 00 00 00 0a 7c 81 b8 00 00 ac 5e 04 45 0a c6 a2 39 。。。。
80:RTP头部分,包含 V(2位),P(1位),,X(1位),CC(5位)
60:   RTP头部分  ,M(1位),PT(7位)
00 03:     RTP头部分  ,序号
00 00  38 40      RTP头部分  ,时间戳(此时间戳与上一时间戳差值为3600  =90000/25)
00 00 00 0a:     RTP头部分  ,ssrc
7c  :FU_INDICATOR(由于数据长度大于每包发送的长度(1400)此处就是拆包发送需要加上 FU_INDICATOR 
81:FU_HEADER 由于数据长度大于每包发送的长度(1400)此处就是拆包发送需要加上   FU_HEADER     
b8 00 00 ac 5e 04 45 0a c6 a2 39 。。。。     :RBSP

再看第五个NALU 
(来自h264文件数据分析) 00 00 00 01 61 E2 31 42 B7 08 4D 8E A3 48 39 B6。。。共4424字节
此数据00 00 00 01是h264的起始码 61开始往后就是NALU数据 其中61是NALU头(5表示此NALU  的type  是IDR) 后面的全是载荷数据   RBSP    

抓包工具显示:80 60 00 11 00 00 46 50 00 00 00 0a 7c 81 e2 31 42 b7 08 4d 8e a3 48 39 b6 。。。
80:RTP头部分,包含 V(2位),P(1位),,X(1位),CC(5位)
60:   RTP头部分  ,M(1位),PT(7位)
00 11:     RTP头部分  ,序号
00 00    46 50        RTP头部分  ,时间戳(此时间戳与上一时间戳差值为3600  =90000/25)
00 00 00 0a:     RTP头部分  ,ssrc
7c   :FU_INDICATOR(由于数据长度大于每包发送的长度(1400)此处就是拆包发送需要加上   FU_INDICATOR  
81:FU_HEADER   (由于数据长度大于每包发送的长度(1400)此处就是拆包发送需要加上     FU_HEADER      
 e2 31 42 b7 08 4d 8e a3 48 39 b6 。。。    :RBSP
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值