说明:从各帖子收集了一些资料,结合自己抓包,整理而来
socket接收到RTSP包结构:
[Magic][Channel][0x00][0x00]
Magic:0x24
Channel取值由RTSP协议中Setup阶段设置的interleaved来决定,默认0-1,0代表后面的是RTP包,1代表RTCP包
例如,设置TCP隧道传输RTP:
SETUP rtsp://user:pwd@192.168.1.45:554/trackID=1 RTSP/1.0
[Magic][Channel][0x00][0x00]
Magic:0x24
Channel取值由RTSP协议中Setup阶段设置的interleaved来决定,默认0-1,0代表后面的是RTP包,1代表RTCP包
例如,设置TCP隧道传输RTP:
SETUP rtsp://user:pwd@192.168.1.45:554/trackID=1 RTSP/1.0
CSeq:2
Transport:RTP/AVP/TCP;unicast;interleaved=0-1
后面两个[0x00][0x00]字节是RTP或RTCP包的长度
----------------------------------------------------------------------------------
RTP包由RTP报头和RTP Payload(有效载荷)构成,结构:
[0x00][0x00][0x00][0x00] V(2bit)P(1bit)X(1bit)CC(4bit)M(1bit)PT(7bit)sequence number(16bit)
V:2bit,版本号
P:1bit,Padding标记,取值0-1,0表示Payload后面没有填充,1代表Payload后跟有1个或最多8个字节的填充,如果有填充,
RTP包最后一个字节是填充计数器,表示包含自身在内的填充的字节数
X:1bit,扩展标记
CSRC:4bit,Contributing Source identifiers Count,CSRC计数器 ,特约信源计数器
M:标记,取值0-1,0代表不是一帧的结束,1代表一帧数据的结束,该值是由h264定义的NAL单元传输三个结构中
的FU( Fragmentation unit 分片单元 ) 结构的Header中E结束位决定的
PT:7bit,有效载荷类型,Payload Type
Seq:16bit,sequence number序列号,在前包的seq上自增1
如果没有扩展,RTP包除去前面12个字节的报头后,就是Payload,如果有Padding,还要减去后面的填充
-------------------------------------------------------------------------------------
RTP Payload的结构,是由h264协议定义的,可能会有三种情况:
1.当NAL单元小
后面两个[0x00][0x00]字节是RTP或RTCP包的长度
----------------------------------------------------------------------------------
RTP包由RTP报头和RTP Payload(有效载荷)构成,结构:
[0x00][0x00][0x00][0x00] V(2bit)P(1bit)X(1bit)CC(4bit)M(1bit)PT(7bit)sequence number(16bit)
版本号、填充标记、扩展标记、CSRC计数器、有关有效载荷的标记、有效载荷类型(Payload Type)、序列号
[0x00][0x00][0x00][0x00] time stamp 时间戳
[0x00][0x00][0x00][0x00] synchronization source (SSRC) identifier 同步信源
[0x00][0x00][0x00][0x00] contributing source (CSRC) identifiers 特约信源
………………………………
[Payload........................][Padding]V:2bit,版本号
P:1bit,Padding标记,取值0-1,0表示Payload后面没有填充,1代表Payload后跟有1个或最多8个字节的填充,如果有填充,
RTP包最后一个字节是填充计数器,表示包含自身在内的填充的字节数
X:1bit,扩展标记
CSRC:4bit,Contributing Source identifiers Count,CSRC计数器 ,特约信源计数器
M:标记,取值0-1,0代表不是一帧的结束,1代表一帧数据的结束,该值是由h264定义的NAL单元传输三个结构中
的FU( Fragmentation unit 分片单元 ) 结构的Header中E结束位决定的
PT:7bit,有效载荷类型,Payload Type
Seq:16bit,sequence number序列号,在前包的seq上自增1
如果没有扩展,RTP包除去前面12个字节的报头后,就是Payload,如果有Padding,还要减去后面的填充
-------------------------------------------------------------------------------------
RTP Payload的结构,是由h264协议定义的,可能会有三种情况:
1.当NAL单元小