http://games.qq.com/a/20170608/035165.htm
html
做者:冼牛 (微信xianniu1216,郵箱noahxian@zego.im,電話13266561305),即構科技市場運營總監,北京郵電大學計算機碩士,香港大學工商管理碩士,多年從事語音視頻雲服務技術研究,專一互動直播技術和實時遊戲語音。算法
孟子曰:「獨樂樂,不如與人樂樂;與少樂樂,不若與衆樂樂。」服務器
若是孟子是遊戲發燒友,那麼他確定說:「單機版不如聯網玩,獨自玩不若遊戲語音開黑玩。」微信
在棋牌遊戲中,一塊兒打牌的玩家有吹牛嘮叨的社交需求。在MMORPG競技遊戲中,一塊兒並肩做戰的隊友有團隊協同的通信需求。實時遊戲語音是網絡遊戲的標配,這早已是業界共識。網絡
如今的問題是,無論是自行研發實時遊戲語音方案,仍是採用第三方遊戲實時語音SDK,都必需要先爲遊戲量身訂造一套解決方案。這套解決方案必須是和遊戲自己的用戶需求、考量因素、及應用場景緊密結合的。把通用的語音視頻通信方案直接拿來給遊戲用是不適合的。併發
今天,咱們就一塊兒來深度聊一聊,怎麼針對遊戲的應用場景訂造遊戲實時語音解決方案。ide
人聲場景是指語音通信中大部分或者所有時間都是人聲在說話的場景。典型的例子包括Skype網絡電話、和微信語音。音樂聲場景是指語音通信中有至關一部份內容是涉及到音樂和表演等娛樂環節的場景。典型的例子包括花椒直播的連麥K歌海選賽。測試
遊戲實時語音的場景基本是人聲在說話。如今,讓咱們來了解一下人聲語音的特色。人類的聽力感知範圍是從20Hz到20kHz。這個頻寬範圍被劃分紅四個頻寬類別:窄帶、寬帶、超寬帶和全帶。編碼
窄帶(narrowband)spa
普通電話所覆蓋的頻寬,從300Hz到3.4kHz,對應採樣率6.8kHz。普通電話的採樣率是8kHz,對應頻寬4kHz,對於人聲語音是足夠的。
寬帶(wideband)
從50Hz到7kH的頻寬,對應採樣率14khz,能夠很好地捕捉和還原人聲,然而對於音樂聲仍是不夠的。這是在人聲語音通話場景下的所謂高清語音。
超寬帶(super-wideband)
從50Hz到14kHz,對應採樣率28kHz,基本能夠覆蓋人聲和音樂聲,對於非專業音樂人的用戶來講,無論是人聲通話仍是音樂直播,這樣的頻寬都是足夠的。
全帶(fullband)
從20Hz到20kHz,對應40kHz採樣率,全面覆蓋人類的聽覺範圍,可以知足音樂發燒友或者專業音樂人的需求。超過40Hz均可以稱做全帶語音。CD的採樣率就是44.1kHz。
所以,窄帶(narrowband)的音質是能知足遊戲實時語音的通信需求的。考慮到遊戲實時語音和直播結合產生了一些新的玩法,好比說主播陪玩,或者遊戲直播,對音質的要求相對較高。寬帶(wideband)的音質能知足遊戲加直播場景的需求。在這裏,遊戲語音的頻寬更多地要根據遊戲運營商的預算成原本肯定,由於和頻寬直接相關的是碼率,碼率最終也就是成本。
考量四大因素
爲遊戲量身訂作實時遊戲語音技術方案,要考量四大因素,從中找到平衡點。下圖是對四大因素進行打分(1分最低,5分最高)而創建的雷達圖:
成本
實時遊戲語音數據的流量成本,通常由音頻流的按月峯值帶寬來表示。音頻流的帶寬,由每一路音頻流的碼率乘以音頻流併發數目而得到。一路併發音頻流就表明一個活躍的在線用戶。對遊戲運營商來講,音頻流併發數目天然是越大越好。爲了控制成本,只能從如何適當地下降每一路音頻流的碼率來下功夫。目的是在保證其它指標能接受的狀況下,音頻流的碼率越低越好。
延遲時間
人聲語音信息從一個用戶通過系統和網絡傳達另一個用戶的單向延遲時間。通常來講,150毫秒之內的延遲時間,人耳是識別不了的,實時溝通十分流暢。400毫秒的延遲時間是一個臨界點,超過這個臨界點後,人耳就能感受到比較明顯的延遲。
筆者在即構科技參與過全球無死角網絡覆蓋測試,發現從中國一線城市到硅谷,RTT廣泛就在160毫秒以上,單向就在80毫秒以上。 總的延遲時間還要加上編解碼自己的算法延遲、全鏈條上的計算延遲、和網絡損傷帶來的傳輸延遲等。所以,在全球範圍要得到150毫秒內的延遲是十分具備挑戰性的。畢竟,RTT顯示的單向基本延遲廣泛也要80毫秒以上。
在遊戲實時語音中,保持較低的通話延遲十分關鍵。想象一下,在MOBA或者FPS中,戰鬥正在火熱朝天地進行着,一切都要用「說時遲那時快」來形容,隊友之間的配合協調(好比說加血)慢了一兩秒,帶來的直接後果,輕則是殆誤戰機,重則是全軍覆沒。這是一個視用戶體驗爲生命的遊戲平臺所不能忍受的。
音質
從客觀的角度來看,語音的質量由採樣率和碼率等因素決定。通常來講,採樣率越高音質越好;保持採樣率不變,碼率越高音質越好。從主觀的角度來看,語音的質量由MOS主觀評估方法來鑑定,也要經過人耳聽感來衡量,畢竟最終是用戶的耳朵來裁定音質好很差。
人耳對人聲的音質的容忍度仍是比較高的,並且不一樣的遊戲和不一樣的場景對音質也有不一樣的要求。所以,能夠根據不一樣的遊戲場景來調整音質來讓用戶體驗達到最優效果。在MMORPG、MOBA、和FPS等大型競技類遊戲中,併發數是海量的,總共帶寬至關高。所以,要適當地下降音質,以其下降碼率來下降成本。在棋牌和狼人殺等節奏比較慢(不少時候沒人說話)且併發相對不高的休閒類遊戲中,要適當地提升音質能提高用戶體驗。
和音質最緊密相關的因素是成本,其次是延遲和系統影響。通常來講,音質越好,碼率也會越高,成本也就越高。所以,音質是一個能夠微調的因素,用以達到適當的成本平衡點。
系統影響
實時遊戲語音SDK被遊戲系統進行端到端集成,在客戶端和遊戲系統共用系統資源,包括CPU和內存。在移動端,CPU和內存資源對遊戲系統來講十分緊缺。所以,實時遊戲語音SDK首先要作到儘可能節約CPU和內存資源,再進一步的要作到和遊戲和諧共生,那就是在遊戲系統消耗資源比較多的時候,實時遊戲語音SDK要下降碼率和音質,優先保障語音的可用性;在遊戲系統消耗資源比較少的時候,實時遊戲語音SDK要能提升碼率和音質,提升通話質量。語音編解碼器的複雜度是影響移動終端CPU、內存和電量消耗的一個重要因素,語音編解碼器的複雜度較低的話,消耗CPU、內存和電量也就相對少一些。
實時語音的模式
在遊戲協同和溝通中,實時語音通話包括三種模式:
一對一私聊
社交關係比較緊密的兩個遊戲用戶之間的一對一語音通話,通話的音質要高並且延遲要低。
多對多羣聊
多個遊戲用戶組隊語音開黑,每個用戶都參與到羣聊中,通話的流暢性要高並且延遲要低。
多人羣聊直播
相似多對多羣聊,參與羣聊的遊戲用戶充當指揮的角色,其它的遊戲用戶充當服從命令的角色,能收聽羣聊語音,而不能推送語音。另外,在遊戲直播中,主播直接參與到遊戲語音羣聊中,同時把遊戲的實況直播給不參與遊戲的觀衆收聽。在這種模式要求在羣聊的少數幾我的之間的通話流暢和低延遲,在觀衆側保障通話的流暢就能夠。
這三種實時遊戲語音通話的模式對上述的四大因素:成本、延遲、音質和系統影響都有不一樣的側重。除了要匹配這三種實時通話模式,還要匹配四種遊戲語音場景。
遊戲語音的場景
競技遊戲場景
包括MMORPG、MOBA、和FPS等類型的遊戲,遊戲的節奏極快,協同配合要求極高,系統資源也十分緊缺。實時遊戲語音SDK要優先保障流暢性和低延遲,適當容許下降音質。爲了知足這個場景的實時需求,推流和拉流都要通過核心媒體服務器。
休閒遊戲場景
包括棋牌和狼人殺等類型的遊戲,遊戲的節奏比較慢,用戶輪流說話,用戶之間短暫的思考時間也是被接受的,系統資源佔用率比較低。實時遊戲語音SDK要優先保障音質和流暢性。在這種場景中,推流和拉流能夠不通過核心媒體服務器,而直接走CDN網絡。這種策略比較適合低成本的經濟型方案。
大型國戰場景
包括大型的MMORPG等類型的遊戲,相似於競技遊戲場景。區別在於充當指揮角色的少數幾我的須要進行快節奏的羣聊,而其餘的遊戲用戶處於收聽狀態。在這種場景中,首先羣聊的幾我的的音頻流要通過核心媒體服務器,而後多路音頻流被混和成一路流,接着轉推到CDN網絡,最後收聽模式的遊戲用戶從CDN網絡拉流收聽。
選取音頻編解碼器
音頻編解碼器對遊戲實時語音方案的四大關鍵因素有重要的影響。音頻編碼器的類型、屬性和品質,決定了編出來的音頻流的碼率、算法延遲、頻寬、和音質;音頻編碼器的算法複雜度決定了對CPU、內存、和電量的消耗程度。
所以,適合遊戲實時語音方案的音頻編解碼器具有如下四個特色:
1)碼率相對低,知足成本可控的要求,通常不要超過16kbps。一個sample用1bit就能編好,那麼8kHz採樣率(narrowband)對應8kbps的碼率,16kHz採樣率(wideband)對應16kbps的碼率。碼率的本質就是成本。
2)延遲時間要低到能知足互動需求,通常不要超過300毫秒。
3)算法複雜度要比較低,對系統CPU、內存和電量消耗少,對遊戲系統影響要儘可能低。
4)音質能夠適看成出犧牲,以保障上面三個因素,8kHz採樣率對人聲場景是夠用的,16kHz採樣率能夠提供高清語音。
下圖列舉一組主流的音頻編解碼器,展現了隨着碼率變化,音質相應變化的狀況。這是基於編解碼器聽音測試的結果繪畫出來的,對選取音頻編解碼器有參考意義。根據上面的分析而且參照下圖,發現碼率低於16kbps的低碼率人聲編解碼器(speech codecs)包含:Opus(SILK),Speex,AMR-NB,AMR-WB,和iLBC。
下圖是另一組主流的音頻編解碼器,展現了隨着碼率的變化,算法延遲時間相應變化的狀況。根據上面的分析而且參照下圖,發現算法延遲時間低於60毫秒,碼率低於16kbps的人聲編解碼器(speech codecs)包含:Opus(SILK)、Speex(NB,WB)、G.72九、和G.729.1。
綜合上面的兩個圖,咱們能夠大體總結,比較適合實時遊戲語音的音頻編解碼器包含Opus(SILK)、Speex(NB,WB)、AMR-NB、AMR-WB、iLBC、G.72九、和G.729.1。
沒有任何一個音頻編解碼器能夠適合任何應用場景。每個音頻編解碼器都有本身的優點和劣勢,都有適合它發揮做用的應用場景。在爲遊戲實時語音方案選取語音編解碼器的時候,首先要梳理清楚該遊戲場景的需求,而後根據需求去選取音頻編解碼器。
讓咱們回顧一下前面討論過的遊戲場景,分析如何針對遊戲場景選取合適的語音編解碼器。
競技遊戲場景
包括MMORPG、MOBA、和FPS等類型的遊戲,遊戲中組隊的用戶須要每時每刻十分高頻地通話以協同做戰,並且這種類型的遊戲佔用系統和網絡資源不少。這種場景對遊戲實時語音SDK的要求是碼率低、延遲低、和消耗低,音質只要能保障溝通無阻就能夠。所以,選取的音頻編解碼器要具有這些特色:碼率低、算法延遲低、以及算法複雜度低。在這個前提下,再選取採樣率較高和MOS值較高的音頻編解碼器。上述提到的Codec二、Speex、和AMR-NB都比較適合競技遊戲場景,建議對它們進行進一步測試對比。
有些休閒遊戲的溝通節奏也至關快,好比說馬東的米未傳媒最近推出的飯局狼人殺,在殺人遊戲環節容許用戶插麥(插話),打破了傳統狼人殺輪流發言而不容許插話的規則。在這種狀況下,飯局狼人殺雖然是休閒遊戲場景,可是也應該當作競技遊戲場景來處理。從技術的角度來講,選取的語音編解碼器就要優先保障低延遲和流暢性,而後再考慮音質;另外,推拉流都要通過核心媒體服務器,以此得到比較低的延遲,插麥的效果才能保障。若是推流直接推送到CDN網絡,插麥的延遲將會達到至少1到3秒,插話的體驗就會沒法接受。
休閒遊戲場景
包括棋牌和狼人殺等類型的遊戲,遊戲中的用戶交流的節奏不快,容許一到兩秒的思考時間,並且這些遊戲佔用系統和網絡資源也很少。這種遊戲場景的社交屬性比較強,社交關係好的遊戲用戶甚至會進行一對一私聊。休閒遊戲場景對實時遊戲語音SDK的要求是音質比較好、碼率比較高;而延遲容許高一點,系統消耗也容許多一點。所以,選取的音頻編解碼器就要具有這些特色:採樣率較高、碼率較高、以及MOS值較高;在這個前提下,再選取算法延遲較低,和算法複雜度較低的音頻編解碼器。上述提到的Opus(SILK)、AMR-WB、Speex、和iLBC都比較適合休閒遊戲場景,建議對它們進行進一步測試對比。
最近半年,休閒遊戲的遊戲實時語音技術出現了一些新的玩法:有些遊戲平臺在遊戲實時語音中增長了實時視頻。用戶能夠有選擇性地在遊戲實時視頻中露臉,遊戲平臺也經過一些機制去鼓勵用戶多在視頻中露臉。好比說奇虎360最近推出的萌萌(微博)狼人殺,又名花椒狼人殺(和花椒直播一樣是奇虎360的產品),就在遊戲用戶輪到發言的時候,容許選擇是否全屏展現視頻。因爲萌萌狼人殺採用了即構科技的遊戲實時音視頻方案,所以筆者比較清楚此類方案的技術細節。從技術的角度來講,增長了視頻,必然會增長碼率(帶寬的開銷)。在弱網的狀況下,丟包率會驟然增長,音視頻的質量也會相應降低,這時候要優先保障語音通話。具體地說,要優先保障語音的低延遲和流暢性,視頻和音質能夠稍微妥協。所以,在選用音頻編解碼器的時候,就要優先考慮碼率低和延遲低的,甚至能夠選用一套碼率低的和一套採樣率高的結合着使用,用以適應不一樣的應用場景和網絡條件。
大型國戰場景
包括大型的MMORPG等類型的遊戲,充當指揮角色的一組遊戲用戶的網絡溝通節奏其實和競技遊戲場景是相似的,選取音頻編解碼器的原則也相似。除了Codec二、Speex、和AMR-NB之外,其實Opus(SILK)的覆蓋面很廣,建議也測試對比一下。
通過幾輪測試和對比下來,你極可能會發現,要結合使用一兩個編解碼器才能很好地知足某個遊戲場景的需求。最終,咱們要作的是尋找碼率、延遲、複雜度、採樣率、和MOS值這幾個關鍵指標的平衡點。畢竟這幾個指標和咱們最開始討論的四大要素:成本、延遲時間、系統影響、以及音質是緊密相關的。
要針對具體的遊戲場景訂造特定的解決方案,沒有任何一套方案是放諸四海皆準的。要爲具體的方案去配置特定的音視編解碼器,和推流、拉流、以及混流策略。甚至有些時候,在同一套遊戲實時語音解決方案中,要採用多個的音頻編解碼器來適應不一樣的業務場景或者網絡情況的需求。
結語
所以,作遊戲實時語音解決方案就是在遊戲應用場景和技術方法之間作匹配。只有深刻地理解遊戲應用場景的需求,才能拿捏好如何選用語音編解碼器,如何部署媒體服務器資源,如何配置CDN網絡等,來打磨出一套符合遊戲應用場景需求的實時語音解決方案。