在 Magic Leap 2 上构建实时视频推流应用

增强现实(AR)越来越流行。随着头戴式耳机制造商在硬件方面不断创新,软件开发人员也在努力提供更多吸引用户的内容。

与此同时,很多专业领域的用户开始使用实时视频推流来沟通和合作,因此,开发人员开始把增强现实技术和视频推流结合起来,构建多样化的沉浸式体验,消除距离障碍。

AR 开发人员面临两个特殊问题:

  • 如何使 AR 更具包容性,让用户可以与没有使用 AR 头戴式耳机的人分享 POV?
  • 如何将非 AR 参与者带入 AR 环境中?

Magic Leap 最近发布的 Magic Leap 2(ML2)新增了一些非常优秀的新功能,比如,能与声网兼容;能使用设备自带的摄像头和麦克风捕捉用户的声音和视角,并将其传播给远端用户。这些功能为用户提供协同工作、远程协助、教育、社交等服务。

本指南将指导大家使用 Unity 构建一个增强现实应用,用户可以使用该应用直播 ML2 设备的 AR 视角。我们添加了一个功能——非 AR 用户可以通过网页浏览器直播进入虚拟环境。

我们计划零代码构建整个项目。

本指南会执行声网视频预制体来初始化声网引擎、设置令牌验证以及连接 ML2 头戴式显示器(HMD)的视频和麦克风输入。


前期准备

    第 1 部分:搭建一个 Unity XR 应用

    先为 MagicLeap 2 设置好 Unity 开发环境,然后,在 MagicLeap 文件夹的 tools 目录中找到 ML2 Unity 实例项目。

    在 Unity 2022.2 中启动该项目。按照入门说明构建、部署和测试 UnityExamples 应用。

    如果你已经可以在 ML2 增强现实中玩魔方就太棒啦!接下来我们将继续本 demo 的步骤,引入声网直播推流插件。


    第 2 部分:导入声网插件

    进入声网 GitHub,下载最新的插件安装包。

    在 Unity Editor 菜单中,选择 Assets > Import Package > Custom Package...,然后选择刚刚下载的声网 Unity 安装包。只需几秒钟的解压, Unity 对话框中会显示安装包的内容。点击 import,将内容导入到项目中。

    你会在 Assets 根目录下发现一个名为 AgoraEngine 的新文件夹。


    第 3 部分:建立一个新场景

    第 1 步:场景

    我们将在 HelloCube 场景中使用声网插件。为保留原始实例,我们先复制 HelloCube 场景(Mac:Cmd+D,PC:Ctrl+D),将场景重新命名为 TestAgora。 你可以把 TestAgora 场景移动到另一个工作文件夹中。在本练习中,我们将创建一个名为 AgoraTest 的工作文件夹并将 TestAgora 场景移动到该文件夹中。另外,从 Hierarchy 中删除 Cube 对象。

    第 2 步:用户界面

    生成点

    在 [UI]>UserInterface 层次结构下创建一个游戏对象,将其定位在(-314,475,0),指定宽度为 100,高度为 200。

    按钮

    [UI]>UserInterface 层次结构下创建三个旧版按钮,分别标记为 MuteLocalButtonMuteRemoteButton。在 Unity Inspector 中,为每个按钮添加 一个名为 Toggle State Button 的新组件。按钮的属性应该按照下表来设置:

    请注意,不必强制执行这些值。如有必要,可随意改变数值。

    日志文本

    创建一个旧版文本用户界面,标记为日志文本,将其定位在(-200, -60, 0)。 指定其宽度为 295,高度为 280。

    UI 的设计如下:

    第 3 步:AgoraController

    找到 Assets > Agora_MagicLeap2_Plugin > AgoraEngine > Prefabs,将 AgoraController 预制体拖入 Hierarchy 中。

    将上一步骤中的用户界面对象连接到对应的 AgoraController 字段中。使用 Workspace 作为旋转值的参考,并将其设置为 ReferenceTransform 字段。

    请看下图:

    第 4 步:应用程序参数

    声网 SDK 参数

    App_Id 字段需要一个声网项目的 ID。如果你想创建项目,只需登录你的声网开发者账户,进入 Project Management(项目管理)页面,创建一个新的项目,并选择 Testing Mode App ID(测试模式的 App ID)。接下来我们会进行令牌部分的操作。

    复制你刚刚创建的 App ID,将其粘贴到 Unity Inspector 中的 App_ID 字段。不要勾选 Use Token(使用令牌)。输入测试通道名称,例如 ML2Test

    MagicLeap 2 参数

    ML2 参数包括大量的摄像机参数选项。在 Editor Hierarchy 中展开 AgoraController 对象,选择 VideoCapture 对象。这里你可以选择帧率、质量(分辨率)和混合现实模式。本例我们选择的帧率为 30FPS,分辨率为 1944×2160,摄像机视频流为混合现实(MR)。一定要根据帧率和分辨率来调整比特率,声网提供了一个包含推荐值的表格

    现在只需在 Unity Editor 中检查最后一项设置——确保在项目设置中勾选 Use MLAudio

    经过以上这些步骤,场景基本上已经设置好了,可以运行测试了!


    第 4 部分:实时推流测试

    构建和部署

    因为我们在导入实例项目时已经将其设置好了,所以不会有额外的配置。将新场景添加到 Build Settings 中的 Scenes to Build 列表中,并删除其他现有场景。连接 ML2 头戴式耳机并点击 Build and Run。只需几分钟的构建和部署,就能在你的头戴式耳机上运行测试应用啦!

    重要提示:ML2 上的视频和摄像头推流是互斥功能,你可以使用声网插件播放视频,或者使用 ML Hub 中的 Device Stream 功能。

    远端测试用户

    由于我们测试的是一个实时通信(RTC)应用,所以需要连接远端用户,在 ML2 视图中测试推流的双向性。声网支持跨平台通信。资深声网开发者可能已在其他平台上构建了运行同一 App ID 的 RTC 应用。为快速测试,大家可以直接使用声网的基础视频通话网页 demo 查看本地桌面用户和 ML2 用户推流。需要注意的是,这个网页 demo 并不按推流的实际长宽比来渲染视频,只能看到裁剪过的视频帧。即使你已经选择了发送纵向比例,还是要检查推流的内容。如图所示,我的本地摄像机视图显示在顶部,远程 ML2 视图显示在底部,方便用户观察你在 ML2 混合现实环境中所做的事情!

    超级简单,对不对?


    第 5 部分:令牌安全

    令牌验证是可选的,这在生产环境中是很重要的。声网提供了该概念的详细信息,以及各种服务器框架/语言的样本脚本。GitHub 上有 1 个一键部署的服务器项目。因此,这里我们将跳过服务器的细节,重点探讨客户端。ML2 Agora Unity 插件中包含了 1 个 TokenClient 预制体,用来处理服务器的所有逻辑。要使用 TokenClient 预制体,要找到 AgoraController 预制体,勾选 Use Token,在 TokenClient 对象上输入令牌服务器信息。

    完成这些配置步骤之后,请再次运行测试,确保令牌客户/服务器环境与两端用户的应用程序同时工作!


    总结

    这个零代码项目证明了为 AR 和非 AR 用户构建一个 POV 项目非常简单。如有任何疑问或问题,请在问题页面或 Magic Leap 的讨论区提出,祝大家编码愉快!


    原文作者:Rick Cheng
    原文链接:https://www.agora.io/en/building-live-video-streaming-into-your-ar-experience-on-magic-leap-2/
    推荐阅读
    相关专栏
    SDK 教程
    164 文章
    本专栏仅用于分享音视频相关的技术文章,与其他开发者和声网 研发团队交流、分享行业前沿技术、资讯。发帖前,请参考「社区发帖指南」,方便您更好的展示所发表的文章和内容。