Я решил это с помощью Expect. Вы запускаете потоковое воспроизведение с помощью ./play.sh
:
while [ '1' == '1' ];
do
expect try_stream.exp $1
sleep 3
done
И это использует try_stream.exp
:
set timeout 4
spawn mplayer -nocache $argv
expect {
"Starting playback" {
interact
}
timeout {
send \003;
exit 1
}
}
По сути, он пытается воспроизвести поток, и если он не может сделать это в течение 3 секунд, он сдается (сценарий .exp) и повторяет попытку (сценарий .sh). Он работает до тех пор, пока у вас есть проблемы, такие как очень занятый сервер. К сожалению, я не знаю, как справиться со случаем, когда mplayer застревает после того, как он начал играть, нет выходной строки, которую Expect может обнаружить в таком случае.