9

我一直在尝试弄清楚如何使用 VLC 流式传输我的桌面(通过 LAN)并实现尽可能低的延迟(<100ms)。目标是让另一台计算机接收流并在流式传输时可能玩游戏(即在电视旁边的 PC 上玩 PC1 的游戏)。

我应该使用哪些设置?我尝试了多种方法,但尚未成功。

编辑:我也愿意使用 VLC 以外的东西。

4

1 回答 1

10

我也尝试过使用 VLC 进行相同的操作,并且无法获得低于 3 秒的延迟。FFmpeg 创造了奇迹,最终提供了低于 1 秒的延迟。

mpeg2video 和 UPD 提供了最好的结果,RTP 延迟感觉有点差,但非常接近。迁移到 x264 可以提高质量以换取更多延迟,但这实际上取决于那里有多少动态内容以及 CPU 的速度。我只让 x264 与 UDP 一起工作,但必须有一种方法可以使用 RTP 来做到这一点。

我不确定这是否可行。服务器将承受繁重的工作负载并且延迟会很明显——至少在 Linux 上,不了解 Windows。

在 Linux 上尝试以下命令之一:

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

或者

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

调整屏幕分辨率 ( -s <your resolution>)、刷新率 ( -r <fps>)、带宽 ( -b:v <bits/s>)、质量(-crf 18-qp 18,越低越好)和目标 ip:port。

如果运行 Windows dshow,请使用x11grab.

使用ffplay udp://192.168.0.10:1234或观看ffplay sdp://192.168.0.10:1234

请注意,这些选项都不会播放声音。在流式传输音频时,我也无法获得如此低的延迟。这可能是可行的,我只是不知道如何。

响应速度最快的客户端是ffplayVLC即使其网络缓存设置为零,它也引入了过多的延迟 - 使用这种缓存实际上变得更糟,因为它过于频繁地尝试“重新同步”流。

如果您需要更多详细信息,我会发布一篇关于我的发现的帖子。希望能帮助到你。我很感激任何反馈。^_^

于 2013-06-09T21:23:09.413 回答