在分析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


本文深入分析了EasyDarwin平台QTSSReflectorModule中的AddRTPStream函数,介绍了如何通过该函数添加转发流至会话并完成配置。详细探讨了函数参数及其初始化过程,并解释了其内部实现机制。
573

被折叠的 条评论
为什么被折叠?



