web-dev-qa-db-ja.com

一時停止するオーディオストリームを聴き続けるようにmplayerに指示します

Mplayerを使用して、HTTP経由で出力するように構成されたMPDインスタンスからのオーディオをストリーミングしています。

mplayer http://<stream-URL>:<port>

ストリームはMPDクライアント(Cantata)によって制御されます。 MPDがクライアントで定義された再生キューの最後に達すると、ストリームは一時停止します。これが発生すると、mplayerはすぐに終了します。 利用可能になり次第、実行を継続し、新しいコンテンツを再生したい(つまり、新しいアイテムがクライアントの再生キューに追加されたらすぐに)。

-idleオプションを指定してmplayerを実行しようとしましたが、ストリームが停止した後もmplayerは実行され続けますが、MPDクライアントでコンテンツの再生を開始しても音声出力は生成されません。

Mplayerにストリームをリッスンさせて再びアクティブにし、ストリームから受信したものの再生を開始するにはどうすればよいですか?

EDIT: MPDはLAN内のサーバーで実行されており、Cantataとmplayerはラップトップで実行されています。

2
itsjeyd

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
joat

カンタータについては何も聞いていませんが、車の運転中にモバイルインターネットラジオを使用すると、接続が切断された場合にmplayerを再起動するために同じ問題が発生しました。簡単にオフにできるようにfalseに設定された変数によって制御されるendlesloopにmplayerコマンドを配置し、何かを過負荷にしないように中止後に3秒の一時停止を追加します。

runplayer=true
while $runplayer
do mplayer "http://yourserver.com:8000/yourstream.mp3" 
sleep 3
done   
2
0800peter