分类: LINUX
2011-04-16 17:01:19
Darwin Streaming Server调研总结
Darwin streaming server(简称DSS) 的简介DSS主要几个特性:
支持MP4、3GPP等文件格式;
支持MPEG-4、H.264等视频编解码格式;
支持RTSP流控协议,支持HTTP协议;
支持RTP流媒体传输协议;
支持单播和组播;
支持基于Web的管理;
具有完备的日志功能。
此外,该服务器版本提供了一个基于模块的扩展方法。利用DSS提供的API就可以很方便地编写静态或动态的模块,对DSS进行扩展,使其支持其它文件格式、协议或者功能。
DSS服务器的编译安装调试Darwin Streaming Server(简称DSS)是苹果公司的开源视频服务器版本,最新版本6.0.3
获取包:6.0.3版本wget
linux的补丁
wget
wget
1. 安装步骤:
解压:
tar –xvf DarwinStreamingSrvr6.0.3-Source.tar
2. 打补丁:
patch -p1 < dss-6.0.3.patch
3. patch -p1 < dss-hh-20081021-1.patch
4. 修改一下Install:
cd DarwinStreamingSrvr6.0.3-Source
vi Install
行255改成 /usr/sbin/useradd -g qtss qtss
5. 编译:
./Buildit install
生成安装目录:
./DSS_MakeRoot -f /tmp/dss
6. 去安装目录&安装:
cd /tmp/dss
./Install安装完以后,一些默认的基本目录
/var/streaming/logs 日志文件目录
/usr/local/movies 影片存放目录和sdp文件存放目录
/usr/local/sbin/DarwinStreamingServer 启动DSS的入口
/etc/streaming/streamingserver.xml 相关的DSS的配置文件,可以配置端口,目录,等信息
调试:
可以在先对DSS的配置文件/etc/streaming/streamingserver.xml中设置日志日志的级别,然后再在DSS安装目录下面使用./DarwinStreamingServer –d –D 等参数的形式进行前端显示调试,详见./DarwinStreamingServer –h
DSS的框架v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;}
服务器的作用是充当网络客户和服务器模块的接口,其中网络客户使用RTP和RTSP协议来发送请求和接收响应,而服务器模块则负责处理请求和向客户端发送数据包。核心服务器通过创建四种类型的线程来完成自己的工作,具体如下:
媒体服务器使用模块来响应各种请求及完成任务。有三种类型的模块:
1. 内容管理模块
内容管理模块负责管理与媒体源相关的RTSP请求和响应,比如一个文件或者一个广播。每个模块负责解释客户的请求,读取和解析它们的支持文件或者网络源,并且以RTSP和RTP的方式进行响应。在某些情况下,比如流化mp3的模块,使用的则是HTTP。
QTSSFileModule,QTSSReflectorModule,QTSSRelayModule,和QTSSMP3StreamingModule都是内容管理模块。
2. 服务器支持模块
服务器支持模块执行服务器数据的收集和记录功能。服务器模块包括QTSSErrorLogModule, QTSSAccessLogModule,QTSSWebStatsModule,QTSSWebDebugModule, QTSSAdminModule,和QTSSPOSIXFileSystemModule。
3. 访问控制模块
访问控制模块提供鉴权和授权功能,以及操作URL路径提供支持。
访问控制模块包括QTSSAccessModule,QTSSHomeDirectoryModule,QTSSHttpFileModule,和QTSSSpamDefenseModule。
数据当一个模块需要访问客户请求的RTSP报头时,可以通过QTSS.h这个API头文件中定义的请求对象来访问相应的请求信息。举例来说,RTSPRequestInterface类实现了API字典元素,这些元素可以通过API来进行访问。名称是以“Interface”结尾的对象,比如RTSPRequestInterface,RTSPSessionInterface,和QTSServerInterface,则用于实现模块的API。
下面是重要的接口类:
这个目录包含核心服务器(core server)的代码,可以分成三个子系统:
这个目录含有一个工具箱,包括线程管理,数据结构,网络,和文本解析工具。Darwin流媒体服务器及其相关工具通过这些类对类似或者相同的任务进行抽象,以减少重复代码;这些类的封装简化了较高层次的代码;借助这些类还分离了专用于不同平台的代码。下面是对目录下的各个类的简短描述:
QTFileLib
流媒体服务器的一个主要特性就是它能够将索引完成(hinted)的QuickTime电影文件通过RTSP和RTP协议提供给客户。这个目录包含QTFile库的源代码,包括负责解析索引完成的QuickTime文件的代码。服务器的RTPFileModule通过调用QTFile库来从索引过的QuickTime文件中取得数据包和元数据。QTFile库可以解析下面几种文件类型:.mov,.mp4(.mov的一种修改版本),和.3gpp(.mov的一种修改版本)。
APICommonCode这个目录包含与API相关的类的源代码,比如moduletils,或者诸如记录文件的管理这样的公共模块函数。
APIModules这个目录包含流媒体服务器模块目录,每个模块都有一个目录。
RTSPClientLib这个目录包含实现RTSP客户端的源代码,这些代码可以用于连接服务器,只要该连接协议被支持。
RTCPUtilitiesLib这个目录包含解析RTCP请求的源代码。
APIStubLib这个目录包含API的定义和支持文件。
HTTPUtilitiesLib这个目录包含解析HTTP请求的源代码。
二次开发模块添加的要求每个DSS模块必须实现两个函数:一个是Main函数,服务器在启动时将调用这个函数进行必要的初始化。另一个是Dispatch函数,通过实现此函数,服务器可调用DSS模块并完成特定处理。对于编译到服务器里面的模块,其主函数的地址必须传递到服务器的模块Main函数中。
具体实现时,Main函数必须命名为MyModule_Main,其中MyModule是模块的文件名。此函数的实现通常如下所示:
QTSS_Error MyModule_Main(void* inPrivateArgs){ return _stublibrary_main(inPrivateArgs, MyModuleDispatch);每个DSS模块都必须提供一个Dispatch函数。服务器为了特定的目的需要使用某个模块时,是通过调用该模块的Dispatch函数来实现的,调用时必须将任务的名称及相应的参数传递给该函数。在DSS中,使用角色(Role)这个术语来描述特定的任务。Dispatch函数的格式如下所示:
void MyModuleDispatch(QTSS_Role inRole,QTSS_RoleParamPtr inParams);
其中MyModuleDispatch是Dispatch函数的名称;MyModule是模块的文件名;inRole是角色的名称,只有注册了该角色的模块才会被调用;inParams则是一个结构体,可用于传递相应的参数。
DSS对TS流的支持对DSS进行扩展,以实现对TS流的支持,主要涉及三个方面的问题:
首先,RTSP协议需要支持TS over DVB-C;
其次,能够通过UDP协议直接发送TS流;
最后,PTCP的实现,发送的速率需要依据PCR[1](Program ClockReference,即节目时钟参考)实现适当的调节。下面针对这三个方面问题的解决进行简要的说明:
为了让RTSP协议能支持TS传输,需要对标准的RTSP协议做扩展,即在SETUP阶段,终端告诉服务器需要TS传输,服务器会为该终端分配传输资源,并告诉终端相应的参数(包括频点和节目号等)。 当使用扩展后的RTSP协议实现一次TS流点播时,与通常的RTSP交互过程相比,在SETUP阶段有所不同。
为了实现TS流通过Cable下发,关键点是视频服务器能够采用UDP协议将TS流依特定速率发送到播放设备。
采用UDP协议把TS包发送,实现相对比较简单,假定TS包的大小是188字节的,只要遵照一个UDP包不应大于以太网最大传输单元的原则,将7个TS包打包成一个UDP包,发送给播放器设备即可实现。
而依特定的速率发送则要求服务器在发送TS流时,必须保证发送数据的速率与媒体正常播放的速率一致性。考虑到终端会有一个缓冲区来平滑发送数据时可能产生的波动,因此对于发送速率与正常播放速率的一致性的要求并不是绝对的。但发送数据带来的波动要在播放设备许可的范围内,否则无法正常播放。