命令行选项

NVIDIA CloudXR SDK 示例应用程序和 CloudXR 服务器可以使用命令行选项(也称为启动选项)来控制某些运行时功能。客户端和服务器的可用选项有所不同,在某些情况下,还存在特定于客户端的选项。

为客户端和服务器提供启动选项的方法取决于操作系统。总体方法包括使用文本文件存储选项、从附加选项的命令提示符运行以及特定于操作系统或特定于调试器的参数传递。

通过文本文件设置启动选项就像从命令行启动一样,您只需将它们放入文件中即可。选项可以像控制台命令一样在一行上,也可以将选项分成单独的行以提高可读性。在任何一种情况下,每个选项仍然需要以破折号作为前缀。对于服务器,您将文件命名为 CloudXRServerOptions.txt,对于客户端,使用名称 CloudXRLaunchOptions.txt

注意

如果您想快速禁用或注释掉上述任何方法中的某些命令,但又不想完全删除它们,则可以在选项名称前缀或附加类似“ZZZ”的内容,例如“ipZZZ”。这使其选项名称与任何内容都不匹配,并且会被跳过。这样您就可以保留一些额外的“可用”选项。

对于内联注释,目前没有自定义字符——如果您的文本编辑器将某些内容识别为注释(“//”或“#”),请随意使用。只是不要在这些注释行中放置任何实际的破折号,因为解析器非常基本,会看到破折号并查找命令名称。我们将来可能会添加显式注释字符——或者如果您需要,您可以自己添加,因为解析代码都在 /shared 代码路径中提供。

启动选项都清楚地汇集到每个示例中的设置中。因此,您也可以选择创建一个 ClientOptions 对象,手动设置某些字段,然后让它传递到各种结构中,镜像示例客户端已执行的操作。

注意

4.0 版本在输入和输出路径方面发生了一些变化,请阅读这些部分以了解有关启动选项文件需要位于何处的更多详细信息。有关您的应用程序需要执行哪些操作来公开其数据目录以便 CloudXR 知道它在哪里的更多信息,请参见 CloudXR 文件存储

特定于平台的方法

Windows 选项

  • 对于 SteamVR CloudXR 服务器驱动程序,传递启动选项的唯一方法是在 C:\Users\*user-name*\AppData\Local\NVIDIA\CloudXR\SteamVR\ 文件夹中创建 CloudXRServerOptions.txt,其中包含所需的选项,启动 SteamVR 之前

  • 对于新的服务器示例应用程序,有几种方法可用:#) 您可以在 C:\Users\*user-name*\AppData\Local\NVIDIA\CloudXR\ServerSample\ 文件夹中创建 CloudXRServerOptions.txt,其中包含启动选项,启动可执行文件之前。#) 您可以从命令提示符启动可执行文件,并根据需要附加带破折号的选项。#) 您可以创建可执行文件的快捷方式,并修改“目标”行以附加选项,就像在命令提示符中一样。

  • 对于客户端示例应用程序,有多种方法:#) 您可以在 C:\Users\*user-name*\AppData\Local\NVIDIA\CloudXR\SampleClient\ 文件夹中创建 CloudXRLaunchOptions.txt,其中包含所需的启动选项,启动客户端之前。#) 您可以从命令提示符启动可执行文件,并根据需要附加带破折号的选项。#) 您可以创建可执行文件的快捷方式,并修改“目标”行以附加选项,就像在命令提示符中一样。#) 如果您正在从 Visual Studio 构建和启动,则可以在调试配置中的“命令参数”框中设置启动选项。

Android 选项

  • 对于 Android 客户端,您可以通过几种不同的方式启动:#) 要直接从 Android Studio 运行,请单击运行 > 编辑配置以获取活动配置,并将启动标志字段设置为如下内容

    --es args "-s 192.168.1.1 -f 50"
    

    其中的第一部分,–es args 片段,告诉 Android 我们想要使用名为“args”的额外字符串 intent 启动。然后,在双引号内,您可以列出您想要的启动选项,就像它是命令行一样。当客户端启动时,在 Java 中,它可以检查名为“args”的额外字符串 intent,并将该字符串的内容(不带双引号)传递到示例的本机代码进行处理。

    1. 要在设备上直接启动客户端(从启动图标或应用程序列表),您首先需要创建一个名为 CloudXRLaunchOptions.txt 的文件,并根据需要添加启动选项。

      接下来,您必须运行客户端应用程序一次(如果它没有自行退出则退出),因为首次运行已安装的应用程序是 Android 创建特定于应用程序的数据目录的时间。这是 Android 安全性的一部分,新安装的应用程序在用户手动与其交互之前(以防止恶意软件等)不能做太多事情。

      最后,您需要将选项文件复制到设备上,复制到新创建的应用程序数据目录中。应用程序数据路径将类似于 /sdcard/Android/data/[com.app.name]/files/,但当然具有特定于客户端的包名称。例如,Oculus/Meta 示例是 com.nvidia.cloudxr.ovr,ARCore 示例是 com.nvidia.ar.hellocloudxr

      要将文件传输到您的设备上,如果它在您的桌面上显示为 USB 驱动器,您可以简单地向下钻取到 files 子目录,然后将文本文件拖放到上面。或者,您可以使用 ADB 命令将其推送到正确的位置,例如

      adb.exe push CloudXRLaunchOptions.txt /sdcard/Android/data/[com.app.name]/files/
      

iOS 选项

  • 对于 iOS 客户端,示例应用程序当前没有内置支持通过文件或从命令行读取来传递启动选项。您可以查看其他客户端如何加载和解析选项,并添加代码以尝试从应用程序数据路径(我们写入日志文件的位置)打开该文件。我们计划在未来的版本中添加该功能。

下表提供了客户端和服务器可用的所有命令行选项的列表,以及为 Android ARCore 示例添加的额外选项(这是扩展基本选项集的绝佳示例)。这些选项包括缩写的命令字符串(1-3 个字符)和长格式字符串(人类可读的描述符),每个选项都以破折号 (-) 为前缀,以提高命令清晰度(因为始终需要破折号),以及在给定选项需要参数时的注释,例如 N 表示需要指定数值,或 S 表示需要某种形式的字母数字/字符串参数,然后是每个选项的简要描述以及参数值的范围或列表。

服务器命令行选项

长格式名称

缩写

描述

-log-verbose

-v

启用更详细的日志记录。

-log-quiet

-q

禁用文件日志记录,仅使用调试输出。

-trace-stream-events

-t

启用将流事件跟踪为“ETL”日志。可能对运行时产生较大影响。

您可能需要在管理员模式下运行 SteamVR 进程,以便可以捕获某些跟踪。

-dump-images

-d

定期将流式图像转储到日志文件夹(目前每 300 帧)。

-dump-audio

-da

将发送/接收的音频流转储到 CloudXR 日志文件夹。

-log-privacy-disable

-p

禁用日志记录中的隐私过滤(允许完全 IP 可见性)。

-trace-local-events

-tle

启用将本地事件跟踪到日志文件夹中的 xml 文件(请参阅 本地事件跟踪(CloudXR 可视化分析器)

-embed-server-info

-esi

在流式传输期间将服务器信息嵌入帧中。

值范围为 -1 到 365

其中 1+ 指定要修剪的天数年龄(因此最大年龄为一年)

-1 重置为系统默认值 (5d)

0 设置为从不修剪日志文件。”

-log-max-kb N

-lmk N

最大日志大小(千字节)。

值范围为 -1 到 1024,其中值 1+ 指定要限制的 KB 大小(因此最大文件大小为 1GB),-1 重置为系统默认值 (5MB),0 设置为无限制。

-fast-scale

-fs

当客户端请求帧注视点渲染时,使用简单、低质量的缩小比例过滤

-disable-send-audio

-dsa

禁用向客户端发送服务器音频。默认情况下启用

-enable-receive-audio

-ra

启用接收来自客户端的音频(即,麦克风捕获)。默认情况下禁用

客户端命令行选项

长格式名称

缩写

描述

-server IP

-s IP

客户端将连接到的服务器的 IP 地址。

-log-verbose

-v

启用更详细的日志记录。

-log-quiet

-q

禁用日志记录。

-trace-stream-events

-t

启用将流事件跟踪为“ETL”日志。可能对运行时产生较大影响。

请注意,您可能需要在管理员模式下运行 SteamVR 进程,以便可以捕获某些跟踪。

-trace-local-events

-tle

启用将本地事件跟踪到日志文件夹中的 xml 文件(请参阅 本地事件跟踪(CloudXR 可视化分析器)

-trace-qos-stats

-tqs

启用将 QoS 统计信息跟踪到 csv 文件。可能对运行时产生较大影响。

-dump-images

-d

定期将流式图像转储到日志文件夹(目前每 300 帧)。

-capture-client-bitstream

-ccb

将客户端接收到的视频比特流捕获到客户端上的 CloudXR 日志文件夹。

-capture-server-bitstream

-csb

将服务器发送的视频比特流捕获到服务器上的 CloudXR 日志文件夹。

-dump-audio

-da

将发送/接收的音频流转储到 CloudXR 日志文件夹。

-embed-server-info

-esi

在流式传输期间将服务器信息嵌入帧中。

-embed-client-info

-eci

仅限 Windows 将客户端信息嵌入帧缓冲区中。

-log-privacy-disable

-p

禁用日志记录中的隐私过滤。

-disable-ir-decoder

-ird

仅限 Android 在 Android 设备上禁用 AImageReader 解码器

-fallback-decoder

-fbd

如果可用,请尝试为平台使用备用视频解码器。

-windowed

-w

仅限 Windows/Linux 对于桌面操作系统,渲染到标准窗口而不是连接的 HMD。

-no-button-remap

-b

不要将各种控制器按钮重新映射到 SteamVR 系统菜单和其他功能。

-max-res-factor N

-m N

最大流分辨率,作为给定设备分辨率的倍数(过采样)。

值范围为 0.5-2.0,如果客户端应用程序代码中未另行指定,则默认为 1.2(客户端应用程序代码可能希望显式将 maxResFactor 设置为 1.0 以实现无过采样)。如果由于任何原因将值设置为零,则内部会将因子设置为 1.0。

-latency-test

-l

运行本地延迟测试,其中没有输入时屏幕为黑色,有输入时变为白色。有助于确定本地演示成本。

-enable-alpha

-a

仅限 Windows/Linux 启用 alpha 流式传输和显示(设置客户端 deliveryType

-enable-send-audio

-sa

启用向服务器发送音频(即,麦克风捕获)。默认情况下禁用。

-disable-receive-audio

-dra

禁用接收来自服务器的音频(即,在客户端上播放服务器音频)。默认情况下启用。

-log-max-kb N

-lmk N

最大日志大小(千字节)。

值范围为 -1 到 10242,其中值 1+ 指定要限制的 KB 大小(因此最大文件大小为 1GB 文件),-1 重置为系统默认值 (5MB),0 设置为无限制。

-num-video-streams N

-ns N

在通用流模式下,此选项指定从服务器到客户端打开的视频流的数量,并且将取决于设置自定义流的自定义服务器应用程序。值范围为 1-6。

-graphics-type S

-g S

如果需要出于某种原因覆盖图形上下文类型,请选择图形上下文类型。选项为 glescudad3d11

-user-data S

-u S

向服务器发送用户字符串以执行用户数据支持。

-foveation N

-f N

以给定的百分比缩放启用注视点渲染。

值从 25-100,作为原始帧到目标后注视点渲染帧大小的百分比缩放因子。0 表示禁用(或从命令行覆盖选项文本文件值)。默认为 0。

我们强烈建议您始终为 VR 使用启用它。建议值为 50%,使用 -f 50 或在客户端代码中显式预设 foveatedScaleFactor

-network-interface-client

-nic S

选择用于连接到服务器的客户端网络接口。选项为 ethernetwifi5ghzwifi24ghzmobileltemobile5g

-network-topology

-nt S

选择客户端和服务器之间的网络拓扑。选项为 lanwan

-enable-l4s

-l4s

启用 L4S 拥塞处理。

-requested-refresh-rate

-rrr N

以请求的刷新率运行 CloudXR Oculus Quest 2 客户端。例如,要以 90Hz 运行,请使用 -rrr 90。在高于 90Hz 的值下运行 CloudXR 未经测试,并且不保证可以工作。

ARCore 客户端命令行选项

长格式名称

缩写

描述

-env-lighting N

-el N

将客户端环境光照数据发送到服务器。值为 0 或 1,0 禁用,1 启用。默认为 1/启用。

-res-factor N

-rf N

缩小发送到服务器的客户端分辨率,以帮助管理高分辨率设备的编码/解码和带宽成本。值范围为 0.5-1.0,默认值为 0.75。