Eu resolvi isso usando Espero . Você inicia o streaming jogando com ./play.sh
:
while [ '1' == '1' ];
do
expect try_stream.exp $1
sleep 3
done
E isso usa try_stream.exp
:
set timeout 4
spawn mplayer -nocache $argv
expect {
"Starting playback" {
interact
}
timeout {
send while [ '1' == '1' ];
do
expect try_stream.exp $1
sleep 3
done
3;
exit 1
}
}
Basicamente, ele tenta reproduzir o fluxo e, se não puder fazê-lo dentro de 3 segundos, desiste (script .exp) e tenta novamente (script .sh). Funciona desde que você tenha problemas como um servidor muito ocupado. Infelizmente eu não sei como lidar com o caso quando o mplayer fica preso quando ele começa a tocar, não há uma string de saída para o Expect detectar nesse caso.