When users choose to transmit video over the network, the transmission latency is often what they care about most. When integrators explore how to reduce the video transmission latency, they tend to focus on the optimization of the network and video encoding, and they often ignore video decoding and playout. This blog emphasizes that the transmission latency can be remarkably reduced by adjusting the buffer duration value of Magewell NDI® decoders.
Hardware Equipment:
Equipment Setup:
We use Magewell Pro Convert HDMI 4K Plus encoder (hereinafter referred to as "Magewell NDI® encoder") to encode the video source and transmit it to the LAN through NDI® protocol. At the same time, the loop-through interface of this encoder is connected to Monitor 1. Since the loop through isn't processed by any system, and the monitor used in this test has no operating system, the screen it displays can be regarded as the video source itself which can be used for comparison with the displayed screen by decoding.
The Magewell Pro Convert for NDI® to HDMI (hereinafter referred to as "Magewell NDI® decoder") used for decoding is connected to the same LAN, and the decoded video is output to Monitor 2 for display through the HDMI interface.
For the testing purpose, we have specially made a video that can be used for stopwatch timing. By recording and comparing the stopwatch time of the video source (Monitor 1) and that of the decoder (Monitor 2), we can obtain the time required from video encoding to the completion of decoding, which is the video transmission latency.
After setting up the above testing environment, we log into the Web UI of the Magewell decoder (how to access the Web UI of the Pro Convert products). Add channels manually on the Source Page, click "Add" in "Preset" to select different transmission protocols, and then enter the buffer duration value in "Buffer duration". In addition, we can also automatically obtain the NDI® data stream channel. Enter the buffer duration value in the "Buffer duration" of the "NDI® Source" for uniform settings. We try different values (from 20ms to 120ms, change it every 10ms), the recorded testing results are as follows.
NO. | Buffer duration value (ms) | Time of receiving NDI stream (s) (Monitor 1) |
Time of decoding NDI stream (s) (Monitor 2) |
Latency (ms) (From Monitor 1 to Monitor 2) |
Average latency (ms) |
---|---|---|---|---|---|
1 | 20 | 00:09.717 | 00:09.667 | 50 | 50 |
2 | 00:10.433 | 00:10.383 | 50 | ||
3 | 00:11.550 | 00:11.500 | 50 | ||
4 | 30 | 00:14.000 | 00:13.933 | 67 | 66.7 |
5 | 00:15.417 | 00:15.350 | 67 | ||
6 | 00:16.183 | 00:16.117 | 66 | ||
7 | 40 | 00:53.900 | 00:53.817 | 83 | 83 |
8 | 00:54.450 | 00:54.367 | 83 | ||
9 | 00:55.433 | 00:55.350 | 83 | ||
10 | 50 | 00:24.350 | 00:24.267 | 83 | 83.3 |
11 | 00:25.500 | 00:25.417 | 83 | ||
12 | 00:26.217 | 00:26.133 | 84 | ||
13 | 60 | 00:07.967 | 00:07.883 | 84 | 83.7 |
14 | 00:08.700 | 00:08.617 | 83 | ||
15 | 00:09.517 | 00:09.433 | 84 | ||
16 | 70 | 00:26.267 | 00:26.167 | 100 | 100 |
17 | 00:27.750 | 00:27.650 | 100 | ||
18 | 00:28.633 | 00:28.533 | 100 | ||
19 | 80 | 00:45.633 | 00:45.517 | 116 | 116.7 |
20 | 00:46.567 | 00:46.450 | 117 | ||
21 | 00:47.300 | 00:47.183 | 117 | ||
22 | 90 | 00:05.733 | 00:05.600 | 133 | 133 |
23 | 00:06.033 | 00:05.900 | 133 | ||
24 | 00:07.700 | 00:07.567 | 133 | ||
25 | 100 | 00:23.517 | 00:23.383 | 134 | 133.3 |
26 | 00:24.267 | 00:24.133 | 134 | ||
27 | 00:25.533 | 00:25.400 | 133 | ||
28 | 110 | 00:40.500 | 00:40.350 | 150 | 150 |
29 | 00:41.683 | 00:41.533 | 150 | ||
30 | 00:42.317 | 00:42.167 | 150 | ||
31 | 120 | 00:06.433 | 00:06.283 | 150 | 150 |
32 | 00:07.550 | 00:07.400 | 150 | ||
33 | 00:08.333 | 00:08.183 | 150 |
After sorting we get the below table:
Buffer duration value (ms) | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 100 | 110 | 120 |
Latency (ms) | 50 | 66.7 | 83 | 83.3 | 83.7 | 100 | 116.7 | 133 | 133.3 | 150 | 150 |
With the same network environment and video encoding, the network transmission latency is closely related to the buffer duration setting of the decoder. The smaller the buffer duration value is, the smaller the overall transmission latency is. But we can't blindly pursue low latency and ignore the importance of buffer setting to ensure the smoothness of the picture. In general, the buffer duration value is set twice the maximum jitter value during transmission in order to maintain the smoothness of the output video and prevent stuttering. We can access the Web UI of Magewell decoder (the link is shared in the testing method section), in the Jitter>SOURCE>Dashboard we can see the jitter value of the current data transmission.