IM音視頻技術(shù)方案建議

環(huán)信即時通訊平臺提供了基于互聯(lián)網(wǎng)和移動終端的實(shí)時語音吞彤、實(shí)時視頻等通訊能力。環(huán)信將移動即時通訊能力通過API和客戶端SDK包的方式提供給企業(yè)浦辨,幫助企業(yè)在自己的產(chǎn)品中便捷滔悉、快速的實(shí)現(xiàn)通訊和社交功能。
2.1 基礎(chǔ)功能
2.1.1 視頻能力
環(huán)信支持基于IP網(wǎng)絡(luò)的點(diǎn)對點(diǎn)實(shí)時語音和視頻心俗。通過多種技術(shù)包括自動增益控制傲武、回聲消除蓉驹、抖動控制、丟包策略揪利、動態(tài)帶寬自適應(yīng)等增強(qiáng)算法态兴,保證高質(zhì)量實(shí)時語音和視頻體驗(yàn)。
對于主流的多版本安卓手機(jī)平臺和iOS手機(jī)平臺疟位,環(huán)信SDK都做了適配和優(yōu)化瞻润,保障音視頻在主流平臺上的流暢性和實(shí)時性,可以根據(jù)手機(jī)硬件和網(wǎng)絡(luò)帶寬情況智能調(diào)整語音帶寬献汗,并使用先進(jìn)的丟包算法適應(yīng)低帶寬需求敢订。語音的編解碼中加入了降噪算法,并通過語音活躍檢測來大大減少通話靜默期的數(shù)據(jù)流量罢吃,實(shí)測的實(shí)時語音每分鐘流量低于200K楚午。視頻處理則采用多線程實(shí)現(xiàn),在低端CPU的手機(jī)上也能確保實(shí)時采集編碼尿招、實(shí)時傳輸和實(shí)時解碼矾柜,保障視頻在主流平臺上的流暢性和實(shí)時性。通過優(yōu)化的碼率控制算法就谜,能根據(jù)具體網(wǎng)絡(luò)環(huán)境選擇最優(yōu)的視頻碼率和幀率怪蔑。

圖2-1. 實(shí)時音視頻通話

環(huán)信支持的實(shí)時音頻特性:

? 基于IP網(wǎng)絡(luò)的點(diǎn)對點(diǎn)實(shí)時語音。在P2P無法連接時丧荐,通過服務(wù)器轉(zhuǎn)發(fā)進(jìn)行連接缆瓣。
? 音頻編碼采用OPUS,雙向語音流量低至170k bytes/min虹统。
? 背景噪音及回音消除技術(shù)弓坞,還原清晰語音。
? 動態(tài)語音檢測车荔。
? 自動增益控制渡冻,防止聲音忽大忽小。
? 自適應(yīng)抖動控制算法以及語音包丟失隱藏算法提高音頻服務(wù)質(zhì)量忧便。

環(huán)信支持的實(shí)時視頻特性:
? 基于IP網(wǎng)絡(luò)的點(diǎn)對點(diǎn)實(shí)時視頻族吻。在P2P打不通時,通過服務(wù)器轉(zhuǎn)發(fā)數(shù)據(jù)珠增。
? 視頻編碼采用H.264超歌,雙向流量2.5~3M bytes/min。
? 后續(xù)版本支持VP8切平。
? 動態(tài)帶寬調(diào)整握础,先進(jìn)丟包恢復(fù)算法,適應(yīng)低帶寬需求悴品。
? 通過設(shè)置視頻緩沖buffer和丟包重傳機(jī)制來提高視頻服務(wù)質(zhì)量禀综。
? 實(shí)時多線程編解碼简烘,極速視頻不卡頓。
? 先進(jìn)的QoS算法定枷,即使弱網(wǎng)絡(luò)下孤澎,依舊保證視頻質(zhì)量。
2.1.2 抗丟包能力
純IP音視頻的傳輸很難避免丟包情況的發(fā)生欠窒,丟包的原因有很多覆旭,比如WiFi或移動網(wǎng)絡(luò)的無線信道干擾、高峰時期路由器擁塞岖妄、移動設(shè)備性能不足等型将。當(dāng)一個媒體數(shù)據(jù)包在網(wǎng)絡(luò)上傳輸?shù)臅r間過長,在需要播放時不能及時到達(dá)荐虐,即使收到也被認(rèn)為丟包了七兜。環(huán)信實(shí)時音視頻針對以上問題進(jìn)行了優(yōu)化,使用了丟包檢測福扬、重傳腕铸、FEC糾錯和PLC丟包掩藏技術(shù)。
2.1.2.1 丟包檢測
每個數(shù)據(jù)包都帶有一個序號铛碑,序號是遞增的狠裹,接收端檢查接收到的包序號是否連續(xù)來判斷是否丟包。
2.1.2.2 重傳
當(dāng)接收方檢測到丟包時汽烦,發(fā)送nack包去請求重傳指定的一個或多個包涛菠。
2.1.2.3 FEC糾錯
在媒體數(shù)據(jù)包的基礎(chǔ)上,再發(fā)送冗余FEC糾錯包撇吞,在丟包率不是很高的情況下碗暗,接收方可以恢復(fù)被丟棄的媒體數(shù)據(jù)包。
2.1.2.4 PLC丟包掩藏
利用人耳的隱蔽特性梢夯,在接收端所收到語音信息中,選取一段或幾段按照一定的邏輯仿照出已經(jīng)丟失了的語音包晴圾。主要有靜音或噪聲置換法颂砸、插值法等。
2.1.3 抗抖動能力

抖動用來表示數(shù)據(jù)包延遲的變化程度死姚,即發(fā)送包間隔和接收包間隔的差值的變化量人乓,見圖中綠色長度減去藍(lán)色長度。抖動使得媒體數(shù)據(jù)接收間隔不均勻都毒,播放的畫面或聲音顫抖色罚;如果視頻和音頻的抖動不一致,會造成同步的丟失账劲〈粱ぃ抗抖動一般是設(shè)置抖動緩沖區(qū)金抡,減小甚至消除抖動的影響,但引入了額外的延遲腌且。為了最小化延遲梗肝,環(huán)信采用了自適應(yīng)抖動緩沖技術(shù),在通話過程中動態(tài)檢測網(wǎng)絡(luò)抖動情況铺董。當(dāng)抖動變大時巫击,增加緩沖區(qū)的長度;當(dāng)抖動變小時減少緩沖區(qū)的長度精续。自適應(yīng)抖動緩沖技術(shù)兼顧了抗抖動和低延遲坝锰,在實(shí)際環(huán)境中有非常好的效果。
2.1.4 自適應(yīng)帶寬估計(jì)
網(wǎng)絡(luò)的狀態(tài)是動態(tài)變化的重付,帶寬顷级、丟包、延時和抖動指標(biāo)是不斷波動的堪夭。為最大化利用網(wǎng)絡(luò)的帶寬愕把,保障視頻和語音的流暢播放,環(huán)信在通話過程中對網(wǎng)絡(luò)狀態(tài)進(jìn)行了自動實(shí)時檢測和估計(jì)森爽,根據(jù)估計(jì)出來的參數(shù)指標(biāo)來調(diào)整發(fā)送端編解碼參數(shù)恨豁。為確保帶寬估計(jì)的準(zhǔn)確性和實(shí)時性,使用了雙端估計(jì):在發(fā)送端根據(jù)數(shù)據(jù)包和探測包的RTT變化來估計(jì)爬迟;在接收端使用抖動和丟包參數(shù)作為自適應(yīng)濾波器的輸入橘蜜,動態(tài)估計(jì)網(wǎng)絡(luò)帶寬并反饋給發(fā)送端。發(fā)送端根據(jù)網(wǎng)絡(luò)狀態(tài)動態(tài)調(diào)整視頻碼率付呕、分辨率和幀率:當(dāng)網(wǎng)絡(luò)情況良好帶寬充足時计福,使用高碼率高分辨率高幀率,視頻和語音清晰流暢徽职;當(dāng)網(wǎng)絡(luò)不好帶寬變小時象颖,降低碼率和分辨率,在一定程度內(nèi)犧牲清晰度姆钉、保障流暢度说订;當(dāng)網(wǎng)絡(luò)進(jìn)一步惡化時可以再適當(dāng)降低幀率;當(dāng)網(wǎng)絡(luò)再進(jìn)一步惡化時停止發(fā)送視頻保障語音的傳輸潮瓶。
2.1.5 P2P傳輸
P2P就是點(diǎn)對點(diǎn)陶冷,通話雙方直接互相發(fā)送媒體數(shù)據(jù),不經(jīng)過服務(wù)器的轉(zhuǎn)發(fā)毯辅。P2P技術(shù)是必不可少的音視頻技術(shù)埂伦,它大大降低了服務(wù)器的負(fù)載和減少了端到端的延遲。P2P使用了NAT穿越技術(shù)(俗稱P2P打洞)思恐。通常通話雙方都是在不同局域網(wǎng)里沾谜,不能直接發(fā)送數(shù)據(jù)膊毁,需要服務(wù)器的協(xié)助才能實(shí)現(xiàn)P2P。
2.1.6 語音自動增益AGC
由于講話者個體类早、環(huán)境媚媒、設(shè)備麥克風(fēng)的不同,比如有人聲音大涩僻,有人聲音小缭召,有人喜歡靠近話筒說話,有喜歡離話筒遠(yuǎn)一些逆日,加上不同設(shè)備麥克風(fēng)之間的差異嵌巷,不加處理會導(dǎo)致收聽者感覺對方語音音量忽大忽小,聽覺上會非常不舒服室抽。
AGC可以針對上述這些情況自動給與“增益補(bǔ)償”搪哪。簡單的說,當(dāng)講話者的聲音太大的時候坪圾,AGC會自動降低增益晓折,從而使語音維持在一個恒定的音量上;反之兽泄,講話者的聲音太小漓概,AGC會自動提高增益,以確保系統(tǒng)仍然維持在恒定的音量病梢。在音頻系統(tǒng)中胃珍,AGC可以根據(jù)“要求”對聲音信號自動給與“增益補(bǔ)償”。
2.1.7 聲學(xué)回聲消除
回聲通常出現(xiàn)在通話中一方打開了揚(yáng)聲器外放蜓陌,揚(yáng)聲器播放的聲音會被麥克風(fēng)采集并發(fā)送給對方觅彰,這樣對方就會聽到了自己的聲音(即回聲)。如果不對回聲進(jìn)行處理钮热,將會影響通話質(zhì)量和用戶體驗(yàn)填抬,更嚴(yán)重的還會形成震蕩,產(chǎn)生嘯叫隧期。
回聲消除就是從麥克風(fēng)采集的聲音數(shù)據(jù)中痴奏,消除掉揚(yáng)聲器的聲音,只保留本地通話者的聲音厌秒。回聲消除的難點(diǎn)在于快速收斂到穩(wěn)定狀態(tài)和根據(jù)環(huán)境動態(tài)調(diào)整回聲估計(jì)參數(shù)擅憔。環(huán)信SDK配備了自適應(yīng)回聲消除算法鸵闪,準(zhǔn)確估計(jì)回聲并能自適應(yīng)調(diào)整參數(shù),跟蹤通話環(huán)境變化暑诸,達(dá)到很好的回聲消除效果蚌讼。另外在一些手機(jī)機(jī)型會配備硬件回聲消除器件辟灰,SDK也會使用硬件回聲消除,達(dá)到降低CPU占用和降低功耗的目的篡石。
2.1.8 噪聲抑制
在實(shí)際使用環(huán)境中麥克風(fēng)采集的語音通常會有一定強(qiáng)度的背景音芥喇,這些背景音一般是背景噪音,當(dāng)背景噪音強(qiáng)度較大時凰萨,會對干擾語音的聽覺效果继控,嚴(yán)重是完全無法聽清正常的語音。噪音抑制的關(guān)鍵是提取出噪聲的頻譜胖眷,然后將含噪語音根據(jù)噪聲的頻譜做一個反向的補(bǔ)償運(yùn)算武通,從而得到降噪后的語音。環(huán)信SDK包含有先進(jìn)的降噪算法珊搀,對輸入的每幀頻譜進(jìn)行分析冶忱,提取多個語音和噪聲特征,合并到一個模型中形成一個多特征的概率密度函數(shù)境析,精確的估計(jì)出噪聲囚枪,并把他們從采集數(shù)據(jù)消除掉。在大部分實(shí)際使用環(huán)境中劳淆,都能有效的抑制噪聲链沼,還原干凈的語音。

2.2 多平臺SDK
2.2.1 移動端SDK
移動端SDK提供清晰簡明的接口憔儿,用戶可以使用某一具體模塊實(shí)現(xiàn)特定的功能搬卒。
SDK提供完善的連接管理、音視頻通道管理卖氨,方便用戶在移動端實(shí)現(xiàn)穩(wěn)定成熟的音視頻功能酬屉,同時提供了更好的擴(kuò)展性,支持更多的對接和設(shè)備同步場景蜈缤。
2.2.2 Web SDK
Web SDK的設(shè)計(jì)是為了方便使用Web方式的應(yīng)用開發(fā)者, 支持在不同瀏覽器環(huán)境下的實(shí)時音視頻場景拾氓。SDK的設(shè)計(jì)原則是接口簡潔易用、保持開發(fā)框架的中立性底哥。
目前版本的SDK能力如下:
? SDK支持IE9+咙鞍、FireFox10+、Chrome54+趾徽、Safari6+之間音視頻建立续滋。
? 支持Web端之間,Web端與Android端/iOS端相互實(shí)時音視頻功能孵奶。
? 支持iOS疲酌、Android SDK之間實(shí)時音視頻功能。

2.3 服務(wù)端REST接口
環(huán)信開放平臺與APP服務(wù)端的REST接口,可實(shí)現(xiàn)實(shí)時音視頻創(chuàng)建朗恳、關(guān)閉等功能湿颅。
REST(Representational State Transfer)是一種輕量級的Web Service架構(gòu)風(fēng)格,可以翻譯成“表述性狀態(tài)轉(zhuǎn)移”粥诫,實(shí)現(xiàn)和操作明顯比 SOAP和XML-RPC更為簡潔油航,可以完全通過HTTP協(xié)議實(shí)現(xiàn),還可以利用緩存Cache來提高響應(yīng)速度怀浆,無論性能谊囚、效率和易用性上都優(yōu)于 SOAP協(xié)議。
REST架構(gòu)遵循了了CRUD原則揉稚,CRUD原則對于資源只需要四種行為:Create(創(chuàng)建)秒啦、Read(讀取)搀玖、Update(更新)和Delete(刪除)就可以完成對其操作和處理余境。這四個操作是原子操作,對資源的操作包括獲取灌诅、創(chuàng)建芳来、修改和刪除資源的操作正好對應(yīng)HTTP 協(xié)議提供的GET、POST猜拾、PUT和DELETE方法即舌。這種針對網(wǎng)絡(luò)應(yīng)用的設(shè)計(jì)和開發(fā)方式,可以有效降低開發(fā)的復(fù)雜性挎袜,提高系統(tǒng)的可伸縮性顽聂。
環(huán)信的 Rest 服務(wù)完全是基于 HTTPS 的安全協(xié)議,并符合OAuth 2.0 標(biāo)準(zhǔn)和RBAC(基于角色的訪問控制)的權(quán)限模型實(shí)現(xiàn)盯仪。REST接口模塊的架構(gòu)基于Spring boot構(gòu)建分布式Web服務(wù)紊搪,配合負(fù)載均衡,實(shí)現(xiàn)高可用和快速伸縮全景;并通過后端異步處理單元耀石,進(jìn)一步提高消息處理吞吐量。同時爸黄,REST接口的特性保證了編程語言的無關(guān)性滞伟,APP服務(wù)端可使用任意編程語言實(shí)現(xiàn)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末炕贵,一起剝皮案震驚了整個濱河市梆奈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌称开,老刑警劉巖鉴裹,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡径荔,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門脆霎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來总处,“玉大人,你說我怎么就攤上這事睛蛛○新恚” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵忆肾,是天一觀的道長荸频。 經(jīng)常有香客問我,道長客冈,這世上最難降的妖魔是什么旭从? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮场仲,結(jié)果婚禮上和悦,老公的妹妹穿的比我還像新娘。我一直安慰自己渠缕,他們只是感情好鸽素,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著亦鳞,像睡著了一般馍忽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上燕差,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天遭笋,我揣著相機(jī)與錄音,去河邊找鬼谁不。 笑死坐梯,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的刹帕。 我是一名探鬼主播吵血,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼偷溺!你這毒婦竟也來了蹋辅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤挫掏,失蹤者是張志新(化名)和其女友劉穎侦另,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡褒傅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年弃锐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片殿托。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡霹菊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出支竹,到底是詐尸還是另有隱情旋廷,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布礼搁,位于F島的核電站饶碘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏馒吴。R本人自食惡果不足惜扎运,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望募书。 院中可真熱鬧绪囱,春花似錦、人聲如沸莹捡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽篮赢。三九已至齿椅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間启泣,已是汗流浹背涣脚。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留寥茫,地道東北人遣蚀。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像纱耻,于是被迫代替她去往敵國和親芭梯。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容