RTP/RTCP/RTSP负载H264的一些问题小结

来源:互联网 发布:java权限代码 编辑:程序博客网 时间:2024/04/28 01:35

以下内容都是基于rfc3984,RTP负载H264时的参数配置

1、在TCP传输时,Transport头中的interleaved参数必须设置,比如0-1,或者2-3(海康的流中出现了4,但是没有配置,所以wireshark也无法解析channel=4的rtp interleaved frame)。该参数的第一个值是RTP包标识,第二个参数是RTCP包的标识。在海康流测试中,TCP包没有出现1或3,也就是标准中的RTCP包,不过UDP下是有完整的RTCP包的。TCP传输时,每次先接收4个字节的rtp interleaved frame,其结构定义:第一个字节固定"$" (dollar符),第二个字节channel值取自interleaved参数,区分RTP/RTCP,第三四字节代表后续RTP/RTCP包的长度,所以TCP方式下,应该先接收4字节,首先校验第一字节,其次判断第二字节即后续包类型,最后接收后续包。

2、在UDP传输时,Transport头中没有interleaved参数(只能用于TCP),而用端口代替。客户端setup:Transport增加参数client-port:8000-8001,服务器返回时再增加参数server-port:37800-37801。参数含义类似于TCP,第一个值是接收/发送RTP包的端口,第二个值是接收/发送RTCP包的端口。所以TCP时叫交错传输,UDP时是非交错传输。

3、Transport头只能出现在setup命令中。

4、在Describe命令返回的reply包中,带有负载sdp。

5、sdp参数:流参数a=必须紧跟在对应的m=之后。

6、sdp参数:fmtp中:packetization-mode代表传输模式,有三个取值0Single NAL unit mode 1Single NAL unit mode 2Single NAL unit mode,海康的TCP这里设置是1

,可能代表其TCP时不发送RTCP包。profile-level-id代表解码参数,具体参考h264标准,如果没有设置,则使用默认baseline,level1的解码参数。sprop-parameter-sets代表sps和pps,逗号前是sps二进制数据的base64编码,逗号后是pps的编码,里面可以解析出视频的基本配置,来源是h264第一帧数据的头。
7、rtp包的marker参数:marker代表本包是一系列RTP包的结尾,这些RTP包携带的是分片数据,一般是I帧,因为单帧太大进行分片,每个RTP包发送一片,marker=false,最后一包marker=ture。而如果帧数据很小,一般是BP帧,一帧或者几帧被一个RTP包发送,则marker=true。也即marker代表完整帧(一帧或几帧)。
8、rtp包的padding参数:padding用于忽略,其数据在正常流数据的末尾,解码时需要丢弃,padding=true,则RTP包最后一个字节代表padding数量,也即要丢弃几个字节。padding的作用是发送方对齐数据包(比如4字节对齐)。



0 0
原创粉丝点击