通过网络复制屏幕 Xorg(Xpra?)

通过网络复制屏幕 Xorg(Xpra?)

我正在寻找一种在网络上复制桌面的方法。 (如果能在网络浏览器客户端上运行就太棒了。)

  • 我尝试使用vnc/x11vnc但质量/帧率太低。 (智能手机客户端上的 CPU 太高 - 我认为。)

  • 我尝试将屏幕转换为流视频,ffmpeg但我做不到。 (质量差且不是真正的流媒体系统)

有没有办法做到这一点 ?也许通过使用 X11 转发和重复屏幕?

的混合ssh -Xxrandr -d :0 --output HDMI-1 --auto也许? (此xrandr代码重复屏幕HDMI-1

就像:(xrandr -d :0 --output http://192.168.1.3:9001 --auto我在做梦。)

编辑:也许xpra可以做我正在寻找的事情?但我现在还不能让它发挥作用。

答案1

你可以用ffmpeg它:

发射设备,运行:

ffmpeg -f x11grab -s 1800x1000 -framerate 30 -i :0.0 -preset fast -vcodec libx264 -tune zerolatency -b 900k -f mpegts udp://RECEIVERIP:9000

并在接收设备,打开防火墙端口9000/UDP并运行:

ffplay udp://@:9000

您需要进行RECEIVERIP相应的设置,并通过修改 来调整要传输的屏幕区域-s 1800x1000。当然,您可以选择任何您想要的免费端口来代替9000

在性能方面,您可以在传输机器可以处理的范围内进行调整-framerate-preset( ...|fast|ultrafast),同时保持所需的质量和延迟。

ffplay是一个非常小的客户端,可能适合您的需求。您也可以使用vlc.

要在浏览器上显示流,您可能还必须使用流服务器。vlc会有这种能力,但它可能很慢,而且我还没有找到足够的文档。

笔记:

优化的传输命令(用于降低延迟,但质量较低且不是特别动态的内容)可能如下所示:

ffmpeg -f x11grab -s 1800x1000 -framerate 15 -i :0.0 -preset ultrafast -vcodec libx264 -tune zerolatency -b 500k -f mpegts udp://RECEIVERIP:9000

要进一步优化负载,您可以利用硬件加速,如下所示记录在案。虽然这取决于平台,但如果支持的话,可能会显着降低 CPU 负载。

答案2

答案3

是的,您可以使用 xpra 做到这一点。 (xpra、vnc 和 ffmpeg 解决方案都将使用屏幕抓取来捕获像素数据 - 因此存在性能限制)假设您的 X11 显示器位于“:0”,请尝试:

xpra shadow :0 --bind-tcp=0.0.0.0:14500 --tcp-auth=pam
#wait a second or two and then:
xdg-open http://localhost:14500/

相关内容