我用利用jrtplib写了个客户端监听本地两个端口(音频和视频端口)rtp数据的程序。开两个线程分别监听,由于每个线程里是死循环监听,所以cpu消耗会比较大,大约70~80%。我初步认为应该不是开了两个线程的原因,因为开一个线程和两个线程的cpu消耗差不多,应该是死循环的原因。不知道有什么降低cpu消耗的办法。
每个线程中利用如下代码监听端口的rtp数据:
- C/C++ code
do { // 接受RTP数据 status = sess.PollData(); // 检索RTP数据源 if (sess.GotoFirstSourceWithData()) { do { RTPPacket* packet; // 获取RTP数据报 while ((packet = sess.GetNextPacket()) != NULL) { printf("Got packet !\\n"); // 删除RTP数据报 delete packet; } } while (sess.GotoNextSourceWithData()); } } while(1); return 0;}
求教各位大侠出谋划策!
------解决方案--------------------------------------------------------
首先最好使用一个线程监听,这样保证音视频同步更好
使用两个线程不会造成CPU过高,请查找其他原因。
------解决方案--------------------------------------------------------
一般20ms读一次就可以。