欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

EasyDarwin 转发模块QTSSReflectorModule:AddRTPStream添加转发流代码分析

程序员文章站 2022-07-07 11:51:36
...

在分析EasyDarwin转发模块QTSSReflectorModule中,我们找到了转发流的添加函数AddRTPStream。此函数完成一路转发流的添加至转发会话并完成相关设置。

AddRTPStream的参数有

  • ReflectorSession* theSession
  • QTSS_StandardRTSP_Params* inParams
  • QTSS_RTPStreamObject *newStreamPtr

EasyDarwin 转发模块QTSSReflectorModule:AddRTPStream添加转发流代码分析

此函数通过回调函数

QTSS_Error  QTSSCallbacks::QTSS_AddRTPStream(QTSS_ClientSessionObject inClientSession, QTSS_RTSPRequestObject inRTSPRequest, QTSS_RTPStreamObject* outStream, QTSS_AddStreamFlags inFlags)
{
    if ((inClientSession == NULL) || (inRTSPRequest == NULL) ||(outStream == NULL))
        return QTSS_BadArgument;
    return ((RTPSession*)inClientSession)->AddStream((RTSPRequestInterface*)inRTSPRequest, (RTPStream**)outStream, inFlags);
}

最终调用RTPSession类中的流添加函数AddStream()

EasyDarwin 转发模块QTSSReflectorModule:AddRTPStream添加转发流代码分析

可以看到最终实现是将要添加的新转发通过RTPSession流构造出来并且通过调用Setup(request,inFlags)函数完成一系列流信息的更新及socket设置

EasyDarwin 转发模块QTSSReflectorModule:AddRTPStream添加转发流代码分析

使用的正是AddRTPStream的第二个参数QTSS_StandardRTSP_Params* inParams,此参数为一个结构体如下

EasyDarwin 转发模块QTSSReflectorModule:AddRTPStream添加转发流代码分析

结构体作为RTSP参数包含RTSP请求,会话相关信息,这些属性的初始化正如我前面一篇博文中提到的:在RTSPSession的构造和Run方法状态机执行中完成相关初始化。

1 inRTSPSession的初始化在RTSPSession的构造函数中将当前RTSPSession赋值给inRTSPSession

EasyDarwin 转发模块QTSSReflectorModule:AddRTPStream添加转发流代码分析

2 inRTSPRequest的初始化通过NEW RTSPRequest传入当前RTSPSession构建fRequest变量,再将fRequest赋值给inRTSPRequest,之后通过fRequest->GetHeaderDictionary()将fRequest的头部赋值给inRTSPHeaders

EasyDarwin 转发模块QTSSReflectorModule:AddRTPStream添加转发流代码分析

3 inClientSession的初始化在RTSPSession::Run()中通过调用SetupRequest将fRTPSession赋值给inClientSession

EasyDarwin 转发模块QTSSReflectorModule:AddRTPStream添加转发流代码分析

EasyDarwin 转发模块QTSSReflectorModule:AddRTPStream添加转发流代码分析

 

相关标签: 流媒体