论文部分内容阅读
摘 要:流媒体的传输策略在流媒体传输系统中非常重要,不合理的流媒体传输方法会极大浪费网络资源。本论文首先介绍了流媒体传输系统的设计方案,然后阐述了如何实现RTP传输以及多点传输。新设计的流媒体传输系统可以减少网络资源的浪费。
关键词:流媒体;传输系统;设计;实现
中图分类号:TN919.8
一种流媒体数据的发送方法,首先需要选取一个统一的标准时间点作为媒体数据包的基准时间点。然后根据接受到的数据内容和媒体豹纹内容确定各个数据包所相对对应的标准时间点。其次根据这个时间点,确定其各个所对应的媒体单元时间戳。将已经确定的时间戳放置于相对于的媒体单元内,并将其包装封闭在帧结构中发送。该流程的重点主要为媒体单元的时间戳的确定,即为所有的媒体数据选取了一个统一的标准时间点。因此,所有有关联的各个媒体数据可以实现时间同步。从而使有统一目的的不同路径的媒体单元到达的时间先后能很容易的识别。具体的操作系统工作如下:
通过对一般传输的研究,在本文设计的流媒体传输系统中,使用底层为UDP协议的RTP协议传输数据信息,用RTCP传递控制报文信息,采用HTTP协议与Web服务器交互,采用HTTP、MMS协议进行播放器与数据源的交互。
Web服务器采用XML技术实现,节点与其通信采用HTTP协议实现;媒体源与播放器之间采用HTTP、MMS协议通信,节点从本地缓存或媒体源获取流媒体数据,然后调用播放器播放。信息是通过TCP协议传输,其中控制信息包括节点的加入、退出、邻居节点的更新、Keep-alive等信息。真正的媒体数据采用RTP协议传输。RTCP控制信息包通过UDP/TCP和IP进行传输。
1 RTP传输实现
1.1 JRTPLib的编译
JRTPLib是一个开源的RTP库,JThread是一个开源的线程类,JRTPLib和JThread联合使用,可以在后台自动获取数据。如果没有JThread的话,JRTPLib也能编译通过(要改一个参数RTP_SUPPORT_THREAD在rtpconfig_win.h文件中),但如果JRTPLib中不加入JThread就需要程序周期调用相关的函数来获取数据。
1.2 流媒体数据发送
流媒体数据发送的具体流程是,先获得接收端的IP地址和端口号,然后根据具体数据创建RTP会话,再指定RTP数据接收端,从而设置RTP会话默认参数,完成发送流媒体数据。
首先生成RTP Session 类的实例,调用Create()方法来对其进行初始化操作。设置恰当的时间戳单元(调用RTP Session类的SetTimestampUnit方法),并且设置好数据发送的目标地址,RTP协议允许同一会话存在多个目标地址,我们可以通过调用RTP Session类的AddDestination()、DeleteDestination()和ClearDestinations()方法来完成地址的添加、删除和清除。目标地址全部指定之后,调用RTP Session类的SendPacket()方法,向所有的目标地址发送流媒体数据。
1.3 流媒体数据接收
流媒体数据接收的具体流程是获得用户指定的端口号,然后创建RTP会话,从而设置接收模式,其次接收RTP数据,再根据情况检索RTP数据源,获取RTP数据报,删除RTP数据报。
RTP数据报有三种接收模式(RECEIVEMODE_ALL、RECEIVEMODE_IGNORESOME、RECEIVEMODE_ACCEPTSOME),每种接收模式具体规定了哪些到达的 RTP 数据报将会被接受。我们可以通过调用RTP Session类的SetReceiveMode()方法可以设置接收模式,本系统采用RECEIVEMODE_ALL 缺省的接收模式,所有到达的 RTP 数据报都将被接受。
系统定义了类rtprevcv.h,负责RTP数据的接收。
ch->rtprev->rtpRevInit(port);//RTP接收初始化
ch->rtprev->rtpAddSour(port,SourceIp); //加入源节点IP
packet = sess.GetNextPacket(); //获取 RTP 数据报
2 多点传输实现
MixCast系统中,各节点在应用层组播里是多对多的关系。即一个节点可同时从多个节点接收数据,同样地,一个节点也可发送数据至多个节点。这由每个节点的度控制。
2.1 一对多实现
UDP的多路复用让RTP协议支持多点投递,可以满足流媒体多点之间会话的要求。我们可以通过调用JRTPLib 的AddDestination()函数将组播地址添加到RTP会话的发送列表中,关键实现代码如下:
dw=m_sess.AddDestination(ulIP,usPort);//设置组播地址加入列表
m_sess.SendPacket();//函数发送数据
2.2 多对一实现
采用多线程传输。一对节点传输占用一个线程,节点连接到父节点,开启一个新线程;节点退出,此线程关闭。
stream function
{
while(1) m_sess.SendPacket(); //发送数据
}
thread1.func =stream;
sys->startThread(&thread1);//开启线程
sys->endThread(&thread1);//结束线程
3 结语
本论文提出了一种流媒体传输系统的设计方案,并对其实现做了阐述,采用该流媒体传输策略的传输系统可减少流媒体传输过程中的网络资源的浪费,对网络资源的合理利用具有积极的意义。
参考文献:
[1]Xinyan Zhang,JC Liu, Bo Li, and Tak-Shing Peter Ynm. CoolStreaming/DOnet:A data- driven overlay network for efficient live media streaming[C].In Proceedings of IEEE INFOCOM,Match,2009.
[2]Li Fan,Pei Cao,Jussara Almerida. Summary cache: A scalable wide-area web cache sharing protocol[J].IEEE/ACM Trans Networkin,2010,8(3):281-293.
[3]R.Wooster and M.Abrams.Proxy Caching the Estimates Page Load Delays[C].In the 6th International World Wide Web Conference,April,7-11,2010,Santa Clara,CA,977-986.
[4]Meng Zhang,Jian-Guang Luo,Li Zhao.A Peer-to-Peer Network for Live Media Streaming-Using a Push-Pull Approach[C].In ACM Multimedia,2010.
[5]刘洁,刘建勋.基于用户兴趣模型的Web服务发现系统设计[J].湘潭大学自然科学学报,2008,30(1):131-134.
[6]Bellwood T,Clement L,Ehnebuske.Detal.OASIS Specification,UDDI v3.0.http://uddi.org/pubs/uddi_v3.htm,2002.
关键词:流媒体;传输系统;设计;实现
中图分类号:TN919.8
一种流媒体数据的发送方法,首先需要选取一个统一的标准时间点作为媒体数据包的基准时间点。然后根据接受到的数据内容和媒体豹纹内容确定各个数据包所相对对应的标准时间点。其次根据这个时间点,确定其各个所对应的媒体单元时间戳。将已经确定的时间戳放置于相对于的媒体单元内,并将其包装封闭在帧结构中发送。该流程的重点主要为媒体单元的时间戳的确定,即为所有的媒体数据选取了一个统一的标准时间点。因此,所有有关联的各个媒体数据可以实现时间同步。从而使有统一目的的不同路径的媒体单元到达的时间先后能很容易的识别。具体的操作系统工作如下:
通过对一般传输的研究,在本文设计的流媒体传输系统中,使用底层为UDP协议的RTP协议传输数据信息,用RTCP传递控制报文信息,采用HTTP协议与Web服务器交互,采用HTTP、MMS协议进行播放器与数据源的交互。
Web服务器采用XML技术实现,节点与其通信采用HTTP协议实现;媒体源与播放器之间采用HTTP、MMS协议通信,节点从本地缓存或媒体源获取流媒体数据,然后调用播放器播放。信息是通过TCP协议传输,其中控制信息包括节点的加入、退出、邻居节点的更新、Keep-alive等信息。真正的媒体数据采用RTP协议传输。RTCP控制信息包通过UDP/TCP和IP进行传输。
1 RTP传输实现
1.1 JRTPLib的编译
JRTPLib是一个开源的RTP库,JThread是一个开源的线程类,JRTPLib和JThread联合使用,可以在后台自动获取数据。如果没有JThread的话,JRTPLib也能编译通过(要改一个参数RTP_SUPPORT_THREAD在rtpconfig_win.h文件中),但如果JRTPLib中不加入JThread就需要程序周期调用相关的函数来获取数据。
1.2 流媒体数据发送
流媒体数据发送的具体流程是,先获得接收端的IP地址和端口号,然后根据具体数据创建RTP会话,再指定RTP数据接收端,从而设置RTP会话默认参数,完成发送流媒体数据。
首先生成RTP Session 类的实例,调用Create()方法来对其进行初始化操作。设置恰当的时间戳单元(调用RTP Session类的SetTimestampUnit方法),并且设置好数据发送的目标地址,RTP协议允许同一会话存在多个目标地址,我们可以通过调用RTP Session类的AddDestination()、DeleteDestination()和ClearDestinations()方法来完成地址的添加、删除和清除。目标地址全部指定之后,调用RTP Session类的SendPacket()方法,向所有的目标地址发送流媒体数据。
1.3 流媒体数据接收
流媒体数据接收的具体流程是获得用户指定的端口号,然后创建RTP会话,从而设置接收模式,其次接收RTP数据,再根据情况检索RTP数据源,获取RTP数据报,删除RTP数据报。
RTP数据报有三种接收模式(RECEIVEMODE_ALL、RECEIVEMODE_IGNORESOME、RECEIVEMODE_ACCEPTSOME),每种接收模式具体规定了哪些到达的 RTP 数据报将会被接受。我们可以通过调用RTP Session类的SetReceiveMode()方法可以设置接收模式,本系统采用RECEIVEMODE_ALL 缺省的接收模式,所有到达的 RTP 数据报都将被接受。
系统定义了类rtprevcv.h,负责RTP数据的接收。
ch->rtprev->rtpRevInit(port);//RTP接收初始化
ch->rtprev->rtpAddSour(port,SourceIp); //加入源节点IP
packet = sess.GetNextPacket(); //获取 RTP 数据报
2 多点传输实现
MixCast系统中,各节点在应用层组播里是多对多的关系。即一个节点可同时从多个节点接收数据,同样地,一个节点也可发送数据至多个节点。这由每个节点的度控制。
2.1 一对多实现
UDP的多路复用让RTP协议支持多点投递,可以满足流媒体多点之间会话的要求。我们可以通过调用JRTPLib 的AddDestination()函数将组播地址添加到RTP会话的发送列表中,关键实现代码如下:
dw=m_sess.AddDestination(ulIP,usPort);//设置组播地址加入列表
m_sess.SendPacket();//函数发送数据
2.2 多对一实现
采用多线程传输。一对节点传输占用一个线程,节点连接到父节点,开启一个新线程;节点退出,此线程关闭。
stream function
{
while(1) m_sess.SendPacket(); //发送数据
}
thread1.func =stream;
sys->startThread(&thread1);//开启线程
sys->endThread(&thread1);//结束线程
3 结语
本论文提出了一种流媒体传输系统的设计方案,并对其实现做了阐述,采用该流媒体传输策略的传输系统可减少流媒体传输过程中的网络资源的浪费,对网络资源的合理利用具有积极的意义。
参考文献:
[1]Xinyan Zhang,JC Liu, Bo Li, and Tak-Shing Peter Ynm. CoolStreaming/DOnet:A data- driven overlay network for efficient live media streaming[C].In Proceedings of IEEE INFOCOM,Match,2009.
[2]Li Fan,Pei Cao,Jussara Almerida. Summary cache: A scalable wide-area web cache sharing protocol[J].IEEE/ACM Trans Networkin,2010,8(3):281-293.
[3]R.Wooster and M.Abrams.Proxy Caching the Estimates Page Load Delays[C].In the 6th International World Wide Web Conference,April,7-11,2010,Santa Clara,CA,977-986.
[4]Meng Zhang,Jian-Guang Luo,Li Zhao.A Peer-to-Peer Network for Live Media Streaming-Using a Push-Pull Approach[C].In ACM Multimedia,2010.
[5]刘洁,刘建勋.基于用户兴趣模型的Web服务发现系统设计[J].湘潭大学自然科学学报,2008,30(1):131-134.
[6]Bellwood T,Clement L,Ehnebuske.Detal.OASIS Specification,UDDI v3.0.http://uddi.org/pubs/uddi_v3.htm,2002.