2,553
社区成员




pSession->DealwithData();
void CRTPTransSession::RecvDataThread(void *pParam)
{
CRTPTransSession* pSession;
MSG msg;
RTPTime delay(0.10);
pSession = (CRTPTransSession*)pParam;
while ( WaitForSingleObject( pSession->m_hStopRecvEvent, 10 ) == WAIT_TIMEOUT )
{
while ( WaitForSingleObject( pSession->m_hRecvDataEvent, 10 ) == WAIT_TIMEOUT )
{
while(PeekMessage(&msg,NULL,NULL,NULL,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
pSession->DealwithData();
}
SetEvent( pSession->m_hStoppedEvent );
}
WPARAM wParam;
LPARAM lParam;
RTPPacket* pack;
ResetEvent( m_hRecvDataEvent );
BeginDataAccess();
// check incoming packets
if (GotoFirstSourceWithData())
{
do
{
while ((pack = GetNextPacket()) != NULL)
{
uint8_t* dataBuffer;
size_t dataLength;
PTR_SEED_HEAD pSeedHead;
// 保存结束数据
dataBuffer = pack->GetPayloadData();
dataLength = pack->GetPayloadLength();
pSeedHead = (PTR_SEED_HEAD)dataBuffer;
if ( pSeedHead->DataType == PACKET_VIDEO )
{
wParam = memcmp( pSeedHead, &m_CommID, sizeof(GUID) );
lParam = (LPARAM)dataBuffer;
SendMessage( m_wMessageWnd, WM_VIDEODATA, wParam, lParam );
}
DeletePacket(pack);
}
} while (GotoNextSourceWithData());
}
EndDataAccess();
char* pSendBuffer;
PTR_SEED_HEAD pSeedHead;
int iSendSize;
iSendSize = uiDataSize + sizeof(SEED_HEAD);
pSendBuffer = (char*)malloc( iSendSize );
memset( pSendBuffer, 0, iSendSize );
pSeedHead = (PTR_SEED_HEAD)pSendBuffer;
memcpy( pSeedHead, &m_CommID, sizeof(GUID) );
pSeedHead->DataLength = uiDataSize;
pSeedHead->DataPostion = m_Sequence++;
pSeedHead->DataType = DataType;
memcpy( pSendBuffer+sizeof(SEED_HEAD), pDataBuffer, uiDataSize );
// 发送数据
m_TransSession.SendPacket( pSendBuffer, iSendSize );
free( pSendBuffer )