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

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

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值