API 规范#
Ingress#
gRPC API#
Omniverse Renderer 微服务接受来自动画数据合成器(例如,动画图微服务)的输入动画数据流。此动画数据流通过 PullAnimationDataStream 远程过程调用 (RPC) 请求。然后,渲染器更新头像姿势,渲染图像,并通过 RTP 将图像流式传输到下游组件。RPC 在动画数据服务中定义。
动画数据流音频格式#
Omniverse Renderer 微服务目前仅支持具有以下音频格式的动画数据流。
格式 |
PCM |
声道数 |
1 |
采样率 |
16000 Hz |
每样本位数 |
16 |
HTTP API#
除了动画数据流 API 外,Omniverse Renderer 微服务还公开了 HTTP API。使用此 API,您可以
向微服务添加和删除活动流。
您可以在HTTP API 文档中找到更多信息。
一旦微服务在 http://127.0.0.1:8021/docs 启动,即可访问交互式 HTTP API 概述。
流管理#
Omniverse Renderer 微服务是一个有状态服务,仅在使用流 ID 注册流后才开始流式传输。
可以使用以下命令添加动画数据流
stream_id=$(uuidgen)
curl -X POST -s http://127.0.0.1:8021/streams/$stream_id
类似地,可以使用以下命令删除动画数据流
curl -X DELETE -s http://127.0.0.1:8021/streams/$stream_id
请注意,Omniverse Renderer 微服务仅支持单个流。
Egress#
基于 UDP 的 RTP 流式传输#
当向渲染器添加流时,渲染器将首先通过 CreateUDPConnection RPC 调用与下游客户端(例如 VST)协商基于 UDP 的 RTP 流式传输的音频和视频端口。CreateUDPConnectionRequest 消息包含与下游微服务启动 UDP 端口协商所需的信息。CreateUDPConnectionReply 来自下游服务的响应消息包含协商的音频端口、视频端口和下游微服务 IP 地址。
// Copyright (c) 2022-2023 NVIDIA Corporation. All rights reserved.
//
// NVIDIA Corporation and its licensors retain all intellectual property
// and proprietary rights in and to this software, related documentation
// and any modifications thereto. Any use, reproduction, disclosure or
// distribution of this software and related documentation without an express
// license agreement from NVIDIA Corporation is strictly prohibited.
syntax = "proto3";
package vstserver;
service VstGrpcServer {
rpc CreateUDPConnection (CreateUDPConnectionRequest) returns (CreateUDPConnectionReply) {}
}
message CreateUDPConnectionRequest {
message VideoParams {
string codec = 1;
int32 framerate = 2;
}
message AudioParams {
string codec = 1;
int32 sample_rate_Hz = 2;
int32 bits_per_sample = 3;
}
message ClientUdpPorts {
int32 video_port = 1;
int32 audio_port = 2;
}
VideoParams video_params = 1;
AudioParams audio_params = 2;
string connection_id = 3;
ClientUdpPorts client_ports = 4;
}
message CreateUDPConnectionReply {
int32 video_port = 1;
int32 audio_port = 2;
string host_address = 3;
}
一旦渲染器从下游微服务接收到音频/视频端口和 IP 地址,它将相应地配置 RTP 流式传输组件,使用协商的端口,并开始通过基于 UDP 的 RTP 将渲染的场景流式传输到指定的主机地址。