![通过 http 使用 ffmpeg 广播屏幕](https://linux22.com/image/1618814/%E9%80%9A%E8%BF%87%20http%20%E4%BD%BF%E7%94%A8%20ffmpeg%20%E5%B9%BF%E6%92%AD%E5%B1%8F%E5%B9%95.png)
这些隔离的日子里,我打算将我的桌面分享给朋友,以实践方式向他们解释什么是 git。问题是:
- 我使用 FreeBSD。
- 我们使用的是 NAT。但我有一个 VPS,其中配置了 VPN(Wireguard),用于这些目的。
- 我想要使用免费且简单(“无吸力”)的软件。
我决定使用共享桌面ffmpeg -f x11grab
并将输出流传输到任何端口。由于我们可以在一个虚拟网络中,朋友们可以使用任何 VLC、MPV 或 Web 浏览器毫无问题地观看此流。当我了解到 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
我正在测试的 mpv:
mpv --no-cache --no-resume-playback stream.m3u8
我发现延迟大约为 10-15 秒。即使我将视频比特率设置为半兆字节,延迟也差不多(当然质量也很差),所以这可能意味着问题不在于带宽 [而且我甚至还没有开始将其广播到比本地 PC 更远的地方!]。
我发现了一个所以回答用户说 HLS 是低延迟的错误协议。我读了很多博客、维基百科文章和 ffmpeg 维基百科 (流媒体指南) 但找不到解决方案。我该如何减少延迟,或者我可以使用什么软件(最好使用 ffmpeg)让我的朋友看到我的桌面,延迟时间相当于 Discord 和 Skype 的几秒钟?值得一提的是:我不需要好的质量,丢包也没关系,因为我要共享一个终端窗口。