Nahmd,
ich brauchte eine Lösung um einen WMA stream “on the fly” zu einem OGG-Stream zu machen.
Das Skript in einen Pfad für ausführbare Programme legen, das Php Skript in den Webserver packen und den Mount in die Icecast2 Konfiguration hinzufügen. Die einzelnen Pfade müssen vieleicht angepasst werden.
Leider kann momentan nur ein Internerradio diesen Stream anhören. Eigentlich können es beliebig viele, aber leider beendet der 1., welcher den Stream nicht mehr empfängt, das Umwandeln
Benötigt wird folgendes:
- mplayer
- icecast2
- oggenc
- oggfwd
- php
Das Skript zum konvertieren
-
#!/bin/sh
-
-
export PATH=$PATH:/usr/local/bin
-
-
STREAM="mms://your.radio.fm/stream.wma"
-
-
set -e
-
-
CLIENT=0
-
if [ "$2" != "" ]; then
-
CLIENT=$2
-
fi
-
-
if [ "$3" != "" ]
-
then
-
STREAM=$3
-
fi
-
-
MD5=$(echo $STREAM | md5sum | cut -d‘ ‘ -f1)
-
-
TEMP=/tmp/chumbybridge/$MD5
-
-
[ -d $TEMP ] || mkdir -p $TEMP
-
-
FIFO_MPLAYER=$TEMP/mplayer.fifo
-
# FIFO_OGGENC=$TEMP/oggenc.fifo
-
-
LOG_MPLAYER=$TEMP/mplayer.log
-
LOG_OGGENC=$TEMP/oggenc.log
-
LOG_OGGFWD=$TEMP/oggfwd.log
-
-
PID_MPLAYER=$TEMP/mplayer.pid
-
PID_OGGFWD=$TEMP/oggfwd.pid
-
-
if [ "$1" = "start" ]
-
then
-
echo "connected $CLIENT" >> $LOG_MPLAYER
-
-
[ -e $FIFO_MPLAYER ] && echo "Run $0 stop first!" && exit
-
mkfifo $FIFO_MPLAYER || exit 1
-
-
mplayer $STREAM -nocache -quiet -ao pcm:file="$FIFO_MPLAYER" >> $LOG_MPLAYER 2>&1 < /dev/null &
-
echo $! > $PID_MPLAYER
-
-
sleep 0.3
-
-
oggenc -Q -q 1 $FIFO_MPLAYER -o – 2>> $LOG_OGGENC | oggfwd localhost 8000 hackme /radio1.ogg >> $LOG_OGGFWD 2>&1 &
-
echo $! > $PID_OGGFWD
-
-
sleep 0.2
-
-
elif [ "$1" = "stop" ]
-
then
-
echo ">>> Stopping chumstream player <<<"
-
kill $(cat $PID_MPLAYER) 2> /dev/null && \
-
kill $(cat $PID_OGGFWD) 2> /dev/null && \
-
rm -rf $TEMP || \
-
echo "Cannot stop all processes, please look into $TEMP and fix it manually"
-
else
-
echo "Usage:"
-
echo "$0 start [CLIENT_ID] [URL]"
-
echo "$0 stop"
-
fi
Die icecast Konfiguration
-
<mount>
-
<mount-name>/radio.ogg</mount-name>
-
<max-listeners>10</max-listeners>
-
<burst-size>65536</burst-size>
-
<hidden>0</hidden>
-
<authentication type="url">
-
<option name="mount_add" value="http://localhost/radio.php"/>
-
<option name="mount_remove" value="http://localhost/radio.php"/>
-
<option name="listener_add" value="http://localhost/radio.php"/>
-
<option name="listener_remove" value="http://localhost/radio.php"/>
-
</authentication>
-
</mount>
Der Php Start/Stop Teil
-
<?php
-
if ( $_POST["action"] == ‘listener_add’ ) {
-
$tmp =
exec("/usr/local/bin/chumstream.sh start ".
$_POST["client"],
$result);
-
} else if ( $_POST["action"] == ‘listener_remove’ ) {
-
$tmp =
exec("/usr/local/bin/chumstream.sh stop ".
$_POST["client"],
$result);
-
}
-
header(‘icecast-auth-user: 1′);
-
header(‘icecast-auth-message: OK’);
-
?>