元宇宙可谓是处在风口浪尖,无数的厂商都对元宇宙未来抱有非常美好的憧憬。正因如此,许许多多厂商都在用他们自己的方案,为元宇宙更快、更好的实现,在自己的领域贡献力量。LiveVideoStack 2022北京站邀请到了 ZEGO 即构科技的解决方案专家许明龙,为我们介绍 ZEGO 在元宇宙场景中的底层技术能力构建。
ZEGO即构科技 , 解决方案开发专家
各位下午好。我是来自深圳 ZEGO 即构科技的解决方案专家许明龙。今天给大家分享的主题是《元宇宙场景下的实时互动 RTI 技术能力构建》。
我将从元宇宙与实时互动 RTI、元宇宙场景中的关键技术能力解析以及 ZEGO 元宇宙场景案例深度剖析这三个方面展开介绍。
即构认同元宇宙是未来的互联网发展趋势之一。随着人工智能、RTC、游戏研发、区块链的升级与普适,元宇宙离我们越来越近,我们也相信元宇宙可以带来全新的用户体验和商业闭环,以及更好的互动性和沉浸感,带来接近现实甚至超越现实的全新体验,从功能满足跃迁为情绪满足,实现所见即所得的虚拟世界体验。除此之外,还会带来全新的身份认同和互动体验建设,维护和沉淀数字资产,为企业带来更多的商业空间,同时沉淀有价值的数字资产。
出于这种认同,我们意识到实时通讯 RTC 已经无法概括所有的线上交流。元宇宙的场景下会更加强调互动。为此我们进行了产品升级,从 RTC 升级到了实时互动 RTI。
从实时通讯 RTC 到实时互动 RTI,代表着 ZEGO 的产品能力和服务范围也从以往的 RTC 升级到实时互动 RTI。RTI 代表 了ZEGO 能力的总和,同时也昭示着未来钻研的方向——更好的互动体验,满足精神的需求。
从 RTC 到 RTI,即构做了以下技术能力提升:
智能逼真画质:移动端实时超分,采用 AI 预测用更低流量成本实现更高分辨率;主体分割加上透明通道传输,用智能 AI 算法让虚实交错,实现直播的多样玩法;自研 Z264 编码器实现同等条件下更好的画面质量,对于运动等复杂画面的限制有了提升;
身临其境音质:场景化 AI 降噪,通过智能识别不同场景的不同噪声,进行噪声消除,可以根据场景智能切换降噪模式;空间音频可以让用户听到来自不同方位的声音,让互动更有方位感;
- 无限的场景与玩法:多人状态实时同步、虚拟人以及万人音视频互动,增加了大规模互动的可玩性。
介绍完 ZEGO RTI 的升级思路与相关概念后,我们再来具体看一下概念背后,与元宇宙相关的部分热门技术能力。
传统的 RTC 认为,超过一定人数开麦讲话,声音就会听不清了。这样的想法往往不是产品经理提的,更多的是技术实现上的考虑,因为每一个开麦者都需要把音视频从客户端推流到服务端,人数很多会导致服务端承受非常大的压力,所以传统的 RTC 做法是在业务侧限制或者在 SDK 内部限制了同个房间的同时开麦人数。ZEGO RTI 与传统不同,我们不再限制同时开麦人数。那么我们实现的这个万人连麦有用吗?答案是肯定的,比如线上万人会场、线上万人音乐会,我们不仅需要听唱歌人的声音,还需要听到很多很多观众的声音,而不是几个人的声音,这样的万人连麦就非常有用,可以营造出真实的氛围感和沉浸感。传统的方法是从客户端推流到服务端,通过服务端进行转发,对于万人连麦这样的架构很明显是行不通的。现在我们将客户端的音视频流推流到服务端,再经过服务器层层选路汇聚到边缘节点,最后再拉流到客户端。听到的声音基本囊括了所有开麦者的信息,最大程度的保证其真实感和氛围感不会丢失。整体包括的服务框架和职责有:SDK、网络接入层、调度层、服务层和储存层。
万人连麦一定有对应的客户端 SDK,接入时就通过 SDK 进行。接入时有信令层的接入网关和媒体网关。调度层分为信令统一调度、媒体调度以及流汇聚服务调度。服务层分为房间服务、万人房间服务、推流节点、服务拉流节点服务和音频汇聚服务。
这张图是简化版的架构示意图。这里有两个连麦者,连麦者 1 和连麦者 n,一大部分是房间的服务,另一大部分是媒体服务,想要连麦就必须有一个共同的房间号,无论这个房间有多少人,用户都需要先去登录。登录是指用户去获取房间服务,房间服务会维护用户的登录信息。连麦时,流媒体会从客户端推流到服务,当房间内人数较少时,流媒体调度是直接从源站进行拉流,不需要之前提到的汇聚服务。当房间人数非常多时,之前设置的大房间以及分层汇聚服务就开始发挥作用。大房间会进行大房间流信息的缓存与分发,汇聚服务会根据每一层的选路情况来汇聚。
ZEGO 目前设计了三层的汇聚服务,所有的数据最后都会汇聚到推流节点,最后经过调度层出口,经过拉流调度之后,再通过拉流节点拉到汇聚的流,最终实现万人连麦服务。
虽然配套的客户端看起来接口和能力比较简单,实际上很多都是在服务端完成的,其实客户端也存在推拉流调度上、选路上、异常情况的音频去重、音画同步、用户信息获取等能力。
万人连麦也存在一定的挑战。
首先万人连麦需要面对高并发的情况,传统的房间不一定可以支持万人连麦所带来的高并发要求。ZEGO 通过改进,现在可以支持单房间 100 万人同时在线。
第二个挑战也是最大的挑战,汇聚网络流量过大,计算量过大。ZEGO 将音频和视频分离,只汇聚音频。一些过大的数据,客户端会进行一定量的预计算,以保证服务端不需要再一次进行计算,可以直接选路。
最后一个挑战是保证音频流畅不掉字。万人连麦是一个动态变化的过程,如果不进行相关优化,会出现掉字的情况。ZEGO 通过优化,每个选路环节优先保证音频数据的完整性不被选路策略打断。
多人实时状态同步,更多的应用在元宇宙场景中。在非元宇宙场景中,用户的状态会少一点,一般会有麦克风状态、摄像头状态等。但是在元宇宙场景中,还会包括移动状态、虚拟人的动作状态、表情状态,物品状态等非常多非常复杂的状态数据。这些状态数据的同步要求也都非常实时,否则没有办法进行良好互动,产品体验也无法满足。现在 ZEGO 可以做到实时信令 60ms 左右的延迟。ZEGO 的状态同步信令之所以能做到 60ms 的信令,是因为 ZEGO 对信令进行全球统一实时监控调度,实时计算边缘节点是否就近接入。 在服务端侧,引入了用户视野的概念。服务端可以动态划分视野范围,客户端会有相关的视野事件通知,同时和 RTC 进行深度结合,将方位感、空间感落地到语音中。
元宇宙场景缺少不了 3D 引擎,通常会使用 Unity 或者 UE 构建。ZEGO SDK 底层以 C 语言进行开发,对外输出接口则为 C++/Unity C#,整体模块支持混合编程构建。3D 虚拟场景开发者或者业务应用 APP 开发者都可以使用各自熟悉的语言进行编程构建,没有额外的学习成本。除了客户端便于集成外,服务端引入状态同步服务器,通过状态同步服务器,业务侧服务器可以订阅所有用户的所有状态信息,以便做业务的其它控制行为。虽然听起来很复杂,但是使用起来非常方便,创建之后登录,背后会进行状态划分通知,业务侧只需要关注业务侧需要关注的点即可。
目前由于 AI 的发展,特别是 ChatGPT 应用的快速普及,AI 虚拟人十分常见,那么AI 生成的虚拟人和 ZEGO 的虚拟人有什么区别呢?右边是 ZEGO 虚拟人的生成过程,ZEGO 的虚拟人不是通过 AI 生成的,ZEGO 的虚拟人生成过程比较复杂,需要经过原画阶段的建模、设计、动画、渲染等。原画需要通过原画师自己画,建模我们也有一套自己的建模标准,动画阶段也是。每个环节都有 ZEGO 的设计规范,设计出来的虚拟人是完完整整的人,不是缺胳膊少腿的,同时有配套的衣服、挂件、配件等等,是齐全完备甚至是丰富的。结合ZEGO的设计规范再配套上 ZEGO 的 AI 能力,ZEGO 虚拟人它就像是一个真人一样。总的来说,ZEGO 虚拟人最大的特点是可以通过简单编程实现对虚拟人的精细化控制。
ZEGO 提供 AI 捏脸和手动捏脸两种方式。AI 捏脸是通过强大稳定的脸部识别,对人脸进行海量分析和训练,从而实现虚拟形象对真人人脸的脸型、五官特征精准还原。手动捏脸通过骨骼实现对人脸各部位特征的参数调节,融合合成人脸,并配套妆容配饰等美术素材,可以在虚拟形象上自然替换绑定。声音驱动指通过语音的声波信息来实时驱动当前虚拟现实人物的脸部和嘴部表情,使得虚拟形象自动生成和真人一样自然的表情表达;文本驱动指输入文字即可驱动虚拟形象自然地朗读出声,也可搭载业务层 ASR 及 NLP 能力使虚拟形象对文字或语音内容进行对答。这是一部分虚拟人的形象展示。
在虚拟人风格形态上,ZEGO 的设计团队也设计了多种不同风格的虚拟人,有拟人风格、Q版风格、二次元风格等。上图可以看到捏脸可以调整的参数有很多种,调整的范围也很大,可以随心调整以达到想要的效果。这样的调整可以通过APP自己手动调整,也可以交由程序接口由业务侧去调整进行,还可以通过AI来调整,当拍照或者上传图像后,AI 会从图像中提取人脸五官及脸型、发型等特征,生成与真人高还原度的虚拟形象。
表情驱动
文本驱动
驱动能力分为两部分,包括表情驱动和肢体驱动。表情驱动的驱动源可以有两类,可以通过摄像头来实时驱动,也可以通过动态文字来驱动。摄像头驱动基于领先的人脸关键点精准识别,实时还原面部表情形态。文本驱动输入文字即可驱动虚拟形象自然地朗读出声,也可搭载业务层 ASR 及 NLP 能力使虚拟形象对文字或语音内容进行对答。肢体的驱动可以通过摄像头实时识别动作,提取肢体位置信息,不依赖动作捕捉设备即可实时驱动。通过摄像头驱动对环境和动作还是有所要求的,一旦摄像头拍摄不到将难以驱动,但在不少场景下还是可以用到的。ZEGO 也提出了虚拟人和 RTC 融合的方案,实现多个虚拟人在同一个空间内进行互动。一个虚拟人可以在同一个空间中看到另外的虚拟人的移动、表情、嘴型变化、动作、音视频互动等情况,得益于这样的方案融合,可以让用户在虚拟世界中也可以像现实世界一样感受到对方的情感变化。该方案为 Avatar + RTC。Avatar SDK 是 ZEGO 的虚拟人 SDK, Express SDK 是 ZEGO 的RTC SDK。摄像头将采集到的画面传输到 Avatar SDK,Avatar 在得到数据以后,通过 AI 提取面部表情数据,再通过实时渲染的方式将表情渲染出来。画面渲染出来以后,将画面交给Express SDK,经过网络层的传输,Express SDK 采集的音视频信息也会随数据传输,最后Avatar SDK 将数据汇总,输出表情渲染。
在面对虚拟人直播、虚拟人带货直播、虚拟人客服等场景时,上方图片的方案会更加适合。长时间的实时渲染客户端会吃不消,在客服 H5、小程序、浏览器、Webview等场景普遍纯在这样的诉求。摄像头还是交由 Avatar SDK 采集,采集之后虚拟形象的渲染是在 Avatar SDK 中进行,之后交由 RTC SDK,这样就获得了虚拟人的视频形象帧。同时,RTC SDK 也会采集音频信息推流。推流之后拉流端就不需要进行本地实时渲染虚拟形象了。因为推流出来的流是视频流,在哪里播放对客户端是没有要求的。该案例中,虚拟人可以换装捏脸,整个场景是一个 KTV 房间。这里有虚拟人和虚拟物的交互,例如坐在椅子上、拿着话筒唱歌送礼物、舞蹈动作等,也有虚拟和现实的交互,虚拟人和真人一起唱歌聊天,在真人不想显示真实面部的情况下可以很好的捕捉真人的面部,及时渲染表情以及音频的驱动。整体框架包括两大部分,一部分是程序,另外一部分是 3D 美术资源的设计。ZEGO 设计有资源编排工具,针对资源进行编排和打包,之后上传到美术素材中心。APP 提供 MetaWorld SDK 形式,可以动态加载美术资源进行实时渲染以达到预想的场景效果。ZEGO 与多个专业 3D 美术团队有深度合作,可以提供多个场景白模。上方右图展现的是通过白模的编排与设计,贴上不同的皮肤和元素动态更新。更新完之后,使用 ZEGO 的编排工具进行编排。客户也可以自己设计原画以及建模,然后将由 ZEGEO SDK 进行交互编排,最后实现动态加载进行落地。软件系统方案较为复杂,分为多进程、双进程和单进程。尤其是 Unity,当进程杀掉以后,整个APP 都会被杀掉,为此我们提供了两套解决方案,这里展现的是双进程的解决方案,整个方案分为三部分,宿主 APP 运行 RTC 主业务,整个元宇宙环境运行在一个独立进程。Unity 展示虚拟环境 UI,调用 ZEGO 驱动能力,与通信能力进行进程间的通讯,实现虚拟人位置信令和状态同步信令之间的互通,最后通过 ZEGO 的服务器实现多端通信。MetaWorld SDK 不仅提供简单的基础能力,还提供更为高级的能力,比如交互组件化能力,超级屏幕、编排主体分割形象等可以实现一些看起比较有意思的玩法。除了静态编排外,其实我们还提供了动态编排的能力,可以完全通过 APP 内的接口能力实现动态的编排资源,包括资源的样式、资源的位置、人物和物品的交互方式编排等。ZEGO 官网上线了一个虚拟小窝的解决方案,正是用了这套动态编排资源的方案,开局只提供一个空房间,全靠玩家装修实现属于自己的小窝。以上就是 ZEGO 即构科技在元宇宙底层关键技术的全部分享内容,谢谢大家!
LiveVideoStackCon 2023上海讲师招募中
LiveVideoStackCon是每个人的舞台,如果你在团队、公司中独当一面,在某一领域或技术拥有多年实践,并热衷于技术交流,欢迎申请成为LiveVideoStackCon的讲师。请提交演讲内容至邮箱:[email protected]。