针对传输层协议的矛盾,为了实现流媒体在IP上的实时传送播放,设计流媒体服务器时需要在传输层协议(TCP/UDP)和应用层之间增加一个通信控制层。在增加的通信控制层,采用相应的实时传输协议,主要有:数据流部分的实时传输协议RTP(Real-timeTransportProtocol),用于控制部分的实时传输控制协议RTCP(Real-timeTransport图1 流媒体服务协议栈StreamingProtocol)。RTP协议主要是用来传送实时的流媒体信息,数据报主要包括多媒体数据,以及所携带负载的时间戳,顺序号等。RTCP协议的数据报主要包括了接收者收到某个多媒体流的服务质量信息,用于对服务器端的反馈。
流媒体服务器的协议栈如图1所示。
当服务器收到RTSP请求,它首先产生RTSP请求对象。服务器通过RTSP协议的应答信息将请求的内容以流会话(streamingsession)的形式描述,内容包括数据流包含多少个流、媒体类型、和编解码格式。一个流会话由一个或多个数据流组成,如视频流和音频流等。实际的数据流通过RTP协议传递到客户端。RTP在一对一或一对多的传输情况下工作,其目的是提供时间信息和实现流同步。RTP本身并不能为顺序传送数据包提供可靠的传送机制,它依靠RTCP一起提供流量控制和拥塞控制服务。在RTP会话期间,各连接者监视下层网络的性能,并将相关信息放入RTCP包,周期性地传送RTCP包来通知发送方。发送方也可以用RTCP包提供每次的会话信息,包中含有已发送的数据包的数量、丢失的数据包的数量等统计资料。因此,服务器可以利用这些信息动态地改变传输速率,甚至改变有效载荷类型。RTP和RTCP配合使用,因有效的反馈和最小的开销使传输效率最佳化。
流媒体服务器的功能框图如图2所示。
2.3高效流媒体服务器的设计
通过流媒体服务器的协议栈的设计,可以明确流媒体服务器是在传输层协议(TCP,UDP)上解释RTP,RTCP,RTSP协议的,所有的客户连接请求都是以TCP的端口获得的,流媒体数据也都是打成RTP包,通过UDP端口发出去的,因此,对于TCP,UDP端口事件的调度以及如何把大量的流媒体数据从磁盘空间传递到网络上成为制约流媒体服务器性能的主要因素。