![通过网络复制屏幕 Xorg(Xpra?)](https://linux22.com/image/144488/%E9%80%9A%E8%BF%87%E7%BD%91%E7%BB%9C%E5%A4%8D%E5%88%B6%E5%B1%8F%E5%B9%95%20Xorg%EF%BC%88Xpra%EF%BC%9F%EF%BC%89.png)
我正在寻找一种在网络上复制桌面的方法。 (如果能在网络浏览器客户端上运行就太棒了。)
我尝试使用
vnc
/x11vnc
但质量/帧率太低。 (智能手机客户端上的 CPU 太高 - 我认为。)我尝试将屏幕转换为流视频,
ffmpeg
但我做不到。 (质量差且不是真正的流媒体系统)
有没有办法做到这一点 ?也许通过使用 X11 转发和重复屏幕?
的混合ssh -X
,xrandr -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/