2.实时传输协议RTP(Real-Time Transport Protocol):
RTP是针对Internet上多媒体数据流的一个传输协议, 由IETF(Internet工程任务组)作为RFC1889发布。RTP被定义为在一对一或一对多的传输情况下工作,其目的是提供时间信息和实现流同步。RTP的典型应用建立在UDP上,但也可以在TCP或ATM等其他协议之上工作。RTP本身只保证实时数据的传输,并不能为按顺序传送数据包提供可靠的传送机制,也不提供流量控制或拥塞控制,它依靠RTCP提供这些服务。
2.1 RTP工作机制
威胁多媒体数据传输的一个尖锐的问题就是不可预料数据到达时间。但是流媒体的传输是需要数据的适时的到达用以播放和回放。rtp协议就是提供了时间标签,序列号以及其它的结构用于控制适时数据的流放。在流的概念中”时间标签”是最重要的信息。发送端依照即时的采样在数据包里隐蔽的设置了时间标签。在接受端收到数据包后,就依照时间标签按照正确的速率恢复成原始的适时的数据。不同的媒体格式调时属性是不一样的。但是rtp本身并不负责同步,rtp只是传输层协议,为了简化运输层处理,提高该层的效率。将部分运输层协议功能(比如流量控制)上移到应用层完成。同步就是属于应用层协议完成。它没有运输层协议的完整功能,不提供任何机制来保证实时地传输数据,不支持资源预留,也不保证服务质量。rtp报文甚至不包括长度和报文边界的描述。同时rtp协议的数据报文和控制报文的使用相邻的不同端口,这样大大提高了协议的灵活性和处理的简单性。
rtp协议和udp二者共同完成运输层协议功能。udp协议只是传输数据包,不管数据包传输的时间顺序。 rtp的协议数据单元是用udp分组来承载的。在承载rtp数据包的时候,有时候一帧数据被分割成几个包具有相同的时间标签,则可以知道时间标签并不是必须的。而udp的多路复用让rtp协议利用支持显式的多点投递,可以满足多媒体会话的需求。rtp协议虽然是传输层协议但是它没有作为osi体系结构中单独的一层来实现。rtp协议通常根据一个具体的应用来提供服务,rtp只提供协议框架,开发者可以根据应用的具体要求对协议进行充分的扩展。
2.2 RTP协议的报文结构
RTP头格式如图2所示:
开始12个八进制出现在每个RTP包中,而CSRC标识列表仅出现在混合器插入时。各段含义如下:
①版本(V)
2位,标识RTP版本。
② 填充标识(P)
1位,如设置填充位,在包尾将包含附加填充字,它不属于有效载荷。填充的最后一个八进制包含应该
忽略的八进制计数。某些加密算法需要固定大小的填充字,或为在底层协议数据单元中携带几个RTP包
。
③扩展(X)
1位,如设置扩展位,固定头后跟一个头扩展。
④CSRC计数(CC)
4位,CSRC计数包括紧接在固定头后CSRC标识符个数。
⑤标记(M)
1 位,标记解释由设置定义,目的在于允许重要事件在包流中标记出来。设置可定义其他标示位,或通
过改变位数量来指定没有标记位。
⑥ 载荷类型(PT)
7位,记录后面资料使用哪种 Codec , receiver 端找出相应的 decoder 解碼出來。
RTP是针对Internet上多媒体数据流的一个传输协议, 由IETF(Internet工程任务组)作为RFC1889发布。RTP被定义为在一对一或一对多的传输情况下工作,其目的是提供时间信息和实现流同步。RTP的典型应用建立在UDP上,但也可以在TCP或ATM等其他协议之上工作。RTP本身只保证实时数据的传输,并不能为按顺序传送数据包提供可靠的传送机制,也不提供流量控制或拥塞控制,它依靠RTCP提供这些服务。
2.1 RTP工作机制
威胁多媒体数据传输的一个尖锐的问题就是不可预料数据到达时间。但是流媒体的传输是需要数据的适时的到达用以播放和回放。rtp协议就是提供了时间标签,序列号以及其它的结构用于控制适时数据的流放。在流的概念中”时间标签”是最重要的信息。发送端依照即时的采样在数据包里隐蔽的设置了时间标签。在接受端收到数据包后,就依照时间标签按照正确的速率恢复成原始的适时的数据。不同的媒体格式调时属性是不一样的。但是rtp本身并不负责同步,rtp只是传输层协议,为了简化运输层处理,提高该层的效率。将部分运输层协议功能(比如流量控制)上移到应用层完成。同步就是属于应用层协议完成。它没有运输层协议的完整功能,不提供任何机制来保证实时地传输数据,不支持资源预留,也不保证服务质量。rtp报文甚至不包括长度和报文边界的描述。同时rtp协议的数据报文和控制报文的使用相邻的不同端口,这样大大提高了协议的灵活性和处理的简单性。
rtp协议和udp二者共同完成运输层协议功能。udp协议只是传输数据包,不管数据包传输的时间顺序。 rtp的协议数据单元是用udp分组来承载的。在承载rtp数据包的时候,有时候一帧数据被分割成几个包具有相同的时间标签,则可以知道时间标签并不是必须的。而udp的多路复用让rtp协议利用支持显式的多点投递,可以满足多媒体会话的需求。rtp协议虽然是传输层协议但是它没有作为osi体系结构中单独的一层来实现。rtp协议通常根据一个具体的应用来提供服务,rtp只提供协议框架,开发者可以根据应用的具体要求对协议进行充分的扩展。
2.2 RTP协议的报文结构
RTP头格式如图2所示:
开始12个八进制出现在每个RTP包中,而CSRC标识列表仅出现在混合器插入时。各段含义如下:
①版本(V)
2位,标识RTP版本。
② 填充标识(P)
1位,如设置填充位,在包尾将包含附加填充字,它不属于有效载荷。填充的最后一个八进制包含应该
忽略的八进制计数。某些加密算法需要固定大小的填充字,或为在底层协议数据单元中携带几个RTP包
。
③扩展(X)
1位,如设置扩展位,固定头后跟一个头扩展。
④CSRC计数(CC)
4位,CSRC计数包括紧接在固定头后CSRC标识符个数。
⑤标记(M)
1 位,标记解释由设置定义,目的在于允许重要事件在包流中标记出来。设置可定义其他标示位,或通
过改变位数量来指定没有标记位。
⑥ 载荷类型(PT)
7位,记录后面资料使用哪种 Codec , receiver 端找出相应的 decoder 解碼出來。
常用 types:
Payload Type
|
Codec
|
0
|
PCM μ -Law
|
8
|
PCM-A Law
|
9
|
G..722 audio codec
|
4
|
G..723 audio codec
|
15
|
G..728 audio codec
|
18
|
G..729 audio codec
|
34
|
G..763 audio codec
|
31
|
G..761 audio codec
|
⑦ 系列号
16位,系列号随每个RTP数据包而增加1,由接收者用来探测包损失。系列号初值是随机的,使对加密
的文本攻击更加困难。
⑧ 时标
32位,时标反映RTP数据包中第一个八进制数的采样时刻,采样时刻必须从单调、线性增加的时钟导出
,以允许同步与抖动计算。时标可以让receiver端知道在正确的时间将资料播放出来。
由上图可知,如果只有系列号,并不能完整按照顺序的将data播放出来,因为如果data中间有一段是
没有资料的,只有系列号的话会造成错误,需搭配上让它知道在哪个时间将data正确播放出来,如此
我们才能播放出正确无误的信息。
⑨SSRC
32位,SSRC段标识同步源。此标识不是随机选择的,目的在于使同一RTP包连接中没有两个同步源有
相同的SSRC标识。尽管多个源选择同一个标识的概率很低,所有 RTP实现都必须探测并解决冲突。如
源改变源传输地址,也必须选择一个新SSRC标识以避免插入成环行源。
⑩CSRC列表
0 到15项,每项32位。CSRC列表表示包内的对载荷起作用的源。标识数量由CC段给出。如超出15个作
用源,也仅标识15个。CSRC标识由混合器插入,采用作用源的SSRC标识。