出差一周~
接第一篇:
在 QTSSCallbacks::QTSS_ReflectRTPTrackData 中:
for (; fCurrentModule < numModules; fCurrentModule++)
{
QTSSModule* theModule = QTSServerInterface::GetModule(QTSSModule::kRTSPRelayingDataRole, fCurrentModule);
(void)theModule->CallDispatch(QTSS_RTSPRelayingData_Role, &packetParams);
}
GetMoudle从 sModuleArray中获取QTSSModule对象。
调用CallDispatch 进行数据的分发,具体的数据 packetParams。
(fDispatchFunc)(inRole, inParams) ==QTSSOnDemandRelayModuleDispatch
这个函数主要是一个swicth 语句,根据上面传下来的 QTSS_RTSPRelayingData_Role 调用了 ProcessRelayRTPData 进行具体的流对象处理
RTSPRelaySession* relaySes = (RTSPRelaySession*)inParams->inRTSPSession;
取出 theSession ,theSession中至少包含一组流。
theStream = theSession->GetStreamByIndex(inIndex);
循环取出每一组流,分别调用PushPacket
在pushpacket 中,计算时间并且调用 Bool16 ReflectorSocket::ProcessPacket 送入 theSender->fPacketQueue.EnQueue(&thePacket->fQueueElem);队列中。至此这个线程完成所以工作。
fSockets->GetSocketA() RTP
fSockets->GetSocketB() RTCP