下载游戏时跳转到gofile是什么平台是什么意思

你想想如果你对怎么用C语言写高并发程序一无所知,你上golang就可以自动写出高并发程序了其实很多时候幻觉就发生在这里。

我当初用delphi的时候还很菜现在用C++已经很顺手叻,有时候我就总是会觉得C++写出来的程序就是比delphi的bug少虽然这显然不成立。

}

软件即服务基础架构即服务,岼台即服务通信平台即服务,视频会议即服务那么,游戏即服务(Game as a Service)如何呢已经有不少科技公司试水云游戏,最著名的要数Google的Stadia对WebRTC來说,Stadia已经算是老朋友了但是其他云游戏也能以同样的方式运用WebRTC吗?

Thanh Nguyen研究了他自己的开源项目CloudRetro在这方面是否可行CloudRetro基于很受欢迎的WebRTC的pion库。在这篇文章中Thanh对他如何构建项目进行了框架性的回顾与思考,以及他在此过程中遇到的一些挑战

去年,谷歌发布了Stadia这个想法的独特性和创新性颠覆了我的认知。我一直在质疑当前的技术状态怎么可能支持Stadia为了揭开Stadia的神秘面纱,我创建了Cloud Gaming的开源版本我想在接下来嘚文章中分享有关自己开发Cloud Gaming的一年时间的大冒险。

我相信云游戏不仅将很快成为新一代游戏而且还将成为新一代的计算机科学甚至其他領域。云游戏是客户端/服务器模型的顶峰通过将游戏逻辑放在远程服务器上并将图像/音频流传输到客户端,它可以最大化后端控制并最尛化前端工作由此,服务器将负责处理繁重的任务而客户端将不再受硬件限制。

就Google Stadia而言它实际上使用户可以在YouTube等界面上玩3A游戏。可鉯将相同的方法应用于其他繁重的脱机应用程序例如操作系统或2D / 3D图形设计等,以便我们可以跨平台在低规格设备上一致地运行它们

云遊戏仍然面临技术挑战

游戏是少数需要用户持续且快速反应的应用之一。如果我们单击页面时出现2秒钟的延迟这是可以接受的。直播视頻流通常会延迟很多秒但仍然具有可用性。但是如果游戏频繁延迟500毫秒,该游戏将无法播放

当前的目标是实现极低的延迟,以确保遊戏输入与媒体之间的gap尽可能小因此,传统的视频流传输方法不适用于将图像/音频流传输到客户端的情况

我决定创建一个云游戏的POC,這样我就可以验证在这些严格的网络限制下是否仍有可能实现以上所说的低延迟我选择了Golang作为我的POC,因为这是我最熟悉的语言当然也洇为它便于运作且开发速度快。当处理并发和流操作时Go通道也非常有用。

  • 即点即玩无需下载安装
  • 在浏览器上运行,无需任何软件即可啟动
  • 游戏会话可以在多个设备之间共享并存储在云中方便下次游戏
  • 游戏可播可玩,并且多个用户可以加入同一游戏
  • 在线多人游戏无需網络设置即可进行离线游戏。现在可以在CloudRetro上通过网络与2位玩家一起玩《武士对决》

在不同设备上进行多人线上游戏的demo

以下是我在开始这个項目前列出的一些要求

这项要求听起来并不相关且非常直接,但这是我的主要发现之一它使云游戏摆脱了传统的流媒体服务。如果我們专注于单人游戏就可以摆脱集中式服务器或CDN,因为我们不需要将会话流分配给大量用户该服务不是通过将流上传到摄取服务器或将數据包传递到集中式WebSocket服务器,而是通过WebRTC对等连接直接流向用户

当我研究Stadia时,有些文章提到了WebRTC的应用我发现WebRTC是一项非凡的技术,而且非瑺适合云游戏

WebRTC是一个通过简单的API为Web浏览器和移动应用程序提供实时通信的项目。它支持对等通信并针对媒体进行了优化,并具有内置嘚标准编解码器例如VP8和H264。

我优先考虑为用户提供最流畅的体验而不是保留高质量的图形。该算法中有一些损失是可接受的在Google Stadia上,还囿一个步骤来减小服务器上的图像大小并且图像帧在渲染给对等对象之前被重新缩放为更高的质量。

具有地理路由的分布式架构

无论压縮算法和代码如何优化网络仍然是导致延迟最关键的因素。该体系结构需要一种将最近的服务器与用户配对的机制以减少往返时间(RTT)。这样的体系结构包含单个协调器和分布在世界各地的多个流服务器:美国西部美国东部,欧洲新加坡,中国所有流服务器完全被隔离开来了。当服务器加入或离开网络时系统可以调整其分布。因此在超高流量下,添加更多服务器可实现水平扩展

在用户需求極少的情况下,云游戏的表现是最好的这也意味着能够在浏览器上运行。浏览器通过删除软件和硬件安装为用户带来最舒适的游戏体验同时,它还有助于在移动设备和台式机之间提供跨平台的灵活性幸运的是,WebRTC在不同的浏览器中都具有出色的支持能力

明确划分游戏堺面及服务

我将云游戏服务看作是一个平台,一个能够将任何插件插入的平台目前,我将LibRetro(/)与云游服务集成在一起因为LibRetro为SNES,GBAPS等复古游戏提供了美观的游戏。

为多人、群体游戏和深层游戏链接服务的基于房间的机制

CloudRetro支持许多新颖的游戏玩法例如用于复古游戏的CrowdPlay和线仩多人游戏。如果多个用户在不同计算机上打开相同的深层链接他们将看到的正在运行的游戏与视频流相同,而且他们可以像视频中任哬一个玩家一样加入游戏

此外,游戏状态存储在云中使用户可以随时在任何其他设备上继续他们的游戏

像今天的每一个SAAS一样,云游戏必须被设计为可水平扩展协调器-工作器的设计允许增加更多的工作器以服务更多的流量。

CloudRetro的基础架构托管在各种云提供商(Digital Ocean阿里巴巴,定制提供商)上以对标不同的区域。我通过bash脚本对基础架构进行了dockerize和配置网络设置以避免依赖任何一个云提供商。结合使用WebRTC的NAT遍历我们可以灵活地将CloudRetro部署在任何云平台甚至任何用户的计算机上。

worker:(或者是上面提到的流服务器)生成游戏、运行编码管道、并将编码嘚媒体流传输给用户Worker分布在世界各地,每一个都可以同时处理多个用户会话

Game state storage:所有游戏状态的中央远程存储。该存储实现了一些基本功能例如远程保存/加载。

当新用户在下图所示的步骤1和2中打开CloudRetro时协调器将被要求提供前端页面以及可用Worker列表。之后在第3步,客户端使用HTTP ping请求计算所有候选者的延迟此延迟列表随后发送回协调器,以便它可以确定最适合为用户服务的worker在下面的步骤4中,游戏生成WebRTC流連接是在用户和指定worker之间建立的。

在worker内部游戏和流管道保持隔离状态,并通过接口交换信息当前,该通信是通过Golang通道上的内存传输过程完成的下一个目标是进一步隔离–即以不同的过程独立运行游戏。

Worker中各组件之间如何交互

WebRTC:面向客户端的组件用户输入进入,服务器的编码媒体输出

游戏模拟器:游戏组件。借助Libretro库该系统能够在同一进程内运行游戏,并在内部挂钩媒体和输入流游戏中的帧被捕獲并被发送到编码器。

图像/音频编码器:编码管道它在其中接收媒体帧、在后台进行编码并输出编码的图像/音频。

CloudRetro依靠WebRTC作为骨干因此茬详细介绍我在Golang中的实现之前,第一部分要专门介绍WebRTC技术这是一项很棒的技术,可以极大地帮助我实现亚秒级的延迟流

WebRTC旨在通过简单嘚API在本机移动设备和浏览器上实现高质量的对等连接。

WebRTC以其NAT Traversal功能而闻名它被设计用于对等通信,旨在找到最合适的直接路由避免NAT网关囷防火墙通过名为ICE的进程进行对等通信。作为此过程的一部分WebRTC API使用STUN服务器找到您的公共IP地址,并在无法建立直接通信时回退到中继服务器(TURN)

但是,CloudRetro没有充分利用此功能它的对等连接不是在用户与用户之间,而是在用户与云服务器之间与典型的用户设备相比,该模型的服务器端对直接通信的限制较少服务器不在NAT之后,可以进行预打开入站端口或直接使用公共IP地址等操作

以前,我曾经有让这个项目成为云游戏分发平台的野心这个想法是想让游戏创作者贡献游戏和流媒体资源,用户将直接与游戏创作者的提供者配对以这种分散嘚方式,CloudRetro只是将第三方流资源与用户连接的一种媒介

因此当托管的负担不再依赖CloudRetro时,它会具有更高的可扩展性WebRTC NAT Traversal在简化第三方流资源上嘚对等连接初始化时将发挥重要作用,进而使创建者毫不费力地加入网络

视频压缩是管道中必不可少的部分,它极大地有助于流畅的流媒体体验尽管不一定要完全了解VP8 / H264的所有视频编码细节,但了解其概念有助于阐明流速度参数、调试意外行为并调整延迟

用于流服务的視频压缩具有挑战性,因为该算法需要确保总编码时间+网络传输+解码时间的总和尽可能短另外,编码过程需要是连续并有次序的某些傳统的编码折衷方法并不适用–例如用较长的编码时间换取较小的文件大小和解码时间,或者是无序压缩

视频压缩需要忽略不必要的信息,同时将保真度控制在保持用户可以理解和接受的范围除了对单个静态图像帧进行编码之外,该算法还根据先前和将来的帧对当前帧進行了推断因此仅发送差异。如同在下面的Pacman示例中看到的仅有差分点被传输。

以Pacman为例的视频帧比对

同样音频压缩算法会忽略人类无法感知的数据。目前性能最佳的音频编解码器是OpusOpus旨在通过有序数据报协议(例如RTP实时传输协议)传输音频波。它比(mp3aac)具有更高的质量、产生更低的延迟(通常约为5?//use-internal-packages-to-reduce-your-public-api-surface)。我现在面临的问题是:

  • 无法确定CGO下的细粒度问题就无法定义性能瓶颈

我实现了揭开云游戏服务神秘媔纱的目标并创建了一个平台,可以帮助我和朋友们在线玩怀旧的复古游戏没有Pion库和Pion社区的支持,这个项目是不可能实现的

我非常感谢Pion及其密集的开发,WebRTC和Pion提供的简单API也可以实现平稳的集成

尽管集成起来很简单,但是P2P流媒体的确是计算机科学中一个非常具有挑战性嘚领域它必须处理IP和NAT等常年网络架构的复杂性才能创建对等会话。在从事此项目的过程中我积累了许多有关网络和性能优化的宝贵知識,因此我建议所有人尝试使用WebRTC构建一些P2P产品。

CloudRetro可满足我作为复古游戏玩家的所有用例但是,我认为我可以改进项目中的许多方面唎如使网络更可靠、性能更高、提供更高图形质量的游戏或在用户之间共享游戏。我正在为此而努力

}

需要验证OPPO账号这个是可以关掉嘚。

如果这个设置你没有关掉那么无论你下载游戏还是其他软件,只要不是从手机自带的应用商店中搜索下载的都是需要一验证OPPO账号。

你对这个回答的评价是

}

我要回帖

更多关于 gofile是什么 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信