我正在为我的电影设置媒体服务器。服务器已联网,几台笔记本电脑/台式机也是联网的。服务器运行最新的 Ubuntu(桌面版,不是服务器版)。
这是我想要实现的场景:
- 服务器已开启并已连接到网络
- 客户端(我的笔记本电脑)打开一个到服务器的 Web 界面(或者只是通过 ssh 向其发送命令)。我通过网络界面选择我想要的电影,然后我的界面执行命令。
- 该命令生成一个播放指定电影的 VLC 实例,并将窗口(仅窗口)转发到请求它的计算机。
- 最终结果:我的笔记本电脑上有一个 VLC 窗口,可以为我播放电影。完成后我可以关闭它。
是否有可能像这样将一个窗口转发到网络上的客户端?
答案1
它是可能的,但可能并不理想。 VLC 客户端(窗口)将显示在您想要的任何显示器上,但它将正在播放未压缩的视频,必须作为网络 X 请求发送。即使没有任何开销,以 24 bpp 和 30 fps 发送 720×540 也需要大约 279 Mbps(720px × 540px × 3 字节/像素 × 30 fps × 8 位/字节)。
以太网帧、TCP/IP 数据包和 X 协议本身将使这一点更加膨胀。
更违反直觉的是,由于您显示的是经过后处理的 RGB 数据,因此窗口越大,您需要的带宽就越大。 (对此持保留态度,实际缩放可能发生在显示端 - 在这种情况下,减少窗口大小不会对性能产生任何影响)
当 VLC(或任何其他 X 客户端)在 上的显示器上显示时localhost
,一系列巨大的优化功能都会启动,为您提供所期望的响应能力。
如果您愿意,您可以自己尝试一下(看到它的实际效果非常有趣):
ssh -Yf user@hostname vlc some-file.avi
VLC 启动,但是:音频在 X 客户端的主机上播放(hostname
上图),不是X 服务器的主机,并且视频以预期 fps 的一小部分更新。进入流媒体几秒钟后,视频和音频就完全不同步了。大多数标准流是无法观看的。甚至不用考虑高清 A/V 流。
标准媒体服务器设置提供压缩的使用某种形式的网络文件访问协议(例如NFS、CIFS)从服务器流式传输到客户端,并让视频客户端进行解压缩和播放。