告诉 mplayer 继续收听暂停的音频流

告诉 mplayer 继续收听暂停的音频流

我正在使用 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   

相关内容