WebRTC → 云游戏中的WebRTC相关实践

前置知识

云游戏通过将游戏逻辑放在远程服务器上,再将图像/音频流传输到客户端这些操作,最大化了后端控制,前端工作量降到最低,同理客户端就不再受硬件限制了;目前云游戏的终极目标就是实现超低的延迟,以确保游戏输入和媒体之间的差距尽可能的小,因此传统的视频流的方法是不可用的;

区别于常规的流媒体方案,云游戏可以摆脱集中式服务器和CDN,因为我们不需要讲流媒体会话分配给大量用户,云游戏服务不再是将流媒体传输到ingest服务器,或者将数据包传输给集中式WebSocket服务器,而是直接通过WebRTC端对端连接给用户提供媒体流;

相对于客户端,用户关注的是一个按键发出后,到看到操作的相应总共的耗时是多少更关注与低延时,此时WebRTC就满足了这种低延时的场景需求;

影响视频质量的指标

  • 分辨率 分辨率是指视频每一帧图像所含的像素;如一帧图像是1920*1080,则其像素是2073600,每一个像素是4个字节,相当于在没有任何压缩的前提下,每帧需要传输8MB的数据,因此就需要对原始视频数据进行编码,通过压缩算法对数据流进行压缩
  • 码率 码率代表的是媒体流每秒传输的数据量;
    • 一般情况下,码率和分辨率是正相关
    • 码率和编码器也相关,相同分辨率下,压缩比越高的编码器,传输码率越低
    • 📢:但也有例外情况:就是分辨率越大,但码率越小,这种情况下是说明在编码过程中压缩过多导致原始图像信息丢失了
  • 帧率 帧率代表每秒播放的帧数
    • 一般情况下,帧率保持在24帧以上都可以看作是流畅的播放,低于15帧时就会感觉到明显的卡顿了
    • 实际情况下,都希望获得高分辨率高帧率的视频流,同时又具备低码率的视频流(同分辨率,压缩越高码率越低),此时就需要有出色的编解码器的支持了,主流的编解码器有VP8、VP9、H264和H265(重点在获得更高的压缩率),H265现在主流浏览器还没有全面支持,需要通过一些定制化内核的手段进行兼容支持

云游戏技术简介

云游戏和常用的远程桌面很像,就是一种远程玩游戏的方式,专业点就叫做交互式流媒体;区别于常规的流媒体形式只是在播放非实时的音视频画面,用户不能操作且得不到实时反馈;而交互式流媒体是视频流会根据用户的操作实时变化产生反馈给用户;

  • 云游戏架构图解
    • 云游戏的终端(用户的设备)
      • 负责显示云端的游戏画面
      • 采集用户的操作
    • 云游戏的服务器
      • 运行云游戏
      • 通过将云游戏终端的指令回放到游戏上,获得游戏实时反馈的画面
      • 通过音视频流的方式发送给玩家的终端设备,由终端设备播放游戏画面
  • 云游戏的优势
    • 硬件门槛低
    • 跨终端访问
    • 免下载直接即点即玩
    • 对于开发商来说,可以降低终端适配带来的额外开发成本,此外还降低了更新发版反馈到用户的一套流程

内部核心逻辑浅析

云游戏核心技术

优秀的云游戏需要具备以下几个核心技术

  • 网络通信技术
    • 网络传输速率、延时和稳定性对云游戏音视频实时性起到了关键的影响,随着5G和WiFi6的不断迭代升级,更有利于云游戏技术的发展和落地
    • 在云游戏中需要有一种架构机制来配对离用户最近的服务器,以减少往返的时间(Round Trip Time),该架构需要一个协调者和分布在世界各地的多个流媒体服务器,所有的流媒体服务器完全独立,可以保证在高流量、高并发的情况下进行横向拓展
    • WebRTC以其NAT遍历最为闻名。WebRTC是为端到端通信而设计的,旨在通过ICE过程找到最合适的直接路由,避开NAT网关和防火墙,进行端到端的通信
  • 边缘计算技术
    • 和CDN的技术类似,云游戏中的边缘计算对于云游戏设备的就近接入起到至关重要的作用,从而保证了用户获得更低的网络延时和更高的稳定性,降低了云游戏的卡顿率和提升了游戏体验
  • 容器化和虚拟化技术
    • 随着服务器虚拟化技术和容器化技术的发展,硬件的利用率得到了充分的提升,每台物理设备都可以通过虚拟化技术转换成多台逻辑设备,加之有容器化技术的加持,可以使得逻辑设备更加轻量级,同时使得硬件的成本降到最低;现在一台物理设备可以通过虚拟化容器化技术支持更多的玩家同时在线,从而改变了之前的「一个玩家分配一台设备提供服务的尴尬场景」这项技术让硬件成本大幅下降,非常有利于云游戏的规模拓展;
    • 同时虚拟化技术可以使得服务器的GPU利用率得到质的提升,将一个物理GPU虚拟化成多个逻辑GPU,供游戏使用
  • 流媒体技术
    • 云游戏的实质还是在播放实时的音视频流,因此编解码技术流媒体传输技术的结合可以使得有高质量的画质和超低延迟的游戏体验;
    • MCU服务会从连麦节点拉取直播流,进行画面合成、转码、再通过连麦节点回传给主播及通过RTMP协议推流到CDN进行直播
    • 视频的额压缩需要确保编码时间+网络传输+解码时间之和尽可能的小,同时视频压缩也是为了省略非必要的信息位,同时保证视频的清晰度是在用户可接受的范围内;此外也会判断前后帧的差异,从而只会发送差异的内容;

WebRTC在云游戏中的作用

WebRTC提供了复杂网络穿透建连机制、成熟的媒体传输机制、先进的拥塞控制算法和高效的音视频编解码技术都是为了保障音视频通信的实时性。而云游戏对于画质、音质、操作反馈的实时性都要求很高,因此WebRTC的设计初衷与云游戏的实现要求都不谋而合;

云游戏中的WebRTC应用架构图解

  • 不使用WebRTC的音视频通信存在的问题
    • 常见音视频通信需要包含的模块:音视频采集模块、音视频编码模块、网络传输模块、音视频渲染模块、网络建连模块
    • 音视频编解码中的问题
      • 需要解决不同客户端编解码兼容问题
      • 需要有一套协商机制,可以判断双方是否可以通信、适用什么编解码器等
    • 网络建连中的问题点
      • 由于IPv4资源不足的问题,现在的设备在网络中的建立连接都需要复杂的实现逻辑
    • 网络传输模块中的问题点
      • 需要有一套优秀的拥塞控制算法来保证实时性和通信质量
    • 其他问题点
      • 不同的NAT、防火墙对媒体P2P的建立带来了挺多问题
      • UDP传输、需要开发人员解决重传、乱序、卡顿等问题,同时会带来一定的延时问题
      • 网络问题导致的拥塞控制等问题,需要单独解决平滑发送等问题
      • 多平台适配的问题,需要解决Android、iOS、Web等端的视频
      • 需要单独处理回声降噪等问题
  • 云游运用到WebRTC的特性
    • WebRTC的复杂网络建连机制
      • WebRTC可以在复杂网络环境下为多端协商到最优的网络连接,从而保证连接后的媒体通信条件是最优的状态,保证音视频的实时性
    • WebRTC的音视频编解码传输、拥塞控制
      • 云游戏运用WebRTC来进行云端游戏画面的编码、传输、解码和播放,同时利用了WebRTC内部提供的实时媒体传输质量反馈,通过反馈信息动态对媒体传输进行调节
    • WebRTC的数据通讯
      • WebRTC的数据通道DataChannel可以提供非音视频数据的实时传输

拓展:拥塞控制策略浅析

WebRTC是通过增加宽带、减少数据量、提高音视频质量、适当增加时延及更准确的带宽评估等方法来提高音视频服务质量的,在这些方法中,减少数据量、适当增加时延和更准确的带宽评估被统称为拥塞控制;

  • WebRTC的拥塞控制系统模块组成
    • 拥塞评估模块:包含GoogGREMN算法、TransportCC算法、丢包拥塞控制算法等
    • 流控模块:包含音视频编解码器、pacer、网络收发模块、RTCP解析模块
  • WebRTC的拥塞控制分为两种
    • 基于时延的拥塞评估
    • 基于丢包的拥塞评估
      • 丢包小于2%
        • 当前网络很好,可以增加8%的额码率,提高通讯的音画质量
      • 丢包介于2% ~ 10%之间
        • 当前码率与网络质量匹配,无需对码率进行调节
      • 丢包大于10%
        • 网络较差,需要降低码率(公式:(1-0.5*丢包率)*当前码率)
    • 最终目的是:评估对应的宽带,然后选择最小值进行码流的调控
  • WebRTC的拥塞控制大致流程
    • 发送端启动时先设置一个初始带宽,然后发送音视频数据给接收端
    • 接收端定期向发送端反馈数据的延时及丢包情况(通过RTCP)
    • 发送端接收延时及丢包情况,输入到拥塞评估模块评估出新的带宽
    • 拥塞评估模块通知编码器,让编码器重新调整码率
    • 拥塞评估模块同时也通知Pacer模块,控制发送速度
    • 不断重复上述步骤,从而实时的适应网络的情况

WebRTC双方通信架构图解

  • ICE服务器浅析

    ICE(Interactive Connectivity Establishment)服务器是一种用于实现实时通信的网络技术。它通过打破网络间的障碍,使设备能够建立点对点的连接,从而在不同网络环境下实现高质量的音视频通话或数据传输。

    • 与信令服务器的区别
      • 信令服务器目的是「帮助建立P2P连接」,在P2P连接成功之前客户端和服务器的数据交互是由信令服务中转完成的
      • 一般的1对1或1对多通信,只需要信令服务和ICE服务即可
      • 当涉及到多对多通信时,则需要更多的技术(需要信令服务、ICE服务、WebRTC服务)
    • 需要解决的两个主要问题
      • 网络地址转换(NAT) → 解决「设备间连接」问题
        • → 可以简单理解为「获取设备的公网IP地址」
        • NAT是指路由器将私有网络IP地址转换为公网IP地址的过程;在某些过程中设备是处于NAT之后的,其真实的IP地址对外部设备是隐藏的,这会导致连接失败
        • ICE服务器通过使用STUN(Session Traversal Utilities for NAT)协议来解决NAT问题
          • STUN协议允许设备查询其在NAT之后的公网IP地址和端口号,然后将这些信息发送给对方设备,以便成功建立连接
      • 防火墙穿越 → 解决「设备间通信」问题
        • → 可以简单理解为「突破防火墙限制,中继的方式建立两个设备的间接性连接传输数据」
        • 在常规和实时通信中,设备需要在防火墙的限制下建立连接,这就需要解决防火墙穿越的问题
        • ICE服务器是通过使用TURN(Traversal Using Relays around NAT)协议来解决防火墙穿越的问题的
          • TURN协议是将设备的数据流量转发到另一个中继的服务器上,然后再由中继服务器将数据转发给对方设备
          • TURN协议的工作流程浅析
            • 设备A和设备B都无法直接建立连接,它们分别向TURN服务器发送连接请求。
            • TURN服务器接收到连接请求后,为设备A和设备B分配一个临时的外部IP地址和端口号。
            • 设备A和设备B分别与TURN服务器建立连接,并将数据流量发送到TURN服务器。
            • TURN服务器接收到数据流量后,将其转发给对应的设备。

推荐文献

带你了解云游戏实现关键技术 -- WebRTC👍🏻👍🏻👍🏻👍🏻
RTC-实时音视频通信技术介绍与应用
搭载WebRTC的开源云游戏

相关推荐
程序猿online29 分钟前
nvm安装使用,控制node版本
开发语言·前端·学习
web Rookie39 分钟前
React 中 createContext 和 useContext 的深度应用与优化实战
前端·javascript·react.js
男孩1243 分钟前
react高阶组件及hooks
前端·javascript·react.js
m0_748251721 小时前
DataOps驱动数据集成创新:Apache DolphinScheduler & SeaTunnel on Amazon Web Services
前端·apache
珊珊来吃1 小时前
EXCEL中给某一列数据加上双引号
java·前端·excel
onejason1 小时前
深度解析:利用Python爬虫获取亚马逊商品详情
前端·python
胡西风_foxww2 小时前
【ES6复习笔记】Spread 扩展运算符(8)
前端·笔记·es6·扩展·运算符·spread
小林爱2 小时前
【Compose multiplatform教程08】【组件】Text组件
android·java·前端·ui·前端框架·kotlin·android studio
番茄电脑全能王2 小时前
《CS2》提示mss32.dll丢失的根源与应对策略。《CS2》提示mss32.dll丢失是什么原因?mss32.dll丢失怎么办?
网络·经验分享·游戏·电脑
跨境商城搭建开发2 小时前
一个服务器可以搭建几个网站?搭建一个网站的流程介绍
运维·服务器·前端·vue.js·mysql·npm·php