EasyDarwin Rtsp流转发(二)

来源:互联网 发布:java思想 编辑:程序博客网 时间:2024/06/07 17:32

出差一周~

接第一篇:

 在  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

 

0 0
原创粉丝点击