关于JRTPLIB RTPSession OnRTPPacket

使用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收到的数据包是即时的, 没经过排序的

希望能帮助到有同样想法的朋友!

版权声明:本文为博主原创文章,未经博主允许不得转载。

你让我尝到了每时每刻想你的疼苦,

关于JRTPLIB RTPSession OnRTPPacket

相关文章:

你感兴趣的文章:

标签云: