基于 WebRTC 的云游戏开源项目(三)

WebRTC

WebRTC旨在通过简单的API,在本机移动应用和浏览器上实现高质量的端对端连接。

NAT遍历

WebRTC专攻端对端通信,特别以其NAT遍历功能而闻名。它旨在绕过NAT网关和防火墙,找到最合适的直接路由,然后通过名为ICE的进程进行端对端通信。作为此进程的一部分,WebRTC API使用STUN服务器找到您的公共IP地址,并在无法建立直接通信时回退到中继服务器(TURN)。

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

以前,我曾雄心勃勃地开发该项目,想使其成为云游戏的游戏分发平台。也就是说让游戏开发者贡献游戏和流媒体资源。用户会直接与游戏开发者的供方配对。用这种分散的方式,CloudRetro只是连接第三方流资源与用户的一种媒介。所以当CloudRetro不再托管时,它具有更高的可扩展性。在简化第三方流资源上的对等连接初始化上,WebRTC NAT遍历能发挥重要作用。它使开发者能毫不费力地加入网络。

视频压缩

视频压缩是管道中必不可少的部分,它能极大提高流畅的流媒体体验。尽管我们不一定要了解VP8 / H264的所有视频编码细节,但了解其概念有助于揭开流速度参数的神秘面纱,调试意外行为并调整延迟。

要将视频压缩用于流服务面临极大挑战。因为我们的算法需要确保总编码时间+网络传输+解码时间尽可能短。另外,编码过程需要连续,没有中断。某些传统的编码折衷方法并不适用。例如:编码时间变长,那么就会出现较小的文件和较短的解码时间,或者无序压缩。

视频压缩的初衷是忽略不必要的信息,同时可以保证用户能理解的保真度。除了对单个静态图像帧进行编码之外,该算法还根据先前和将来的帧,对当前帧进行了推断,所以可以仅发送差异。正如你在下面的Pacman示例中看到的,只传输了差分点。

音频压缩

同样,音频压缩算法会忽略我们无法感知的数据。目前性能最佳的音频编解码器是Opus。 Opus旨在通过有序数据报协议(例如RTP(实时传输协议))传输音频波。它比mp3,aac的质量更高,延迟更低,通常约为5〜66.5 ms。

Pion——Golang中的WebRTC

Pion是一个开源项目,可以把WebRTC引入Golang。Pion不是简单地包装本机C ++ WebRTC库,而是一种本机Golang更好性能、更好的Golang集成以及构成的WebRTC协议的版本控制的实现方式。

该库还提供有许多出色内置功能的亚秒级延迟流。它有自己的STUN,DTLS,SCTP等实现方式,以及QUIC和WebAssembly的一些实验。这个开源库本身确实是一个很好的学习资源,里面包含出色的文档、网络协议实现和出色的示例。

由热心的开发者管理的Pion社区非常活跃,在其中他们对WebRTC进行了许多高质量的讨论。如果你对此技术感兴趣,请加入http://pion.ly/slack,你会学到许多新东西。

文章地址:https://webrtchacks.com/open-source-cloud-gaming-with-webrtc/

原文作者:Thanh Nguyen

填写常用邮箱,接收社区更新

WebRTC 中文社区由

运营