國(guó)內(nèi)現(xiàn)在很多語(yǔ)音聊天工具都是基于TURN方式實(shí)現(xiàn)的,包括YY、AK等等,這種方式對(duì)于服務(wù)器的性能要求很高,而且在用戶量增大的時(shí)候,服務(wù)器壓力也會(huì)越來(lái)越大,用戶的語(yǔ)音質(zhì)量也會(huì)受到很大影響。而基于P2P方式實(shí)現(xiàn)的語(yǔ)聊服務(wù)器,就可以極大的避免這種情況的發(fā)生,而且用戶的語(yǔ)音體驗(yàn)也會(huì)非常好。
通過(guò)上文(
P2P的原理和常見(jiàn)的實(shí)現(xiàn)方式(為libjingle開(kāi)路))我們知道,因?yàn)镹AT設(shè)備沒(méi)有固定標(biāo)準(zhǔn)的原因,導(dǎo)致并不能100%的實(shí)現(xiàn)P2P,但是根據(jù)現(xiàn)在通用的ICE&STUN的方式,P2P的成功率可以達(dá)到90%多。前段時(shí)間在找使用這種方法實(shí)現(xiàn)的成熟庫(kù),最后猛然發(fā)現(xiàn)libjingle就在那里。
通過(guò)一個(gè)多星期的研究,在此記錄一下libjingle庫(kù)的大致情況,如有不妥,希望朋友們可以留言或者郵件(peakflys@gmail.com)指正。
Libjingle綜述
Libjingle是一個(gè)方便實(shí)現(xiàn)P2P傳輸?shù)拈_(kāi)源庫(kù),由google公司開(kāi)發(fā),并與2005年12月15日發(fā)布第一個(gè)版本,可以粗略的看成是Jingle協(xié)議的C++實(shí)現(xiàn)庫(kù)(peakflys注:只是和Jingle協(xié)議非常相似,并不完全兼容,區(qū)別以后介紹),Google Talk即是基于這個(gè)庫(kù)開(kāi)發(fā)的。通過(guò)libjingle我們可以建立一個(gè)直通的網(wǎng)絡(luò)連接(無(wú)視中間的NAT、防火墻、中繼服務(wù)器和代理等),無(wú)需特別關(guān)心Session建立的細(xì)節(jié)(加解密、格式等),直接進(jìn)行數(shù)據(jù)的交換。它也實(shí)現(xiàn)了一些輔助的功能,例如XML的解析和網(wǎng)絡(luò)代理的處理。我們通過(guò)它可以實(shí)現(xiàn)如下的應(yīng)用:
·一個(gè)多用戶的語(yǔ)音聊天應(yīng)用
·一個(gè)多用戶的視頻會(huì)議應(yīng)用
·一個(gè)多用戶的現(xiàn)場(chǎng)音樂(lè)、流媒體應(yīng)用
·一個(gè)點(diǎn)到點(diǎn)的文件傳輸和共享的應(yīng)用
目前庫(kù)的版本是0.7.1(2012年10月2日發(fā)布),支持Windows和UNIX/Linux,開(kāi)源許可用的是Berkeley-style,這也就意味著,可以任意的修改和擴(kuò)展它來(lái)更好的滿足自己產(chǎn)品的需要。
庫(kù)的SVN路徑:http://libjingle.googlecode.com/svn/trunk/talk
值得注意的是:
① Libjingle庫(kù)本身的實(shí)現(xiàn)依賴于一些第三方庫(kù),例如: 語(yǔ)音聊天依賴于Linphone或者GIPS,這取決于使用者的平臺(tái)
② Libjingle只是一個(gè)客戶端的實(shí)現(xiàn), relay Server協(xié)議和STUN協(xié)議(如果需要),還需要自己實(shí)現(xiàn)
實(shí)現(xiàn)relay Server后的網(wǎng)絡(luò)結(jié)構(gòu)(STUN使用 網(wǎng)絡(luò)上現(xiàn)有的,例如Google等公司提供的公有STUN服務(wù)器):
現(xiàn)簡(jiǎn)圖.gif)
實(shí)現(xiàn)relay Server和STUN Server后的網(wǎng)絡(luò)結(jié)構(gòu):
現(xiàn)全圖.gif)
STUN協(xié)議的實(shí)現(xiàn)不難,網(wǎng)上也有很多開(kāi)源的代碼實(shí)現(xiàn),關(guān)鍵是需要一些資源的部署(需要兩個(gè)公網(wǎng)IP)
P2P的關(guān)鍵實(shí)現(xiàn)在客戶端,通過(guò)使用libjingle我們可以快速的構(gòu)造一個(gè)健壯高效的P2P Client,如果僅僅是實(shí)現(xiàn)類似于Skype或者QQ那樣的兩人或者幾人聊天,服務(wù)器方面實(shí)現(xiàn)就非常容易。但是如果要實(shí)現(xiàn)大用戶參與的語(yǔ)音室,那么我們就得專注于服務(wù)器廣播包的優(yōu)化了。
by peakflys 16:53:47 Wednesday, January 30, 2013