Streamripper

Aus

Einleitung

Mit Streamripper können Internet-Radiosendungen aufgezeichnet und als MP3 (bzw. ogg) gespeichert werden. Anhand von Metadaten wie Titel oder Interpret ist Streamripper in der Lage zu erkennen, wann ein Lied beginnt und endet. Somit kann die Radiosendung in einzelne Lieder eingeteilt, und unter entsprechendem Namen abgespeichert werden. Die Bedienung von Streamripper erfolgt über die Kommandozeile des NAS. Neben der aufzuzeichnenden Radiosendung können Parameter definiert werden, die die Arbeitsweise von Streamripper beeinflussen.

Zur Rechtslage siehe den Wikipedia-Artikel unter Weblinks.

Voraussetzungen

Installation

Die Installation von Streamripper auf der Kommandozeile gestaltet sich denkbar einfach:

ipkg install streamripper

Bei korrekt installierter IPKG sollten die benötigten Pakete libmad, libogg, libvorbis und tre gleich mitinstalliert und konfiguriert werden. Falls dies nicht geschieht, diese installieren.

Bedienung

Starten von Streamripper:

Die Aufnahme von Internet-Radiosendern mittels Streamripper erfolgt über den Aufruf:

streamripper <Parameter>

Alle Parameter von Streamripper können durch die Eingabe von

streamripper

auf der Kommandozeile ausgegeben werden.

Auswahl an Parametern

-d

Zielverzeichnis in das die MP3-Dateien gespeichert werden.

-l

Dauer der Aufnahme in Sekunden.

-a

Radiosendung wird nicht in einzelne Dateien aufgeteilt, sondern als ganzes in einer Datei gespeichert.

--quiet

Quiet-Mode: Es werden keine Statusmeldungen auf der Kommandozeile ausgegeben.

&

Nach dem Aufruf von Streamripper wird die Kommandozeile wieder freigegeben und kann verwendet werden.

-r

Der aufgezeichnete Stream wird auf den Port 8000 weitergeleitet ("Relay-Stream") und kann z.B. von der Audio Station unter meine-ds-ip:8000 mitgehört werden (geht nicht bei ogg). Bei weiteren parallel laufende Relay-Streams wird die Portnummer inkrementiert (z.B. 8001, 8002).

Beispielhafter Aufruf von Streamripper

Ein Aufruf von Streamripper könnte bspw. so aussehen:

streamripper http://66.220.3.52:8045/ -d /volume1/music/radiosendungen

Beenden von Streamripper

Streamripper kann mit der Tastenkombination strg+c beendet werden.

Wenn Streamripper im Quiet-Mode gestartet wurde, kann es mit

kill <PID>

wieder beendet werden. Die PID (Process ID) kann mit

ps |grep streamripper

herausgefunden werden.

Löschen der Dateien die von Streamripper erzeugt wurden

Die von Streamripper erstellen Dateien können nur von root gelöscht werden. Deshalb müssen unter Umständen die Rechte für die Dateien angepasst werden. Die geschieht z.B. über die Kommandozeile mittels:

chmod -R 777 /pfad

Hinweis

Dieser Artikel beruht neben eigenen Erfahrungen auf Beiträgen verschiedener Forenmitglieder. Der Thread kann hier verfolgt werden.

Das Ausführen von Streamripper via Konsole blockiert die Konsole solange bis Streamripper beendet ist. Wird die Konsole "gewaltsam" beendet, dann wird auch Streamripper abgeschossen. Zu Behebung dieses Problems bietet sich screen an, welches sich ebenfalls via ipkg installieren lässt. Dieses Programm erlaubt es virtuelle Konsolenfenster zu erstellen, welche vollkommen losgelöst von der Login Konsole (telnet/ssh) existieren. Wenn Streamripper in einem solchen Fenster läuft, dann kann man auf der Hauptkonsole normal weiterarbeiten oder sogar ein exit machen. Streamripper läuft dann trotzdem weiter.

Starten von Streamripper innerhalb eines Screens

# screen
# streamripper ...

Nachdem der Streamripper gestartet ist kann man die Konsole folgendermassen wieder "schliessen" ctrl+a um in den Kommandomodus zu kommen und d um das Fenster auszuhängen Nach einem Logout auf der Hauptkonsole kann man sich nach erfolgter Wiederanmeldung mittels

# screen -r

wieder zu den laufenden Screens verbinden.

Shell Script für Streamripper

Zur einfacheren Bedienung von Streamripper habe ich ein kleines Shell Script geschrieben, das die benötigten Parameter einzeln vom User abfragt.

#!/opt/bin/bash
if [ ! $# -eq 0 ]
then
 echo "Parameter NICHT beim Aufruf angeben"
 exit 1
fi

savePath=""
streamAddr=""
runTime=""
stream=""
port=8002
user="myUser"
group="myGroup"

while [ -z $streamAddr ] 
do
 echo "URL des Streams (http://domain.tld:PORT/path):"
 read streamAddr
done

echo "Wie lange soll aufgezeichnet werden (in Sekunden!! leere Eingabe fuer endlos):"
read runTime
if [ -z $runTime ]
then
 runTime=""
else
 if [ $runTime -gt 0 ]
 then
 runTime="-l $runTime"
 fi
fi

echo "Soll der Stream an IP_DER_DISKSTAION:$port wiedergegeben werden (entweder j fuer Ja und KEINE Eingabe fuer nein)"
read stream
if [ -z $stream ]
then
 stream=""
else
 if [ "$stream"="j" ]
 then
  stream="-r $port"
 fi
fi

while [ -z $savePath ]
do
 echo "Speicherpfad (ausgehend von /):"
 read savePath
done

streamripper $streamAddr -s -d $savePath $runTime $stream --codeset-filesys=UTF-8 --codeset-id3=UTF-8 --codeset-metadata=UTF-8 --codeset-relay=UTF-8
chown -R $user:$group $savePath

Am Ende des Scripts wird mittels eines chown die Eigentümerschaft des Verzeichnisses so geändert, dass auch nicht-root-User die Daten löschen können. Das funzt natürlich nur wenn das Script komplett durchgelaufen lassen wird d.h. bei Endlos-Aufzeichnungen und Scriptabbrüchen (mittels CTRL +c) wird der chown ned ausgeführt

Weblinks