到现在为止,我们已经把渲染(采集)到的数据超低延时的网络传输到了用户端(PC端、电视端、手机端等等)。在接收到渲染(采集)的数据后,剩下的问题就是如何在用户端进行展现了。
首先我们要确定一个思路,那就是终端(展现)的过程应该是和渲染(采集)端的过程完全逆向的。
还记得我们在第一节分享的时候说到:采集的时候有一个是否封包的分支。由于这个分支的存在,也会造成终端(展现)部分的分支。
下面我们就对这个分支的不同过程进行讨论。
第一种:进行封包了的数据
对于进行了封包的数据,我们需要将这些数据进行解封包,这个事情FFMpeg是最擅长做的,我们可以交给它去做。也就是我们将封包数据放入到FFMpeg队列中,等着FFMpeg进行解封包。
解封包后的数据,我们使用FFMpeg所提供的接口函数就可以获取到了(这里就不用说的太详细了,避免扯出来一大堆的东西)。
拿到解封包后的数据,我们会调用MediaCodec来进行硬解码(在云游戏中,几乎不会有公司采取软解码的方式来进行解码。毕竟软解码会造成CPU的消耗,进而造成盒子或者电视的发热)。
对于解码后的数据,有的公司的做法和播放普通音视频数据一样,需要选取一个同步的基准(经常会采用音频数据来作为同步基准)。然后根据这个同步基准进行音视频的播放和渲染。
这个渲染过程中,由于存在音视频同步的过程(我们称之为音画同步),所以可能会造成同步延迟(一般的做法是判断视频解码后的pts值是否小于等于音频的pts值)。
整个的过程正如我下面这张图一样。
第二种:没有进行封包的数据
对于没有进行封包的音视频数据,处理起来就比较简单了。
首先将音视频数据根据类型放入到音频队列或者是视频队列中。
然后启动MediaCodec来进行解码,对于解码后的数据,直接进行播放和渲染。
这个过程中不用去考虑什么音画同步问题,为什么呢?
想象一下,传输采用的是一个传输通道过来的,那么接收到的数据前后关系和发送时他们的前后关系势必是相同的。
在这种情况下考虑音画同步是完全多余的一种操作(而且还增加了音画同步造成的延迟)。
这种情况下的处理逻辑就是下面这张图中的流程了。
到此为止,整个的终端(展现)过程就结束了。是不是很简单?其实真正做起来这个过程并不简单。整个的过程和自己开发一款播放器没什么区别,而且还存在着一些优化的方法。
例如什么时候进行MediaCodec的初始化?初始化的时候使用什么样的分辨率、帧率?是不是和普通的播放器一样采用avformat_find_stream_info这个接口来做?使用这个接口所带来的延迟怎么解决……等等,这里就不一一展开了。
总之,整个终端(展现)过程,和所采取的渲染(采集)过程是完全相反的。
经过上面三篇文章,我们可以梳理出云游戏从采集、传输到展现的整个过程。
我的观点
从这个过程来看,云游戏在技术上并不是很复杂。那么,限制云游戏发展的原因是什么呢?
站在一个技术人员的角度我是这么来看的。
限制云游戏发展的原因并不在技术上,而在于以下两点:
1:云游戏是一个重资产投入。
2:云游戏盈利模式非常单一。
首先来交流一下重资产投入的事情。云游戏所投入的服务器,尤其是arm板卡除了应用于云游戏、云手机外,几乎没有其它用处。我就曾经见过一家做云游戏的公司,自己机房里面放了很多无用的arm板卡,他们不知道用这么多arm板卡来做什么。
对于重资产投入,个人觉得可以采用P2P的方式来进行处理,收集社会闲散算力资源。说直白一点就是用户可以将自家的机器共享出来,用于云游戏的算力渲染资源。玩家使用了你家的机器,可以为你支付一定的算力费用(怎么又绕到了算力共享上面了……看来之前算力共享的产品给我影响挺大的)。
其次就是云游戏盈利模式单一。大家想想目前的云游戏公司盈利模式无非就是冲平台积分,玩游戏消耗积分。而且这种积分一般都是平台收的,还不算在游戏内部的氪金消耗。
对于盈利模式单一的问题,个人觉得如果简单的将云游戏作为一个游戏整合平台,肯定是不行的。
作为游戏整合平台,平台盈利能力将完全依靠游戏内容本身,而不是平台本身。
这种发展的结果就是平台成为游戏的分发渠道捧红了游戏。游戏收取更高的版权费用。
在整个过程中平台并没有获得什么利益,造成恶性循环。
云游戏平台需要盈利,首先是选定自己的用户定位。
对于云游戏平台来说,针对的用户群体应该是利用碎片时间来玩游戏的轻度玩家,而绝非每天都泡在游戏中的重度玩家。想想看,重度玩家谁去玩云游戏啊?都氪金了,谁不自己配个好电脑、自己买部性能好点的手机、自己下载游戏客户端去玩?而且重度玩家的账号都很值钱的,谁会将自己的账号放心的在第三平台上使用啊?
针对这种轻度玩家,云游戏平台需要盈利,可以提供更多的玩家互动服务。因为轻度玩家比较容易将注意力从游戏本身转移到平台互动上来。这样可以让这些玩家在平台中建立起自己的社交关系网,一起分享、交流。这样一来用户对于平台的依赖度就会提升。平台盈利就是水到渠成的事情了。
很多云游戏平台打的旗号是给用户提供更好、更优秀的游戏。想法挺好的,但我觉得提供更好、更优秀的游戏那是游戏公司的事情,并非云游戏平台的责任。