[Help]使用jrtplib接收RTP流,数据包长度感觉有有关问题.
[Help]使用jrtplib接收RTP流,数据包长度感觉有问题...
------解决方案--------------------
发送数据的时候,结束符是不是没有带呀。
- C/C++ code
发送和接收用的是一个rtpSession对象,发送RTP包没有问题,但是接收有问题. DWORD WINAPI RecvRtpThread(LPVOID param) { int len; RTPPacket *pack; while(1) { m_rtpAsession.PollData(); //接收RTP数据 if (m_rtpAsession.GotoFirstSourceWithData()) //检索RTP数据源 { do //递归搜索RTP包中的数据 { while ((pack = m_rtpAsession.GetNextPacket()) != NULL) { len = 0; //每个包的长度都是: len =4423856 //感觉数据包长度有问题... len = pack->GetPayloadLength(); if(len > SIZE_AUDIO_PACKED2 /*|| pack->GetExtendedSequenceNumber() <= seq*/) continue; char* buf = new char[SIZE_AUDIO_PACKED2]; memcpy(buf, (char*)pack->GetPayload(), len); //memcpy(&buf,(char*)pack->GetPayload(),len); EnterCriticalSection(&cs_cli_Info); { va_g729a_init_decoder(); char *pin = new char[SIZE_AUDIO_PACKED2]; char *pout = new char[SIZE_AUDIO_FRAME2]; memset(pin, 0, SIZE_AUDIO_PACKED2); //60 memset(pout, 0, SIZE_AUDIO_FRAME2); //960 memcpy(pin, buf, len); va_g729a_decoder((BYTE*)pin, (short*)(pout),0); //使用G729库解码 //va_g729a_decoder((BYTE*)pin+10, (short*)(pout+160),0); char *str=new char[SIZE_AUDIO_FRAME2]; //960字节 if(str==NULL) { str=new char[SIZE_AUDIO_FRAME2]; } memset(str,0,SIZE_AUDIO_FRAME2); memcpy(str, pout,SIZE_AUDIO_FRAME2); EnterCriticalSection(&cs_play_queue); wave_play_Data.push(str); //需要播放的数据块, 放入消息队列中 LeaveCriticalSection(&cs_play_queue); delete []pout; delete []pin; } LeaveCriticalSection(&cs_cli_Info); delete pack; } //while ((pack = m_rtpAsession.GetNextPacket()) != NULL) } while (m_rtpAsession.GotoNextSourceWithData()); } //if (m_rtpAsession.GotoFirstSourceWithData()) Sleep(1); } //while(1) return 0; }
------解决方案--------------------
发送数据的时候,结束符是不是没有带呀。