- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一种流媒体传输系统设计与实现
一种流媒体传输系统设计与实现
摘 要:流媒体的传输策略在流媒体传输系统中非常重要,不合理的流媒体传输方法会极大浪费网络资源。本论文首先介绍了流媒体传输系统的设计方案,然后阐述了如何实现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()函数将组播地址添加到RT
文档评论(0)