通过收购Cryengine, Amazon的Twitch解决了游戏直播界的一个大问题--游戏截屏。
虽然所有做游戏直播的都能截取游戏屏幕然后编码成视频广播出去,但是截屏的方式都是不稳定、不可靠、兼容性差、性能差的。
常用解决方案:
PC Windows 桌面截屏,让游戏以窗口模式运行,然后对整个PC桌面做截屏,这种方式实现简单,但是性能很差,Windows8.1以前的版本桌面截屏的性能上不去,大约就25FPS左右,但是游戏自身的帧率远远不止25,所以编码出来的视频有不连贯感,对于动作类游戏尤其严重,而且要求游戏支持窗口模式运行,不能支持全屏模式游戏,有兼容问题。
Windows 游戏进程DirectX注入截图,利用Windows系统的进程注入机制,注入代码到游戏进程,Hook 某些DirectX的API截取Surface的图像,然后通过内存映像文件共享给外部进程,由外部进程进行视频编码上传。这种方法实现很复杂,有较高技术要求,和部分游戏间存在兼容问题,会导致不稳定。优点是可以截取更高的帧率,也支持全屏模式的游戏。
显卡驱动集成,nVidia的显卡驱动集成了 ShadowPlay,直接从显卡驱动级别截取游戏画面,这种方法对硬件有要求,而且要和nVidia合作,另外视频编码只能用NVEnc的硬件编码,编码效果呵呵。
多硬件方案,一台机器用来打游戏,同时用HDMI接口把图像输出到第二显示器,另一台机器用视频采集卡获取图像编码上传,对硬件有较高要求,配置起来麻烦。
以上都是Windows平台的方法,MacOS我不太熟,进程注入据说也是可以的但是要ROOT权限,有点不安全。
iOS,安全性太高了,除非越狱后,但是要求直播个游戏还要ROOT iphone太不现实了。一般采用的是利用 AirPlay,把iPhone的图像通过AirPlay弄到PC上,然后对PC进行截屏直播,缺点很明显,操作起来麻烦,不稳定,而且视频已经被iphone做了一次编码,不清晰,帧率也低。
Android,ROOT后可以搞进程注入Hook API,实现起来难度很高,兼容性也不好。如果像iPhone那样通过MiraCast把手机屏幕传到PC上也是可以的,但是Android普遍视频编码效果不如iPhone,画质会比较呵呵,播些休闲小游戏还凑合。
总之,目前所有直播游戏的方法都有各式各样的缺陷和使用场景要求,没有一个完美方案。
Amazon的Twitch这次试图从游戏引擎下手,把直播做成游戏引擎内置功能,这样截取的游戏画质是完美的,兼容性是没问题的,还跨平台,无须ROOT越狱。但是估计只能用在使用此引擎的游戏,并且只能直播到Twitch平台,至于其它游戏和其它直播平台。。。
呵呵,有本事你也去买下Cryengine & Twitch啊!