面向并发服务的流媒体访问控制技术研究

时间:2012-05-31来源:网络

采用单播、广播和组播可以减轻服务器负担,也能提高并发数。组播的多点投递方式,使所有机器能够接收每个分组的同一拷贝减少了资源浪费。而常规的点对点通信方式下,N个视频站点的视频传输至少要重复发送N-1次相同的数据包,发送时延大,而且随着播放站点数量增长,时延就会迅速增长,这样就不能适应要求短时延的多点视频传输。

1.3 基于实时传输的协议机制

由于TCP需要较多的开销,它的重传机制和拥塞控制机制(Congestion Control Mechanism)不可避免地产生了传输延时和占用了较多的网络带宽,故不适合传输实时视频音频。在视音频的流式传输实现方案中,一般采用HTTP/TCP来传输控制信息,用RTP/UDP来传输实时声音数据。

实时传输协议RTP(Real-time transport protocol)[4]是用于internet上针对多媒体数据流的一种传输协议。RTP被定义为在一对一或一对多的传输情况下工作,其目的是提供时间信息和实现流同步。通常利用低层的UDP协议对实时视音频数据进行组播(Multicast)或单播(Unicast),从而实现多点或单点视音频数据的传输,当然RTP也可以在TCP或ATM等其他协议之上工作。RTP本身并不能为按顺序传送数据包提供可靠的传送机制,也不提供流量控制或拥塞控制,而是依靠RTCP提供这些服务保证实时传输的操作。

实时传输控制协议RTCP(Real-time transport control protocol)和RTP一起提供流量控制和拥塞控制服务。在RTP会话期间,各参与者周期性地传送RTCP包。RTCP包中含有已发送的数据包的数量、丢失的数据包的数量等统计资料,因此,服务器可以利用这些信息动态地改变传输速率,甚至改变有效载荷类型。RTCP是RTP的控制协议,RTP和RTCP配合使用能以有效的反馈和最小的开销使传输效率最佳化,因而特别适合传送网上的实时数据。

RTCP单独运行在底层协议上监视服务质量并与会话者传递信息,RTCP是由接收方向发送的报文,它负责监视网络的服务质量、通信带宽以及网上传送的信息,并将这些信息反馈给发送端,并提供QoS的检测,提供不同媒体间的同步信息和会话参与者的标识信息。

基于事件处理的多线程多缓冲区机制显得更胜一筹。但是当在广域网中进行视频数据传输时,此时的传输性能极大地取决于可用的带宽,由于TCP是面向连接的传输层协议,它的重传机制和拥塞控制机制,将使网络状况进一步恶化,从而带来灾难性的延时。同时,在这种网络环境下,通过TCP传输的视频数据,在接收端重建、回放时,断点非常明显,体现为明显的断断续续,传输的实时性和传输质量都无法保障。相对而言,采用RTP传输的视频数据的实时性和传输质量就要好得多。

2 并发服务的任务调度策略

面对越来越巨大的流应用需求,系统必须拥有良好的可伸缩性。随着业务的增加和用户的增多,系统需要灵活地增加现场直播流的数量,并通过增加带宽集群和接近最终用户端的边缘流媒体服务器的数量,增加并发用户的数量,不断满足用户对系统的扩展要求。

通常情况下一个视频流的播放准备需要的准备时间是比较长的。按照进程方式提供服务的话,如果不断接收到客户的请求,同时又不断地创建子进程处理,必然会影响客户的接收,其服务器并发数也大打折扣。因此,采用“预创建(prefork)”技术可以缓解这种情况的产生。服务器事先创建一定数目的子进程,每个子进程分别接受连接队列中已建立连接的客户连接。这样,就由子进程快速响应并处理客户请求。

并发与调度密切相关,如何分配任务给 CPU、如何调度任务直接影响到效率和可行性。效率较高的并发方法之一是“多线程”,也就是“线程化”。但线程化并不是唯一的并发构造,它的实现依赖于资源的可用情况并有一定的局限性。文献[5]中提到了多种可行的并发应用模型,除线程化外,还有多处理、协同例程和基于事件的编程,以及连续(continuation)、生成器和其它一些构造。

调度的任务就是合理划分时间片和循环执行各个线程,并能有效地监测线程阻塞和消除。每个线程都占用一部分CPU时间片,每个时间片上一个线程运行,另一个时间片又可能是另外的线程在工作。

根据视频流的传送要求,并发服务的优先级调度方式不适合专用于视频服务的工作,这会造成优先级高的视频流强占低优先级的视频流服务。因此,为了达到每个视频流服务的公平性,采用带有可变加权的循环调度。其循环顺序由申请服务的先后次序决定,以服务的时延最小进行调整控制,实现各个服务的最小允许延迟保证优质服务。

3 实现方案与测试验证

并发操作在同一时刻能够处理多个客户请求,从RTP/RTCP协议使用的角度来说,其实现方法也有多种,如服务器对每个接收到的客户连接创建一个线程处理;或者预先创建多个线程,由这些线程处理请求。

当然,使用多处理硬件更能较好地实现多任务的并发操作,特别是对于Linux使用多个处理器处理不同的线程时,并发效果要好的多。值得注意的是防止多个线程在单个处理器上造成瓶颈,而其它处理器却处于空闲状态,当然其它并发方法有时也会造成类似的问题。这方面有赖于操作系统的性能,对Linux 2.4来说其缺省的“内核线程”可以很好地调度线程,并将这些线程分配给不同的CPU。

3.1 实时传输的信息控制

线程建立通信连接关系后,根据RTP提供的时间信息实现流同步,通过RTCP反馈的信息进行数据流控制并动态调整传输率,保证数据延迟符合预定要求。

服务器监听端口,根据实际客户请求量确定请求队列的允许最大连接数目。

accept(客户请求)

{ 提取并分析请求队列中的某一任务;

寻找具有相同视频信号标志的任务,使用组播技术设置ip地址由子进程处理播放;否则后置单位时间St。处理时间St的任务(Proc_Client())。}

while(客户机与服务器成功连接——成功返回通信文件描述符)

{ CreateThread() //创建线程

{ 读出当前时间,并将当前时间写入通信文件描述符;

比较RTCP中资源信息与现有资源的差异,调整数据包发送大小和发送速度;如果子进程的数据传送完,则关闭通信文件描述符;反之,继续传送。}}

1 2 3

关键词: 服务 访问控制 流媒体 技术研究

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版