Streamripper
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
- Zugriff auf das NAS per Kommandozeile muss aktiviert sein
- IPKG muss installiert sein
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>
- Ausgabe der Parameter auf der Kommandozeile
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