【Darwin学习笔记】之QTSSReflectorModule的Describe消息处理
2017-01-23 20:14
591 查看
对于QTSSReflectorModule里面的Describe消息只处理sdp类型的资源请求,其他类型的比如mov、mp4等资源会跳转到QTSSFileModule里面,其中mp4文件在Darwin源码中点播需要先hint下。如果想在增加多种视频格式那就要对FileModule进行扩展,在我们的项目中就优化了FileModule,实现了对mp4、avi等各种格式的文件的点播支持。后面的章节我们详细讨论。
【转载请注明出处】:http://blog.csdn.net/longlong530
1. 根据路径获取或者创建ReflectorSession,并获取对应请求的sdp文件绝对路径;
[cpp] view
plain copy
print?
//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. 如果已经有一个输出会话附属到这个客户端会话,那么就删除之;
[cpp] view
plain copy
print?
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
1. 根据路径获取或者创建ReflectorSession,并获取对应请求的sdp文件绝对路径;
[cpp] view
plain copy
print?
//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. 如果已经有一个输出会话附属到这个客户端会话,那么就删除之;
[cpp] view
plain copy
print?
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消息中响应给客户端.
相关文章推荐
- 【Darwin学习笔记】之QTSSReflectorModule的Describe消息处理
- 【Darwin学习笔记】之QTSSReflectorModule的Describe消息处理
- 【Darwin学习笔记】之QTSSReflectorModule的Announce消息处理
- 【Darwin学习笔记】之QTSSReflectorModule的Announce消息处理
- 【Darwin学习笔记】之QTSSReflectorModule的Setup消息处理
- 【Darwin学习笔记】之QTSSReflectorModule的Setup消息处理
- 【Darwin学习笔记】之QTSSReflectorModule的Announce消息处理
- 【Darwin学习笔记】之QTSSReflectorModule的Setup消息处理
- Android消息处理学习笔记
- C++ Primer 学习笔记_56_ 类和数据抽象 --消息处理演示示例
- POX学习笔记:POX接收OpenFlow消息的处理流程分析
- Akka学习笔记:Actor消息处理-请求和响应(2)
- OpenCV学习笔记14 OpenCV图像处理模块ImgProc Module. Image Processing(七)
- VC++学习笔记之消息处理机制和窗口过程函数
- struts2的表单验证 ,消息处理学习笔记
- android 多线程 异步消息处理 服务 学习笔记 (六)
- SOAP消息的创建,传递,处理的学习笔记
- Android应用开发学习笔记之多线程与Handler消息处理机制
- Socket网络编程学习笔记(4):TCP消息边界处理
- 【VS2010学习笔记】【函数学习】一(MFC+OpenCV2.4.7读取摄像头之WM_TIMER消息处理函数的添加问题)