织梦CMS - 轻松建站从此开始!

罗索

jrtplib+p2p实验结果

jackyhwei 发布于 2010-09-02 14:01 点击:次 
本来自己写过p2p模式的视频传输,不过都是完全手写的代码,有些地方代码不够规范。听说jrtplib写的很好,前一段时间也分析清楚了,今天拿过来做下测试。
TAG:

本来自己写过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主要的问题就是重组。

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

(sxcong)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201009/10075.html]
本文出处:CSDN博客 作者:sxcong
顶一下
(2)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容