摘要:該文以安卓平臺上一款游戲模擬器的云化過程為例,分析了研發(fā)背景和云化方案的選擇思路,根據(jù)游戲模擬器的特點設計了輕量級、低損耗的音視頻攔截方案,給出了具體實施的系統(tǒng)架構和各模塊功能,并針對解決方案中存在的問題提出了節(jié)約系統(tǒng)資源、提高用戶體驗、減少用戶流量成本的一系列優(yōu)化方法。
關鍵詞:游戲模擬器;云游戲;音視頻攔截方案;解決方案;性能優(yōu)化
中圖分類號:TP37? ? ? 文獻標識碼:A
文章編號:1009-3044(2022)01-0116-03
1 背景
隨著智能手機的普及,原來傳統(tǒng)游戲平臺遇到了瓶頸,面臨淘汰的風險。游戲平臺升級會帶來老用戶體驗下降、用戶流失,如果游戲平臺不升級但是隨著用戶手機硬件變?yōu)橹悄苁謾C而無法使用。因此,如何利用軟件技術實現(xiàn)傳統(tǒng)游戲平臺到云游戲平臺的轉化,實現(xiàn)用戶體驗不變,又能很好地兼容不同的智能手機硬件是傳統(tǒng)游戲平臺急需解決的問題。
某公司就是該場景的典型案例,該公司有一款面向功能機的游戲模擬器產(chǎn)品。該產(chǎn)品在功能機為游戲開發(fā)提供了統(tǒng)一接口,屏蔽了不同機型的硬件差異。基于該模擬器開發(fā)的游戲可便利地在不同功能機上移植,因此吸引了眾多游戲開發(fā)商為其開發(fā)游戲,而豐富的游戲內(nèi)容為該模擬器吸引了大量用戶。
隨著智能機時代的到來,該游戲模擬器被移植到安卓平臺。因市場環(huán)境變化,新增用戶較少但仍有大量存量用戶。
某段時間,該公司發(fā)現(xiàn)存量用戶的流失加快。經(jīng)市場部門調(diào)研發(fā)現(xiàn)是因為蘋果發(fā)布新手機,導致不少用戶從安卓手機更換為蘋果手機。經(jīng)進一步調(diào)研得知,這些更換手機的用戶都是公司從功能機時代積累起來的,具有較高的忠誠度,他們?nèi)匀幌M谔O果手機上能夠使用對應的游戲模擬器。
為此市場部門要求研發(fā)部門在iOS平臺提供對應的游戲模擬器產(chǎn)品,以防止安卓手機上的用戶進一步流失,并挽回已遷移到蘋果手機上的用戶。
2 技術方案選擇
2.1 移植方案
研發(fā)部門計劃把游戲模擬器和游戲從安卓上移植到iOS系統(tǒng)上,但是經(jīng)研究發(fā)現(xiàn)兩者均存在困難。
對于游戲模擬器,移植的困難有三點。1)游戲模擬器代碼規(guī)模龐大,達數(shù)十萬行,且邏輯復雜;2)游戲模擬器底層需要針對iOS平臺做大量的接口適配工作,技術挑戰(zhàn)大;3)游戲模擬器產(chǎn)品已經(jīng)處于維護階段,只有少數(shù)員工維護,開發(fā)所需的人力資源不足。
對于游戲的移植,雖然不需要變動游戲邏輯(因為游戲模擬器屏蔽了設備和系統(tǒng)差異),但是需要游戲編譯iOS平臺的版本。然而這些游戲年代久遠,不少開發(fā)商已經(jīng)聯(lián)系不上或者注銷,無法被重新編譯。
綜合考慮,移植方案不可行。
2.2 云游戲方案
由于移植方案的成本高昂,那么是否有其他方案呢?研發(fā)部門把目光投向了云游戲解決方案。
云游戲是使得在計算能力較弱的客戶端能運行高品質游戲的一種方式。云端運行游戲邏輯,而客戶端僅僅是展示游戲畫面、播放音頻,以及收集、傳遞用戶的控制命令發(fā)送到云端。因此可以避免客戶端上大量的移植和改造工作。由于模擬器上的游戲都較老,分辨率普遍較低,也適合做成云游戲。
實現(xiàn)云游戲的關鍵是服務端能高效快速地實現(xiàn)對游戲音視頻的攔截。傳統(tǒng)的攔截方式有兩種:一種是在設備截獲其音視頻,進行編碼,這種方式需要依賴較高級的硬件配置。另一種是hook操作系統(tǒng)中游戲用到的圖像繪制和音頻播放接口,以攔截對應的數(shù)據(jù)流,這種方案需要了解對應操作系統(tǒng)的相關接口[1]。
如果采用上述攔截方式,需要涉及大量研發(fā)部門未曾用過的技術,不利于在資源少、投入少的情況下快速開發(fā),因此還需另辟蹊徑??紤]到游戲的繪制、音頻播放都是調(diào)用游戲模擬器的接口,如果在相應的接口層攔截數(shù)據(jù),也可以達到和傳統(tǒng)攔截方式同樣的目的。這種輕量級的攔截方式不僅技術難度較低,而且還因為避免繪制游戲或者拷貝顯存而更加高效。
3 技術架構設計
3.1 技術框架設計
整體技術方案的框架劃分為模擬器端、服務器端和客戶端。模擬器端運行真實MRP游戲,實現(xiàn)畫面攔截轉發(fā),模擬用戶操作游戲動作。服務器控制模擬器管理,進行數(shù)據(jù)轉發(fā)(通過TCP連接)。客戶端展示游戲畫面、攔截和轉發(fā)用戶行為,且實現(xiàn)登錄等其他基本功能。模擬器端由節(jié)點管理服務矩陣組成,服務器端由數(shù)據(jù)庫、配置服務和ftp服務組成,客戶端為移動終端。具體架構如圖1所示。
1)iOS客戶端。iOS客戶端是用戶使用云游戲的入口,按照安卓游戲模擬器界面風格設計,出于跨平臺的考慮,使用h5技術實現(xiàn)。
用戶先需登錄客戶端以獲取訪問云游戲系統(tǒng)的權限。之后,客戶端請求列表服務獲取可用的游戲列表,展示在界面上。當用戶在界面上選擇使用某款游戲后,客戶端啟動該游戲的一次云服務過程。
在云游戲過程中,客戶端首先向游戲模擬器資源分配服務申請資源,接著連接到資源中指定的游戲數(shù)據(jù)傳輸中介服務,之后借助于傳輸中介服務和云端的游戲模擬器通信,進而完成整個云游戲的過程。
2)游戲列表服務。游戲列表服務是云端供客戶端查詢云游戲列表的接口。它通過查詢配置數(shù)據(jù)庫把查詢結果返回給客戶端。配置數(shù)據(jù)庫中的數(shù)據(jù)由運營人員通過部署服務器配置。
3)游戲模擬器資源分配服務。游戲模擬器資源分配服務是云端供客戶端創(chuàng)建云游戲服務的接口。
空閑的游戲模擬器會連接到游戲模擬器資源分配服務,等待任務分配。當游戲模擬器資源分配服務收到客戶端連接請求時,它會把請求轉發(fā)到某個等待中的游戲模擬器,之后將游戲模擬器返回的資源信息轉發(fā)給客戶端。
4)游戲數(shù)據(jù)傳輸中介服務。游戲數(shù)據(jù)傳輸中介服務是客戶端和游戲模擬器傳輸數(shù)據(jù)的中介。它的主要任務是協(xié)助客戶端和游戲模擬器進行對接及數(shù)據(jù)轉發(fā)。
5)游戲模擬器集群。云端有多臺服務器節(jié)點,每個服務器節(jié)點裝有Ubuntu系統(tǒng) + VirtualBox + genymotion環(huán)境[2]。Genymotion可創(chuàng)建多個安卓模擬器實例,每個安卓模擬器可以安裝一個預裝了目標游戲的游戲模擬器應用,由此組成游戲模擬器集群。每個游戲模擬器可為一個用戶提供云游戲服務。由于游戲模擬器處于內(nèi)網(wǎng)不能直接被客戶端訪問,因此必須通過游戲模擬器資源分配服務和游戲數(shù)據(jù)傳輸中介服務才能為客戶端提供服務。
游戲模擬器有三種狀態(tài),空閑、等待以及忙碌狀態(tài)。在空閑狀態(tài)下,它連接到游戲模擬器資源分配服務等待任務的分配。取得任務后它連接到游戲數(shù)據(jù)傳輸中介等待客戶端連接,同時將資源信息(模擬器id、對接客戶端的游戲數(shù)據(jù)傳輸中介服務器url地址)返回給游戲模擬器資源分配服務。此時進入等待狀態(tài)。在等待狀態(tài)下,如果在規(guī)定時間內(nèi)對應的客戶端連接到了游戲數(shù)據(jù)傳輸中介服務,則游戲模擬器進入忙碌狀態(tài)。此后,它啟動目標游戲、攔截并轉發(fā)數(shù)據(jù)到客戶端、接收并處理來自客戶端用戶控制命令。最后,當一次云服務結束時,客戶端、游戲數(shù)據(jù)傳輸中介服務、游戲模擬器之間的連接被銷毀,游戲模擬器重新恢復到空閑狀態(tài)。
6)配置服務。配置服務是運營人員部署云游戲的接口。運營人員可以通過配置服務配置系統(tǒng)支持的游戲列表,為每款游戲設定對應的部署資源包,并將該部署資源包指派給特定的服務器節(jié)點。
部署資源包中含有genymotion安卓模擬器鏡像和部署參數(shù)文件,其中鏡像上預裝了含有目標游戲的游戲模擬器。它最會被上傳到ftp服務器供需要服務器節(jié)點下載。
7)節(jié)點管理服務。節(jié)點管理服務負責在服務器節(jié)點上的部署云游戲。它定時配置服務本節(jié)點的部署資源包。如果有新部署資源包,它會則下載到本地。
下載完畢后,它先執(zhí)行genymotion命令卸載所有老安卓模擬器鏡像,然后使用部署資源包中的新安卓模擬器鏡像創(chuàng)建并啟動多個實例。最后,它再根據(jù)部署資源包中的部署參數(shù)文件啟動、配置游戲模擬器。
3.2 交互設計
系統(tǒng)的客戶端和游戲模擬器對接、傳輸數(shù)據(jù)的完整過程如圖2所示。通過加入游戲列表、游戲模擬器資源分配服務、游戲數(shù)據(jù)傳輸中介服務將每個用戶占用一整套服務資源進行云化,根據(jù)算法進行分步、分時為提供用戶不同操作下異步的請求實現(xiàn)多用戶多端口并行處理服務。
4 技術框架的實施
4.1 用戶到云游戲模擬器端的技術實施
游戲模擬器上的游戲端與服務器保持長鏈接,瀏覽器端與服務器保持長鏈接。
登錄行為:瀏覽器端html實現(xiàn)輸入框彈窗,登錄時將賬號密碼封裝成protobuf數(shù)據(jù)包發(fā)送至游戲模擬器端登錄成功后啟動游戲。
斷線行為:當網(wǎng)絡環(huán)境不好或用戶關閉瀏覽器時,瀏覽器端與服務端的長鏈接斷開,此時,游戲模擬器端與服務器端的長鏈接會持續(xù)保存5分鐘,如果5分鐘后無再次連接,游戲模擬器端就會重啟游戲進程重新連接服務器,如果5分鐘內(nèi)瀏覽器端重新連接上,那么服務端會將該瀏覽器與游戲模擬器重新匹配上,達到斷線重連的效果。
點擊行為:游戲模擬器上的游戲端畫面分辨率為240x320,所以在瀏覽器端畫面等比放大,瀏覽器端捕捉點擊與抬起事件,當滑動屏幕時,定時捕捉屏幕坐標作為點擊事件,捕捉到的事件通過protobuf協(xié)議封裝成數(shù)據(jù)包發(fā)送至游戲模擬器的游戲端[3]。
4.2 云游戲模擬器的技術實施步驟
將游戲在模擬器上后臺運行多個(節(jié)省服務器資源)。游戲模擬器上額外運行一個管理程序,負責游戲的啟動關閉,異常處理。
每個游戲啟動一個連接至中轉服務保持的長鏈接,瀏覽器端發(fā)起websocket長鏈接至中轉服務。
中轉服務將瀏覽器端的長鏈接與游戲端的長鏈接進行互傳數(shù)據(jù)。
游戲端在收到瀏覽器端發(fā)來的指令后啟動游戲,生成游戲畫面,分片抓取生成數(shù)據(jù)包傳輸至瀏覽器端。
瀏覽器端收到數(shù)據(jù)之后分片在不同屏幕區(qū)域上進行展示畫面。
游戲端根據(jù)摘要算法對每個數(shù)據(jù)包緩存md5值,發(fā)送數(shù)據(jù)包的時候進行md5值比對,不發(fā)送相同的數(shù)據(jù)包。
在前端進行數(shù)據(jù)包緩存,根據(jù)md5值進行存取達到節(jié)省流量提高運行速度的效果。
瀏覽器端捕捉屏幕觸摸事件,輸入框或按鈕生成指令發(fā)送到游戲端進行交互從而控制游戲。
5 系統(tǒng)性能優(yōu)化
相比而言,云游戲方案避免了移植所帶來的巨大工作量和風險,但是它也存在一些問題。一方面,由于游戲實例都集中在云端的服務器節(jié)點運行,使服務器節(jié)點的計算能力成為瓶頸。另一方面,云游戲需要處理、傳輸大量音視頻數(shù)據(jù),容易引發(fā)延時、卡頓、用戶流量消耗過大等問題。為此,研發(fā)部門采用了如下幾類措施進行優(yōu)化。
5.1 優(yōu)化資源
1)精簡模擬器鏡像。刪除genymotion鏡像上無關的系統(tǒng)應用,如郵件、聯(lián)系人、圖庫等,以減少鏡像內(nèi)的存儲資源占用。
2)多開游戲模擬器。通過變更包名的方式,可多個游戲模擬器可在安卓上同時運行。在某特定型號的服務器節(jié)點上,可支持同時開啟5個安卓模擬器,每個安卓模擬器可開啟5個游戲模擬器。故單節(jié)點可支持25個用戶,并發(fā)量大大提高。
3)自動化縮放游戲模擬器集群。通過實時監(jiān)控游戲模擬器集群的連接狀況,可以動態(tài)縮放集群的規(guī)模。當總連接數(shù)超過最高閾值時,配置管理模塊可以自動化快速動態(tài)部署新游戲模擬器到新服務器節(jié)點;當總連接數(shù)低于最低閾值時,配置管理模塊則自動化取消部分服務器節(jié)點,釋放資源。
5.2 減少視頻數(shù)據(jù)傳輸
1)單圖片分塊傳輸。模擬器游戲的一個特點是存在大量的只有局部圖像變化的場景(例如砍殺怪物時),此時沒有必要傳輸全部的圖像。
游戲模擬器把游戲畫面分塊,檢測各個區(qū)塊的變化,并僅將變化的區(qū)塊發(fā)送到客戶端[4]。客戶端只需增量更新其中變化的部分。由于游戲的分辨率不高,大多只有320x240,因此分塊算法所消耗的CPU在可以接受的范圍內(nèi)。此項優(yōu)化大大減少了網(wǎng)絡傳輸?shù)膱D像數(shù)據(jù)量,自然而然也降低了網(wǎng)絡傳輸?shù)牟淮_定性和時延。
2)幀優(yōu)化。根據(jù)游戲在游戲模擬器平臺上的開發(fā)約定,游戲過程中游戲只能在模擬器的局部區(qū)域內(nèi)繪制畫面。當播放過場動畫時,需要切換到全屏繪制。
因此游戲模擬器可以根據(jù)接口層檢測到的繪制尺寸的變化來判斷游戲是否處于過場動畫階段。如果處于過場動畫階段,游戲模擬器只攔截并傳輸過場動畫的第一幀,丟棄后續(xù)幀。直到繪制區(qū)域大小發(fā)生變化(意味著過場動畫結束,重新進入游戲界面)。
這種方法是犧牲部分用戶體驗,節(jié)省了數(shù)據(jù)傳輸成本。
3)優(yōu)化網(wǎng)絡協(xié)議??蛻舳伺c中繼、中繼與云端的交互中,都使用protobuf協(xié)議封裝數(shù)據(jù)[5]。目的是減少傳輸?shù)膮f(xié)議數(shù)據(jù)量、且提高解析速度。protobuf具有平臺無關和語言無關的優(yōu)點,易擴展,便于在服務端和客戶端異質平臺通信。解析速度比解析XML快約20-100倍。且序列化數(shù)據(jù)非常緊湊,其序列化之后的數(shù)據(jù)量約XML文本方式的1/3到1/10。
6 結束語
經(jīng)過上述優(yōu)化,整個云游戲系統(tǒng)能穩(wěn)定地工作。最終客戶端和服務端的處理和傳輸?shù)臅r延小于100ms,游戲所需的帶寬約為30KB/S,畫面較為流暢,用戶體驗良好。因單臺服務器節(jié)點支持25路并發(fā)服務,部署十臺服務器可供250個用戶同時在線,滿足了業(yè)務部門的目標。
參考文獻:
[1] 劉穎,秦貴和.基于iOS遠程控制應用的設計與實現(xiàn)[J].吉林大學學報(信息科學版),2011,29(5):451-456.
[2] 姜洪濤.基于WPF的云游戲時延可視化系統(tǒng)設計與實現(xiàn)[J].工業(yè)控制計算機,2019,32(6):76-77,80.
[3] 劉螢.基于私有云平臺的手游開發(fā)環(huán)境構建研究[J].計算機產(chǎn)品與流通,2018(4):145.
[4] 關鵬宇.基于云技術的網(wǎng)絡游戲平臺的設計與實現(xiàn)[D].長春:吉林大學,2015(12).
[5] 梁國壯,安在秋,田涵雷,等.基于網(wǎng)絡協(xié)議的無線遠程數(shù)據(jù)傳輸系統(tǒng)設計[J].現(xiàn)代電子技術.2020,43(6):23-26.
【通聯(lián)編輯:謝媛媛】
收稿日期:2021-09-16
作者簡介:呂麗珺(1981—),女,浙江松陽人,講師,碩士,研究方向為網(wǎng)絡應用技術、電子商務應用和商務數(shù)據(jù)分析。
3808500338226