元宇宙场景下的实时互动RTI技术能力构建

news/2024/4/20 0:28:49/文章来源:https://blog.csdn.net/vn9PLgZvnPs1522s82g/article/details/130256477

元宇宙可谓是处在风口浪尖,无数的厂商都对元宇宙未来抱有非常美好的憧憬。正因如此,许许多多厂商都在用他们自己的方案,为元宇宙更快、更好的实现,在自己的领域贡献力量。LiveVideoStack 2022北京站邀请到了 ZEGO 即构科技的解决方案专家许明龙,为我们介绍 ZEGO 在元宇宙场景中的底层技术能力构建。

文/许明龙

编辑/LiveVideoStack

617253806c9be9789943e811302473d9.jpeg

ZEGO即构科技 , 解决方案开发专家

各位下午好。我是来自深圳 ZEGO 即构科技的解决方案专家许明龙。今天给大家分享的主题是《元宇宙场景下的实时互动 RTI 技术能力构建》。

561629c7cfb169e0092e921891d09aa3.jpeg

我将从元宇宙与实时互动 RTI、元宇宙场景中的关键技术能力解析以及 ZEGO 元宇宙场景案例深度剖析这三个方面展开介绍。

-01-

元宇宙与实时互动RTI

d11f0975b242f60791efd64ec82c2ac0.jpeg

即构认同元宇宙是未来的互联网发展趋势之一。随着人工智能、RTC、游戏研发、区块链的升级与普适,元宇宙离我们越来越近,我们也相信元宇宙可以带来全新的用户体验和商业闭环,以及更好的互动性和沉浸感,带来接近现实甚至超越现实的全新体验,从功能满足跃迁为情绪满足,实现所见即所得的虚拟世界体验。除此之外,还会带来全新的身份认同和互动体验建设,维护和沉淀数字资产,为企业带来更多的商业空间,同时沉淀有价值的数字资产。

549391c965373e029fca9f90a2caa6ad.jpeg

出于这种认同,我们意识到实时通讯 RTC 已经无法概括所有的线上交流。元宇宙的场景下会更加强调互动。为此我们进行了产品升级,从 RTC 升级到了实时互动 RTI

f741075e044442c1e9a760c6226739f1.jpeg

从实时通讯 RTC 到实时互动 RTI,代表着 ZEGO 的产品能力和服务范围也从以往的 RTC 升级到实时互动 RTI。RTI 代表 了ZEGO 能力的总和,同时也昭示着未来钻研的方向——更好的互动体验,满足精神的需求。

e52dbe8363f7816af5dc0a1050f6e687.jpeg

从 RTC 到 RTI,即构做了以下技术能力提升:

  • 智能逼真画质:移动端实时超分,采用 AI 预测用更低流量成本实现更高分辨率;主体分割加上透明通道传输,用智能 AI 算法让虚实交错,实现直播的多样玩法;自研 Z264 编码器实现同等条件下更好的画面质量,对于运动等复杂画面的限制有了提升;

  • 身临其境音质:场景化 AI 降噪,通过智能识别不同场景的不同噪声,进行噪声消除,可以根据场景智能切换降噪模式;空间音频可以让用户听到来自不同方位的声音,让互动更有方位感;

  • 无限的场景与玩法:多人状态实时同步、虚拟人以及万人音视频互动,增加了大规模互动的可玩性。

-02-

元宇宙场景中的关键技术能力解析

介绍完 ZEGO RTI 的升级思路与相关概念后,我们再来具体看一下概念背后,与元宇宙相关的部分热门技术能力。

2.1 万人连麦

传统的 RTC 认为,超过一定人数开麦讲话,声音就会听不清了。这样的想法往往不是产品经理提的,更多的是技术实现上的考虑,因为每一个开麦者都需要把音视频从客户端推流到服务端,人数很多会导致服务端承受非常大的压力,所以传统的 RTC 做法是在业务侧限制或者在 SDK 内部限制了同个房间的同时开麦人数。

a55956d654c360ad1f8049395f45b11d.jpeg

ZEGO RTI 与传统不同,我们不再限制同时开麦人数。那么我们实现的这个万人连麦有用吗?答案是肯定的,比如线上万人会场、线上万人音乐会,我们不仅需要听唱歌人的声音,还需要听到很多很多观众的声音,而不是几个人的声音,这样的万人连麦就非常有用,可以营造出真实的氛围感和沉浸感。

458c772cf5356428877093612700f4ed.jpeg

传统的方法是从客户端推流到服务端,通过服务端进行转发,对于万人连麦这样的架构很明显是行不通的。现在我们将客户端的音视频流推流到服务端,再经过服务器层层选路汇聚到边缘节点,最后再拉流到客户端。听到的声音基本囊括了所有开麦者的信息,最大程度的保证其真实感和氛围感不会丢失。

fedbe207880b496d8c3b23cfa84e1ee9.jpeg

整体包括的服务框架和职责有:SDK、网络接入层、调度层、服务层和储存层。

万人连麦一定有对应的客户端 SDK,接入时就通过 SDK 进行。接入时有信令层的接入网关和媒体网关。调度层分为信令统一调度、媒体调度以及流汇聚服务调度。服务层分为房间服务、万人房间服务、推流节点、服务拉流节点服务和音频汇聚服务。

995929e8d8fd0dfb09cc5e00423dc562.jpeg

接下来重点介绍万人连麦的整体服务架构。

这张图是简化版的架构示意图。这里有两个连麦者,连麦者 1 和连麦者 n,一大部分是房间的服务,另一大部分是媒体服务,想要连麦就必须有一个共同的房间号,无论这个房间有多少人,用户都需要先去登录。登录是指用户去获取房间服务,房间服务会维护用户的登录信息。连麦时,流媒体会从客户端推流到服务,当房间内人数较少时,流媒体调度是直接从源站进行拉流,不需要之前提到的汇聚服务。当房间人数非常多时,之前设置的大房间以及分层汇聚服务就开始发挥作用。大房间会进行大房间流信息的缓存与分发,汇聚服务会根据每一层的选路情况来汇聚。

ZEGO 目前设计了三层的汇聚服务,所有的数据最后都会汇聚到推流节点,最后经过调度层出口,经过拉流调度之后,再通过拉流节点拉到汇聚的流,最终实现万人连麦服务。

05789226c62efd40dd835ec705d8f3e1.jpeg

虽然配套的客户端看起来接口和能力比较简单,实际上很多都是在服务端完成的,其实客户端也存在推拉流调度上、选路上、异常情况的音频去重、音画同步、用户信息获取等能力。

b8398ec7e9e7977fd67a7c594dfdf0cb.jpeg

万人连麦也存在一定的挑战。

首先万人连麦需要面对高并发的情况,传统的房间不一定可以支持万人连麦所带来的高并发要求。ZEGO 通过改进,现在可以支持单房间 100 万人同时在线。

第二个挑战也是最大的挑战,汇聚网络流量过大,计算量过大。ZEGO 将音频和视频分离,只汇聚音频。一些过大的数据,客户端会进行一定量的预计算,以保证服务端不需要再一次进行计算,可以直接选路。

最后一个挑战是保证音频流畅不掉字。万人连麦是一个动态变化的过程,如果不进行相关优化,会出现掉字的情况。ZEGO 通过优化,每个选路环节优先保证音频数据的完整性不被选路策略打断。

2.2 多人状态实时同步

ca5151b21d953ab21f5fcb871d7d21ca.jpeg

多人实时状态同步,更多的应用在元宇宙场景中。在非元宇宙场景中,用户的状态会少一点,一般会有麦克风状态、摄像头状态等。但是在元宇宙场景中,还会包括移动状态、虚拟人的动作状态、表情状态,物品状态等非常多非常复杂的状态数据。这些状态数据的同步要求也都非常实时,否则没有办法进行良好互动,产品体验也无法满足。现在 ZEGO 可以做到实时信令 60ms 左右的延迟。ZEGO 的状态同步信令之所以能做到 60ms 的信令,是因为 ZEGO 对信令进行全球统一实时监控调度,实时计算边缘节点是否就近接入。 

在服务端侧,引入了用户视野的概念。服务端可以动态划分视野范围,客户端会有相关的视野事件通知,同时和 RTC 进行深度结合,将方位感、空间感落地到语音中。

d316c0a3468a742454848194dbd5b1d9.jpeg

元宇宙场景缺少不了 3D 引擎,通常会使用 Unity 或者 UE 构建。ZEGO SDK 底层以 C 语言进行开发,对外输出接口则为 C++/Unity C#,整体模块支持混合编程构建。3D 虚拟场景开发者或者业务应用 APP 开发者都可以使用各自熟悉的语言进行编程构建,没有额外的学习成本。除了客户端便于集成外,服务端引入状态同步服务器,通过状态同步服务器,业务侧服务器可以订阅所有用户的所有状态信息,以便做业务的其它控制行为。

b3dcea9460385912cd970368139418b4.jpeg

虽然听起来很复杂,但是使用起来非常方便,创建之后登录,背后会进行状态划分通知,业务侧只需要关注业务侧需要关注的点即可。 

2.3 ZEGO 虚拟人

a58490fa1a13ee8c0448b60f283ecbef.jpeg

目前由于 AI 的发展,特别是 ChatGPT 应用的快速普及,AI 虚拟人十分常见,那么AI 生成的虚拟人和 ZEGO 的虚拟人有什么区别呢?右边是 ZEGO 虚拟人的生成过程,ZEGO 的虚拟人不是通过 AI 生成的,ZEGO 的虚拟人生成过程比较复杂,需要经过原画阶段的建模、设计、动画、渲染等。原画需要通过原画师自己画,建模我们也有一套自己的建模标准,动画阶段也是。每个环节都有 ZEGO 的设计规范,设计出来的虚拟人是完完整整的人,不是缺胳膊少腿的,同时有配套的衣服、挂件、配件等等,是齐全完备甚至是丰富的。结合ZEGO的设计规范再配套上 ZEGO 的 AI 能力,ZEGO 虚拟人它就像是一个真人一样。总的来说,ZEGO 虚拟人最大的特点是可以通过简单编程实现对虚拟人的精细化控制。

29d6f25cd5c7fb386d8d771c4979f291.jpeg

ZEGO 提供 AI 捏脸和手动捏脸两种方式。AI 捏脸是通过强大稳定的脸部识别,对人脸进行海量分析和训练,从而实现虚拟形象对真人人脸的脸型、五官特征精准还原。手动捏脸通过骨骼实现对人脸各部位特征的参数调节,融合合成人脸,并配套妆容配饰等美术素材,可以在虚拟形象上自然替换绑定。

表情随动、肢体随动下文会细说。

声音驱动指通过语音的声波信息来实时驱动当前虚拟现实人物的脸部和嘴部表情,使得虚拟形象自动生成和真人一样自然的表情表达;文本驱动指输入文字即可驱动虚拟形象自然地朗读出声,也可搭载业务层 ASR 及 NLP 能力使虚拟形象对文字或语音内容进行对答。

694ca656f1a6725f82abf0d253f42539.jpeg

这是一部分虚拟人的形象展示。

在虚拟人风格形态上,ZEGO 的设计团队也设计了多种不同风格的虚拟人,有拟人风格、Q版风格、二次元风格等。

1e47ed2be15df83a9579533057b6b31d.jpeg

上图可以看到捏脸可以调整的参数有很多种,调整的范围也很大,可以随心调整以达到想要的效果。这样的调整可以通过APP自己手动调整,也可以交由程序接口由业务侧去调整进行,还可以通过AI来调整,当拍照或者上传图像后,AI 会从图像中提取人脸五官及脸型、发型等特征,生成与真人高还原度的虚拟形象。

bb8e11f2d091f7fa13043fd4609bec81.jpeg

表情驱动

文本驱动

驱动能力分为两部分,包括表情驱动和肢体驱动。表情驱动的驱动源可以有两类,可以通过摄像头来实时驱动,也可以通过动态文字来驱动。摄像头驱动基于领先的人脸关键点精准识别,实时还原面部表情形态。文本驱动输入文字即可驱动虚拟形象自然地朗读出声,也可搭载业务层 ASR 及 NLP 能力使虚拟形象对文字或语音内容进行对答。

71a6ad4e4a967097e88f8cfb93dd7b73.jpeg

肢体驱动 

肢体的驱动可以通过摄像头实时识别动作,提取肢体位置信息,不依赖动作捕捉设备即可实时驱动。通过摄像头驱动对环境和动作还是有所要求的,一旦摄像头拍摄不到将难以驱动,但在不少场景下还是可以用到的。

cfd33517cc0cef54bd5d4ed9abb94835.jpeg

ZEGO 也提出了虚拟人和 RTC 融合的方案,实现多个虚拟人在同一个空间内进行互动。一个虚拟人可以在同一个空间中看到另外的虚拟人的移动、表情、嘴型变化、动作、音视频互动等情况,得益于这样的方案融合,可以让用户在虚拟世界中也可以像现实世界一样感受到对方的情感变化。

该方案为 Avatar + RTC。Avatar SDK 是 ZEGO 的虚拟人 SDK, Express SDK 是 ZEGO 的RTC SDK。摄像头将采集到的画面传输到 Avatar SDK,Avatar 在得到数据以后,通过 AI 提取面部表情数据,再通过实时渲染的方式将表情渲染出来。画面渲染出来以后,将画面交给Express SDK,经过网络层的传输,Express SDK 采集的音视频信息也会随数据传输,最后Avatar SDK 将数据汇总,输出表情渲染。

752551fd3f107f203e2172224c254da0.jpeg

在面对虚拟人直播、虚拟人带货直播、虚拟人客服等场景时,上方图片的方案会更加适合。长时间的实时渲染客户端会吃不消,在客服 H5、小程序、浏览器、Webview等场景普遍纯在这样的诉求。摄像头还是交由 Avatar SDK 采集,采集之后虚拟形象的渲染是在 Avatar SDK 中进行,之后交由 RTC SDK,这样就获得了虚拟人的视频形象帧。同时,RTC SDK 也会采集音频信息推流。推流之后拉流端就不需要进行本地实时渲染虚拟形象了。因为推流出来的流是视频流,在哪里播放对客户端是没有要求的。

-03-

ZEGO 元宇宙场景案例剖析

讲完 ZEGO 虚拟人,来看一个完整的案例。

2a2c2c01080c75c05b11f2e641c24a2d.jpeg

该案例中,虚拟人可以换装捏脸,整个场景是一个 KTV 房间。这里有虚拟人和虚拟物的交互,例如坐在椅子上、拿着话筒唱歌送礼物、舞蹈动作等,也有虚拟和现实的交互,虚拟人和真人一起唱歌聊天,在真人不想显示真实面部的情况下可以很好的捕捉真人的面部,及时渲染表情以及音频的驱动。

5bb074786533251904d34112ee0fe3bd.jpeg

整体框架包括两大部分,一部分是程序,另外一部分是 3D 美术资源的设计。ZEGO 设计有资源编排工具,针对资源进行编排和打包,之后上传到美术素材中心。APP 提供 MetaWorld SDK 形式,可以动态加载美术资源进行实时渲染以达到预想的场景效果。

f0abb1924e80dd3a98b3970443267e1e.jpeg

ZEGO 与多个专业 3D 美术团队有深度合作,可以提供多个场景白模。上方右图展现的是通过白模的编排与设计,贴上不同的皮肤和元素动态更新。更新完之后,使用 ZEGO 的编排工具进行编排。

172b2198c45ada80f1a43e379718f2eb.jpeg

客户也可以自己设计原画以及建模,然后将由 ZEGEO SDK 进行交互编排,最后实现动态加载进行落地。

07b510cb6e16c26e902ddad1587dc419.jpeg

软件系统方案较为复杂,分为多进程、双进程和单进程。尤其是 Unity,当进程杀掉以后,整个APP 都会被杀掉,为此我们提供了两套解决方案,这里展现的是双进程的解决方案,整个方案分为三部分,宿主 APP 运行 RTC 主业务,整个元宇宙环境运行在一个独立进程。Unity 展示虚拟环境 UI,调用 ZEGO 驱动能力,与通信能力进行进程间的通讯,实现虚拟人位置信令和状态同步信令之间的互通,最后通过 ZEGO 的服务器实现多端通信。

7a10f29310ebb8850af227136c0831e7.jpeg

MetaWorld SDK 不仅提供简单的基础能力,还提供更为高级的能力,比如交互组件化能力,超级屏幕、编排主体分割形象等可以实现一些看起比较有意思的玩法。除了静态编排外,其实我们还提供了动态编排的能力,可以完全通过 APP 内的接口能力实现动态的编排资源,包括资源的样式、资源的位置、人物和物品的交互方式编排等。ZEGO 官网上线了一个虚拟小窝的解决方案,正是用了这套动态编排资源的方案,开局只提供一个空房间,全靠玩家装修实现属于自己的小窝。

以上就是 ZEGO 即构科技在元宇宙底层关键技术的全部分享内容,谢谢大家!


93fbb732814afe1a4997b7f4b128065d.jpeg

LiveVideoStackCon 2023上海讲师招募中

LiveVideoStackCon是每个人的舞台,如果你在团队、公司中独当一面,在某一领域或技术拥有多年实践,并热衷于技术交流,欢迎申请成为LiveVideoStackCon的讲师。请提交演讲内容至邮箱:speaker@livevideostack.com。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_102483.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

17.集合

集合 集合类是Java数据结构的实现。Java的集合类是java.util包中的重要内容,它允许以各种方式将元素分组,并定义了各种使这些元素更容易操作的方法。Java集合类是Java将一些基本的和使用频率极高的基础类进行封装和增强后再以一个类的形式提供。集合类是…

【Vue2源码】响应式原理

【Vue2源码】响应式原理 文章目录 【Vue2源码】响应式原理Vue响应式的核心设计思路整体流程响应式中的关键角色检测变化注意事项响应式原理数据观测重写数组7个变异方法增加__ob__属性__ob__有两大用处: Vue.js 基本上遵循 MVVM(Model–View–ViewModel&…

【Cartopy基础入门】如何丝滑的加载Geojson数据

原文作者:我辈李想 版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。 Cartopy基础入门 【Cartopy基础入门】Cartopy的安装 【Cartopy基础入门】如何丝滑的加载Geojson数据 文章目录 Cartopy基础入门一、Geojson数据来源二…

camunda的manual task节点用途

Camunda的Manual Task用于在流程中暂停执行,直到人工干预完成某个任务。与User Task不同,Manual Task没有分配给特定用户或用户组,而是需要手动启动并指定下一步流程。 Manual Task可以用于以下场景: 1、流程执行需要等待人工干…

安全狗入选2023年福建省数字经济核心产业领域创新企业名单

近日,福建省数字福建建设领导小组办公室公布了入选2023年全省数字经济核心产业领域创新企业名单。 作为国内云原生安全领导厂商,安全狗凭借综合表现与优势入选名单,荣膺“未来独角兽”称号。 据悉,此次对“未来独角兽”的评选条件…

Linux文件类型与属性

一、文件类型 Linux 系统下一共分为 7 种文件类型。通过 stat 命令或者 ls 命令来查看文件类型。 - :普通文件 d :目录文件 c :字符设备文件 b :块设备文件 l :符号链接文件 s :套接字文件 p &…

线性模型的介绍

一、背景 在一个理想的连续世界中,任何非线性的东西都可以被线性的东西来拟合,所以理论上线性模型可以模拟物理世界中的绝大多数现象。 线性模型(Linear Model)是机器学习中应用最广泛的模型,指通过样本特征的线性组…

【并发基础】一篇文章带你彻底搞懂Java线程中断的底层原理——interrupt()、interrupted()、isInterrupted()

目录 〇、Java线程中断与阻塞的区别 0.1 线程中断 0.2 线程阻塞 一、线程的中断 二、中断方法 2.1 void interrupt() 2.1.1 可中断的阻塞 2.1.2 不可中断的阻塞 2.1.3 实践案例 2.2 boolean isInterrupted() 2.3 boolean interrupted() 2.4 代码案例 三、源码分析…

指定GPU运行python程序

一、命令行运行python程序时 1、首先查看哪些GPU空闲,nvidia-smi显示当前GPU使用情况。 nvidia-smiGPU:编号,这里是0和1 Fan:风扇转速,在0到100%之间变动,第一个是29% Name:显卡名&#xff…

部署LVS-NAT群集实验

一、 实验准备 负载调度器:内网关 ens33:192.168.109.12,外网关 ens37:12.0.0.1外网 Web节点服务器1:192.168.109.13 Web节点服务器2:192.168.109.14 NFS服务器:192.168.109.11 客户端&#xf…

基于 Windows 安装 ESP32 Arduino 软件开发环境

ESP32 Arduino 源码库:arduino-esp32ESP32 Arduino 环境搭建说明:About Arduino ESP32 其他软件环境需求: Git 环境 1、安装 Arduino 软件 可在 Arduino 官网 获取 Windows 端 Arduino 安装包,如下: 使用如下 .exe 一…

中文编程最高境界,不用编程,会用excel就会用,香不香?

一直以来,关于中文编程的争议从未消停过。现如今,中文编程发展又是如何? ★为了实现中文编程,从未停下脚步 我们知道,中国人一直以来为了实现中文编程付出了不懈的努力,前前后后研发了几十种中文编程语言。…

ModuleNotFoundError: No module named ‘d2l’

目录 1. 下载李沐老师分享的源代码 step1:下载李沐老师分享的源代码: step3:Anaconda Prompt中安装d2l(这个l是英文) step4:运行代码,成功: (番外)ModuleNotFoundError: No mod…

R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习技术应用

Meta分析是针对某一科研问题,根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法,对来源不同的研究成果进行收集、合并及定量统计分析的方法,最早出现于“循证医学”,现已广泛应用于农林生态,资源环境等方面。…

Tensorflow GPU 版本安装教程

非常详细的 Tensorflow GPU 版本安装教程 一、安装Anaconda二、TensorFlow GPU 一、安装Anaconda 这一步比较简单,也没有太多的需要注意的,去官网下载即可: 官网地址如下: https://www.anaconda.com/blog/individual-edition-2…

今晚直播 | 思码逸陆春蕊:面对研发效能度量落地难点,如何让数据说话?

本期分享 本期 DevData Talks 邀请到了思码逸高级咨询专家陆春蕊老师。陆春蕊老师曾就职于 Oracle 美国,在软件质量、项目管理方面有着丰富的经验。在研发效能领域为上百家客户提供了技术、数据分析、实践落地等方面的咨询,协助客户提升研发效能10%-30%…

centos系统安装mysql8.0

centos系统安装mysql8.0 环境说明开始1、查看centos7中是否有MariaDB,MariaDB与MySQL关系请自行查阅2、如果有MariaDB,需要将 步骤1 中查询到的mairadb全部卸载,否则MySQL安装会出现问题3、查看本机是否已经安装过MySQL4、如果安装过MySQL&am…

【内网渗透】春秋云镜Intitle WP

前言 第一次正式接触内网渗透的东西,写的很新手,也适合新手观看,有问题可以私信或评论,接下来会持续更新 信息收集 拿到地址先nmap扫端口 没什么发现,直接访问80端口,看到图标知道是thinkphp 第一台Th…

JAVA队列(Queue)用法附实例讲解

队列是什么 队列用于模拟队列这种数据结构,队列通常是指“先进先出”的容器。新元素插入(offer)到队列的尾部,访问元素(poll)操作会返回队列头部的元素。通常,队列不允许随机访问队列中的元素 …

MII、 RMII、 GMII、 RGMII 接口介绍

1、RGMII 接口概要 以太网的通信离不开物理层 PHY 芯片的支持,以太网 MAC 和 PHY 之间有一个接口,常用的接口有MII、 RMII、 GMII、 RGMII 等。 MII(Medium Independent Interface, 媒体独立接口): MII 支持…