-
-
Notifications
You must be signed in to change notification settings - Fork 419
Description
Operating System Version
Windows 10
OBS Version
Currently using 29.0.2 but was the same on earlier versions
NDI Tools Version
5.5.3.0 (Any NDI5 version)
Describe the bug
When the NDI-HX source is set to "Low Latency (Experimental)", OBS may drop every 3rd or 4th frame from the source causing jerky video. This happens intermittently, the source may run smoothly for a time before becoming jerky. After a time it may run smoothly again. Does not appear related to CPU or GPU load. Tested on isolated network with just NDI-HX camera, gigabit switch and OBS machine (no internet).
I enable this mode because in "Safe" latency mode, the latency appears to be variable which causes problems with audio sync.
Steps to reproduce
This may be dependent on NDI source and/or OBS machine specs. I am using HuddlecamHD-NDI camera, Windows 10 laptop with i7, Nvidia 1650Ti graphics. May be different for full NDI and NDI-HX.
- Set up camera source to be high bandwidth for testing (e.g. 1080p60 @ 16mbps CBR)
- Create NDI source set to "Low latency" mode, no hardware acceleration.
- Make a recording of a moving object on OBS.
- Play back the recording on a player which can do single step frames
- Observe that some frames are repeated then there is a jump to the next frame.
Expected behavior
All frames should be received as transmitted.
Screenshots
No response
Additional context
See #848
This appears to be due to obs_source_set_async_unbuffered() being set to True when the "Low latency" mode is enabled.
If this is set to False, then the frame drop does not occur, at the cost of 2 or 3 frames more latency, but still better than "Safe" latency mode.
It would be good to add an option in the source select UI to allow this option to be enabled (for absolute minimum latency) or disabled (for low latency but safe). I have made a test version of this and could submit as PR. Or perhaps offer 3 options in the latency box, "Safe" "Low" and "Minimum (experimental)" where "Low" sets the NDI-SDK to low latency but keeps the OBS frame buffering enabled.