基于P2P的流媒体直播系统设计

2011-04-10 05:51王从局连云港师范高等专科学校计算机系江苏连云港222006
长江大学学报(自科版) 2011年28期
关键词:客户端服务器传输

王从局(连云港师范高等专科学校计算机系,江苏 连云港222006)

基于传统的C/S模式或B/S模式的视频直播或点播系统,存在建设费用高、服务器负荷大、网络带宽要求高、访问量过大时播放质量差、可靠性和可扩展性受结构限制等缺点。基于P2P的流媒体服务技术通过合理地使用客户端计算机空闲的资源提供部分服务,让客户机缓存一部分信息,充当服务器的部分功能,使网络中的资源和服务分散化。采用P2P架构可以充分利用其中各节点闲置的计算能力或存储空间,达到低成本的提供更高性能计算和海量存储的目的[1]。下面,笔者设计了一种基于P2P流媒体的视频直播系统。

1 系统整体架构

基于P2P的流媒体直播系统分为服务器(是指保存有原始节目文件,最初发布服务的节点)和客户端(是指没有节目文件,依靠其他节点传输的媒体流进行节目播放的节点)2个部分。在P2P网络上节点是对等的,即作为客户端在接收上级节点传输的数据流的同时,也在作为服务器给下级节点提供数据流[2]。在P2P传输结构的组织上,采用完全二叉树的结构,如图1所示。其中服务器作为树的根节点,客户端根据请求加入的顺序,在服务器的控制下,按照构造完全二叉树的策略逐渐组织传输结构。

图1 系统整体架构图

2 系统功能设计

系统功能的设计包括服务器端功能设计和客户端功能设计2部分。

2.1 服务器端功能设计

服务器端的主要功能由发布服务通告、获取本地媒体流并播放、获取节点加入P2P网络、将实时媒体流传给孩子节点、监听直接孩子节点的存活情况、处理孩子节点的断线情况等功能构成。

1)发布服务通告 服务器在启动时,会发布自己的服务通告,目的是让客户端通过服务通告找到服务器节点,并且加入整个P2P网络。主要通过JXTA平台,服务器建立自己的服务通告名称和ID,然后发布出去,等待客户端的连接。

2)获取本地媒体流并播放 服务器首先找到本地存放的媒体文件,并将其进行转换成实时的流媒体。主要通过JMF的媒体处理器对本地的媒体文件进行处理,得到可供传输的媒体流。

3)获取节点加入P2P网络 服务器接收到客户端的入网请求之后,将客户端加入P2P传输网络中,并设置相应的属性如加入的顺序编号作为标记。主要通过JXTA的消息机制,客户端将自己的信息传给服务器,并让服务器将其加入P2P网络中。

4)将实时媒体流传给孩子节点 服务器通过JMF获取正播放的媒体,再通过它发送给自己的直接孩子节点。

5)监听直接孩子节点的存活情况 用JXTA的消息机制定时给直接孩子节点(包括左孩子和右孩子)发送消息来判断直接孩子节点是否存活。如果孩子节点收到消息,则孩子节点给服务器返回消息证明自己存在。

6)处理孩子节点的断线情况 服务器接收到孩子节点(可以是所有的孩子节点)不存在的消息之后,重新调整整个P2P网络的传输结构,将P2P网络中最后一个节点调到刚断线节点处,代替刚掉线的节点以保持整个网络传输的顺畅。

2.2 客户端功能设计

客户端主要功能由搜索服务器服务通告、加入P2P网络、获得父节点媒体流并播放、将实时媒体流传给孩子节点、处理直接孩子节点的断线情况等功能构成。

1)搜索服务器服务通告 通过JXTA平台,客户端根据默认的服务名称搜索服务器建立的服务通告名称。

2)加入P2P网络 客户端搜索到服务器的服务通告后,通过JXTA的消息机制将自己的信息情况发送给服务器,请求加入P2P网络。

3)获得父节点媒体流并播放 客户端通过JMF技术,获得从父节点发送给自己的实时媒体流进行相应的处理之后,实时播放出来。

4)将实时媒体流传给孩子节点 用JMF的媒体流克隆技术,将自己正播放的从父节点收到的实时媒体流克隆一份,发送给自己的直接孩子节点。

5)处理直接孩子节点的断线情况 客户端首先通过定时函数探测到自己的直接孩子节点已经断线,然后将自己孩子节点的信息用JXTA的消息机制发送给服务器,让服务器处理。

3 关键技术

3.1 节点加入

在P2P应用中,传输结构是在逐渐增加的节点上创建的。笔者设计的传输结构采用完全二叉树的结构形式,也就是说服务器的服务发布后,节点可以发起一个请求到服务器,服务器将把前2个发起请求的节点作为孩子节点,然后服务器把以后发来请求的节点的请求转发给某个子孙节点,服务将由子孙节点来提供。节点的加入过程如图2所示。

图2 节点的加入过程图

设计中,使用Sequence来存储节点信息。如假设服务器的编号为1,第一个发起请求的节点为2,依次类推,则i节点的左孩子就是i×2,右孩子是i×2+1,父节点是i/2向下取整。i节点发出的请求得到服务器的响应后,将其信息放入Sequence的末尾(即位置i),若自己已经存在2个孩子节点,则请求将被转发给编号为i/2的节点。在图2中,节点4的请求被服务器转发给了节点2,即4/2,使新加进的节点成了节点2的左孩子。这种做法将确保传输结构为完全二叉树。

3.2 节点退出

在P2P应用中,节点的不稳定性造成其有可能随时退出系统的情况。在设计中,节点不但从上一级节点接收流媒体用来自己播放,同时还要向下一级节点提供数据流,如果有节点退出,它的下一级节点将会失去数据源,播放将被中断[3]。因此,在发现节点故障后,需要进行传输结构的调整,以确保所有节点的播放正常进行。为了保证被调整以后的传输结构仍然是完全二叉树,笔者以最后一个节点补充失效节点的方式来调整传输结构,如图3所示。

图3 节点的退出过程图

如果节点2退出,服务器(节点1)将在一定时间后通过监视程序发现节点2失效。随后服务器将查找Sequence中最后一个节点,即节点7。服务器通过节点7的编号找到它的父节点3,通知节点3取消对节点7的数据流传输和监视。并将节点7的信息调整到Sequence中的位置2,然后服务器重新开始对新的2号节点进行数据流传输和监视。最后,服务器通过Sequence的长度是否大于2×2和2×2+1来判断节点2是否有孩子。若有孩子,则服务器象节点4、5请求加入时一样,向新2号节点发送节点4、5请求加入的消息,之后新2号节点将分别向他们传输数据流,并且监视他们的有效性[4]。

当某节点通过监视程序发现自己的孩子节点失效时,将向服务器发送 “编号为i的节点失效”的消息,编号i通过自己的编号计算而来,然后由服务器通过向节点发送消息来完成传输结构的调整。

3.3 流媒体的传输

向客户端提供的节目一般以媒体文件的形式存储于服务器中,这些媒体文件直接传输到客户端是无法被客户端实时接收并播放的。为了使客户端可以实时接收并播放节目,需要服务器在传输时将媒体文件转化为流媒体格式,以流的形式传输媒体数据。RTP是为支持实时多媒体通信而设计的传输层协议,本设计所采用的流媒体格式是基于RTP的。在网络上传输RTP流,必须使用处理器和RTP编码的数据源,并构建一个会话管理器或数据汇集点来控制传输。处理器的输入可以是当前捕获的数据,也可以是已存储的文件。一般的节目都是既有图像又有声音的,在处理器中音视频被描述成2个轨道,即视频轨道和音频轨道。由于视频和音频的编码方式不同,所以必须从媒体文件中分别提取出视频轨道和音频轨道,按照各自的编码方式转换为RTP流,之后创建2个会话管理器,在2个会话中分别进行传输[5]。

4 结 语

在综合考虑各种因素的情况下,利用P2P技术设计大规模流媒体直播解决方案,可以在将来提供更好的网络流媒体播放服务。采用P2P技术设计的流媒体直播系统,还具有在线访问用户越多视频质量就越清晰流畅、容易部署和扩展能力高的特点,可以在将来提供更好的网络流媒体播放服务。

[1]彭凯,武娟,杨宗凯,等 .基于P2P的流媒体直播技术研究与展望 [J].计算机科学,2009,36(1):10-15.

[2]韩俊伟,王少锋 .基于P2P的流媒体直播系统研究与设计 [J].计算机应用研究,2006(6):227-229.

[3]李长利,应小昆,张万光,等 .基于P2P网络技术的视频直播系统的实现与测试 [J].微电子学与计算机,2008,25(10):83-86.

[4]张路 .基于流媒体技术的电视直播系统研究与设计 [J].中国科技博览,2009(14):82-83.

[5]王从局 .基于JXTA的视频直播系统的设计与实现 [D].上海:华东师范大学,2009.

猜你喜欢
客户端服务器传输
混合型随机微分方程的传输不等式
牵引8K超高清传输时代 FIBBR Pure38K
通信控制服务器(CCS)维护终端的设计与实现
如何看待传统媒体新闻客户端的“断舍离”?
关于无线电力传输的探究
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
大枢纽 云平台 客户端——中央人民广播电台的探索之路
中国服务器市场份额出炉
支持长距离4K HDR传输 AudioQuest Pearl、 Forest、 Cinnamon HDMI线