从远程终端用 X11 中的 VLC 播放视频

Posted

技术标签:

【中文标题】从远程终端用 X11 中的 VLC 播放视频【英文标题】:Play a video with VLC in X11 from remote terminal 【发布时间】:2012-03-27 00:49:35 【问题描述】:

我有一些带有 Linux 的超薄终端,每次启动时都会启动一个小脚本。该脚本有一个 cvlc 命令行,如下所示:

cvlc --quiet --fullscreen --no-osd --loop playlist.xspf

这工作正常,因为终端启动 X11 环境,然后是从自动启动启动的脚本;视频可以在 LCD 上很好地播放和渲染。

我的问题是出于某种原因,我需要远程终止 cvlc 进程并重新启动它。我用在 X11 环境中登录的同一用户对终端进行 ssh,我启动上述代码行并播放视频,是的...但是在我登录的终端中!

所以视频以纯字符模式播放,它在我的控制台中呈现为文本;当然,在 X11 环境中什么都看不到。所以我的问题是:如何启动我的 cvlc 命令并在 X11 中而不是在控制台本身中播放视频?

如果我只是尝试在没有选项的情况下播放它,我会得到以下输出:

$ cvlc playlist.xspf 
VLC media player 1.1.4 The Luggage (revision exported)
Blocked: call to unsetenv("DBUS_ACTIVATION_ADDRESS")
Blocked: call to unsetenv("DBUS_ACTIVATION_BUS_TYPE")
[0x9cb1114] inhibit interface error: Failed to connect to the D-Bus session daemon: /bin/dbus-launch terminated abnormally with the following error: Autolaunch error: X11 initialization failed.

[0x9cb1114] main interface error: no suitable interface module
[0x9cb0754] main interface error: no suitable interface module
[0x9c17914] main libvlc error: interface "globalhotkeys,none" initialization failed
[0x9caeca4] dummy interface: using the dummy interface module...
[0x9cabfa4] main playlist: stopping playback
[0x9dedb34] xcb_xv generic error: parent window not available
[0x9dedb34] xcb_x11 generic error: parent window not available
[0x9dedb34] xcb_glx generic error: parent window not available
[0x9dedb34] fb generic error: cannot get terminal mode (Invalid argument)
Blocked: call to signal(28, 0x60ae4e0)
Blocked: call to setlocale(6, "")
Blocked: call to sigaction(20, 0x46935e0, (nil))
Blocked: call to sigaction(2, 0xb730c948, (nil))
                                                                                            Blocked: call to sigaction(15, 0xb730c948, (nil))
Blocked: call to sigaction(28, 0xb730c948, (nil))
^C[0x9cae2b4] signals interface error: Caught Interrupt signal, exiting...
umboard@MB124205:~$ 

当然,问题是我无法从远程终端直接访问 X11,那么如何使用 cvlc 或 vlc 从远程控制台播放视频?

【问题讨论】:

【参考方案1】:

您需要设置 DISPLAY 变量。

例如:

export DISPLAY=:0

您可能需要使用 set 而不是 export (和/或将 :0 更改为类似的东西,我目前无法测试,谷歌的 DISPLAY 变量)但这是说您想要窗口的输出显示的一般想法出现。

更新:从 OP 下面的 cmets 中可以看到,找到了命令行选项:

--x11-display :0

【讨论】:

感谢您的回答,它为我指明了正确的方向,但是我还没有找到 EXACT cvlc 命令来完成这个我已经用谷歌搜索过,似乎是--x11-display 0 的选项,但我明白了一个窗口,标题是“Colour AsCii Art”所以 libcaca 它被用来将视频渲染为 AsCii =/ mmm... 我终于得到了我需要的正确 CVLC 命令行,谢谢你的帮助。但是我无法将您的解决方案标记为答案,它并不完整。我应该问我自己的问题还是你会用命令来补充你的问题?谢谢 您是否尝试过在 GUI 的“首选项”中设置“视频输出”并查看是否保存设置以供将来使用? 是的,但由于某种原因它无济于事。好的,我会发布答案,感谢您的所有帮助。我希望你也觉得它有用。我上面说的选项有一个错误的属性,它应该如下给出:--x11-display :0 @Metafaniel 我已将您的贡献添加到答案中,以防将来的观众需要。【参考方案2】:

$DISPLAY 环境变量保存可运行图形应用程序的 X 服务器实例的值。因此需要这个值:

echo $DISPLAY
:0

那么此值必须与 cVLC --x11-display 选项一起使用,如下所示:

cvlc --x11-display :0 video.mp4

这样,即使在远程 ssh 会话中使用此命令,视频也会输出到 X 服务器会话。但是,如果会话结束,视频将停止,因此您需要后台作业,因此当您注销时,视频会继续播放:

cvlc --x11-display :0 video.mp4 &

作为我的确切需求的参考,如果您需要在远程终端中运行视频并且您需要它循环播放,没有可见的 VLC 界面,全屏并且在控制台中绝对没有输出,那么您可能会发现它很有用,因为如果你像前面的例子一样运行命令,VLC 输出可能会在同一个用户的另一个 SSH 会话中抛出,你需要这样运行它:

cvlc -q --no-osd -L -f --no-video-title-show --x11-display :1 video.mp4 2&>1 >/dev/null &

标准输出和错误不会以这种方式出现在会话中。

【讨论】:

知道如果没有设置DISPLAY 变量会怎么做吗?只用 0?

以上是关于从远程终端用 X11 中的 VLC 播放视频的主要内容,如果未能解决你的问题,请参考以下文章

有没有关于使用c#用vlc编写视频播放器的资料

用libvlc 播放指定缓冲区中的视频流

Debian11安装VLC Media Player视频播放器

c#的一个视频播放库的封装-VLC.DotNet(二)

如何用vlc播放器的网络串流

如何在 iOS 中使用 VLC Player 使用 libvlc 播放 360 度视频