I am following the readme file here with the latest code from the main branch. I want to build a USD viewer kit application that streams to the provided react application. I am running this in an Nvidia Omniverse Workstation in Azure.
When I open the react application in the browser and select ‘UI for default streaming USD Viewer app’, I see the following error in the kit application’s logs
main: thread_init: already added for thread 2025-09-10T14:52:41Z [41,345ms] [Fatal] [omni.kit.livestream.streamsdk] [NvscStreamingSess] #2(C)00000{18384}&1DA6C6B0& Failed to setup the streaming session because: StreamSdkException 800b0000 [NVST_R_GENERIC_ERROR] Failed to create video stream 0 2025-09-10T14:52:41Z [41,358ms] [Error] [omni.kit.livestream.webrtc.plugin] NVST Error: NVST_R_INVALID_STATE 2025-09-10T14:52:41Z [41,358ms] [Warning] [omni.kit.livestream.webrtc.plugin] Failed to send custom app message to client: {"event_type": "loadingStateResponse", "payload": {"url": "", "loading_state": "idle"}}
[Warning] ... Failed to send custom app message to client
What’s Happening?
These log messages are symptoms of a failure in the video streaming pipeline between the Kit application and the React client. The root cause is most frequently a misconfiguration or resource conflict in the Kit streaming service, especially when running in cloud/virtualized or multi-threaded environments like Azure.
Key Points from Community & Official Reports
The StreamSdkException 800b0000 [NVST_R_GENERIC_ERROR] Failed to create video stream almost always points to:
GPU not in the correct operation mode (“compute mode” instead of “graphics mode”;
Missing hardware video encoding support or inaccessible display server (X11) if visual output is required.
Too many threads or a threading/resource conflict in Kit’s streaming subsystem, especially in cloud/virtual desktop deployments.
[NVST_R_INVALID_STATE] and downstream WebRTC errors usually mean the streaming session can’t finish initialization, possibly due to an earlier failure allocating video, audio, or display resources.
thread_init: already added for thread might warn about reinitialization of Kit streaming threads; often a consequence, not a root cause, of the main stream setup failure.
If the GPU is in compute mode (display outputs and graphics features disabled), the video stream cannot be created and published.
How to Fix
Check GPU Graphics Mode:
Ensure your Azure/NVIDIA workstation GPU (L40S, A40, etc.) is in the correct graphics-enabled mode (not compute-only). Use gpumodeswitch --listgpumodes for confirmation, and enable display/graphics mode if needed.
Ensure Access to Required Hardware Features:
If in a VM or container, verify hardware video encoders are present and available to the instance (sometimes they are hidden or disabled in cloud setups).
Check Display/X11 Server Availability:
Kit streaming can require an active X11 display server. If you’re running headless, confirm if you need to launch Xvfb or another virtual display. Set the $DISPLAY variable as required.
Avoid Thread/Resource Conflicts:
Don’t launch multiple instances of the streaming service at once. If you restart Kit’s USD Viewer or attempt to reinitialize the stream in quick succession, shut down all related threads/processes before retrying.
Update Kit and Streaming Extensions:
Use latest Kit and Omniverse extensions from the official branch. Outdated packages can break WebRTC or StreamSDK compatibility with the front-end client.
Open Correct Network Ports and Set Firewall:
For Azure cloud, ensure all necessary TCP/UDP ports for WebRTC and video streaming are open and not blocked by network rules.
Review Browser Console and Kit Logs:
Confirm no browser-side errors related to WebSocket or media stream connections. These can help diagnose firewall, config, or service mapping issues.
In summary:
Your streaming session is blocked because the Kit application cannot create the video stream—likely due to the GPU not being in graphics mode, missing video encode resources (in VM/cloud), or a conflict within the streaming extension. Switch the GPU to graphics mode, check X11/display access, verify hardware encoders are available, and restart with updated configs/extensions.