P2P传输的开源库:Libjingle库 综述
转自:http://blog.csdn.net/educast/article/details/39472349
其它:http://www.cnblogs.com/welen/articles/5082070.html
国内现在很多语音聊天工具都是基于TURN方式实现的,包括YY、AK等等,这种方式对于服务器的性能要求很高,而且在用户量增大的时候,服务器压力也会越来越大,用户的语音质量也会受到很大影响。而基于P2P方式实现的语聊服务器,就可以极大的避免这种情况的发生,而且用户的语音体验也会非常好。
通过上文( P2P的原理和常见的实现方式(为libjingle开路) )我们知道,因为NAT设备没有固定标准的原因,导致并不能100%的实现P2P,但是根据现在通用的ICE&STUN的方式,P2P的成功率可以达到90%多。前段时间在找使用这种方法实现的成熟库,最后猛然发现libjingle就在那里。
通过一个多星期的研究,在此记录一下libjingle库的大致情况,如有不妥,希望朋友们可以留言或者邮件(peakflys@gmail.com)指正。
Libjingle综述
Libjingle是一个方便实现P2P传输的开源库,由google公司开发,并与2005年12月15日发布第一个版本,可以粗略的看成是Jingle协议的C++实现库(peakflys注:只是和Jingle协议非常相似,并不完全兼容,区别以后介绍),Google Talk即是基于这个库开发的。通过libjingle我们可以建立一个直通的网络连接(无视中间的NAT、防火墙、中继服务器和代理等),无需特别关心Session建立的细节(加解密、格式等),直接进行数据的交换。它也实现了一些辅助的功能,例如XML的解析和网络代理的处理。我们通过它可以实现如下的应用:
·一个多用户的语音聊天应用
·一个多用户的视频会议应用
·一个多用户的现场音乐、流媒体应用
·一个点到点的文件传输和共享的应用
目前库的版本是0.7.1(2012年10月2日发布),支持Windows和UNIX/Linux,开源许可用的是Berkeley-style,这也就意味着,可以任意的修改和扩展它来更好的满足自己产品的需要。
库的SVN路径:http://libjingle.googlecode.com/svn/trunk/talk
值得注意的是:
① Libjingle库本身的实现依赖于一些第三方库,例如: 语音聊天依赖于Linphone或者GIPS,这取决于使用者的平台
② Libjingle只是一个客户端的实现, relay Server协议和STUN协议(如果需要),还需要自己实现
实现relay Server后的网络结构(STUN使用 网络上现有的,例如Google等公司提供的公有STUN服务器):
实现relay Server和STUN Server后的网络结构:
STUN协议的实现不难,网上也有很多开源的代码实现,关键是需要一些资源的部署(需要两个公网IP)
P2P的关键实现在客户端,通过使用libjingle我们可以快速的构造一个健壮高效的P2P Client,如果仅仅是实现类似于Skype或者QQ那样的两人或者几人聊天,服务器方面实现就非常容易。但是如果要实现大用户参与的语音室,那么我们就得专注于服务器广播包的优化了。
P2P传输的开源库:Libjingle库 综述相关推荐
- P2P传输的开源库 Libjingle库 综述
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 国内现在 ...
- linux tcp server开源,GitHub - 06linux/cellnet: 高性能,简单,方便的开源服务器网络库...
cellnet cellnet是一个高性能,简单,方便的开源服务器网络库 自由混合编码,业务代码无需调整. TCP和html5的应用都可以直接使用cellnet迅速搭建服务器框架. 与Java的Net ...
- 值得推荐的C/C++开源框架和库
原文链接:http://coolshell.info/c/c++/2014/12/13/c-open-project.htm 留档备查,非常强大的C/C++开源项目总结文档- 值得学习的C语言开源项目 ...
- 最好的.NET开源免费ZIP库DotNetZip(.NET组件介绍之三)
在项目开发中,除了对数据的展示更多的就是对文件的相关操作,例如文件的创建和删除,以及文件的压缩和解压.文件压缩的好处有很多,主要就是在文件传输的方面,文件压缩的好处就不需要赘述,因为无论是开发者,还是 ...
- Android开源项目及库整理总结
自己总结的Android开源项目及库. github排名https://github.com/trending, github搜索:https://github.com/search UI Aweso ...
- iOS、mac开源项目及库
1.用来生成 @3x 的图片资源对应的 @2x 和 @1x 版本,只要拖拽高清图到 @3x 的位置上,然后按Ctrl+Shift+A即可自动生成两张低清的补全空位.当然你也可以从 @2x 的图生成 @ ...
- 【 AI 简报 2020930 期】NVIDIA开源C++标准库等热点新闻等你来!
导读:本期为 AI 简报 2020930期,将为您带来过去一周关于 AI 新闻 9 条,其他互联网圈内新闻 5 条,希望对您有所帮助~ 有更好的建议或者意见请在下方留言~ AI 1. AI养猪.智能超 ...
- 嵌入式相关开源项目、库、资料------持续更新中
学习初期最难找的就是找学习资料了,本贴精心汇总了一些嵌入式相关资源,包括但不限于编程语言.单片机.开源项目.物联网.操作系统.Linux.计算机等资源,并且在不断地更新中,致力于打造全网最全的嵌入式资 ...
- PKplayer(P2P播放器)开源P2P播放器综述
国内现在很多直播平台都是基于服务器+CDN方式实现的,包括YY.斗鱼等等,这种方式对于服务器的性能要求很高,而且在用户量增大的时候,服务器压力也会越来越大,用户的体验也会受到很大影响.而基于P2P方式 ...
最新文章
- 李理:为什么说人工智能可以实现?
- Java Swing Awt
- Storyboard更改layer层属性
- ubuntu之iptables
- Android 系统(125)---Android通过Dialer实现暗码启动
- 铁路从未授权任何第三方平台售票服务,各大旅游网站哪来的接口?
- 华为否认今年将推出搭载鸿蒙系统手机;苹果或在 3 年内推出 5G 基带芯片;Node.js 12.12.0 发布 | 极客头条...
- HDU 5608 function(莫比乌斯反演 + 杜教筛)题解
- Spring如何加载xml文件
- jQuery将json对象转为字符串,将json字符串转为对象
- CNVD和CNNVD披露漏洞教程(个人申报)
- 云服务器被攻击了怎么解决?恢复需要多久?
- 使用Picasso加载图片的内存优化实践
- C# 六十二、正则表达式
- python和arduino哪个好_基于Python和Arduino的智能花盆系统
- java版冒险岛_CMS072 冒险岛ONLINE 国服072版本 JAVA 服务端 - 下载 - 搜珍网
- ASCII:字符集与字符编码的起源
- WinForm PictureBox加载图片方法
- Traefik-ingress和Nginx-ingress对比
- 数据分析平台要点梳理