词条 | Darwin Streaming Server |
释义 | 概要Darwin Streaming Server简称DSS。DSS是Apple公司提供的开源实时流媒体播放服务器程序。整个程序使用C++编写,在设计上遵循高性能,简单,模块化等程序设计原则,务求做到程序高效,可扩充性好。并且DSS是一个开放源代码的,基于标准的流媒体服务器,可以运行在Windows NT和Windows 2000,以及几个UNIX实现上,包括Mac OS X,Linux,FreeBSD,和Solaris操作系统上的。 详解一.主体框架DSS的核心服务器部分是由一个父进程所fork出的一个子进程构成,该父进程就构成了整合流媒体服务器。父进程会等待子进程的退出,如果在运行的时候子进程产生了错误从而退出,那么父进程就会fork出一个新的子进程。可以看出,网络客户和服务器直接的对接是由核心服务器来完成的。网络客户RTSPoverRTP来发送或者接受请求。服务器就通过模块来处理相应的请求并向客户端发送数据包。 核心流媒体服务通过创建四种类型的线程来完成自己的工作,具体如下: 服务器自己拥有的主线程。当服务器需要关闭检查,以及在关闭之前记录相关状态打印相关统计信息等任务处理时,一般都是通过这个线程来完成的。 空闲任务线程。这个任务线程是用来对一个周期任务队列的管理,主要管理两种任务,超时任务和Socket任务。 事件线程。套接口相关事件由事件线程负责监听,当有RTSP请求或者收到RTP数据包时,事件线程就会把这些实践交给任务线程来处理。 任务线程。任务线程会把事件从事件线程中取出,并把处理请求传递到对应的服务器模块进行处理,比如把数据包发送给客户端的模块,在默认情况下,核心服务器会为每个处理器核创建一个任务线程。 二.相关协议介绍如果要使用QuickTime流媒体服务器的编程接口,您应该熟悉该服务器实现的互联网工程组织(Internet Engineering Task Force,简称IETF)协议,列举如下: 实时流媒体协议(Real Time Streaming Protocol,简称RTSP) 实时传输协议(Real Time Transport Protocol,简称RTP) 实时传输控制协议(Real Time Transport Control Protocol,简称RTCP) 对话描述协议(Session Description Protocol,简称SDP) (1).实时流媒体协议 当我们需要创建并且对一个或多个时间的同步且连续的音视频的媒体数据流控制的时候,我们需要用到RTSP协议,也就是实时流协议。RTSP并不是通过连续的数据流来创建并控制媒体流数据的,所以不会产生媒体流与控制流的交叉。用另外一种说法就是,RTSP本身是对流媒体服务器的远程控制。为了时间实时音视频数据的受控(快进,暂停)以及按需分配流,这个协议为我们提供了可实现的框架。实时流控制协议可以用在对多个数据发送的会话,通过UDP或者TCP方式,以及基于RTP发送方式来实现。 (2).实时传输协议 RTP协议是互联网上进行媒体数据的一种传输协议,为了实现一对一或者一对多的同步传输和提供时间信息,我们就会采用RTP协议。由于其典型应用建立在UDP传输之上,但也能在TCP或者ATM等其他协议上使用这个协议。实时传输协议本身只能对确保数据的实时性以及完整性,但并不对传输的顺序以及传输可靠性提供保障。由于是建立在UDP协议之上,所以RTP协议本身并没有提供流量控制或者阻塞控制,所以在一般情况下我们需要使用RTCP来进行这些帮助。由于DSS本身默认的传输协议就是RTP协议,而RTP协议需要通过RTCP协议进行流量控制,这样很大程度上增加了机顶盒也就是解码端的CPU处理压力,因此本设计采用UDP协议直接对TS包进行发送,不使用RTP协议进行数据封装,由于UDP协议也缺少流量控制机制,我们使用PCR值来对发送流量进行控制以防止接收端出现缓存溢出影响播放质量。 (3).实时传输控制协议 实时传输控制协议的作用是管理传输的质量,也就是在进程间传输的同时相互交换信息。在建立RTP会话的时候,参与传输的双方周期性的传输RTCP包,这个数据包中包含了所有相关传输的信息,比如数据包大小,丢失的数据包数量等等。因此通常我们利用RTCP来对传输流量或有效载荷进行动态调整,同时与RTP配合有效的控制传输速率,所以特别适合传送实时数据。 (4).对话描述协议 对话描述协议(SDP)就是用来描述多媒体会话通告,多媒体会话邀请和其他形式的多媒体会话初始化的协议。SDP协议对流媒体描述的具体信息如下:会话名和会话目的,会话发起时间,会话中相关的网络信息,会话发起者的相关信息,媒体类型,传输所使用的协议,流媒体编码格式,传输时所使用的端口号,IP网络地址。因此我们可以通过解析SDP协议来获取我们所需要的一些必要的相关信息。 其中RTSP是非常重要的协议,因此后面会结合原代码做一个详细的分析,这个结果对设计模块有着非常重要的影响,也可以说是本设计的关键。 三.模块分类流媒体服务器使用模块来响应各种请求及完成任务。有三种类型的模块: (1).内容管理模块 媒体源相关的RTSP请求与响应,我们通过内容管理模块来管理,每个模块都用来对客户的需求进行解释并做相应处理,例如读取和解析模块支持的文件,或者请求的网络源信息,并通过RTP等方式响应。 内容管理模块有以下几个: QTSSFileModule, QTSSReflectorModule, QTSSRelayModule, QTSSMP3StreamingModule。 (2).服务器支持模块 服务器支持模块执行服务器数据的收集和记录功能。 服务器模块包括: QTSSErrorLogModule, QTSSAccessLogModule, QTSSWebStatsModule, QTSSWebDebugModule, QTSSAdminModule, QTSSPOSIXFileSystemModule。 (3).访问控制模块 访问控制模块提供鉴权和授权功能,以及操作URL路径提供支持。 访问控制模块包括: QTSSAccessModule, QTSSHomeDirectoryModule, QTSSHttpFileModule, QTSSSpamDefenseModule。 四.DSS服务器调用模块的主要工作流程在DSS中的模块分为动态模块和静态模块,动态模块在服务器启动时会首先装载动态模块,之后才会装载一部分静态模块。我们一般建议将我们自己书写的功能模块编译为动态模块来替换或扩展现有的服务器模块,因为它会被优先装载。在QTSS的模块中必须包含Register这个角色,这也是每个模块所必须支持的角色。在模块被装载之后服务器会调用每个模块的Register角色。在这个角色当中,模块会调用QTSS_AddRole函数来记录这个模块所支持的其他角色。然后服务器就将初始化角色来调用每一个拥有这个角色的模块。这个角色主要是做一些初始化的任务,比如说内存的分配或者对数据结构的初始化等等。在关闭服务器的时候,所有模块的Shutdown角色将被调用,这个角色主要是为了结束工作后处理现场,比如释放内存等等。流媒体服务器主要就是通过这种角色来完成相应任务的。 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。