0
本文作者: 程弢 | 2017-04-18 17:37 |
今年,最受歡迎的游戲當(dāng)屬狼人殺,據(jù)不完全統(tǒng)計,截止到現(xiàn)在已經(jīng)有40多款狼人殺APP上線,熱度毫不遜于如日中天的視頻直播市場。
事實上,狼人殺與視頻直播一樣,也是高度依賴語音視頻技術(shù)的應(yīng)用,但前者對產(chǎn)品的互動能力的要求比后者更高。語音互動是狼人殺游戲當(dāng)中的重要環(huán)節(jié),但資深玩家肯定知道,很多排在前列的狼人殺APP即使在復(fù)盤討論等社交環(huán)節(jié),也不能讓用戶同時發(fā)言,更不要說相互能看到視頻了,這大大影響了產(chǎn)品的用戶體驗。
從目前的趨勢來看,越來越多的產(chǎn)品開始使用多路連麥技術(shù)來解決這一問題。然而多路連麥技術(shù)仍然存在很多挑戰(zhàn),例如如何解決跨網(wǎng)傳輸問題?如何在復(fù)雜的網(wǎng)絡(luò)環(huán)境中降低延遲?...
雷鋒網(wǎng)了解到,即構(gòu)科技為狼人殺的特定應(yīng)用場景量身定做了一項名為“狼人殺蟲洞連麥技術(shù)”的語音視頻通訊云計算服務(wù)。那么,這一項技術(shù)的核心是什么?解決了什么痛點(diǎn)?如何進(jìn)行驗證?
本期硬創(chuàng)公開課邀請到了即構(gòu)科技市場運(yùn)營總監(jiān)冼牛為大家深度解讀狼人殺蟲洞連麥技術(shù)。
冼牛,即構(gòu)科技市場運(yùn)營總監(jiān),資深技術(shù)人,市場營銷新兵,客串投資顧問,骨灰級游泳者。北京郵電大學(xué)計算機(jī)碩士,香港大學(xué)工商管理碩士,一直秉承人丑應(yīng)該多讀書的理念,讀書不斷。2008年起旅居香港至今,2015年回流深圳南山創(chuàng)業(yè),服務(wù)過愛立信香港,摩根大通香港,和分期樂集團(tuán)等老東家。
2002年北郵碩士期間開始鉆研視頻會議,現(xiàn)深耕語音視頻云服務(wù),直播技術(shù)應(yīng)用和直播行業(yè)研究。
以下內(nèi)容整理自本期公開課,雷鋒網(wǎng)做了不改變愿意的編輯:
顧名思義,狼人殺蟲洞連麥技術(shù)是為狼人殺應(yīng)用量身定做的一款產(chǎn)品,連麥技術(shù)不是新鮮的技術(shù),在2016年網(wǎng)絡(luò)直播元年,就已經(jīng)被很多一線的直播公司應(yīng)用。
2017年,狼人殺引領(lǐng)了一波新的浪潮到來,這款應(yīng)用的直播技術(shù)也因此發(fā)生了一些變化。今天主要講的是狼人殺蟲洞連麥技術(shù)的系統(tǒng)結(jié)構(gòu)以及它能為狼人殺這種場景解決哪些痛點(diǎn)。
我們可以從兩個維度來比較市面上的狼人殺游戲:1)有沒有視頻;2)能不能同時說話。
從市面上主流的狼人殺游戲的比較中可以發(fā)現(xiàn),有些只支持音頻,比較少能支持視頻,有些只支持單向的語音,比較少能支持連麥互動。
參考去年直播行業(yè)的發(fā)展趨勢,請允許我斷言,今年乃至明年狼人殺會把直播行業(yè)發(fā)展成熟的語音視頻技術(shù)繼承過來,并且結(jié)合本身的應(yīng)用場景,發(fā)展出更多豐富的玩法。
目前,狼人殺的產(chǎn)品形態(tài)主要是游戲環(huán)節(jié),同時在探索復(fù)盤討論環(huán)節(jié)的玩法,甚至還有才藝表演等更多的玩法。后兩種玩法包含更多的社交元素,對語音視頻互動有更高的要求。
在游戲環(huán)節(jié),通過單向的語音視頻通訊技術(shù)就可以實現(xiàn);在社交環(huán)節(jié),對語音視頻互動技術(shù)的要求甚高,必須要有多路連麥技術(shù)才能獲得良好的用戶體驗。
目前,狼人殺類APP存在以下技術(shù)痛點(diǎn):延遲大、無連麥、無視頻、語音失真、卡頓不流暢、和語音有回聲等。
延遲比較大可能因為目前的狼人殺類APP主要是采用單向音視頻通訊,拉流端直接推流到CDN網(wǎng)絡(luò),然后拉流端直接從CDN網(wǎng)絡(luò)拉流,一般的延遲會大于3秒。
狼人殺包含游戲環(huán)節(jié)和討論復(fù)盤環(huán)節(jié),甚至才藝表演等環(huán)節(jié)。在游戲環(huán)節(jié)中,用戶輪流發(fā)言,發(fā)言之間會需要思考時間,因此還勉強(qiáng)可以玩,但是用戶體驗比較差。
在討論復(fù)盤環(huán)節(jié)甚至其他社交環(huán)節(jié),用戶會同時發(fā)言,而且要求能看到其它用戶的視頻。在這種應(yīng)用場景下,這么大的延遲會成為狼人殺類APP往社交化發(fā)展的絆腳石。
另外,很多狼人殺游戲中,卡頓不流暢,背景噪音,語音失真、回聲的問題都是普遍存在。
失真有可能是因為回聲消除和噪音抑制過度造成的??D可能是因為在語音網(wǎng)絡(luò)傳輸?shù)倪^程中處理得不好,丟包或者抖動等網(wǎng)損都會造成的,也可能是因為終端設(shè)備解碼和播放處理不流暢而造成。
要在語音視頻通訊中獲得超低的延遲,就要在網(wǎng)絡(luò)中找到最短最優(yōu)的傳輸路徑。
在網(wǎng)絡(luò)中,從A點(diǎn)到B點(diǎn)最短的距離,我們借用宇宙學(xué)中的概念,把它叫做網(wǎng)絡(luò)上的蟲洞。
狼人殺蟲洞連麥技術(shù)所做的就是通過一系列的策略和算法優(yōu)化各個環(huán)節(jié),配以優(yōu)質(zhì)的網(wǎng)絡(luò)資源,繞開網(wǎng)絡(luò)擁塞、穿越物理距離,選擇最優(yōu)網(wǎng)絡(luò)路徑,實現(xiàn)超低延遲的連麥互動。
即構(gòu)的狼人殺連麥解決方案可以在超低延遲和流暢的基礎(chǔ)上實現(xiàn)語音視頻連麥互動,讓身處世界不同角落的用戶,感覺就像是在面對面對話一樣玩狼人殺?;芈曄?,噪聲抑制,和自動增益控制等痛點(diǎn)都得到有效的解決。
在圖中,左邊顯示的是即構(gòu)的客戶美播直播的9路連麥的場景,最右邊是12路連麥的場景,中間是使用即構(gòu)狼人殺蟲洞連麥SDK開發(fā)的貼近狼人殺應(yīng)用場景的DEMO,按住按鈕就可以顯示視頻同時說話。
狼人殺連麥和直播連麥的流程是類似的。圖中深藍(lán)顏色代表的是終端和業(yè)務(wù)層的邏輯,淺藍(lán)色代表的是服務(wù)器端的邏輯。
首先是第一主播先發(fā)布直播,把流推到服務(wù)器,然后服務(wù)器再流轉(zhuǎn)推到CDN,普通用戶再從CDN拉流。這一過程是單向的音視頻通訊,并沒有連麥互動的。
然后第二主播向業(yè)務(wù)服務(wù)器申請連麥,業(yè)務(wù)服務(wù)器再把這個請求傳遞給第一主播。通過業(yè)務(wù)服務(wù)器,連麥雙方用信令完成了連麥的申請和應(yīng)答。
兩個主播連麥時,可以相互看到對方,所以拉流和推流都必須在媒體服務(wù)器,因為媒體服務(wù)器網(wǎng)絡(luò)資源更好,而對于處于觀看模式下的觀眾則可以采取低成本的方式,即從CDN拉流。
另外,從圖中可以看出,整個傳輸和處理環(huán)節(jié)可以分為三個部分:推流端、拉流端和云端。
推流端包括采集、前處理、編碼和推流,采集是推流端的麥克風(fēng)或者攝像頭采集音視頻的數(shù)據(jù),前處理包括音頻變聲、視頻濾鏡等。推流可以推到云端或者CDN,在云端會做混流、轉(zhuǎn)碼工作,隨后就是分發(fā),把流分發(fā)到CDN網(wǎng)絡(luò)然后推到邊緣節(jié)點(diǎn),讓觀眾端拉流。
拉流端和推流端的過程是相反的,拉流后進(jìn)行解碼,然后做后處理、渲染。
在圖中,左邊處于連麥模式的用戶在進(jìn)行連麥互動時,語音視頻、信令全部是經(jīng)過媒體服務(wù)器集群,右邊是不需要連麥的用戶,只需要從CDN網(wǎng)絡(luò)拉流。
連麥模式的用戶接入到連麥模式的服務(wù)器集群,這些服務(wù)器的計算資源和網(wǎng)絡(luò)資源比較優(yōu)質(zhì),而且在算法策略上做了很多工作,可以獲得比較低的延遲。連麥模式的服務(wù)器集群包括語音視頻服務(wù)器集群,信令服務(wù)器和調(diào)度服務(wù)器。語音視頻服務(wù)器集群負(fù)責(zé)語音視頻流的轉(zhuǎn)碼等處理,信令服務(wù)器負(fù)責(zé)信令的同步和通訊,調(diào)度服務(wù)器負(fù)責(zé)網(wǎng)絡(luò)資源,計算資源,存儲資源,和流量等的全局調(diào)度。
中間是混流服務(wù)器,它支持旁路混流服務(wù),從語音視頻服務(wù)器集群拉取多路單獨(dú)的語音視頻流,然后進(jìn)行解碼,音畫同步,混流,然后在重新編碼,最后推送到CDN網(wǎng)絡(luò)。
聆聽模式的用戶要看這些語音視頻,可以從CDN網(wǎng)絡(luò)的邊緣節(jié)點(diǎn)拉流播放?;炝鞣?wù)器加上CDN網(wǎng)絡(luò)提供了旁路直播的服務(wù),雖然一定程度犧牲了實時性,但是可以維持相對比較低的成本。
語音視頻的連麥涉及到了三部分內(nèi)容:終端的處理,包括回聲消除、噪音抑制、音量自動增益這些語音前處理部分;在網(wǎng)絡(luò)傳輸上,為了對抗網(wǎng)絡(luò)損傷必須要配置三個模塊,抖動緩沖、前向糾錯、丟幀補(bǔ)償;另外還需做到兼容性跨平臺,安卓手機(jī)稂莠不齊,在安卓的兼容性上需要花很多功夫。
語音前處理:回聲消除具有挑戰(zhàn)性,當(dāng)兩個用戶對講的時候?qū)夹g(shù)要求很高,這需要看對講時語音的通透度,語音消除本質(zhì)就是參考遠(yuǎn)端信號把近端的回聲處理掉,處理后可能會有兩個問題,如果處理過度會造成語音失真,如果處理不夠則會導(dǎo)致一部分回聲沒被消除。
噪音抑制:也有同樣的要求,在沒有噪音的時候需要盡可能的把語音保護(hù)好。傳統(tǒng)的降噪的做法是通過分析背景噪音的強(qiáng)度和頻譜分布,分析用戶的聲音的頻譜,然后根據(jù)分析的結(jié)果建模模型,構(gòu)建一個濾波器;這個濾波器能區(qū)分用戶的聲音和背景噪音,把噪音頻段外的聲音予以保留,把噪音頻段內(nèi)的聲音能量降低,最終的效果就是抑制了噪音,讓用戶的聲音更加清晰。
音量自動增益:主要在兩個場景中發(fā)揮作用,一是在嘈雜環(huán)境中,它能自動調(diào)整麥克風(fēng)的音量,增強(qiáng)有效的聲音信息;另外,如果用戶離麥克風(fēng)較遠(yuǎn),拾音效果會調(diào)整得比較好。
自適應(yīng)復(fù)雜網(wǎng)絡(luò):包括三個模塊:抖動緩沖、前向糾錯、和丟幀補(bǔ)償。網(wǎng)絡(luò)抖動是不可避免的,抖動會導(dǎo)致數(shù)據(jù)的損傷,為了對抗抖動需要在算法上做一系列的處理,及適當(dāng)?shù)卦黾友舆t,讓抖動變得比較平緩。
前向糾錯:用空間換時間,一次傳送多個冗余數(shù)據(jù)包,就算丟包丟到20%-30%,接收方也可以把有效數(shù)據(jù)恢復(fù),但是數(shù)據(jù)量是變多了,占的帶寬也會更多。前向糾錯和丟幀補(bǔ)償一般結(jié)合起來互補(bǔ)使用。
丟幀補(bǔ)償:用時間換空間,如果傳一個數(shù)據(jù)包沒接收到,就通過一定的智能策略來重傳,由于每次傳輸?shù)臄?shù)據(jù)不包含冗余數(shù)據(jù),因此占的帶寬資源比較少,然后由于可能要多次重傳,因此花費(fèi)的時間也會比較多。
兼容性:主要體現(xiàn)在安卓設(shè)備上,因為安卓手機(jī)中低端的機(jī)型很多,在聲學(xué)的設(shè)計上不太合理,揚(yáng)聲器和麥克風(fēng)會出現(xiàn)耦合,這就會導(dǎo)致聲學(xué)的算法在這些設(shè)備商運(yùn)行的效果不好。即構(gòu)的做法是盡量調(diào)用底層C接口,而不去調(diào)用Java接口,抹平設(shè)備之間的差異,以實現(xiàn)兼容性。
跨平臺:現(xiàn)在一般采用的是QT開發(fā)框架,它開發(fā)的一套代碼可以同時跑在Windows和Mac上。QT開發(fā)框架還不完美,開發(fā)出來的代碼在Mac上跑還多多少少會有些問題,需要花時間去發(fā)現(xiàn)和修正。
云端主要考慮五個要素:海量并發(fā)、全網(wǎng)覆蓋、熱備容災(zāi)、QoE保障、擴(kuò)容能力。
海量并發(fā):要做到海量并發(fā)系統(tǒng)架構(gòu)必須是分布式服務(wù)器群,每一個節(jié)點(diǎn)能感知周圍的網(wǎng)絡(luò)環(huán)境,把信息上報給調(diào)度服務(wù)器,調(diào)度服務(wù)器對全網(wǎng)的網(wǎng)絡(luò)資源,計算資源,和流量資源進(jìn)統(tǒng)一調(diào)度和負(fù)載均衡。
全網(wǎng)覆蓋:采用多個核心機(jī)房覆蓋主要城市,在偏遠(yuǎn)地區(qū)采用多節(jié)點(diǎn)代理,把請求轉(zhuǎn)發(fā)給核心節(jié)點(diǎn)處理,這樣能做到全網(wǎng)覆蓋。
熱備容災(zāi):采用多個公有基礎(chǔ)云服務(wù),不同的公有云之間相互熱備容災(zāi)。
QoE保障: 跨運(yùn)營商網(wǎng)絡(luò)傳輸是瓶頸,即構(gòu)在所有接入點(diǎn)都采用BGP,確保接入的質(zhì)量和不受跨網(wǎng)瓶頸的影響。;
無上限擴(kuò)容:隨著用戶規(guī)模的增長,即構(gòu)能為客戶進(jìn)行無感知無上限擴(kuò)容,免除擴(kuò)容過程中的成本和對用戶的負(fù)面影響。
連麥互動最基礎(chǔ)的需求是延遲要低。一般情況下要做到300-500ms左右,才能有好的互動體驗。
以這張圖為例,推流端在北京,拉流端有兩個用戶(一個在廣州,一個在深圳),這三個玩家在玩狼人殺游戲的時候,音視頻的推流要傳到廣州和深圳,可能會經(jīng)過武漢或者寧波。
要做到低延遲的話,首先要有好的基建,另外需要選擇最佳路徑,第三個策略就是要在每個環(huán)節(jié)(采集、前處理、編碼、推流、混流、轉(zhuǎn)碼等)做到最優(yōu)。
目前市面上混流的選擇有三種:一種是在推流端進(jìn)行混流,第二種是在拉流端進(jìn)行混流,第三種是在云端進(jìn)行混流。
推流端混流:把和推流端連麥的其它用戶的音視頻流匯集在某一個玩家手機(jī)上,在手機(jī)上進(jìn)行混流再轉(zhuǎn)推到CDN上,這種成本很低。
拉流端混流:拉流端拉多流,然后進(jìn)行混流,最后在終端設(shè)備進(jìn)行渲染播放。
云端混流:所有連麥用戶的音視頻流匯集到云端,把多路音視頻流混合成一路音視頻流,然后轉(zhuǎn)推CDN網(wǎng)絡(luò)。
云端混流是推薦的做法,它能借用云端的能力:穩(wěn)定而且充足的網(wǎng)絡(luò)資源,計算資源,可擴(kuò)展性,和運(yùn)維能力
例如上圖顯示的,三個主播向語音視頻服務(wù)器集群推流,然后進(jìn)行連麥。連麥客戶端必須從媒體服務(wù)器拉單獨(dú)的多路流,這樣才能保證低延遲,
旁路服務(wù)器還會從語音視頻服務(wù)器把單流拉出去進(jìn)行混流,同時保留多路流,給觀眾端保留兩個選擇,可以拉混流也可以拉多流。
如果要節(jié)省成本,就把混流轉(zhuǎn)推到CDN網(wǎng)絡(luò),觀眾從邊緣節(jié)點(diǎn)拉混流;如果要讓觀眾獲取好的體驗,也可以拉多流。
這張圖描述了回聲消除的基本原理。
下行信號傳過來,通過語音終端揚(yáng)聲器播放,這個聲音也會被設(shè)備的麥克風(fēng)采集,所以麥克風(fēng)采集到的聲音包含用戶有效的語音,還包括揚(yáng)聲器發(fā)出來的回聲,這時候就要把回聲和有效的語音分離。
分離的前提是要有一個參考信號——下行信號,雖然經(jīng)過揚(yáng)聲器播放下行信號和回聲會有差異,但二者是高度相似,簡單來說回聲和下行信號存在一個函數(shù)關(guān)系。
回聲消除的本質(zhì)就是把這個函數(shù)解出來,通過AEC再把回聲消除掉。
在這些技術(shù)條件都滿足后,上線之前,需要做一系列測試。
語音視頻測試的影響因素包括:
1)語音視頻參數(shù)設(shè)置
2)網(wǎng)絡(luò)環(huán)境
3)移動終端
4)聲音環(huán)境
而具體評估指標(biāo)包括:
1)延遲情況
2)卡頓情況
3)連麥路數(shù)
4)自動增益控制
5)噪音抑制
6)回聲消除
一般來說,測試方法有兩種:第一種是比較客觀的測試方法,例如使用消音室;第二種是主觀測試方法,測試人員的樣本數(shù)目要多到具有統(tǒng)計意義。
這兩種方法對于互聯(lián)網(wǎng)創(chuàng)業(yè)團(tuán)隊的實操性不夠強(qiáng)。這里推薦第三種實操性比較強(qiáng)的測試方法,可以由互聯(lián)網(wǎng)創(chuàng)業(yè)團(tuán)隊因地制宜來操作。
1)設(shè)定不同的語音視頻設(shè)置;
2)真實網(wǎng)絡(luò)的環(huán)境,和使用網(wǎng)損模擬設(shè)備來模擬各種網(wǎng)絡(luò)情況;
3)跨國家地區(qū),跨運(yùn)營商網(wǎng)絡(luò),還有不同的接入方式;
4)各種移動終端設(shè)備,重點(diǎn)是安卓手機(jī),按照出貨量排行,充分覆蓋各種安卓機(jī)型。
總的原則就是,首先要貼近用戶的場景,接著要覆蓋影響因素的組合,然后是關(guān)注核心評估指標(biāo),最后是方案必須是團(tuán)隊容易實施的。
Q:在網(wǎng)絡(luò)狀況比較差的情況下,有沒有比較好的降低延遲的辦法?
A:網(wǎng)絡(luò)狀況差在傳輸層面表現(xiàn)出來的問題就是延遲比較大,和丟包率高。
要做低延遲的話會面臨協(xié)議上的選擇:標(biāo)準(zhǔn)RTMP協(xié)議還是UDP私有協(xié)議。無論是標(biāo)準(zhǔn)RTMP協(xié)議還是UDP私有協(xié)議,即構(gòu)科技都做到了網(wǎng)絡(luò)自適應(yīng),實現(xiàn)了穩(wěn)定的低延遲和流暢的效果。
RTMP的優(yōu)點(diǎn):標(biāo)準(zhǔn)協(xié)議,業(yè)界公開透明,更加開放、可控、和可替代;天然支持和CDN對接。
RTMP的不足:在大方面受限于網(wǎng)絡(luò)底層的擁塞控制,在個別網(wǎng)絡(luò)極端糟糕情況下延遲會增大;RTMP標(biāo)準(zhǔn)協(xié)議對流控等沒有端到端雙向支持,惡劣情況下效果保障會比較復(fù)雜。
使用UDP私有協(xié)議,即構(gòu)實現(xiàn)了端到端全鏈條可控,包括流控碼控、冗余和重傳等等,對抗惡劣網(wǎng)絡(luò)更有保障。即構(gòu)專門支持了把私有協(xié)議和格式轉(zhuǎn)換成RTMP標(biāo)準(zhǔn)協(xié)議和格式,可以轉(zhuǎn)碼推向標(biāo)準(zhǔn)CDN等第三方服務(wù)器。
Q:跨地區(qū)、跨運(yùn)營商如何實現(xiàn)?
A:要解決跨網(wǎng)通信的瓶頸的話,必須在接入的時候使用BGP,雖然成本會增加,但能夠有效解決跨網(wǎng)問題。
跨地區(qū)的話,需要設(shè)計好分布式的網(wǎng)絡(luò)架構(gòu),用優(yōu)質(zhì)的節(jié)點(diǎn)資源去保證全面覆蓋,要有調(diào)度服務(wù)器進(jìn)行全局智能調(diào)度。
Q:即構(gòu)科技的方案最多可以支持幾個人的視頻互動?具體方案和視頻直播有什么區(qū)別?
A:即構(gòu)的狼人殺蟲洞連麥技術(shù)在移動端最多可以支持20路,在PC端最多可以支持32路,目前有客戶在用。
狼人殺技術(shù)方案和視頻直播技術(shù)方案的區(qū)別還是很多的,這里只提一個點(diǎn):狼人殺對超多路語音視頻連麥的需求會更大,12路連麥?zhǔn)亲罨镜男枨?,連麥互動的頻率會更加強(qiáng);
而視頻直播對超多路的連麥需求不會太大。因此,即構(gòu)科技在技術(shù)上會對狼人殺超多路連麥和強(qiáng)互動的需求作出全面的支持。
Q:音視頻編解碼這塊,即構(gòu)的方案有什么特點(diǎn)?
A: 音視頻的解碼器,音頻是AAC,視頻是x264。在這個基礎(chǔ)上我們做了兩個事情:1)音視頻編解碼器的深度優(yōu)化;2)音視頻編解碼器的智能調(diào)度策略。
(雷鋒網(wǎng)此前也針對多路連麥技術(shù)做出了解讀,歡迎查閱?。?/p>
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。