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 将渲染的场景流式传输到指定的主机地址。