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