VRED 附带集成的 Web 服务器,它提供 Python API、Web API 和低延迟视频流式传输。Python API 和 Web API 使用 HTTP 端点,而流通过 WebSocket 提供以实现全双工通信。
当有人提到 VRED Stream 时,他们谈论的是 Stream JPG 和 Stream H264 功能。这些是 VRED 视口的实时图像流。在 VRED Stream 中,可以在场景中导航、使用点击传感器以及与 HTML 5 内容交互。
VRED Stream App 是一项不同的功能。有关详细信息,请参见 VRED Stream App。
流式传输图像数据编码为 JPEG 或 H264。虽然在这种情况下 H264 看起来更自然,但不应低估 JPEG。它需要更多带宽,但速度很快,不需要为了在 VRED 中支持它而使用单独的编码器,并且客户端不需要特殊解码器。此外,OpenH264 v2.x 编解码器仅支持最大分辨率 3840 x 2160。
您的设备或计算机必须能够访问运行 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 编解码器,则会显示错误消息。
打开一个 VRED 场景。
选择“编辑”>“首选项”>“Web 界面”,并确保“启用 Web 服务器”处于激活状态。
记下端口号。默认值为 8888。
单击“确定”。
打开设备上的 Web 浏览器。
输入 localhost:8888 或 YourIP:8888。
选择“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 | 字符串 | 用于二进制图像数据的流编解码器。当前,支持的编解码器为 jpeg 和 h264 。 |
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() |
参数说明:
button
值表示鼠标按钮:左键 = 0,中键 = 1,右键 = 2keyCode
表示被按下的键的未修改十进制 ASCII 值keyModifier
值是根据按下的每个修饰键按位设置的:Alt
键 = 0x08000000,Ctrl
键 = 0x04000000,Shift
键 = 0x02000000x
和 y
表示鼠标相对于流图像大小的位置每次交互后,VRED 都会至少渲染一个新帧。是否处理更多帧取决于渲染设置。例如,启用了抗锯齿时,VRED 将发送多个帧。
可以通过单独的端点 /stream/param?
更改流格式。例如,下面是一个将使用全高清和 JPEG 编码的格式更改为使用 TLS 的本地实例的 URI:
GET https://localhost:8888/stream/param?width=1920&height=1080&format=jpeg&quality=85&fps=30
下表列出了所有参数:
名称 | 类型 | 说明 |
---|---|---|
format | 字符串 | 流编解码器,可以为 jpeg 或 h264 。 |
width | 数字 | 流图像的宽度。 |
height | 数字 | 流图像的高度。 |
fixed | 布尔 | 指示分辨率是固定的且无法更改,直到发送 fixed = false 为止。 |
fps | 数字 | 限制每秒发送到客户端的最大帧数。 |
bitrate | 数字 | H264 编解码器的比特率,通常为 2000 和 16000 之间的值。 |
quality | 数字 | JPEG 编码器的图像质量,值介于 1 (表示达到最佳压缩)和 100 (表示达到最佳质量)之间。 |