Livestream to external network

Hi,

I’m trying to stream an Omniverse Kit app running on a Linux VM to a browser using WebRTC, and I’m facing an issue when accessing it from an external client machine.

Setup

Kit SDK version: 106.5

OS: Linux VM (open with public IP)

Extensions enabled in Kit app:

livestream.webrtc

livestream.messaging

Web viewer: Set up using the official sample

Web viewer port: 5173

Kit WebRTC port: 49100

What works

I am running the web-viewer locally on the VM.

Accessing the web-viewer URL from the VM itself works perfectly. (http:localhost:5173)

I can see the Kit app streaming correctly in the browser when accessed locally.

What doesn’t work

When I access the same web-viewer URL from an external client machine: (http://public-VM-IP:5173)

The request successfully hits the web-viewer on port 5173.

The web-viewer then tries to connect to the Kit app via <VM_PUBLIC_IP>:49100.

Port 49100 is open, and I can reach it from the client machine.

I also see logs in the Kit app confirming that the request reaches it.

However, the stream never starts.

After a while, the connection fails with an error in the Kit logs similar to:

NVST_CCE_DISCONNECTED when m_connectionCount XXXXX != 1

Observations

This seems to work only when the browser is running on the same VM.

From an external machine, signaling appears to succeed, but media streaming fails.

This feels like a WebRTC / ICE / networking issue, possibly related to IP advertisement, NAT, or UDP ports.

Questions

Is there any required configuration to force Kit WebRTC to advertise the public IP instead of a private/internal IP?

Are there additional UDP port ranges that need to be opened beyond port 49100?

Are there known issues or required settings for WebRTC streaming on Kit SDK 106.5?

Any guidance or pointers would be greatly appreciated.
Thanks in advance!

Hi there and thanks for posting. This is a classic WebRTC NAT/firewall issue when streaming to external networks. We do not support NATs. You are experiencing ICE connection failures when accessing the Kit WebRTC stream from outside the VM. The signaling succeeds (port 49100), but the media stream fails because WebRTC cannot establish peer connections through NAT.

If you can, you need to tell Kit’s WebRTC extension to use the public IP instead of the private VM IP. Add this to your .kit file or extension configuration:

[settings] exts.“omni.kit.livestream.app”.primaryStream.publicIp = “YOUR_VM_PUBLIC_IP”
exts.“omni.kit.livestream.app”.primaryStream.signalPort = 49100

Share my situation and workaround. My local pc and remote computer are different network, they construct a p2p virtual net via frp. I had tried lots solution:

  1. Direct use virtual net ip of virtual net in WebRTC Streaming Client, same issue with poster.
  2. Use ssh forward tcp port(49100), and use socat←ssh→socat (udp over tcp) to forward udp port(47998), same issue too.
  3. Use another virtual net tool, easytier. not work too.

I am almost 100% certain that the network connection is working properly.

I found another stream tool in GitHub - NVIDIA-Omniverse/web-viewer-sample: This sample demonstrates how a front-end client can present a streamed Omniverse Kit application and how to send messages between the two apps. .
The only I need to do is

  1. Modify the local.server’s value in stream.config.json file to my virtual network ip of remote machine
  2. bun i or npm install what ever you like, and then run bun run dev
  3. open the 127.0.0.1:5173 in your browser. and check stream, then start

Everything thing is working normally, there is no need to modify any network configuration/architecture.

As far as I known, web-viewer-sample is based on webrtc too.

Yes correct, you can use the latest sample for streaming at
GitHub - NVIDIA-Omniverse/web-viewer-sample: This sample demonstrates how a front-end client can present a streamed Omniverse Kit application and how to send messages between the two apps.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.