使用JRTPLIB接收数据,,通常的做法是:
sess.BeginDataAccess();if (sess.GotoFirstSourceWithData()){do{RTPPacket *pack;while ((pack = sess.GetNextPacket()) != NULL){//处理数据sess.DeletePacket(pack);}} while (sess.GotoNextSourceWithData());}
sess.EndDataAccess();
而RTPSession提供了一个虚函数OnRTPPacket, 可以更加方便快捷地接收到数据包:
virtual void OnRTPPacket(RTPPacket *pack,const RTPTime &receivetime,const RTPAddress *senderaddress)
满以为通过重载它可以轻松替代之前的接收方法, 并且简单、高效, 经过一番折腾, 发现并不那么回事,
1、重载OnRTPPacket替代之前的接收方法, 会出现严重的内存泄漏, 因为数据处理完后, 无法调用DeletePacket
2、即便能通过修改部分源码, 释放内存, 这种方式也不可取, 因为OnRTPPacket收到的数据包是即时的, 没经过排序的
希望能帮助到有同样想法的朋友!
版权声明:本文为博主原创文章,未经博主允许不得转载。
你让我尝到了每时每刻想你的疼苦,