Overview#
The omni.services.livestream.webrtc
extension provides a web interface for accessing WebRTC streams from Omniverse Kit applications. It serves a simple streaming client that users can access directly through their web browser.
Purpose#
This extension eliminates the complexity of WebRTC streaming setup by providing:
Web Streaming Interface: Simple web client interface with WebRTC connectivity
Auto-Configuration: Automatically detects and configures available streams
Zero-Setup Access: Users simply navigate to a URL to start streaming
Architecture#
The extension consists of these key components:
FastAPI Web Server: Serves the streaming interface and provides REST APIs
Dynamic Stream Discovery: Automatically detects primary, spectator, and AOV streams
Web Streaming Client: Feature-rich HTML/CSS/JavaScript interface using the
@nvidia/omniverse-webrtc-streaming-library
Configuration API: RESTful endpoint for retrieving stream configurations
Dependencies: This extension requires omni.kit.livestream.app
and/or omni.kit.livestream.aov
to be enabled for stream configuration discovery.
Key Features#
🎯 Streaming Capabilities#
Real WebRTC Connections: Full peer-to-peer streaming using industry-standard WebRTC
Multiple Stream Support: Automatic detection of primary, spectator, and AOV streams
Dynamic Resolution Control: Real-time resolution changes during active streams
Pause/Resume Functionality: Stream control without disconnecting
🔧 Configuration & Discovery#
Auto-Detection: Automatically discovers server IP and available stream ports
Smart Stream Selection: Dropdown interface for choosing between multiple streams
Settings Integration: Reads stream configurations directly from Kit settings
Dynamic Resize Support: Honors per-stream
allowDynamicResize
settings
🎨 User Interface#
Modern Design: Clean, responsive interface with professional styling
Mobile-Friendly: Works on desktop, tablet, and mobile devices
Real-Time Status: Live connection status and error reporting
Intuitive Controls: Simple connect/disconnect/pause/resume workflow
Usage#
Quick Start#
Enable the extension in your Kit application:
[dependencies] "omni.services.livestream.webrtc" = {}
Configure streaming (example):
[settings] exts."omni.kit.livestream.app".primaryStream.streamType = "webrtc" exts."omni.kit.livestream.app".primaryStream.signalPort = 49100 exts."omni.services.transport.server.http".port = 8011
Access the interface at:
http://<server-ip>:8011
Accessing Streams#
Users can access the streaming interface by navigating to:
Local Access:
http://localhost:8011
Remote Access:
http://<server-ip>:8011
(must be directly accessible over the network from the client machine)
The interface will automatically:
Detect the server IP address
Discover all configured streams
Present them in an easy-to-use dropdown menu
Stream Types Supported#
The extension automatically detects and presents:
Primary App Streams: Main application rendering output
Spectator App Streams: Secondary application views (indexed)
AOV Streams: Arbitrary Output Variables for specific rendering layers
Configuration#
HTTP Server Settings#
[settings]
# Web interface port
exts."omni.services.transport.server.http".port = 8011
Stream Configuration Examples#
[settings]
# Primary stream
exts."omni.kit.livestream.app".primaryStream.streamType = "webrtc"
exts."omni.kit.livestream.app".primaryStream.signalPort = 49100
exts."omni.kit.livestream.app".primaryStream.allowDynamicResize = true
# Spectator streams
exts."omni.kit.livestream.app".spectatorStream.0.streamType = "webrtc"
exts."omni.kit.livestream.app".spectatorStream.0.signalPort = 49200
# AOV streams (automatically detected)
exts."omni.kit.livestream.aov"."{aov}".spectatorStream.0.streamType = "webrtc"
REST API#
The extension provides the following REST endpoints:
Stream Configuration#
GET /api/stream-config
Returns JSON with all detected stream configurations:
{
"streams": [
{
"name": "Primary App Stream",
"type": "primary",
"port": 49100,
"streamType": "webrtc",
"allowDynamicResize": true,
"description": "Main application stream (webrtc)"
}
]
}
Web Interface#
GET /
GET /index.html
Serves the main streaming interface.
Static Assets#
GET /static/*
Serves web assets including the Omniverse WebRTC streaming library.
Integration#
This extension works seamlessly with:
omni.kit.livestream.webrtc
: Provides the actual WebRTC streaming functionalityomni.kit.livestream.app
: Configures application streaming settingsomni.kit.livestream.aov
: Enables Arbitrary Output Variable streamingomni.services.core
: FastAPI service frameworkomni.services.transport.server.http
: HTTP transport layer
Development#
Web Interface Technology Stack#
HTML5: Semantic structure and video/audio elements
CSS3: Modern styling with responsive design and light theme
Vanilla JavaScript: Real-time WebRTC connectivity without framework dependencies
@nvidia/omniverse-webrtc-streaming-library
: Omniverse WebRTC streaming library
Key Components#
AppStreamer
: Core streaming class from the web streaming libraryStream Discovery: Dynamic detection of Kit stream configurations
Connection Management: Handles connect/disconnect/pause/resume lifecycle
Resolution Control: Real-time resolution changes with stream capability awareness
Extending the Interface#
The web interface can be customized by modifying:
web/index.html
: Main interface structure and functionalityStream discovery logic in
extension.py
REST API endpoints for additional functionality
HTTPS Configuration#
For production deployments and enhanced security, you can configure the service to operate over HTTPS instead of HTTP.
Please see https://docs.omniverse.nvidia.com/services/latest/transports/transport_http.html
Troubleshooting#
Common Issues#
No streams detected:
Ensure
omni.kit.livestream.app
oromni.kit.livestream.aov
is enabledVerify stream configuration settings for primary and spectator streams
Check that signaling ports are configured for each enabled stream
Connection failures:
Confirm WebRTC server is running in Kit
Check network connectivity between machines
Verify firewall settings for signaling ports
Check browser console for specific error messages
Ensure server IP is accessible from client machine
Verify no crypto-related errors in browser console