我正在使用 mplayer 来传输来自配置为通过 HTTP 输出的 MPD 实例的音频:
mplayer http://<stream-URL>:<port>
流由 MPD 客户端 (Cantata) 控制。每当 MPD 到达客户端中定义的播放队列末尾时,流就会暂停。发生这种情况时,mplayer 会立即退出。我希望它能够继续运行,并在有新内容可用时立即播放(即,一旦新项目被添加到客户端的播放队列中)。
我尝试使用该-idle
选项运行 mplayer,虽然这确实导致 mplayer 在流停止后继续运行,但是在 MPD 客户端中开始播放内容时不会产生音频输出。
我怎样才能让 mplayer 监听流以再次变为活动状态并开始播放从流中接收的内容?
编辑:MPD 在我的局域网中的服务器上运行,而 Cantata 和 mplayer 在我的笔记本电脑上运行。
答案1
我已经很久没玩过 MPD 脚本了。由于 Cantata 有一个 dBus 接口,所以做你想做的事情应该不会太难。然而,它确实会把你带入奇怪的 dbus 控制领域。
部分答案是 -idle 不会导致 mplayer 尝试重新连接到流媒体源。它只会阻止 mplayer 退出。
这并不是说你寻求的东西无法实现。你可能需要一些外部脚本来触发 mplayer 重新连接。无论如何,要启用 mplayer 的远程控制,请运行以下命令:
mkfifo /home/you/.mplayer/cmd.fifo
mplayer -idle -input file=/home/you/.mplayer/cmd.fifo
此后,只要您运行类似于以下内容的程序,就可以使 mplayer 重新连接。
echo "loadfile http://yourserver.com:8000/yourstream.mp3" >> /home/you/.mplayer/cmd.fifo
这是我在不使用 Cantata 的 dbus 接口的情况下所能做到的。进行一些研究应该可以找到所需的内容。
注意:在播放流时运行 loadfile 命令会导致音频出现明显中断。
这里可能还需要注意:MPD、mplayer 和 Cantata 都位于同一个盒子上还是位于不同的系统上?
希望这可以帮助。
答案2
我没有听说过任何有关 cantata 的事情,但是当我在开车时使用移动互联网收音机时,我遇到了同样的问题,如果连接中断,则需要重新启动 mplayer。我只需将 mplayer 命令放在一个由变量控制的无限循环中,该变量设置为 false 以便于关闭,在中止后增加 3 秒的暂停,以免超载。
runplayer=true
while $runplayer
do mplayer "http://yourserver.com:8000/yourstream.mp3"
sleep 3
done