首页 > 解决方案 > Mplayer - 使用命令行更改曲目、播放/暂停

问题描述

Mplayer 提供了更改曲目和播放/暂停音乐的快捷方式,但它们仅在 mplayer 窗口具有焦点时才有效。

例如,是否可以使用命令行更改当前在 mplayer 中播放的曲目?在这种情况下,即使 mplayer 没有焦点,我也可以将此命令分配给快捷方式并使用它。

我在谷歌上找到的只是如何使用 mplayer 播放文件或在窗口获得焦点时更改曲目的快捷方式。

标签: commandshortcutmplayer

解决方案


我实际上正在尝试做这件事!我将分享我迄今为止发现的内容,以防它对任何人有所帮助。

我一直无法找到播放/暂停曲目的方法。但是,我已经能够改变轨道,至少在进入下一个轨道方面。

到目前为止,我找到了 2 种方法:使用/proc/$pid/fd/0和命名管道 (FIFO)。解释 FIFO 有点困难(我最近才知道它们),所以我会最后做。

通过修改 STDIN/proc/$pid/fd/0

我们可以通过将输入重定向到进程的文件定义目录/proc/$pid/fd/$pid的进程 PID 来与不同终端会话中的进程进行通信。

首先,使用 查找进程 ID pidof。确保mplayer实际运行!

$ pidof mplayer

这将输出 的 PID mplayer。使用它,我们可以通过将其重定向$PID到 STDIN 来输入我们想要的内容。(注意,指的是 STDIN,指的是STDOUT 等)。一个例子:mplayer/proc/$PID/fd/001

$ echo "p" > /proc/$PID/fd/0

这具有改变轨道的效果mplayer

然而,即使我p在我的例子中使用了,我发现你可以做echo任何事情(包括什么都不做),并且无论你输入什么,它仍然可以实现改变轨道的相同目标。

命名管道

也称为FIFOs,命名管道,就像常规管道 ( |) 一样,将输出重定向到其他进程。主要区别在于它们是文件系统的一部分,可用于在不同的终端会话之间进行通信。

首先,在文件系统的任何位置创建一个新的命名管道。我选择了/tmp/

$ mkfifo /tmp/mp3control.pipe

然后开始mplayer将其 STDIN 重定向到命名管道。

$ mplayer -playlist brutal_tunez.txt < /tmp/mp3control.pipe

它看起来像进程挂起,那是因为它期望对方输入一些东西。

现在打开一个新终端并将内容输入管道。

$ echo "p" > /tmp/mp3control.pipe

您将听到从 开始播放的音乐mplayer。同样,就像以前一样,对管道的任何进一步输入都只会改变轨道。

我相信这与mplayer处理 STDIN 的方式有关,与进入p播放或暂停音乐不同。

我会继续调查这个问题,但如果我在某个地方犯了错误,我很想听听别人的意见。总而言之,老实说,这最终可能会导致花费的时间不值得。(但我们仍然必须!)


推荐阅读