// OnRtpHandler virtual void onReceiveEvent(CRTPData::pointer receiveData, DoRtpHandler::pointer pDoRtpHandler, void * rtpParam) { BOOST_ASSERT (receiveData.get() != 0); if (m_commHandler.get() != NULL) { // ? unsigned long destIp = receiveData->destip(); unsigned int destPort = receiveData->destport(); u_long remoteAddrHash = destIp + destPort; cgcRemote::pointer pCgcRemote; if (!m_mapCgcRemote.find(remoteAddrHash, pCgcRemote, false)) { pCgcRemote = cgcRemote::pointer(new CcgcRemote(destIp, destPort, (CRemoteHandler*)this, m_pDoRtpHandler)); m_mapCgcRemote.insert(remoteAddrHash, pCgcRemote); }else if (pCgcRemote->isInvalidate()) { m_mapCgcRemote.remove(remoteAddrHash); pCgcRemote = cgcRemote::pointer(new CcgcRemote(destIp, destPort, (CRemoteHandler*)this, m_pDoRtpHandler)); m_mapCgcRemote.insert(remoteAddrHash, pCgcRemote); }else { ((CcgcRemote*)pCgcRemote.get())->SetRemote(destIp, destPort); } CRtpRemoteInfo::pointer pEventData = CRtpRemoteInfo::create(CCommEventData::CET_Recv); pEventData->setRemote(pCgcRemote); pEventData->setRemoteId(pCgcRemote->getRemoteId()); pEventData->recvdata(receiveData); m_listMgr.add(pEventData); } }
void CConferenceInfo::doAudioProc(void) { bool bGetTempMember = false; CLockMap<CConferenceMember*, CMemberData::pointer> toSendMembers; CLockList<CMemberData::pointer> memberTemps; while (!m_killed) { CMemberData::pointer memberData; if (bGetTempMember) { if (!memberTemps.front(memberData, true)) { bGetTempMember = false; continue; } }else if (!m_datasa.front(memberData, true)) { #ifdef WIN32 Sleep(20); #else usleep(20000); #endif continue; } CConferenceMember * pDataConferenceMember = (CConferenceMember*)memberData->getRtpParam(); if (pDataConferenceMember->getClosed() || pDataConferenceMember->getAudioHandler() == 0 || pDataConferenceMember->getVideoHandler() == 0) { continue; } BOOST_ASSERT (pDataConferenceMember->getAudioHandler().get() == memberData->getDoRtpHandler().get()); if (toSendMembers.exist(pDataConferenceMember)) { if (toSendMembers.size() < (unsigned int)countAudioMember()) { setToMemberFront(memberTemps, memberData); bGetTempMember = false; continue; } sendAudioFrame(toSendMembers); toSendMembers.clear(false); } toSendMembers.insert(pDataConferenceMember, memberData); bGetTempMember = !memberTemps.empty(); } }
DoRtpHandler::pointer CRtp::startRtp(unsigned short rtpPort) { DoRtpHandler::pointer nullResult; CRtpProxy::pointer rtpProxy = CRtpProxy::create(); CRtpProxy::InitComm(); if (rtpProxy->InitSession(rtpPort) != 0) return nullResult; DoRtpHandler * handler = (DoRtpHandler*)rtpProxy.get(); m_rtpProxy.insert(handler, rtpProxy); return rtpProxy; //return handler; }