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

36 篇文章 0 订阅
8 篇文章 0 订阅

              对于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/  这个网站的赵红霞一直在剽窃我的博客,行为及其恶劣!


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值