首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

[Help]使用jrtplib接收RTP流,数据包长度感觉有有关问题.

2012-04-18 
[Help]使用jrtplib接收RTP流,数据包长度感觉有问题...C/C++ code发送和接收用的是一个rtpSession对象,发送

[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;}


[解决办法]
发送数据的时候,结束符是不是没有带呀。

热点排行