QTSS源代码分析.doc
上传人:sy****28 上传时间:2024-09-13 格式:DOC 页数:5 大小:23KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

QTSS源代码分析.doc

QTSS源代码分析.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

QTSS源代码分析1.系统结构和流程图1.1系统结构.图1Apple给的服务器架构1.1.1DSS服务器是一个多线程的架构核心服务器的作用是充当网络客户和服务器模块的接口,其中网络客户使用RTP和RTSP协议来发送请求和接收响应,而服务器模块则负责处理请求和向客户端发送数据包。核心服务器通过创建四种类型的线程来完成自己的工作,具体如下:(1)服务器自己拥有的主线程(MainThread)。这个线程负责检查服务器是否需要关闭,记录状态信息,或者打印统计信息。(2)空闲任务线程(IdleTaskThread)。空闲任务线程管理一个周期性的任务队列。该任务队列有两种类型:超时任务和套接口任务。(3)事件线程(EventThread)。事件线程负责侦听套接口事件,比如收到RTSP请求和RTP数据包,然后把事件传递给任务线程。(4)一个或者多个任务(Task)线程。任务线程从事件线程中接收RTSP和RTP请求,然后把请求传递到恰当的服务器模块进行处理,把数据包发送给客户端。缺省情况下,核心服务器为每一个处理器创建一个任务线程。每一个Task对象都有两个主要的方法:即Signal和Run。服务器调用Signal方法来把一个事件发送给Task对象,而Run方法则用来为Task对象指定处理事件的时机。信号机制使用的是同步信号灯机制而不是互斥锁。1.2服务器对象.图2服务器对象数据模型服务器对象中有一个预置信息字典。服务器内部有一个模块列表,列表中的每一个模块都有一个字典,用于存放自己的预置信息。服务器中还有一个RTP客户会话的列表,每一个会话都可能有一个RTSP会话以及一个或多个RTP媒体流。通过API来遍历服务器中所有活跃的会话和流是有可能的。(1)QTServer是一个核心服务器对象,这个对象的一部分可以通过API和QTSServerInterface基类来进行访问。(2)Dictionary是一种把键值对实现为对象数据的数据存储类。由API定义的所有服务器对象都是从这个基类继承下来的。(3)Module是管理模块的类。每个模块的实例负责装载,初始化,以及执行一个静态或者动态的API模块。(4)RTSP和RTP会话。流的读写是由会话通过一个流对象来管理的。RTSP会话在RTSPSession::Run方法中会调用每个模块中注册过的RTSP角色(Role)。被调用的API模块角色有QTSS_RTSPFilter_Role,QTSS_RTSPRoute_Role,QTSS_RTSPAuthenticate_Role,QTSS_RTSPAuthorize_Role,QTSS_RTSPPreProcessor_Role,QTSS_RTSPRequest_Role,QTSS_RTSPPostProcessor_Role,和QTSS_RTSPSessionClosingRole。RTSP会话还会调用注册为QTSS_RTSPIncomingData_Role角色的模块。RTP会话除了处理数据的读写之外,还调用下面的角色:QTSS_RTPSendPackets_Role,QTSS_RTCPProcess_Role,和QTSS_ClientSessionClosing_Role。图3更详细的服务器模块1.3模块角色表.名称Register(注册)角色Initialize(初始化)角色Shutdown(关闭)角色RereadPreferences(再次读取预置信息)角色ErrorLog(错误纪录)角色RTSPFilter(过滤器)角色RTSPRoute(路由)角色QTSS_ErrorLog_RoleQTSS_RTSPFilter_RoleQTSS_RTSPRoute_Role记录错误信息。修改RTSP请求的内容。把来自客户端的请求路由到恰当的文件夹。RTSPPreprocessor(预处理器)角色RTSPRequest(请求)角色QTSS_RTSPRequest_RoleQTSS_RTSPPreProcessor_Role在服务器处理客户请求之前,先行进行处理。在没有其它角色处理客户请求的情况下,对客户请求进行处理RTSPPostprocessor(后处理器)角色RTPSendPackets(发送数据包)角色ClientSessionClosing(客户会话关闭)角色RTCPProcess(处理)角色OpenFilePreprocess(打开文件预处理)角色OpenFile(打开文件)角色QTSS_OpenFile_Role处理没有被OpenFilePreprocess角色处理过的打开文件请求。AdviseFile(建议文件)角QTSS_AdviseFile_Role在模块(或者服务器)调用QTSS_ClientSessionC