Libjingle库 综述

国内现在很多语音聊天工具都是基于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

时间: 2024-08-10 19:18:31

Libjingle库 综述的相关文章

Libjingle 库

Libjingle 是google talk voice(语音聊天) 和 p2p interoperability(点对点操作)库,是提供了google talk,p2p文件共享和语音呼叫能力的组件集,libjingle包中包含了jingle和jingle语音以及两个被xmpp标准提议的扩展. About libjingle (关于libjingle) Libjingle 是一个开源包,用C++编写,我们可以利用包里的一些应用例子来构建自己的p2p应用.Libjingle库实现了"创建网络链接&

WebRTC 视频对话

今天聊一下WebRTC.很多开发者,可能会觉得有些陌生,或者直接感觉繁杂.因为WebRTC在iOS上的应用,只是编译都让人很是头痛.这些话,到此为止,以防让了解者失去信心.我们只传播正能量,再多的困难都是可以解决的.本博客会不断更新增加内容,不要怕长.首先看一下定义.WebRTC,名称源自网页实时通信(WebReal-TimeCommunication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的技术,是谷歌2010年以6820万美元收购GlobalIPSolutions公司而获得的

webrtc教程

cdsn博客不支持word文件,所以这里显示不完全.可到本人资源中下载word文档: v0.3:http://download.csdn.net/detail/kl222/6961491 v0.1:http://download.csdn.net/detail/kl222/6677635  下载完后评论,可以返还你的积分.此文档还在完善中,欢迎大家交流,共同完善.    Webrtc  教程 版本0.3(2014年2月) 康林 ([email protected]) 本文博客地址:http://

WebRTC 音视频开发之路

早在2014年就通过WebRTC实现了PC客户端的实时视频语音,那时P2P连接的建立使用的WebRTC自带的libjingle库,使用peerconnection的API实现的.后来在做远程桌面,文件传输需要点对点建立连接,对libjingle库研究了一段时间,发现了几个问题: 1.libjingle库底层使用xmpp协议实现进行通道的建立,但是我们的客户端不支持xmpp协议: 2.libjingle库庞大,使得改写困难. 3.稳定性问题. 之后基于UDT库实现了一套p2p传输库,使用也非常方便

Ubuntu 下编译libjingle-0.6.14 (转载)

转自:http://blog.csdn.net/feifei454498130/article/details/8197103 添加依赖库: sudo apt-get install build-essential expat libexpat1-dev libssl-dev pkg-config sudo apt-get install libssl-dev sudo apt-get install libpulse-dev sudo apt-get install libdbus-glib-

Android WebRTC 音视频开发总结

www.cnblogs.com/lingyunhu/p/3621057.html 前面介绍了WebRTCDemo的基本结构,本节主要介绍WebRTC音视频服务端的处理,,转载请说明出处(博客园RTC.Blacker). 通过前面的例子我们知道运行WebRTCDemo即可看到P2P的效果,实际应用中我们不可能让用户自己去里面设置对方的IP和音视频端口, 而且即使设置了对方的IP和端口也不一定能运行起来,因为P2P如果双方不在同一个网段则还需穿透NAT,那服务端具体该如何部署呢? 1.信令服务: 想

Android IOS WebRTC 音视频开发总结(九)

下面这篇介绍webrtc的文章不错,我花了大半天翻译了一下. 翻译的时候不是逐字逐句的,而是按照自己的理解翻译的,同时为了便于理解,也加入一些自己组织的语言. 本文主要介绍webrtc的信令,stun,turn (转载请说明出处: http://www.cnblogs.com/lingyunhu). 英文来自:http://www.html5rocks.com/en/tutorials/webrtc/infrastructure/ WEBRTC支持点对点通讯,但是WEBRTC仍然需要服务端,因为

Android某lib不被编译的奇怪问题

由于项目需要实现在线音视频交互,引入了版本较新的libjingle库,一番编码之后,编译通过,可是运行时就坑爹了,这个包里的类统统找不到,反编译了apk之后发现原来这个库里的内容根本没被编译进classes.dex中.这是为什么呢?走了一番弯路之后发现,原来是这个包的编译jdk为1.7.而我的eclipse编译jdk为1.6.低版本jdk编译的工程无法集成高版本jdk编译的库.看来只能升级eclipse和adt来解决了. 为什么会出现上述情况?大概研究了一下.不同版本jdk编译出来的class文

视频流网络透传分析

最近在翻看以前写的文档,把这篇word文档复制下来,保留一下. 序号 版本 作者 描述 1 V0.1 YJ.Yan 初始版本 2 V0.2 YJ.Yan 添加方案细节描述以及可参考方案 1.      基本概念 a)       NAT 网络地址转换(NAT,Network AddressTranslation)属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术,它被广泛应用于各种类型Internet接入方式和各种类型的网络中.原因很简单,NAT不仅完美地解决了IP