VRED Stream(Stream JPEG 和 Stream H264)

VRED 附带集成的 Web 服务器,它提供 Python API、Web API 和低延迟视频流式传输。Python API 和 Web API 使用 HTTP 端点,而流通过 WebSocket 提供以实现全双工通信。

当有人提到 VRED Stream 时,他们谈论的是 Stream JPGStream H264 功能。这些是 VRED 视口的实时图像流。在 VRED Stream 中,可以在场景中导航、使用点击传感器以及与 HTML 5 内容交互。

VRED Stream Web 界面

注意:

VRED Stream App 是一项不同的功能。有关详细信息,请参见 VRED Stream App

流式传输图像数据编码为 JPEG 或 H264。虽然在这种情况下 H264 看起来更自然,但不应低估 JPEG。它需要更多带宽,但速度很快,不需要为了在 VRED 中支持它而使用单独的编码器,并且客户端不需要特殊解码器。此外,OpenH264 v2.x 编解码器仅支持最大分辨率 3840 x 2160。

如何访问 VRED Stream 选项

您的设备或计算机必须能够访问运行 VRED 的 PC。如果使用本地主机,浏览器与 VRED 必须在同一台计算机上运行。

重要信息:

使用 VRED Stream HD (H264) 时,请先从 GitHub 下载 OpenH264 编解码器库,然后将解压缩的 openh264-2.0.0-win64.dll 复制到 C:\Program Files\Autodesk\VREDPro-13.0\bin\WIN64。如果缺少 H.264 编解码器,则会显示错误消息。

  1. 打开一个 VRED 场景。

  2. 选择“编辑”>“首选项”>“Web 界面”,并确保“启用 Web 服务器”处于激活状态。

    记下端口号。默认值为 8888。

  3. 单击“确定”。

  4. 打开设备上的 Web 浏览器。

  5. 输入 localhost:8888 或 YourIP:8888。

  6. 选择“Stream JPEG”或“Stream H264”。

连接

流端点为 {schema}://{host}:{port}/socketstream。例如,下面是一个连接到使用 TLS 的本地实例的 URI:

wss://localhost:8888/socketstream

WebSocket 的二进制类型为 arraybuffer

传入数据

VRED 通过 WebSocket 连接为每个帧发送两条消息。第一条消息是 JSON 序列化字符串,其中包含流格式和一些附加信息。第二条消息是包含帧图像数据的二进制内容。

{
    "format": {
        "codec": "h264",
        "width": 1024,
        "height": 1320,
        "fps": 60,
        "bitrate": 8000,
        "quality": 85,
        "fixed": 0
    },
    "clients": 1
}
名称 类型 说明
format.codec 字符串 用于二进制图像数据的流编解码器。当前,支持的编解码器为 jpegh264
format.width 数字 图像数据的宽度。
format.height 数字 图像数据的高度。
format.fps 数字 每秒最大帧数限制。
format.bitrate 数字 用于 H264 编解码器的比特率。
format.quality 数字 用于 JPEG 编解码器的图像质量。
format.fixed 数字 指示流格式是否固定且无法更改的布尔值。
clients 数字 连接到同一 VRED 实例的客户端数。

二进制图像数据的前 4 个字节中包含帧编号。需要在向解码器发送图像数据之前提取此内容。 此外,需要将帧编号发送回 VRED 以同步帧。有关详细信息,请参见传出数据

传出数据

从版本 2021.3 开始,VRED 可以自动管理客户端能够处理的帧数。为此,VRED 需要来自客户端的反馈以获知渲染了哪一帧。字符串消息应类似于 sync(${frame})

除了同步,还可以通过此通道向 VRED 发送其他内容,尤其是导航命令。下表列出了所有命令:

命令 参数 说明 示例
dblclic button:数字,keyModifier:数字,x:数字,y:数字 鼠标双击 -
keypress keyCode:数字,keyModifier:数字,x:数字,y:数字 按键或按下键 keypress(-10, 0x04000000, 483, 281)
mousedown button:数字,keyModifier:数字,x:数字,y:数字 鼠标按钮按下 mousedown(-10, 0x02000000, 483, 281)
mouseup button:数字,keyModifier:数字,x:数字,y:数字 鼠标按钮松开 mouseup(-10, 0, 483, 281)
mousewheel delta:数字,keyModifier:数字,x:数字,y:数字 鼠标滚轮变化 mousewheel(-10, 0, 483, 281)
sync frame:数字 在 VRED 和客户端之间同步帧。 sync(128)
update - 强制 VRED 渲染新帧。 update()

参数说明:

每次交互后,VRED 都会至少渲染一个新帧。是否处理更多帧取决于渲染设置。例如,启用了抗锯齿时,VRED 将发送多个帧。

更改格式

可以通过单独的端点 /stream/param? 更改流格式。例如,下面是一个将使用全高清和 JPEG 编码的格式更改为使用 TLS 的本地实例的 URI:

GET https://localhost:8888/stream/param?width=1920&height=1080&format=jpeg&quality=85&fps=30

下表列出了所有参数:

名称 类型 说明
format 字符串 流编解码器,可以为 jpegh264
width 数字 流图像的宽度。
height 数字 流图像的高度。
fixed 布尔 指示分辨率是固定的且无法更改,直到发送 fixed = false 为止。
fps 数字 限制每秒发送到客户端的最大帧数。
bitrate 数字 H264 编解码器的比特率,通常为 200016000 之间的值。
quality 数字 JPEG 编码器的图像质量,值介于 1(表示达到最佳压缩)和 100(表示达到最佳质量)之间。