????????到現(xiàn)在為止豹休,我們已經(jīng)把渲染(采集)到的數(shù)據(jù)超低延時(shí)的網(wǎng)絡(luò)傳輸?shù)搅擞脩舳耍≒C端茵乱、電視端、手機(jī)端等等)搜变。在接收到渲染(采集)的數(shù)據(jù)后采缚,剩下的問題就是如何在用戶端進(jìn)行展現(xiàn)了。
????????首先我們要確定一個(gè)思路挠他,那就是終端(展現(xiàn))的過程應(yīng)該是和渲染(采集)端的過程完全逆向的仰担。
????????還記得我們在第一節(jié)分享的時(shí)候說到:采集的時(shí)候有一個(gè)是否封包的分支。由于這個(gè)分支的存在绩社,也會造成終端(展現(xiàn))部分的分支摔蓝。
????????下面我們就對這個(gè)分支的不同過程進(jìn)行討論。
第一種:進(jìn)行封包了的數(shù)據(jù)
????????對于進(jìn)行了封包的數(shù)據(jù)愉耙,我們需要將這些數(shù)據(jù)進(jìn)行解封包贮尉,這個(gè)事情FFMpeg是最擅長做的,我們可以交給它去做朴沿。也就是我們將封包數(shù)據(jù)放入到FFMpeg隊(duì)列中猜谚,等著FFMpeg進(jìn)行解封包。
????????解封包后的數(shù)據(jù)赌渣,我們使用FFMpeg所提供的接口函數(shù)就可以獲取到了(這里就不用說的太詳細(xì)了魏铅,避免扯出來一大堆的東西)。
????????拿到解封包后的數(shù)據(jù)坚芜,我們會調(diào)用MediaCodec來進(jìn)行硬解碼(在云游戲中览芳,幾乎不會有公司采取軟解碼的方式來進(jìn)行解碼。畢竟軟解碼會造成CPU的消耗鸿竖,進(jìn)而造成盒子或者電視的發(fā)熱)沧竟。
????????對于解碼后的數(shù)據(jù),有的公司的做法和播放普通音視頻數(shù)據(jù)一樣缚忧,需要選取一個(gè)同步的基準(zhǔn)(經(jīng)常會采用音頻數(shù)據(jù)來作為同步基準(zhǔn))悟泵。然后根據(jù)這個(gè)同步基準(zhǔn)進(jìn)行音視頻的播放和渲染。
????????這個(gè)渲染過程中闪水,由于存在音視頻同步的過程(我們稱之為音畫同步)糕非,所以可能會造成同步延遲(一般的做法是判斷視頻解碼后的pts值是否小于等于音頻的pts值)。
????????整個(gè)的過程正如我下面這張圖一樣。
第二種:沒有進(jìn)行封包的數(shù)據(jù)
????????對于沒有進(jìn)行封包的音視頻數(shù)據(jù)朽肥,處理起來就比較簡單了禁筏。
????????首先將音視頻數(shù)據(jù)根據(jù)類型放入到音頻隊(duì)列或者是視頻隊(duì)列中。
然后啟動(dòng)MediaCodec來進(jìn)行解碼鞠呈,對于解碼后的數(shù)據(jù),直接進(jìn)行播放和渲染右钾。
????????這個(gè)過程中不用去考慮什么音畫同步問題蚁吝,為什么呢?
????????想象一下舀射,傳輸采用的是一個(gè)傳輸通道過來的窘茁,那么接收到的數(shù)據(jù)前后關(guān)系和發(fā)送時(shí)他們的前后關(guān)系勢必是相同的。
????????在這種情況下考慮音畫同步是完全多余的一種操作(而且還增加了音畫同步造成的延遲)脆烟。
????????這種情況下的處理邏輯就是下面這張圖中的流程了山林。
????????到此為止,整個(gè)的終端(展現(xiàn))過程就結(jié)束了邢羔。是不是很簡單驼抹?其實(shí)真正做起來這個(gè)過程并不簡單。整個(gè)的過程和自己開發(fā)一款播放器沒什么區(qū)別拜鹤,而且還存在著一些優(yōu)化的方法框冀。
????????例如什么時(shí)候進(jìn)行MediaCodec的初始化?初始化的時(shí)候使用什么樣的分辨率敏簿、幀率明也?是不是和普通的播放器一樣采用avformat_find_stream_info這個(gè)接口來做?使用這個(gè)接口所帶來的延遲怎么解決……等等惯裕,這里就不一一展開了温数。
????????總之,整個(gè)終端(展現(xiàn))過程蜻势,和所采取的渲染(采集)過程是完全相反的撑刺。
????????經(jīng)過上面三篇文章,我們可以梳理出云游戲從采集握玛、傳輸?shù)秸宫F(xiàn)的整個(gè)過程猜煮。
我的觀點(diǎn)
????從這個(gè)過程來看,云游戲在技術(shù)上并不是很復(fù)雜败许。那么王带,限制云游戲發(fā)展的原因是什么呢?
????????站在一個(gè)技術(shù)人員的角度我是這么來看的市殷。
????????限制云游戲發(fā)展的原因并不在技術(shù)上愕撰,而在于以下兩點(diǎn):
??????? 1:云游戲是一個(gè)重資產(chǎn)投入。
??????? 2:云游戲盈利模式非常單一。
????????首先來交流一下重資產(chǎn)投入的事情搞挣。云游戲所投入的服務(wù)器带迟,尤其是arm板卡除了應(yīng)用于云游戲、云手機(jī)外囱桨,幾乎沒有其它用處仓犬。我就曾經(jīng)見過一家做云游戲的公司,自己機(jī)房里面放了很多無用的arm板卡舍肠,他們不知道用這么多arm板卡來做什么搀继。
????????對于重資產(chǎn)投入,個(gè)人覺得可以采用P2P的方式來進(jìn)行處理翠语,收集社會閑散算力資源叽躯。說直白一點(diǎn)就是用戶可以將自家的機(jī)器共享出來,用于云游戲的算力渲染資源肌括。玩家使用了你家的機(jī)器点骑,可以為你支付一定的算力費(fèi)用(怎么又繞到了算力共享上面了……看來之前算力共享的產(chǎn)品給我影響挺大的)。
????????其次就是云游戲盈利模式單一谍夭。大家想想目前的云游戲公司盈利模式無非就是沖平臺積分黑滴,玩游戲消耗積分。而且這種積分一般都是平臺收的紧索,還不算在游戲內(nèi)部的氪金消耗跷跪。
????????對于盈利模式單一的問題,個(gè)人覺得如果簡單的將云游戲作為一個(gè)游戲整合平臺齐板,肯定是不行的吵瞻。
????????作為游戲整合平臺,平臺盈利能力將完全依靠游戲內(nèi)容本身甘磨,而不是平臺本身橡羞。
????????這種發(fā)展的結(jié)果就是平臺成為游戲的分發(fā)渠道捧紅了游戲。游戲收取更高的版權(quán)費(fèi)用济舆。
????????在整個(gè)過程中平臺并沒有獲得什么利益卿泽,造成惡性循環(huán)。
????????云游戲平臺需要盈利滋觉,首先是選定自己的用戶定位签夭。
????????對于云游戲平臺來說,針對的用戶群體應(yīng)該是利用碎片時(shí)間來玩游戲的輕度玩家椎侠,而絕非每天都泡在游戲中的重度玩家第租。想想看,重度玩家誰去玩云游戲拔壹汀慎宾?都氪金了丐吓,誰不自己配個(gè)好電腦、自己買部性能好點(diǎn)的手機(jī)趟据、自己下載游戲客戶端去玩券犁?而且重度玩家的賬號都很值錢的,誰會將自己的賬號放心的在第三平臺上使用靶诩睢粘衬?
????????針對這種輕度玩家,云游戲平臺需要盈利咳促,可以提供更多的玩家互動(dòng)服務(wù)稚新。因?yàn)檩p度玩家比較容易將注意力從游戲本身轉(zhuǎn)移到平臺互動(dòng)上來。這樣可以讓這些玩家在平臺中建立起自己的社交關(guān)系網(wǎng)等缀,一起分享枷莉、交流娇昙。這樣一來用戶對于平臺的依賴度就會提升尺迂。平臺盈利就是水到渠成的事情了。
????????很多云游戲平臺打的旗號是給用戶提供更好冒掌、更優(yōu)秀的游戲噪裕。想法挺好的,但我覺得提供更好股毫、更優(yōu)秀的游戲那是游戲公司的事情膳音,并非云游戲平臺的責(zé)任。