Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Stream desktop over RTP using VLC with the lowest latency possible

I have been trying to figure out how to stream my desktop (over LAN) using VLC and to achieve the lowest latency possible (<100ms). The goal is to have another computer receive the stream and potentially play games while streaming (i.e playing game from PC1 on the PC beside the TV).

What settings should I use? I have tried multiple approaches but have yet to succeed.

EDIT: I am open to using something other than VLC as well.

like image 846
deken Avatar asked May 04 '13 01:05

deken


People also ask

Can VLC play RTP stream?

For VLC, streaming over RTP works by pushing the content to the target IP, which can be: A unicast address (when streaming to a specific device), or. A multicast address (when streaming to multiple devices in the local network).

How do I reduce the delay in VLC?

During playback you can press j or k to adjust audio delay (adjust step is 50 ms). or the other way round; negations can be pretty confusing. This page is part of the informal VLC Support Guide.

Can VLC stream RTSP?

Broadcasting RTSP camera stream with VLCOpen VLC media player and go to Media > Stream... In the [Open Media] window select the Network tab, enter the network URL of the RTSP camera device and click the Stream button.


1 Answers

I have also tried the same with VLC and couldn't ever get latency bellow 3 seconds. FFmpeg did wonders and finally provided a latency bellow 1 second.

mpeg2video and UPD provided the best results, RTP latency felt a bit worse but very close. Moving to x264 improves quality in exchange for a bit more latency, but that really depends on how much dynamic content is there and how fast the CPU is. I only got x264 working with UDP, but there must be a way to do it with RTP.

I'm not sure it's feasible for playing. The server will be under a heavy workload and latency will be noticeable - at least on Linux, don't know about windows.

On Linux try one of the following commands:

$ ffmpeg -f x11grab -s 1600x900 -r 50 -vcodec mpeg2video -b:v 8000 -f rtp rtp://192.168.0.10:1234

or

$ ffmpeg -f x11grab -s 1600x900 -r 50 -vcodec libx264 -preset ultrafast -tune zerolatency -crf 18 -f mpegts udp://192.168.0.10:1234

Adjust for screen resolution (-s <your resolution>), refresh rate (-r <fps>), bandwidth (-b:v <bits/s>), quality (-crf 18 or -qp 18, the lower the better), and target ip:port.

If running Windows use dshow in place of x11grab.

Watch it using ffplay udp://192.168.0.10:1234 or ffplay sdp://192.168.0.10:1234.

Mind you that none of those options will stream sound. I was unable to get such low latencies when streaming audio as well. It might be doable, I just didn't figured out how.

The most responsive client was ffplay, VLC introduced too much latency even with its network cache set to zero - with such cache it actually got worse, since it tried to 'resync' the stream too often.

If you need further details I made a post about my findings. Hope it helps. I appreciate any feedback. ^_^

like image 135
tdaitx Avatar answered Sep 26 '22 06:09

tdaitx