Скажите mplayer, чтобы он продолжал слушать аудиопоток, который останавливается

2164
itsjeyd

Я использую mplayer для потоковой передачи аудио из экземпляра MPD, настроенного на вывод через HTTP:

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

Поток контролируется клиентом MPD (Cantata). Поток приостанавливается всякий раз, когда MPD достигает конца очереди воспроизведения, определенной в клиенте. Когда это происходит, mplayer сразу выходит. Я хотел бы, чтобы он продолжал работать и воспроизводить новый контент, как только он станет доступным (т. Е. Как только новые элементы будут добавлены в очередь воспроизведения на клиенте).

Я попытался запустить mplayer с этой -idleопцией, и хотя это заставляет mplayer продолжать работать после остановки потока, при запуске воспроизведения содержимого в клиенте MPD не выводится звук.

Как я могу заставить mplayer прослушивать поток, чтобы он снова стал активным и начать воспроизводить то, что он получает из потока?

РЕДАКТИРОВАТЬ: MPD работает на сервере в моей локальной сети, а Cantata и mplayer работают на моем ноутбуке.

0

2 ответа на вопрос

1
joat

It's been a very long time since I played with MPD scripting. Since Cantata has a dBus interface, I shouldn't be too difficult to do what you want. It does, however, lead you into the land of weird dbus controls.

Part of the answer is that -idle doesn't cause mplayer to attempt reconnecting to your streaming source. It only prevents mplayer from exiting.

This isn't to say that what you're seeking can't be done. It's likely you'll need a bit of external scripting to trigger mplayer to reconnect. In any case, to enable remote control of mplayer, run the following:

mkfifo /home/you/.mplayer/cmd.fifo mplayer -idle -input file=/home/you/.mplayer/cmd.fifo 

After that, any time you run something similar to the following, you can cause mplayer to reconnect.

echo "loadfile http://yourserver.com:8000/yourstream.mp3" >> /home/you/.mplayer/cmd.fifo 

This is about as far as I can take it without playing with Cantata's dbus interface. A bit of research should turn up what's needed.

Note: running the loadfile command while a stream is being played causes a noticeable break in the audio.

It may also be valuable to note here: is MPD, mplayer, and Cantata all on the same box or on separate systems?

Hope this helps.

Спасибо за ответ. Re: ваш вопрос о том, запущены ли три программы в одном окне: они не работают. Я добавил еще немного информации о том, что работает, где мой вопрос. itsjeyd 10 лет назад 0
Ваши предложения по включению дистанционного управления для mplayer работают на меня, я их опробовал, так что еще раз спасибо. Дело в том, что если мне придется возвращаться к своему терминалу каждый раз, когда я снова начинаю проигрывать музыку в Cantata, я мог бы также перезапустить mplayer. Я бы очень хотел найти решение, которое позволило бы мне запустить mplayer один раз и заставить его делать все правильно, не мешая ему. К сожалению, мой опыт работы с D-Bus очень ограничен, поэтому, если на самом деле нет способа вызвать mplayer таким образом, чтобы он делал то, что я хочу, я был бы признателен за любые дополнительные указатели с D-Bus. itsjeyd 10 лет назад 0
Вы смотрели на Liquidsoap? Это язык сценариев для написания элементов управления звуком и сервисов. Я использую это вместо mpd, чтобы запустить то, что составляет внутренний музыкальный автомат. Когда выбор не сделан, проигрывается случайная песня. В то же время, если вы не хотите отслеживать Cantata через dbus, я думаю, что единственным вариантом для вас является опрос mpd каждые несколько секунд для определения статуса (например, http://mpd.wikia.com/wiki/Hack:stream-monitor) , Недостатки для этого: съедает заметное количество вычислительной мощности, и первая или две секунды песни могут быть пропущены (вызвано временем между опросами). joat 10 лет назад 0
0
0800peter

Я ничего не слышал о кантатах, но когда я использую мобильное интернет-радио во время вождения в машине, я столкнулся с той же проблемой, чтобы перезапустить mplayer, если соединение разорвано. просто я помещаю команду mplayer в endlesloop, управляемый переменной, которая установлена ​​в false для легкого выключения, добавляя 3-секундную паузу после прерывания, чтобы не перегружать что-либо.

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

Похожие вопросы