EasyDarwin 转发模块QTSSReflectorModule:AddRTPStream添加转发流代码分析
程序员文章站
2022-07-07 11:51:36
...
在分析EasyDarwin转发模块QTSSReflectorModule中,我们找到了转发流的添加函数AddRTPStream。此函数完成一路转发流的添加至转发会话并完成相关设置。
AddRTPStream的参数有
- ReflectorSession* theSession
- QTSS_StandardRTSP_Params* inParams
- QTSS_RTPStreamObject *newStreamPtr
此函数通过回调函数
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()
可以看到最终实现是将要添加的新转发通过RTPSession流构造出来并且通过调用Setup(request,inFlags)函数完成一系列流信息的更新及socket设置
使用的正是AddRTPStream的第二个参数QTSS_StandardRTSP_Params* inParams,此参数为一个结构体如下
结构体作为RTSP参数包含RTSP请求,会话相关信息,这些属性的初始化正如我前面一篇博文中提到的:在RTSPSession的构造和Run方法状态机执行中完成相关初始化。
1 inRTSPSession的初始化在RTSPSession的构造函数中将当前RTSPSession赋值给inRTSPSession
2 inRTSPRequest的初始化通过NEW RTSPRequest传入当前RTSPSession构建fRequest变量,再将fRequest赋值给inRTSPRequest,之后通过fRequest->GetHeaderDictionary()将fRequest的头部赋值给inRTSPHeaders
3 inClientSession的初始化在RTSPSession::Run()中通过调用SetupRequest将fRTPSession赋值给inClientSession