国内现在很多语音聊天工具都是基于TURN方式实现的,包括YY、AK等等,这种方式对于服务器的性能要求很高,而且在用户量增大的时候,服务器压力也会越来越大,用户的语音质量也会受到很大影响。而基于P2P方式实现的语聊服务器,就可以极大的避免这种情况的发生,而且用户的语音体验也会非常好。
   通过上文(P2P的原理和常见的实现方式(为libjingle开路))我们知道,因为NAT设备没有固定标准的原因,导致并不能100%的实现P2P,但是根据现在通用的ICE&STUN的方式,P2P的成功率可以达到90%多。前段时间在找使用这种方法实现的成熟库,最后猛然发现libjingle就在那里。
   通过一个多星期的研究,在此记录一下libjingle库的大致情况.

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那样的两人或者几人聊天,服务器方面实现就非常容易。但是如果要实现大用户参与的语音室,那么我们就得专注于服务器广播包的优化了。

 

转自:http://www.cppblog.com/peakflys/archive/2013/01/30/197629.html

Libjingle库 综述的更多相关文章

  1. Libjingle库简介

    原文链接 国内现在很多语音聊天工具都是基于TURN方式实现的,包括YY.AK等等,这种方式对于服务器的性能要求很高,而且在用户量增大的时候,服务器压力也会越来越大,用户的语音质量也会受到很大影响.而基 ...

  2. Libjingle 库

    Libjingle 是google talk voice(语音聊天) 和 p2p interoperability(点对点操作)库,是提供了google talk,p2p文件共享和语音呼叫能力的组件集 ...

  3. libjingle线程机制

    libjingle包装了所有的线程,包括signaling thread,worker thread, 和其它任何线程,用talk_base::Thread来包装.所有的 Thread对象由Threa ...

  4. WebRTC

    WebRTC,名称源自网页实时通信(Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的技术,是谷歌2010年以6820万美元收购Globa ...

  5. WebRTC音视频引擎研究(1)--整体架构分析

    WebRTC技术交流群:234795279 原文地址:http://blog.csdn.net/temotemo/article/details/7530504     1.WebRTC目的     ...

  6. Android IOS WebRTC 音视频开发总结(九)-- webrtc入门001

    下面这篇介绍webrtc的文章不错,我花了大半天翻译了一下. 翻译的时候不是逐字逐句的,而是按照自己的理解翻译的,同时为了便于理解,也加入一些自己组织的语言. 本文主要介绍webrtc的信令,stun ...

  7. WebRTC 音视频开发之路

    早在2014年就通过WebRTC实现了PC客户端的实时视频语音,那时P2P连接的建立使用的WebRTC自带的libjingle库,使用peerconnection的API实现的.后来在做远程桌面,文件 ...

  8. Android WebRTC 音视频开发总结

    www.cnblogs.com/lingyunhu/p/3621057.html 前面介绍了WebRTCDemo的基本结构,本节主要介绍WebRTC音视频服务端的处理,,转载请说明出处(博客园RTC. ...

  9. webrtc教程

    cdsn博客不支持word文件,所以这里显示不完全.可到本人资源中下载word文档: v0.3:http://download.csdn.net/detail/kl222/6961491 v0.1:h ...

随机推荐

  1. excel数据批量导入

    1.  html <form id="form_search" action="@Url.Action("UpLoadFile")" ...

  2. hbase分页应用场景及分页思路与代码实现

    转自:http://www.aboutyun.com/forum.php?mod=viewthread&tid=7030&extra=page=1 可以带着下面问题来阅读1.hbase ...

  3. Android Studio错误提示:Gradle project sync failed. Basic functionality (eg. editing, debugging) will not work properly

    Android Studio中出现提示: Gradle project sync failed. Basic functionality (eg. editing, debugging) will n ...

  4. 两个有序单链表合并成一个有序单链表的java实现

    仅作为备注, 便于自己回顾. import java.util.Arrays; public class MergeSort { public static class LinkedNode<V ...

  5. 传统餐饮O2O支付体系成难题

    传统餐饮O2O支付体系成难题 网的数据化参考,使得门店运营更具科学性. 作为“易淘食”这样的订餐网站,主要依靠与餐厅分成 来获得利润.“根据每个餐厅合作情况不同,每一笔订单我们可获得5%-15%的佣金 ...

  6. 第三百六十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mapping映射管理

    第三百六十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mapping映射管理 1.映射(mapping)介绍 映射:创建索引的时候,可以预先定义字 ...

  7. WebService系列二:使用JDK和CXF框架开发WebService

    一.使用JDK开发WebService 服务端程序创建: 1.新建一个JDK开发webservice的服务端maven项目JDKWebServiceServer 2. 定义一个接口,使用@WebSer ...

  8. QTreeView 限制特定的深度、特定深度下的列 是否可以编辑

    QTreeView 限制特定的深度.特定深度下的列 是否可以编辑 # # C_TreeView # 在QTreeView基础上增加限制特定深度.特定列是否可以编辑 # class C_TreeView ...

  9. HttpURLConnection如何添加请求头?

    1.conn.setRequestProPerty(name,value),两个参数都是字符串.... 2.用httpURLConnection的setRequestProPerty(name,val ...

  10. 仿网易nec首页动画效果

    仿网页nec首页动画效果nec链接:http://nec.netease.com/ 首先,介绍animationanimation检索或设置对象所应用的动画特效.animation由“keyframe ...