Sveriges Radio från terminalen

Uppdatering 5 februari 2011. Instruktioner för att ladda ned klipp och program, samt spela in till fil från den direktsända webbradion, finns i det här inlägget. Eftersom Sveriges Radio gjort en del förändringar av sin sajt sedan det här inlägget skrevs, så behöver även skriptet uppdateras. Jag återkommer i frågan.

* * *

Det är på tiden att jag delar med mig av mitt fantastiska lilla skalskript för Sveriges Radios webbradio.

SR har två olika typer av webbradio, vid sidan av sina poddradio-arkiv. Dels en liveström, och dels arkiverade klipp.

För att köra skripten behöver du rtmpdump eller flvstreamer, och så förstås en mediaspelare. Jag använder MPlayer.

För att lyssna på live-radion behöver du två filer – själva skriptet och en fil med direktadresser till strömmarna. Filen med adresser ska heta radio.dat och ligga i samma mapp som scriptet. Den ser ut så här:

rtmp://rtmp-live.sr.se/webbradio/kanaler/p1-aac-192
rtmp://rtmp-live.sr.se/webbradio/kanaler/p2-aac-192
rtmp://rtmp-live.sr.se/webbradio/kanaler/p2musik-aac-192
rtmp://rtmp-live.sr.se/webbradio/kanaler/p3-aac-192
rtmp://rtmp-live.sr.se/webbradio/kanaler/p4skaraborg-aac-192
rtmp://rtmp-live.sr.se/webbradio/kanaler/p4orebro-aac-192

Som du ser så finns det flera möjliga adresser till P4, eftersom de har lokala sändningar.

Skriptet ser i sin tur ut så här:

#!/bin/sh

PLAYER=mplayer
STREAMER=flvstreamer

if [ X$1 == X-bg ]; then
    $STREAMER -live -r $(grep $2 $HOME/bin/data/radio.dat) | $PLAYER -- - 2>&1 > /dev/null
    echo $! > ~/.radio.pid
else
    rm ~/.radio-fifo
    mkfifo ~/.radio-fifo
    $STREAMER -quiet -o ~/.radio-fifo -live -r $(grep $1 radio.dat)&
    $PLAYER ~/.radio-fifo
fi

exit 0

Döp skriptfilen till radio och se till att den är körbar. Nu kan du köra en radiokanal så här:

$ radio p3

Om du istället skulle välja att köra kanalen p4 så skulle den första adressen som innehåller p4 att köras, så för att köra P4 Örebro, som är den andra P4-kanalen i adressfilen, är jag tvungen att göra så här:

$ radio p4orebro

Vidare så går det att spela radio »i bakgrunden«, frikopplat från terminalen. Det är oerhört smidigt om man har datorn påslagen nattetid och vill bli väckt av den. Du kan ställa väckarklockan på 09.30 så här:

$ echo "radio -bg p2" | at 09:30

Men för att smidigt kunna stänga av uppspelningen behöver du ett skript till! Det heter radiotystnad och är litet och simpelt:

#!/bin/sh

kill $(cat ~/.radio.pid)

Det var allt om live-radio. Att spela upp radioklipp är en helt annan historia. Dessutom är den mera intressant.

Uppdatering 9 dec 2010: OBS! Det följande fungerar inte längre, i och med en ändring som SR gjort på sin sajt. Finurligt nog har de genomfört en förenkling, vilket gör dem ovanliga och fantastiska i världen. :-)

En snabbfix finns i min kommentar nummer 2 nedan, och en mera ingående uppdatering kommer i ett eget blogginlägg så småningom.

Det här skriptet är finurligt, tycker jag åtminstone själv. Döp filen till vad du känner för; själv kallar jag det för webbradio.

#!/bin/sh

PLAYER=mplayer
RECPARAMETERS="-dumpstream -dumpfile radiodump.wma"
PLAYLISTPARAMETER="-playlist"
STREAMER=flvstreamer

record=""
if [ X$1 == X'-record' ]; then
    record=$RECPARAMETERS
fi

for id; do
    if [ X$id != X"-record" ]; then
        id=$(echo $id|sed -E 's/.*[Ii][Dd]=([0-9]+).*/\1/')
        $PLAYER $record $PLAYLISTPARAMETER "http://www.sr.se/webbradio/include/CreatePlaylist.asp?Type=db&Id=$id&broadcastDate=&AudioFormat=3&AvailableAudioFormats=1;3&IsBlock=0"
        if [ X"$record" != X ]; then
            stamp=$(date +"%Y%m%d-%H%M")
            mv -i radiodump.wma SR_id-$id-$stamp.flv
        fi
    fi
done

Observera att där var en mycket lång rad mitt i alltsamman, som blivit radbruten här i bloggen.

Gör skriptet körbart. Sedan kan du helt enkelt kopiera adressen till webbradioklippet, genom att högerklicka på den här knappen och välja Kopiera länk:

Exempel 1

Den kan också se ut så här:

Exempel 2

När du kopierat länken, så kör du den genom skriptet.

$ webbradio "LÄNK"

Citattecknen är oerhört viktiga. Skulle du få för dig att vilja spara klippet till hårddisken, så kör du istället skriptet så här:

$ webbradio -record "LÄNK"

Filen kommer att sparas med ett filnamn enligt följande format:

SR_[id-nummer]-[datum]-[klockslag].flv

Om du skulle använda en annan mediaspelare än MPlayer, så kan du antagligen ersätta de följande två raderna…

RECPARAMETERS="-dumpstream -dumpfile radiodump.wma"
PLAYLISTPARAMETER="-playlist"

…med de här:

RECPARAMETERS=""
PLAYLISTPARAMETER=""

Några frågor?