技术演练

使用 Innoactive Portal 和 NVIDIA CloudXR 提供一键式 VR 流媒体

考虑到当今流媒体技术的流行程度,人们很容易忘记,按需、全球可用的应用程序曾经被认为是一个激进的想法。但随着 AR 和 VR 的普及,将流媒体推得更远的竞争还在继续。随着对真实内容和消费级硬件的需求,一个关键的挑战随之而来:如何在不影响沉浸式体验的质量和性能要求的情况下,构建在任何设备上都看起来不错的应用程序?

为了帮助解决这个问题, Innoactive 的团队已经将 NVIDIA CloudXR 流媒体解决方案集成到他们的 VR 应用程序部署平台 Innoactive Portal 中。 SAP 、德勤、林德工程( Linde Engineering )和大众汽车( Volkswagen Group )等客户正在使用该平台,随时随地为用户提供无缝的沉浸式培训。

Portal 是一个以用户为中心的企业级部署平台,用于管理和访问 VR 内容,只需从任何设备上单击一下即可。门户的独特之处在于能够跨平台和设备部署内容,包括 PC VR 、独立 VR 和 PC 3D 应用程序。

使用NVIDIA CloudXR SDK 的服务器和客户端组件,在云计算框架的改进下,门户可以为 PC VR 和流媒体应用程序构建一对一耳机或其他低计算设备。最终用户所做的就是从他们的库中选择应用程序来流式处理它。

克服 XR 的分销瓶颈

Woman in VR headset interacting with the Innoactive Portal VR launcher
图 1 。 Innoactive Portal 一键式用户界面,用于启动虚拟现实 .

虽然还有其他几种企业虚拟现实平台,但门户网站通过缓解 XR 内容分发过程中最关键的三个瓶颈,让创作者和最终用户都能轻松完成这一过程:

  • 该平台的 安全云基础设施 为客户提供了对其内容和用户的集中控制,确保只有需要的人才能访问。
  • one-click streaming 体系结构让不熟悉虚拟现实导航的用户可以轻松使用内容。
  • NVIDIA CloudXR 支持更复杂的分布模型,如门户,导致几个[VZX333 ],像一次构建应用程序的能力,并将其部署到任何设备,任何地方。

一段时间以来,使用 NVIDIA CloudXR 来流式处理 VR 应用程序在技术上是可行的,但 Innoactive 希望为临时甚至首次使用 VR 的用户提供此功能。为了实现这一目标,他们面临着一系列挑战:

  • 当用户想要开始云计算虚拟现实体验时,他们需要一台合适的 NVIDIA GPU 驱动的机器,可供他们按需使用。
  • 这台运行 NVIDIA CloudXR 的服务器不仅需要良好的性能才能执行渲染,还必须对全球用户可用。
  • 同时,尽可能了解资源也很重要。为了接触到广泛的受众,所有这些都必须以最小的复杂性为用户实现。

为了提供这种零摩擦体验,需要在NVIDIA CloudXR SDK 的客户端和服务器端构建上 NYNODICAL 。

为 NVIDIA CloudXR 构建可扩展的服务器体系结构

在服务器上,无论有多少用户试图访问机器,或者这些用户需要访问的位置或时间,都必须确保每个用户都可以按需使用由 NVIDIA GPU 驱动的机器。

依赖云服务提供商,比如 Amazon 网络服务( AWS ) Microsoft Azure 对于计算资源来说是一个逻辑解决方案。然而,门户网站的建设指导原则是作为一个开放平台,支持所有类型的虚拟现实内容以及要部署的所有类型的环境。

云提供商的这种不可知论意味着需要一种服务,能够在任何一种云服务上支持云渲染机。反过来,这为已经预先决定使用其中一种的客户提供了最大的灵活性。它还使 Portal 能够独立于相应的提供商,切换到另一个延迟或性能更好的数据中心,从而为最终用户提供最大的覆盖范围和性能。

因此, Innoactive 依赖于为任何云提供商构建带有预装软件组件的定制虚拟机( VM )映像。它们使用一个名为 Packer 的工具,并允许使用相应云提供商的虚拟机规模集功能对生成的虚拟机进行规模调整。

Innoactive 为今天而建,为明天而规划,确保这一过程可以在未来复制,并适应与新云提供商的合作。服务现在能够在任何需要的时候和任何地方动态分配渲染资源。

Workflow starting with machine configuration through the packer, VM images, EC2 Auto Scaling group, and the Innoactive Portal
图 2 。为云不可知的 NVIDIA CloudXR 服务器定制 VM 映像构建管道

在使用云渲染 VR 进行生产时,远程渲染资源的成本必须尽可能低,以提供积极的商业案例。与此同时,确保良好的用户体验需要高水平的性能,而这反过来又可能很快变得昂贵。因此,门户团队的任务是找到最佳的成本和性能权衡。

除了虚拟机的规模之外,一个巨大的成本驱动因素是它的正常运行时间。目标是支付所需的费用,而不是更多。然而,等待太长时间启动机器可能会让启动过程感觉笨拙或不及时。

由于门户的按需设计,减少用户等待时间是让他们尽快进入云渲染体验的关键。门户会检测用户何时开始使用它,并准备虚拟机,以期待他们启动虚拟现实应用程序。这大大缩短了他们启动应用程序时的加载时间,从几分钟缩短到几秒钟。

云渲染会话完成后,门户网站的云渲染编排服务会使用相应云提供商的端点自动删除机器以进行缩放。这再次确保只支付正常运行时间,而不是死机时间。门户可以根据用例调整其呈现功能。例如,它可以确保 GPU 渲染池在计划在公司进行虚拟现实培训的日子里足够大,同时在低活动时最小化渲染池的大小。

要优化性价比,您应该了解客户和地区差异。在会话过程中保持最小的延迟是保证良好体验的最重要因素之一。通常,服务器离最终用户越近,用户输入和流式应用程序之间的延迟和延迟就越低。

为了确保用户被分配到最近的服务器,使用了多种算法,其中一个例子是 IP 查找,以缩小用户的地理位置。未来,依靠 5G 网络和边缘计算将进一步提高性能。

Diagram of Innoactive Portal’s cloud rendering architecture
图 3 。门户云渲染体系结构 .

通过前面提到的体系结构和优化, Portal 支持有意使用 NVIDIA CloudXR 远程呈现 VR 应用程序的用户。门户负责在云中分配渲染资源,将期望的 VR 内容同步到远程机器,并执行NVIDIA CloudXR 服务器,以便用户可以连接。用户只需选择所需的 VR 内容。

虽然它本身提供了价值,但拥有一台预配置的、随时可以滚动的远程渲染机只是等式的一半。它仍然要求用户启动他们的流媒体客户端,并通过输入服务器 IP 地址手动配置它,这对新手来说并不舒服。

将 NVIDIA CloudXR 客户端构建到门户

通过在客户端应用程序中集成NVIDIA CloudXR SDK ,门户取消了这些手动步骤以提供平滑的用户体验。为了让用户在整个流程的每一步都能得到更新,门户网站使用了建立在 ASP 。网芯信号机 之上的 WebSocket 。客户端应用程序的用户界面也是使用 Unity 构建的,以便在提供良好用户体验的同时实现快速迭代。

这是伴随着NVIDIA CloudXR SDK 的组合,它是用 C ++ NDK 编写的,以及一个交互式的统一场景进入一个门户客户端应用程序的挑战。其结果是一个单一的、模块化的 Android 应用程序,具有多种活动,可以轻松加载到独立的虚拟现实耳机上,如 Meta Quest 2 、 Vive Focus 3 或 Pico Neo 3 。

当远程渲染服务器可用时,用户界面将指导用户。然后它通过NVIDIA CloudXR 客户端自动连接到它,并确保 VR 应用程序在服务器上正确启动,保证无摩擦地进入流式体验。

业务逻辑层用原生 Android ( Java )编写,包含与 Innoactive 后端服务来回通信的逻辑,并处理整个应用程序状态。它使用 Unity 附带的名为 UnitySendMessage 的专有协议更新用户界面层,并在需要时初始化本机 NVIDIA CloudXR 客户端库。

本机 NVIDIA CloudXR 活动被扩展为使用 Java 本机接口( JNI )将生命周期事件传回业务层。本文后面的示例代码显示了这一点。为了正确地将 native Unity 和 NVIDIA CloudXR 活动彼此隔离开来,这两种活动都设计为在专用的 Android process 中运行。

Diagram of the application layer architecture for the CloudXR client
图 4 。NVIDIA CloudXR 客户端应用层体系结构.

下面的代码示例显示了 Android 代码与 NVIDIA CloudXR 之间的接口。首先, Android 代码示例( Java ):

import android.app.Activity; public class MainActivity extends Activity implements ServerAvailableInterface { // load native NVIDIA CloudXR client library (*.aar) static { System.loadLibrary("CloudXRClient"); } static native void initCloudXR(String jcmdline); @Override public void onServerReady(String serverIpAddress) { // initializes the native CloudXR client after server ip is known String arguments = String.format("-s %s", serverIpAddress); initCloudXR(arguments); } public void onConnected() { // called by native CloudXR activity when it is successfully connected System.out.println("Connected to CloudXR server") }

第二, Vidia CloudXR 代码示例( C ++):

  #include <jni.h>
#include <CloudXRClient.h>
#include <CloudXRClientOptions.h> // ... // called whenever the CloudXR client state changes
void Client::UpdateClientState(cxrClientState state, cxrStateReason reason) { switch (state) { // ... case cxrClientState_StreamingSessionInProgress: OnCloudXRConnected(); break; // ... }
} // Fired when the CloudXR client has established a connection to the server
void Client::OnCloudXRConnected() { jmethodID jOnConnected = env ->GetMethodID(mainActivity, "onConnected", "()V"); env->CallVoidMethod(mainActivity, jOnConnected);
} // ...

最终的客户端应用程序提供了一个直观的界面,其中包含了选择所需 VR 内容所需的最少用户交互。这个界面可以从独立于虚拟现实的第二个屏幕设备(通常是笔记本电脑或手机)访问。

通过门户的实时通信,所有连接的客户端(无论设备如何)都会在加载云渲染会话时显示相同的状态更新。用户的内容在虚拟现实中准备好后,会收到推送通知。完成会话后,用户可以直接继续下一个流式会话,而无需退出客户端应用程序。

将门户网站的服务与扩展的 NVIDIA CloudXR 客户端捆绑在一起,为用户提供了一个全球可扩展的解决方案,用户只需单击一下即可从任何设备访问其 VR 内容库。 NVIDIA CloudXR 的门户网站改变了客户部署基于 PC 的虚拟现实的方式。在每个耳机类型的客户只有一个平台的情况下, Portal 现在可以处理复杂的问题。

易于使用的一键式前端支持他们扩展基于虚拟现实的用例,比如培训经常是虚拟现实新手的员工。在技术层面上,客户可以灵活规划耳机的部署。由于提供高质量体验所需的强大计算能力,它们不再局限于基于 PC 的虚拟现实。

现在,云机器的强大功能使得通过 NVIDIA CloudXR 门户在独立设备上提供高端渲染。

额外资源

有关 Innoactive Portal 如何帮助客户大规模部署虚拟现实培训的更多信息,请查看 SAPVolkswagen Group 的案例研究。

有关 NVIDIA CloudXR 的更多信息,请参阅 developer page 。退房 GTC 2022 年 3 月 21 日至 24 日 查看 NVIDIA 关于 XR 和人工智能时代的最新信息。

Tags