使用RTP打包发送按包获取的编码码流,
如果是静态图像,图像就发灰(类似图片的会灰阶处理一样),如果图像是运动的,那么图片色彩正常
。经测试和I帧有关。比如,现在帧率是25,I帧间隔是100.那么每四秒会出现一次刷新(图像变灰,一直持续)。经过好心人帮助得知这是
I帧丢失造成的
。经过抓包分析果然丢失了一个字节的数据!!下面是分析:
下图是好心人发给我的一个H264文件分析的程序界面:
下图是抓包工具的截图:
这两个是一个数据源。
首先看第一个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
下图是好心人发给我的一个H264文件分析的程序界面:
这两个是一个数据源。
首先看第一个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: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