RSS

一种高效流媒体电影服务器的设计

  为了改善上述设计的缺点,需重新设计服务器的服务程序结构。根据服务器在流媒体传输中所要完成的功能,可以看出,服务器在客户有连接请求时,解析连接请求和关闭连接请求是很短的过程,服务器的大部分时间都用于给每个客户发送RTP数据流包。发送RTP数据流包包括服务器把相应的媒体文件调入内存,打包发送,以及获得RTCP包的反馈。因此,可以设计一个单独的处理线程,专门用于给客户发送RTP的数据流包。

  改进的流媒体服务器设计如图5所示,完成主要的功能通过两个线程来实现。

  事件线程负责检测客户连接,以及客户发的RTCP包的到来。事件线程通过对TCP端口的检测,在有连接请求时建立可维护客户信息的RTSP会话,在每一个客户的RTSP会话的存活期内,事件线程不断的把向客户发送RTP包这一任务放入处理线程的队列,直到RTSP会话终止,事件线程再把关闭连接的任务放入队列。

  事件线程把对不同客户的服务(发送RTP数据包)以任务的形式放入队列后,处理线程对对列中的任务依次进行处理,也就是说,处理线程根据客户的不同,不断的把相应的流媒体文件形成RTP包,依次发出,直到视频服务的终止。

  可以看的出来,处理线程虽然对所有的客户提供服务,但是执行的任务始终是发送RTP数据流包,同时,该线程所访问的媒体文件被调入内存后,可以被同一线程的其它任务重复调用,这样的设计,不但减少了随着客户数增加而造成的系统频繁切换的资源损失,也减少了访问硬盘数据的次数,缩短了访问时间,也发挥了指令局部性效率提高的优点。设图5 改进后的处理流程计中,解析客户的连接请求也放入处理线程的队列中,在处理线程中进行处理,虽然解析连接的任务不同于大部分发送RTP包的任务,但是该任务消耗时间少,所以对对系统性能的影响并不大。

 

 

  采用图5的设计方法,服务器还可以根据客户端反馈的RTCP包得知客户端的网络状况,采取一定的策略针对不同的客户网络质量进行RTP包发送任务的调度,对于带宽质量好的客户,事件线程可以多放一些RTP包到队列中;对于由于网络质量造成的即将超时的客户连接,服务器也可以通过任务调度的方式进行特殊处理,最大限度的提供不同质量的客户连接服务。

[时间:2010-08-14]
相关文章