Best Practice for Custom Nx Witness Player (RTSP + GStreamer, Overlay Sync & Performance)
Hi,
I'm working on a custom client integration with Nx Witness and would appreciate some guidance on best practices.
Context
- We are building a WPF-based client
- Pulling RTSP streams from Nx Server (not directly from cameras)
- Using GStreamer (D3D11) for decoding and rendering
- Parsing metadata (JSON) from the stream and rendering analytics overlays (bounding boxes)
Main Challenges
-
Accurate overlay synchronization
Matching overlays to the exact displayed frame (currently using PTS and buffers, but it impacts performance) -
Performance
GPU → CPU copies and buffering logic are expensive
Questions
-
Player / SDK
- Does Nx provide any internal or supported video player component / SDK (similar to other VMS systems)?
- Or is RTSP + external player (GStreamer/VLC) the recommended approach for custom clients?
-
Overlay synchronization
- What is the recommended way to sync analytics overlays with video?
- Is PTS / clock-based synchronization the correct approach?
-
Scalability / Performance
- Are there recommendations for how many simultaneous analytics video streams can be displayed?
- Any best practices for multi-stream performance (GPU usage, decoding, etc.)?
-
Metadata
- Is consuming metadata from the RTSP stream sufficient?
- Or is there an advantage to using NX Metadata SDK / API for better accuracy or synchronization?
Goal
We aim to achieve behavior similar to Nx Desktop Client:
- Smooth playback
- Accurate overlay timing
- Minimal latency
- Efficient multi-stream handling
Any guidance, documentation, or examples would be greatly appreciated.
Thanks!
0
Please sign in to leave a comment.
Comments
0 comments