jrtplib+p2p实验结果

本来自己写过p2p模式的视频传输,不过都是完全手写的代码,有些地方代码不够规范。听说jrtplib写的很好,前一段时间也分析清楚了,今天拿过来做下测试。

使用jrtplib3.7.1的主要工作有两个:

一是发送接收数据需要分片和重组。开始采集双向链表,后来发现处理不够好,内存总出错(好久没研究数据结构了)。后来直接采用分配缓冲,发送数据时标志offset,接收数据 按offset直接填充,非常简单。当然接收时判断一下,有没有重复的数据。代码有时间整理一下传上来。

二是继承RTPSession,写一个响应类,在这里接收和发送。

然后,写一个对话框程序,用 DirectShow调用摄像头, 用SampleGrabber的方式抓数据,然后用libavcodec压成264;用DirectSound采集声音,用Speex压缩。先在内网测试,两台PC(或虚拟机)之间,直接向对方IP和端口发音视频,收到后解码,效果非常好。

到此为止,jprtlib表现的非常完美,另外代码质量也非常。

不过再下一步就有点问题,我用jrtplib再写服务器端,协助双方打洞。比较奇怪的是,客户端和服务器端只不过发送很少的命令字,双方反应都相当慢。看了看jrtplib代码,修改了一下socket接收发送的缓冲也不行。时间有限,没有完全看下去。估计是rtp和rtcp做协调时影响了效率。

简单地总结一下:如果使用jrtplib传送音视频媒体数据,非常理想。但如果使用它用来做服务器处理命令,效率肯定不行(当然修改其源码也能解决问题)。

也有变通的方法:可以自己写一个简单的可靠UDP,专门用来负责命令通信,用它得到对方的IP和端口后,送给jrtplib,然后jrtplib向这个IP端口发送数据就可以了。

不过,这样一样,还不如参考jrtplib源码,自己封装一个更好一些的UDP传输库。

传输音视频,因为数据量大,基本上不需要重传,只要做好丢包控制和同步就行了,所以完全可以不用jrtplib.

jrtplib主要的问题就是重组。

重组算法后面附上,虽然是测试代码,不过也稳定。

 

更多技术文章请参看施昌权的个人网站: http://www.joyvc.cn

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值