通过 http 使用 ffmpeg 广播屏幕

Osk*_*pov 5 ffmpeg streaming video-streaming hls

这些隔离的日子里,我打算将我的桌面分享给朋友们,向他们解释什么是 git 实践。问题是:

  • 我使用 FreeBSD。
  • 我们落后于 NAT。但我已经为这些目的配置了带有 VPN (Wireguard) 的 VPS。
  • 我想使用免费且简单(“无趣”)的软件。

我决定使用的是共享我的桌面并将ffmpeg -f x11grab输出流到任何端口。由于我们可以在一个虚拟网络中,朋友们可以使用任何 VLC、MPV 或网络浏览器毫无问题地观看此流。当我了解到 ffmpeg 无法直接输出到 http 时,问题就出现了。我尝试了很多解决方案,例如通过 rtmp 发送到 YouTube Live Streaming(开销,而不是免费服务)以及使用 HLS 协议和 HTTP 服务器进行分割和共享,并在 HLS 处停止。

我的 ffmpeg 启动:

ffmpeg -f x11grab -video_size 1920x1080 -i :0 -c:v h264 -f hls -hls_time 1 -g 15 stream.m3u8
Run Code Online (Sandbox Code Playgroud)

以及我正在测试的 mpv:

mpv --no-cache --no-resume-playback stream.m3u8
Run Code Online (Sandbox Code Playgroud)

我发现有大约 10-15 秒的延迟。即使我将视频比特率设置为半兆字节,也会有类似的延迟(当然质量也很差),因此这可能意味着问题不在于带宽[而且我什至没有开始在比我的本地更远的地方广播它个人电脑!]。

我找到了一个SO 答案,其中用户说 HLS 是低延迟的错误协议。我阅读了很多博客、维基百科文章和 ffmpeg 维基百科(StreamingGuide),但找不到解决方案。我怎样才能减少延迟,或者我可以使用什么软件(最好是 ffmpeg)让我的朋友像 Discord 和 Skype 那样以几秒的延迟看到我的桌面?值得一提的是:我不需要好的质量,滴也可以,因为我要共享一个终端窗口。