command - Mplayer - 使用命令行更改曲目、播放/暂停
问题描述
Mplayer 提供了更改曲目和播放/暂停音乐的快捷方式,但它们仅在 mplayer 窗口具有焦点时才有效。
例如,是否可以使用命令行更改当前在 mplayer 中播放的曲目?在这种情况下,即使 mplayer 没有焦点,我也可以将此命令分配给快捷方式并使用它。
我在谷歌上找到的只是如何使用 mplayer 播放文件或在窗口获得焦点时更改曲目的快捷方式。
解决方案
我实际上正在尝试做这件事!我将分享我迄今为止发现的内容,以防它对任何人有所帮助。
我一直无法找到播放/暂停曲目的方法。但是,我已经能够改变轨道,至少在进入下一个轨道方面。
到目前为止,我找到了 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/0
0
1
$ echo "p" > /proc/$PID/fd/0
这具有改变轨道的效果mplayer
。
然而,即使我p
在我的例子中使用了,我发现你可以做echo
任何事情(包括什么都不做),并且无论你输入什么,它仍然可以实现改变轨道的相同目标。
命名管道
也称为FIFO
s,命名管道,就像常规管道 ( |
) 一样,将输出重定向到其他进程。主要区别在于它们是文件系统的一部分,可用于在不同的终端会话之间进行通信。
首先,在文件系统的任何位置创建一个新的命名管道。我选择了/tmp/
。
$ mkfifo /tmp/mp3control.pipe
然后开始mplayer
将其 STDIN 重定向到命名管道。
$ mplayer -playlist brutal_tunez.txt < /tmp/mp3control.pipe
它看起来像进程挂起,那是因为它期望对方输入一些东西。
现在打开一个新终端并将内容输入管道。
$ echo "p" > /tmp/mp3control.pipe
您将听到从 开始播放的音乐mplayer
。同样,就像以前一样,对管道的任何进一步输入都只会改变轨道。
我相信这与mplayer
处理 STDIN 的方式有关,与进入p
播放或暂停音乐不同。
我会继续调查这个问题,但如果我在某个地方犯了错误,我很想听听别人的意见。总而言之,老实说,这最终可能会导致花费的时间不值得。(但我们仍然必须!)
推荐阅读
- java - 有没有办法在java中访问重复的JPanel的组件?
- python - 如何迭代一个数据帧的每个元素并将元素与另一个数据帧进行比较,然后找到匹配的概率
- azure-aks - Azure 的 CSI 机密存储提供程序是否需要将“hostNetwork”设置为 true?
- python - 如何找到python内置模块的实现python文件,即itertools
- python - 如何在我的 python 项目中添加蜂鸣器?
- java - Python等效于以下AES加密Java代码?
- python - 奇怪的“model.summary”格式
- reactjs - 如何在 SPFx React web-part 中集成 bootstrap 3.3.7 轮播?
- vb.net - 使用参数字符串制作文本框的功能
- reactjs - 单击时删除数组中的元素并且只接受输入标签中的数字类型?[反应JS]