转自: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库 综述相关推荐

  1. P2P传输的开源库 Libjingle库 综述

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 国内现在 ...

  2. linux tcp server开源,GitHub - 06linux/cellnet: 高性能,简单,方便的开源服务器网络库...

    cellnet cellnet是一个高性能,简单,方便的开源服务器网络库 自由混合编码,业务代码无需调整. TCP和html5的应用都可以直接使用cellnet迅速搭建服务器框架. 与Java的Net ...

  3. 值得推荐的C/C++开源框架和库

    原文链接:http://coolshell.info/c/c++/2014/12/13/c-open-project.htm 留档备查,非常强大的C/C++开源项目总结文档- 值得学习的C语言开源项目 ...

  4. 最好的.NET开源免费ZIP库DotNetZip(.NET组件介绍之三)

    在项目开发中,除了对数据的展示更多的就是对文件的相关操作,例如文件的创建和删除,以及文件的压缩和解压.文件压缩的好处有很多,主要就是在文件传输的方面,文件压缩的好处就不需要赘述,因为无论是开发者,还是 ...

  5. Android开源项目及库整理总结

    自己总结的Android开源项目及库. github排名https://github.com/trending, github搜索:https://github.com/search UI Aweso ...

  6. iOS、mac开源项目及库

    1.用来生成 @3x 的图片资源对应的 @2x 和 @1x 版本,只要拖拽高清图到 @3x 的位置上,然后按Ctrl+Shift+A即可自动生成两张低清的补全空位.当然你也可以从 @2x 的图生成 @ ...

  7. 【 AI 简报 2020930 期】NVIDIA开源C++标准库等热点新闻等你来!

    导读:本期为 AI 简报 2020930期,将为您带来过去一周关于 AI 新闻 9 条,其他互联网圈内新闻 5 条,希望对您有所帮助~ 有更好的建议或者意见请在下方留言~ AI 1. AI养猪.智能超 ...

  8. 嵌入式相关开源项目、库、资料------持续更新中

    学习初期最难找的就是找学习资料了,本贴精心汇总了一些嵌入式相关资源,包括但不限于编程语言.单片机.开源项目.物联网.操作系统.Linux.计算机等资源,并且在不断地更新中,致力于打造全网最全的嵌入式资 ...

  9. PKplayer(P2P播放器)开源P2P播放器综述

    国内现在很多直播平台都是基于服务器+CDN方式实现的,包括YY.斗鱼等等,这种方式对于服务器的性能要求很高,而且在用户量增大的时候,服务器压力也会越来越大,用户的体验也会受到很大影响.而基于P2P方式 ...

最新文章

  1. 李理:为什么说人工智能可以实现?
  2. Java Swing Awt
  3. Storyboard更改layer层属性
  4. ubuntu之iptables
  5. Android 系统(125)---Android通过Dialer实现暗码启动
  6. 铁路从未授权任何第三方平台售票服务,各大旅游网站哪来的接口?
  7. 华为否认今年将推出搭载鸿蒙系统手机;苹果或在 3 年内推出 5G 基带芯片;Node.js 12.12.0 发布 | 极客头条...
  8. HDU 5608 function(莫比乌斯反演 + 杜教筛)题解
  9. Spring如何加载xml文件
  10. jQuery将json对象转为字符串,将json字符串转为对象
  11. CNVD和CNNVD披露漏洞教程(个人申报)
  12. 云服务器被攻击了怎么解决?恢复需要多久?
  13. 使用Picasso加载图片的内存优化实践
  14. C# 六十二、正则表达式
  15. python和arduino哪个好_基于Python和Arduino的智能花盆系统
  16. java版冒险岛_CMS072 冒险岛ONLINE 国服072版本 JAVA 服务端 - 下载 - 搜珍网
  17. ASCII:字符集与字符编码的起源
  18. WinForm PictureBox加载图片方法
  19. Traefik-ingress和Nginx-ingress对比
  20. 数据分析平台要点梳理

热门文章

  1. DBCO-NHS Ester,1353016-71-3,二苯并环辛炔活性酯
  2. 2022-2028全球与中国非PVC静脉注射袋市场现状及未来发展趋势
  3. Ipad2发布会最大的惊喜是乔布斯的出现
  4. php-55处理异常,MYSQL无法连接-提示10055异常
  5. pc版最终幻想测试软件,最终幻想15配置检测工具
  6. MPU9250的MPL移植_HAL库(以STM32F103为主控)
  7. Java 格式化 XML
  8. Wayland入门11:shell unstable协议
  9. c语言数据类型高低级
  10. linux里find用法,Linux中find命令基本使用方法