【Darwin学习笔记】之QTSSReflectorModule的Describe消息处理

对于QTSSReflectorModule里面的Describe消息只处理sdp类型的资源请求,其他类型的比如mov、mp4等资源会跳转到QTSSFileModule里面,其中mp4文件在Darwin源码中点播需要先hint下。如果想在增加多种视频格式那就要对FileModule进行扩展,在我们的项目中就优化了FileModule,实现了对mp4、avi等各种格式的文件的点播支持。后面的章节我们详细讨论。

【转载请注明出处】:http://blog.csdn.net/longlong530

1. 根据路径获取或者创建ReflectorSession,并获取对应请求的sdp文件绝对路径;

//eg theFilepath = "D:\MSU\Movies\141212100702059760.sdp"
char *theFilepath = NULL;
ReflectorSession* theSession = DoSessionSetup(inParams, qtssRTSPReqFilePath, false, NULL, &theFilepath );
OSCharArrayDeleter tempFilePath(theFilepath);

DoSessionSetup方法主要是调用FindOrCreateSession来对哈希表sSessionMap进行查询。

a) 没有根据inPath路径在哈希表sSessionMap中找到对应的ReflectorSession,那么就new一个.

b) 如果找到了就直接获取theSession = (ReflectorSession*)theSessionRef->GetObject();

最后调用SetupReflectorSession()方法

2. 如果已经有一个输出会话附属到这个客户端会话,那么就删除之;

if (theErr == QTSS_NoErr && theOutput != NULL)
    {
		RemoveOutput(*theOutput, (*theOutput)->GetReflectorSession(), false);
        RTPSessionOutput* theOutput = NULL;
        (void)QTSS_SetValue(inParams->inClientSession, sOutputAttr, 0, &theOutput, sizeof(theOutput));
    }

3. 读取请求对应的sdp文件,将文件内容解析到StrPtrLen theFileData中;

4. 将连接信息清空,包括ip地址、端口号,如下面示例,同时增加一个字段a=control:*

操作前:c=IN IP4 192.168.10.177

操作后:c=IN IP4 0.0.0.0

操作前:m=video 20094 RTP/AVP 96

操作后:m=video 0 RTP/AVP

5. 检测sdp是否包含v、s、t、o这些字段,如果没有就构造补充进去;

6. SetSDPBuffer会调用SDP的解析方法paser(),在该方法内对SDP解析的同时,分析出该SDP是否合法,赋予属性fValid;

7. 将sdp的会话信息、媒体信息附在RTSP消息中响应给客户端.

【转载请注明出处】:http://blog.csdn.net/longlong530

声明:http://94it.net/  这个网站的赵红霞一直在剽窃我的博客,行为及其恶劣!

时间: 2024-10-21 08:31:53

【Darwin学习笔记】之QTSSReflectorModule的Describe消息处理的相关文章

C++ Primer 学习笔记_56_类与数据抽象 --消息处理示例

复制控制 --消息处理示例 说明: 有些类为了做一些工作需要对复制进行控制.为了给出这样的例子,我们将概略定义两个类,这两个类可用于邮件处理应用程序.Message类和 Folder类分别表示电子邮件(或其他)消息和消息所出现的目录,一个给定消息可以出现在多个目录中.Message上有 save和 remove操作,用于在指定Folder中保存或删除该消息. 数据结构: 对每个Message,我们并不是在每个Folder中都存放一个副本,而是使每个Message保存一个指针集(set),set中

【Darwin学习笔记】之QTSSReflectorModule的Announce消息处理

RTSP Announce命令是数据源向Darwin服务端主动发起的上报本地媒体sdp信息的命令,在Darwin中处理该命令的函数为QTSSReflectorModule模块的DoAnnounce()函数,下面对该函数的进行剖析: [转载请注明出处]:http://blog.csdn.net/longlong530 1. 判断sAnnounceEnabled是否开启,由以下配置项确定,默认为true <PREF NAME="enable_broadcast_announce" T

【Darwin学习笔记】之QTSSReflectorModule的Setup消息处理

Setup消息进入到DoSetup函数单独处理,处理流程如下: [转载请注明出处]:http://blog.csdn.net/longlong530 1. 根据关键字qtssRTSPReqTransportMode判断是否为推模式,具体isPush值由Setup请求中的mode值有关,mode="receive" || mode="record"表示isPush为true.对应的解析函数为:void RTSPRequest::ParseModeSubHeader(S

【Darwin学习笔记】之RTSPSession

今天详细的看了下RTSPSession的会话处理代码,该模块主要是Run方法内对会话的状态机进行管理,实现对RTSP会话的处理,我以点播Movie文件夹下的视频文件为例,深入的学习了(Describe.Setup.Play的点播流程),并按照状态机的处理顺序对他们进行一一解析,如下: [转载请注明出处]:http://blog.csdn.net/longlong530 1. 状态机 kReadingFirstRequest 通过fInputStream.ReadRequest()调用Sessio

【Darwin学习笔记】之TaskThread

[转载请注明出处]:http://blog.csdn.net/longlong530 学习TaskThread主要有三个类要关注: TaskTreadPool: 任务线程池 TaskThread:任务线程 Task: 任务 1. TaskThreadPool Darwin运行着一个或者多个任务(Task)线程,并将他们统一在线程池TaskThreadPool中管理.任务线程从事件线程中接收RTSP和RTP请求,然后把请求传递到恰当的服务器模块进行处理,把数据包发送给客户端. 缺省情况下,核心服务

【Darwin学习笔记】之RTSP连接监听初始化

网上有很多大侠已经对Darwin做了详细的剖析,在下仅本着积累经验的目的,将Darwin的学习过程记录下来,同时与网友们交流学习,今天先来分析下Darwin如果根据配置文件监听RTSP连接的流程. 1. Darwin系统初始化,Bool16 QTSServer::Initialize(.....) 2. QTSServer::CreateListeners(...)根据本地xml配置文件中的地址和端口进行监听的建立,主要有两个配置项: <PREF NAME="bind_ip_addr&qu

【Darwin学习笔记】之EventThread

[转载请注明出处]:http://blog.csdn.net/longlong530 EventThread负责侦听Darwin系统的Socket事件,包括以下两类, 对于两类事件是分别如何处理的,我们从头开始分析. a)   建立新的RTSP连接请求事件 b)   已有RTSP连接上的RTSP请求消息事件 一.  EventThread 的创建 RunServer.cpp 中StartServer函数初始化调用了 Socket::Initialize(),在该函数内即创建了EventThrea

《R语言实战》学习笔记seventh

由于在准备软考中级数据库系统工程师外加巩固SQL Server 2012,所以拖了好久一直没继续学R 下去 所以今天重开R 的战事 这次是关于基本统计分析的内容,即关于用于生成基本的描述性统计量和推断统计量的R 函数 首先,将着眼于定量变量的位置和尺度的衡量方式 然后将是生成类别型变量的频数表和列联表的方法(以及连带的卡方检验) 接下来将考察连续型和有序型变量相关系数的多种形式 最后转而通过参数检验(t检验)和非参数检验(Mann-Whitney U检验.Kruskal-Wallis检验)方法研

&lt;老友记&gt;学习笔记

这是六个人的故事,从不服输而又有强烈控制欲的monica,未经世事的千金大小姐rachel,正直又专情的ross,幽默风趣的chandle,古怪迷人的phoebe,花心天真的joey——六个好友之间的情路坎坷,事业成败和生活中的喜怒哀乐,无时无刻不牵动着彼此的心,而正是正平凡的点点滴滴,却成为最令人感动与留恋的东西. 人物:1.瑞秋•格林(RACHEL GREENE)由珍妮佛•安妮斯顿(Jennifer Aniston)扮演 瑞秋是莫妮卡的高中同学,在与牙医未婚夫的婚礼上脱逃至莫妮卡处. 2.罗