Darwin Streaming server的研究与应用

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:wilee818
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:介绍了Darwin streaming server(DSS)源码的架构和核心流程;详细分析了Darwin streaming server的关键技术:媒体封包和流量控制;最后给出了Darwin streaming server的应用实例。
  关键词:RTP;流媒体;Darwin Streaming Server(DSS)
  中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)35-2118-02
  Research and Application of the Darwin Streaming Server
  WANG Zhi-gang,ZHOU Nan,GAO Qing
  (School of Computer Science & Technology, Soochow University,Suzhou 215006,China)
  Abstract:This paper introduces the architecture and the core flow of the Darwin streaming server(DSS) source code, then discusses the key technology in detail :Media Data Packetization and Flow Control, at last it shows an example Applications of DSS.
  Key words: RTP; streaming media; darwin streaming Server (DSS)
  
  1 引言
  
  作为新一代互联网应用的标志, 流媒体技术在近几年得到了飞速的发展, 并且广泛应用于远程教育、网络监控、视频点播等系统之中。目前在流式媒体领域,有三种占有主导地位的产品,它们分别是Apple公司的Quick Time、Microsoft公司的Media Server以及Real公司的Real System。Darwin Streaming Server(简称DSS)是QuickTime Streaming Server开放式源代码的版本,同时支持FreeBSD、Linux、Solaris、Windows NT和Windows 2000等多个操作系统,是当前所有同类产品中支持平台最多的一个。
  
  2 Darwin流化服务器介绍
  
  Darwin Streaming Server(简称DSS)是QuickTime Streaming Server开放式源代码的版本,目前最新的版本是6.0.3。DSS源代码完全采用标准C++语言写成,编程风格非常优秀,每一个C++类都对应着一对和类同名的.h/.cpp文件。整个服务器包括多个子系统,分别存放在独立的工程内,其中,最为重要的是基础功能类库(Common Utilities Lib)和流化服务器(Streaming Server)两个工程。表1给出了这个两个模块的具体功能。
  表1 DSS 程序模块架构分类及功能
  
  
  3 Server程序详细分析
  
  整个DSS的运行是以模块(Module)为基础,以角色(Role)来分类各项任务的(Task),每一个角色都是为完成某一特定的任务而设定的。当客户端提出请求时,DSS会根据该请求属于哪一个角色来启动适当的模块。如前所述,Server Core 主要分三大模組:Server Core,RTSP subsystem 及RTP subsystem。Server从开始到结束整个流程也大概分为这三个部分。
  3.1 Server Core(Startup & Shutdown)
  图2 为程序启动与结束时的流程图。服务器在启动的时候,会首先装载没有被编译到服务器里面的模块(即动态模块),然后再装载编译为服务器一部分的模块(即静态模块)。在模块装载完成之后,服务器会调用每个QTSS模块的Register(注册)角色,每个模块都必须支持这个角色。在Register角色中,模块会调用QTSS_AddRole函数来指定自己支持的其它角色。接下来服务器就以Initialize(初始化)角色调用每一个注册支持该角色的模块。Initialize角色执行模块所需要的任何初始化任务,比如分配内存和初始化全局的数据结构。然后进入聆听(Listen)的状态接收客户端的RTSP 请求。
  3.2 RTSP 子系统
  在服务器调用所有注册了Initialize角色的模块之后,就已经为接收来自客户端的请求做好准备了,这些请求就是RTSP请求。当服务器收到一个RTSP请求时,就会创建一个RTSP请求对象,接着服务器会根据预先定义好的顺序,调用各个模块的相关角色,如图3所示。在处理RTSP请求的时候,服务器调用的第一个角色是RTSP Filter(过滤器)角色。之后,服务器就会对请求进行解析。RTSP请求解析完成之后,服务器会以RTSP Route(路由)角色调用所有注册了该角色的模块,并传入一个RTSP对象。在调用了所有RTSP Route角色之后,服务器就会以RTSP Preprocessor角色调用每个注册了该角色的模块。如果请求的类型互相匹配,则RTSP Preprocessor角色就调用QTSS_Write或者QTSS_WriteV函数来向客户发送数据,对客户端进行响应。如果没有RTSP Preprocessor角色对RTSP的请求进行响应,则服务器就以RTSP Request(请求)角色调用成功注册了该角色的模块(第一个注册RTSP Request角色的模块,是唯一一个可以注册RTSP Request角色的模块)。RTSP Request角色负责响应所有没有被RTSP Preprocessor角色(的模块)处理过的RTSP请求。RTSP Request角色对请求进行处理之后,服务器就调用注册了RTSP Postprocessor角色的模块。处理RTSP Preprocessor或者RTSP Request角色的模块可能需要为特定的客户会话生成一些媒体数据。如果这样的话,模块可以通过调用QTSS_Play函数来实现,这个函数会使模块的RTP Send Packets(RTP发送数据包)角色被调用,即进入RTP子系统。
  3.3 RTP子系统
  RTP subsystem 主要包括RTP 封包传送及RTCP串流控制两部份。在封包传送方面,RTP Send Packets角色调用QTSS_Write或者QTSS_WriteV函数,在RTP会话的基础上向客户发送数据。当RTP Send Packets角色发送完成一些数据包之后,就会把控制权返回给服务器,并指定服务器下次调用模块的RTP Send Packets角色的间隔时间。这个周期会一直重复,直到所有的媒体数据包被发送完成,或者由于客户请求的原因需要暂停或中止客户会话为止。在串流控制方面,当Server 接收到RTCP 封包时会先判定此RTCP 封包属于哪一种,根据封包的种类,Server 会呼叫相应的模块进行处理。
  
  4 服务器关键技术研究
  
  在了解了DSS整个运行流程的基础上,本文主要研究了下面两个重点:DSS对媒体资料的封包的算法和服务器端如何控制流量。这两者的目的都是在使得客户端的播放能够清晰流畅。
  4.1 媒体封包切割(Media Data Packetization)
  在封包切割前,我们必须得到以下的几个信息:
  1) 在单一RTP 封包中能容纳的最大QuickTime 媒体数据尺寸(Maxima QT Media Data Size, MQD)
  2) 此种媒体数据其所有取样(Sample)尺寸是否固定?(Constant QT Sample Size, CQS)
  3) 此种媒体数据其所有取样的持续期间(Duration)是否固定?(Constant QT Duration , CQD)
  4) 当所有取样尺寸固定时其取样尺寸为多少?(Constant Sample Size, CSS)
  5) 当取样尺寸不固定时其某一个取样的大小(Sample Size, SS)
  根据以上的信息,DSS 采用三种封包切割方式:
  1) (CQS=true)and(CQD=true)and(CSS<=0.5 * MQD)把多个取样封装成一个RTP 封包,同时每个RTP标头中M 字段设为1,QT 标头中的PCK 字段也设为1。(RTP 标头中M 字段设为1,表示此为某一取样的最后一个封包;QT 标头的PCK字段表示该封包切割所采用的方式。)
  2) ((CQS=false)or(CQD=false))and(SS<=05 * MQD)数个取样封装成一个RTP 封包,同时此一RTP封包标头的M 字段设为1,QT 标头中PCK 栏位设为2。
  3) 不符合(1)和(2)的情况时,采用之。单一的取样被封装成一个或数个RTP 封包中,同时最后一个属于该取样的RTP 封包之M字段设为1,其它设为0;QT 标头PCK 字段设为3。由于客户端必须以一个取样为单位进行封包重组,因此根据RTP 的M 字段及QT 的PCK 字段,可以知道此一封包所采用的分割方式,同时采取相应的封包重组方法。另外在处理某一封包遗失时,也可以快速决定是否该丢弃与其相关的封包,增进客户端的效率。
  4.2 流量控制(Flow Control)
  DSS 利用客户端传送回来的RTCP 封包信息以及变量“Quality level”来达成流量控制的机制。这些信息包括“Loss Rate”,“Getting better”以及“Getting worse”消息。
  1) 封包遗失率(Loss Rate):
  如果客户端的RTCP 回报中封包遗失率连续数次大于某一数值(此值为一百分比定值,由程序给定,称SLossThinTolerance),则将ratchetless 设为True,表示需要调降传输速度。如果RTCP 回报中封包遗失率连续数次小于某一数值(此为一百分比定值,称为SLossThickTolerance),则将ratchetmore 设为True。
  2)“Getting Worse”及“Getting Better”:如果客户端的RTCP 发出“Getting Worse”的消息,则直接将ratchetless 设为True。如果客户端的RTCP 发出“Getting Better”的消息,则直接将ratchetmore 设为True。由ratchetless 或ratchetmore 的设定,可以调整QualityLevel 的数值。DSS 根据QualityLevel 的数值大小来决定传输速度的快或慢,进而达到一部份的流量控制的目的。
  
  5 DSS应用实例
  
  作为一个运行于多个操作系统平台的开发源代码的服务器,其不但功能强大、易于操作,而且DSS还提供了一种称为Module的二次开发接口。使用这个开发接口,我们可以充分利用服务器的可扩展性及其实现的多种协议,并且能够保证和将来版本兼容。这样就可以分为两种用途:直接使用和二次开发使用。
  5.1 直接使用DSS
  作为一个具有工业强度的产品,DSS完全可以直接用在我们项目中,例如,利用Vara software公司的Wirecast可以采集USB Camer实时的影音图像,然后通过简单的设置后发送给DSS,通过DSS传送出去,这样就可以建立我们的实时影音服务器。同时,如果存在大量客户端,我们可以利用DSS的中继功能通过简单的增加PC机的数量来满足我们的需求,简单快捷,成本也并非一定高于找开发人员开发程序。
  5.2 二次开发使用
  我们可以利用DSS作为平台进行二次开发,如增加对媒体格式的支持,增加客户身份认证,增加对媒体内容的管理等模块,使DSS成为一个符合实际需求的实用系统。抱此目的的读者在掌握DSS整体流程的基础上,应着重于其二次开发平台(如Module)以及底层文件和媒体格式支持库的研究。
  
  6 结束语
  
  作为三大主要流式媒体应用中唯一一个开放源代码的产品,DSS让开发人员能够从最底层研究流式媒体技术,事实上,当前国内外许多公司正是在DSS的基础上开发了自己的流式媒体相关产品,而且通过研究DSS, 我们学习到了高级网络编程(Socket)、多线程之间的通信、任务调度、系统资源(CPU、磁盘等)的合理利用以及用于流式媒体的多个标准协议(RTP/RTCP、RTSP、SDP)的具体实现等等。这也是我们研究源码的意义所在。
  
  参考文献:
  [1] Apple Computer Inc. QTSS Modules Programming Guide, 2006.
  [2] Sven Hessler, Michael Welzl. An Empirical Study of the Congestion Response of RealPlayer, Windows Media Player and QuickTime. IEEE. 2005.
  [3] 黄拔峰,钟明,杨传均,张家钰.Darwin Streaming Server的研究与应用[J].计算机工程,2004(10):134-135.
其他文献
硬盘盒选购要点  移动硬盘首先要看接口,USB 2.0是目前最实用、最方便的考虑,至于1394火线接口,实用性不大,而且这样的硬盘盒价格也多在200元以上。硬盘盒内的电路板做工也是需要仔细检查的,因为硬盘盒多数比较紧凑,粗糙的焊点很容易引发短路。
期刊
“Firefox Bookmark Share”是一个Firefox浏览器的书签(收藏夹)插件,可以将你的书签随时保存到网络上,等需要时再自动下载覆盖当前书签,使用起来非常方便。
期刊
如今很多制作数码相册光盘的软件不是功能单一就是操作复杂,而新版的ACDSee8.0却可以让你从图片获取、浏览加工、制作相册到刻录光盘一气呵成,只用一个软件就可以完成所有的图片操作和光盘刻录,这对于一般人来说无疑是最佳的选择。
期刊
摘要:通过使用电脑键盘上的26个英文字母键进行零记忆双笔画汉字编码,它的主要特点就是能够将常用的横、竖、撇、捺、点、折这几种汉字的单笔画进行两两组合成为25种双笔画,并且按照一般的书写顺序,将双笔画所对应的英文字以及单笔画对应的英文字母跟汉字拼音的首字母进行组合,顺序组成一个一至四位汉字输入码,该一至四位汉字输入码对应相应的一个或几个汉字,然后选择需要输入的汉字。其显著效果在于:记忆量小,重码少,
期刊
随着DVD刻录技术的成熟,目前的DVD刻录机在刻录速度这一指标上已经能够满足用户的需要。目前,各大厂商推出的产品已将重点放在完善产品支持的刻录规格和提高刻录质量上。作为光存储的一线大厂,先锋公司推出了新一代DVD刻录机——DVR111XL系列。
期刊
轻松更新主板BIOS  通常更新主板的BIOS需要制作DOS启动软盘,对新手来说相当棘手。现在很多用户都对古老的DOS操作系统不熟悉,Windows在线更新又存在一定的风险。华硕EZ-Flash简化了这一程序,不用进行繁琐的操作,同时也避免了在线更新的风险。
期刊
摘要:该文主要介绍了一款内嵌硬件TCP/IP协议栈的高速网络芯片FS8610,及其构建Web服务器的过程。该过程包括硬件连接,TCP/IP协议的实现以及服务器的构建。  关键词:FS8610;Web服务器;TCP/IP  中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)35-2116-02  Web Server Application Design Base on F
期刊
摘要:由于使用无线传输和网络的开放性,移动通信面临着很多安全威胁。该文重点研究CDMA系统空中接口的安全机制,详细分析了针对主动攻击的鉴权机制的原理和过程,以及被动攻击的加密机制,其中重点介绍了一种数据加密技术——混合密码体制。  关键词:CDMA系统;安全机制;实体鉴权;空中接口;蜂窝鉴权和话音加密算法;混合密码体制  中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)
期刊
摘要:基于JXTA平台,该文设计与实现了P2P环境下的文件共享系统,该系统具有资源管理、资源共享及节点检索等特点。最后对系统进一步开发进行了简单的探讨。  关键词:P2P;JXTA;CMS;文件共享  中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)35-2106-02  The Design and Implementation of P2P File-sharing
期刊
摘要:企业遗留系统的复用是企业信息化阶段必须解决的问题,本文提出了一种基于SOA的企业遗留系统复用框架,通过Web Services将遗留系统的功能模块包装成服务来实现复用并结合实例予以证实,较好地解决了企业遗留系统的复用问题。  关键词:遗留系统;SOA;复用;web services  中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)35-2072-02  Rese
期刊