文档介绍:实时视频传输和控制协议 v2
修改历史
日期
修改人姓名
注释
2006-06-23
朴希闯
创建
2006-08-07
朴希闯
添加说明节
重新排版
复审人
日期
部门
姓名和职务
一、说明
这份协议描述了视频服务器与流媒体分发服务器、视频服务器与企业客户端之间传输实时视频的方法。文档中没有针对媒体分发服务器与企业客户端(第三方播放器)之间的通信方法,但是媒体分发服务器与企业客户端(第三方播放器)之间的通信方法尊守RTC1889和RPC2326定义的规范。
在这篇文档里我们把象视频服务器这样能够给观看者提供视频数据的设备称为逻辑上的服务端角色(也就是视频源),象企业客户端这样播放视频的终端设备称为逻辑上的客户端角色(也就是接收者或观看者)。流媒体分发服务器同时具有两种角色。
交互流程中列出了两种模式,我们当前要先实现接模式。推模式是为了视频服务器在私网环境时也可以通过流媒体发服务器向用户提供视频服务。推模式暂不实现。
协议中没有提及RTCP协议,但并不影响视频通信质量,而且目前很难实现有效的编解码之间返馈的处理方法,所以现在,以及将来的一段时间都不会考虑RTCP协议,除非出现有效的视频质量控制机制。
本文参考RFC 1889、1890、2326、3550完成,如有不符合标准的、或者不完善的陈述,请提出来,发电子邮件到piaoxichuang@。如果您有更好的想法也可以通过邮件进行交流。
二、协议
通信方式使用RTP over TCP方式。(RTC1889、RFC2326)
1、一个完整的包
网络字节顺序
2、RTP包的封装(RTP over TCP)
网络字节顺序
Channel Identifier:取值0。因为只有一个流在一个TCP连接中传递,同时不使用RTCP协议。参见RFC 2326 []节。
Lenth:取值为RTP包的大小,包括RTP头部, 但不包含本身的4个字节,以BYTE为单位。
3、RTP 12字节头部
网络字节顺序
V:版本,取值2。[可能会使用0值,还没想清楚,可能的使用情况是为了实现防火墙穿透]
P:附加数据,取值为0。
X:扩展头,取值为1。
CC:CSRC列表数量,取值为0。
M:记号,取值0或1。关于M字段的取值:如果扩展头中T字段为1,则当一个包(RTP Packet)是一个帧(Sample)的最后一个包时取值1,否则取值0;扩展头中T字段为1时,由于指令长度较小,一个RTP就可以传输完成,所以取值为1。除非要使用多个RTP包传输,最后一个RTP包取值为1,前面的包取值为0。
PT:负载类型,动态,取值96。参见RFC 1890 [7]节。
Sequence Number:RTP包的序号,初始值是随机的,不是0。
Timestamp:以视频编码算法提供者的需要填写或单调增长的时间戳。[将来可能把这个值也传递给视频解码算法中去。]
SSRC:随机数,用于在同一个会话中区分不同的流。建议使用MD32。
UINT Y[4]
If Y = MD5(X) Then
MD32(X) = Y[1] ^ Y[2] ^ Y[3] ^ Y[4]
注:RTP包大小最大值为2048。(因为DSS支持的最大包为2048Bytes)
4、RT