Unable to configure iceTransportPolicy to "relay" in Isaac Sim WebRTC

Isaac Sim Version

4.2.0

Operating System

Ubuntu 22.04

Topic Description

Problem Description

I’m trying to deploy both Isaac Sim and Coturn TURN server on the same cloud NAT server to reduce resource usage. While the distributed deployment (Isaac Sim and Coturn on separate servers) works perfectly, the integrated deployment fails to establish WebRTC connections.

Environment Setup:

  • Isaac Sim 4.2
  • Coturn 4.6
  • Cloud NAT server with public IP: 101.126.xxx.xx, internal IP: 172.28.xxx.xx
  • Client browser accessing via: http://101.126.xxx.xx:8211/streaming/webrtc-client/?server=101.126.xxx.xx

Root Cause Analysis:
The issue occurs because Isaac Sim doesn’t use the TURN server when deployed on the same machine. From the logs and WebRTC internals, I found:

  1. TURN server logs: Only show browser connections, no Isaac Sim connections
  2. WebRTC Internals: Isaac Sim generates only host candidates (127.0.0.1:1024, 172.28.xxx.xx:1024), no relay candidates
  3. Network connectivity: Verified that Isaac Sim can connect to TURN server (telnet 101.126.xxx.xx 3478 succeeds)

This suggests Isaac Sim has built-in logic that skips TURN when the server is on the same machine, which causes connection failure in NAT environments.

Attempted Solutions

  1. Verified network connectivity: Both internal and external access to TURN server works
  2. Confirmed TURN server configuration: Coturn is properly configured and listening on all interfaces
  3. Tested with turnutils_uclient: TURN allocation and media relay work correctly
  4. Modified Isaac Sim WebRTC configuration in isaacsim_webrtc.toml:
    ice_servers = [{ 
        urls = ["turn:101.126.xxx.xx:3478?transport=udp","turn:101.126.xxx.xx:3478?transport=tcp"], 
        username = "user", 
        credential = "pass" 
    }]
    
    # Attempted to force relay mode
    iceTransportPolicy = "relay"
    force_relay = true
    disable_host_candidates = true
    

Current Result

Despite adding the relay enforcement configurations, the WebRTC internals still show:

iceTransportPolicy: all, bundlePolicy: balanced, rtcpMuxPolicy: require

The iceTransportPolicy remains “all” instead of “relay”, indicating the configuration is not being applied.

Question

How can I properly configure Isaac Sim WebRTC to force relay mode and disable host candidates for same-machine TURN deployment?

Is there a documented way to:

  1. Set iceTransportPolicy to “relay”
  2. Force Isaac Sim to use TURN server even when co-located
  3. Disable host candidate generation

This would enable resource-efficient single-server deployments while maintaining WebRTC connectivity.

Have you tried our latest version Isaac Sim 5.0?

Yes; But considering that the official version of 5.0 has not been fully released yet, we are currently using 4.2 and 4.5 uniformly. So I would like to ask if there are any related settings about iceTransportPolicy in version 4.2.

I have reached out to the internal team about this issue. I will let you know if there is any update.

Please have an upgrade to 4.5 or 5.0. Isaac Sim 4.2 is EOL. Both 4.2 and that old WebRTC client is no longer supported.
In 4.5 and later, the official streaming client is the Isaac Sim WebRTC streaming Client.

Okay, Thanks for your reply

Long story short, setting relay doesn’t work, I tried. Best is avoid complex NAT system… For me works 5.0.0

Just want to say this stuff is configured on frontend, when connection established. The frontend is stored in the webrtc kits, where it also sets static 49100 tcp port to establish websockets connection all in kitplayer.js. It can’t be changed through configs, it needs to be overwritten fully by yourself. And usually trying to change it in the extscache won’t help as it builds it somewhere in .local folder with some other kits, from where it gets loaded.

Hi @fzg79191,

Following up on this – the inability to set iceTransportPolicy to “relay” was a limitation in the Isaac Sim 4.x/5.x WebRTC streaming stack. As @dmitri_m correctly identified in post #9, the transport policy was hardcoded in the frontend
JavaScript and not exposed as a configurable setting.

This has been addressed in Isaac Sim 6.0.0. The omni.kit.livestream.webrtc extension (v9.1.0+) added TURN server support for TCP streaming fallback via relay servers. The streaming stack now supports configurable transport policy with runtime
parameters including:

  • turnTransportPolicy – set to “relay” to force TURN relay mode
  • turnUris – TURN server URIs
  • turnUsername / turnPassword – TURN credentials
  • publicIp – for NAT traversal when the server is behind NAT

This should enable the single-server deployment (Isaac Sim + Coturn co-located) that you were trying to achieve.

For anyone on 4.x/5.x, there is no workaround – the transport policy is hardcoded to “all” in the client-side JavaScript and cannot be changed via server configuration. Upgrading to 6.0.0 is the path forward.

Closing as resolved in 6.0.0.