Audio-Streaming mit GnuMP3d

Aus LinuxUser 06/2005

Audio-Streaming mit GnuMP3d

Netzrauschen

Wer seine Musik an entfernten Orten verfügbar machen möchte, findet im Audio-Streaming eine Lösung. GnuMP3d ermöglicht dies auf einfache Weise und bietet ein benutzerfreundliches Web-Interface.

Radio hören macht Spaß, nur ist man dabei auf den Ausstrahlungsradius des Senders beschränkt. Wer akustisch in die Ferne schweifen will, greift zum Kurzwellenempfänger – oder zum Computer, denn Audio-Streaming funktioniert weltweit. Darunter versteht man die Übertragung von Audio-Daten als kontinuierlichem Datenstrom, also nicht in einzelnen Anfrage-Antwort-Zyklen. Anders als beim Bereitstellen von Musik auf einem Webserver wird beim Streaming eine Datei nicht heruntergeladen, sondern sofort abgespielt. Dies ermöglicht Musikgenuss ohne Verzögerung.

Gute Kompressionsverfahren, zum Beispiel MP3 und und Ogg-Vorbis machen das Klangvergnügen auch mit einer DSL-Leitung möglich. Es gibt eine Vielzahl von Lösungen, die Audio-Streaming erlauben. So existieren spezielle Module für den Webserver Apache und komplexe Systeme aus Server und Streaming-Clients. Dieser Artikel zeigt eine Form des Streamings mit dem einfach zu handhabenden Programm GnuMP3d [1].

Einstecken, loslegen

GnuMP3d bietet eine Möglichkeit, Filme und MP3- sowie Ogg-Vorbis-Dateien über ein Netzwerk verzögerungsfrei zu streamen. Die Entwickler haben speziell darauf geachtet, dass das Programm einfach zu handhaben und vor allem sicher ist. Seit seiner Entwicklung trat erst ein Sicherheitsfehler auf. Das Programm selbst ist in Perl programmiert, wodurch es auf nahezu jeder Hardware-Architektur läuft.

Nachdem Sie die im Kasten “Nur entpacken” beschriebene Installation abgeschlossen haben, können Sie an die Konfiguration gehen.

Nur entpacken

Da es sich um ein Perl-Programm handelt, wird GnuMP3d im Gegensatz zu vielen anderen Programmen nicht aus den Quellen kompiliert. Die einzigen Voraussetzungen sind ein funktionierendes Linux-System und Perl [2]. Außerdem benötigen Sie das Paket gnump3d-2.9.3.tar.bz2[3], das Sie auch auf der Heft-CD finden. Entpacken Sie es in einem temporären Verzeichnis (zum Beispiel /tmp) und wechseln Sie dann in das entstandene GnuMP3d-Verzeichnis.

cd /tmp
tar xvfj gnump3d-2.9.3.tar.bz2
cd gnump3d-2.9.3

Jetzt müssen Sie nur noch als root den Befehl make install ausführen. Das Binärprogramm befindet sich anschließend im Verzeichnis /usr/bin, die Konfigurationsdateien in /etc/gnump3d.

Wenn das Linux-System GnuMP3d beim Booten des Computers automatisch starten soll, benötigen Sie ein passendes Startskript. Das Paket liefert mehrere solcher Skripte für verschiedene Linux-Distributionen mit. Anschließend legen Sie einen Link vom Runlevel-Verzeichnis auf das Startskript an. Folgende Beispiel veranschaulicht die Methode für ein Debian-System:

cd /tmp/gnump3d-2.9.3/rcfiles
cp debian /etc/init.d/gnump3d
ln -s /etc/init.d/gnump3d /etc/rc2.d/S99gnump3d

Dafür öffnen Sie die Datei /etc/gnump3d/gnump3d.conf in einem Editor. Listing 1 zeigt nur die wichtigsten Konfigurationsvariablen. Alle weiteren führt die Manpage zu gnump3d.conf auf. Besonders wichtig ist die Zuweisung einer Port-Nummer (Zeile 01). Über den angegebenen Port stellt GnuMP3d später die Streams und die Web-Oberfläche zur Administration zur Verfügung. Es bietet sich an, eine große Nummer zu wählen (zum Beispiel 8888), da kleine Nummern in der Regel für andere Serverdienste reserviert sind. Verwenden Sie eine Port-Nummer größer 1024: Sonst müssen Sie den Server als Administrator laufen lassen, was ein Sicherheitsrisiko darstellt.

Der Eintrag root in der Konfigurationsdatei gibt an, in welchem lokalen Verzeichnis sich die Musik befindet, die GnuMP3d verwalten soll. Die Anweisung allowed_clients=all weist den Server an, Verbindungen von jedem Computer anzunehmen. Damit GnuMP3d nur Anfragen von bestimmten Clients akzeptiert, können Sie hier auch IP-Nummern eintragen. Die Option theme legt das Aussehen der Weboberfläche fest. Das GnuMP3d-Paket enthält 12 solcher Oberflächen. Gültige Angaben für die Themes sind die Verzeichnisnamen in /usr/share/gnump3d/.

Weisen Sie der Variable enable_password_protection den Wert 1 zu, schützt GnuMP3d die Weboberfläche mit einem Benutzernamen und einem Passwort. Damit dieser Eintrag Wirkung zeigt, müssen Sie im mit root angegebenen Verzeichnis eine Datei .password anlegen, die Einträge im Format Benutzer:Passwort enthält. Die Variable in Zeile 06 beschreibt, ob die Musik erst heruntergeladen (0) oder richtig gestreamt, das heißt während des Herunterladens abgespielt werden soll (1). Damit GnuMP3d überhaupt die beschriebene Web-Oberfläche zur Verfügung stellt, muss die Variable enable_browsing den Wert 1 erhalten. Wenn Sie eine zufällige Abspielreihenfolge der Dateien wünschen, stellen Sie recurse_randomize auf 1. Andernfalls kommentieren sie die Zeile einfach mit # aus. Alle anderen Einträge in gnump3d.conf können Sie in der Regel bei den Voreinstellungen belassen.

Listing 1

/etc/gnump3d/gnump3d.conf

01 port = 8888
02 root = /home/name/musik/
03 allowed_clients = all
04 theme = LaFrere
05 enable_password_protection = 1
06 always_stream = 1
07 enable_browsing = 1
08 recursive_randomize = 1

Die Web-Oberfläche

Zu Verwaltung der MP3-Dateien dient die Web-Oberfläche von GnuMP3d (Abbildung 1). Um sie zu erreichen, geben Sie in die Adresszeile des Web-Browsers eine URL nach dem Muster http://IP-Adresse:Port-Nummer ein, zum Beispiel http://192.168.1.2:8888. Haben Sie den Passwortschutz eingeschaltet, fragt der Server Sie nach Benutzernamen und Passwort.

Abbildung 1: Das Web-Interface von GnuMP3d gibt eine Übersicht über die gespeicherten Alben.

Abbildung 1: Das Web-Interface von GnuMP3d gibt eine Übersicht über die gespeicherten Alben.

Der erste Start von GnuMP3d dauert ein wenig, da das Programm zuerst eine Liste aller Audio- und Media-Dateien erstellt. Verändert sich danach das Archiv nicht mehr, können Sie GnuMP3d mit der Option --fast starten, damit es nicht bei jedem Start diese Liste neu anlegt. Benutzen Sie ein Init-Skript, dann tragen Sie die Option dort ein.

Die Web-Oberfläche bietet verschiedene Funktionen. Sie listet unter Archive Size Größe und Spiellänge aller Medien auf, bietet eine Suchfunktion und Zugriffsstatistiken. Zudem können Sie komfortabel Playlists zusammenstellen (Abbildung 2).

Abbildung 2: Bei der Zusammenstellung von Playlists lassen sich einzelne Songs oder ganze Alben auswählen.

Abbildung 2: Bei der Zusammenstellung von Playlists lassen sich einzelne Songs oder ganze Alben auswählen.

Um das Aussehen des Web-Interfaces zu verändern, wählen Sie entweder ein vorhandenes Theme (Abbildung 3) oder schreiben ein eigenes in einem HTML-ähnlichen, einfachen Format. Selbst erstellte Themes legen Sie als Verzeichnisse in /usr/share/gnump3d ab. Sie müssen die Themes nicht in der Konfigurationsdatei aktivieren, da die Web-Oberfläche ebenfalls über einige Einstellungsmöglichkeiten verfügt.

Abbildung 3: Mitgelieferte Themes verändern das Aussehen der GnuMP3d-Oberfläche.

Abbildung 3: Mitgelieferte Themes verändern das Aussehen der GnuMP3d-Oberfläche.

Abspielen

Möchten Sie einen Stream beziehungsweise eine Datei anhören, verwenden Sie dafür normalerweise die Web-Oberfläche. Dazu wechseln Sie in das gewünschte MP3-Verzeichnis und wählen die Datei direkt aus oder klicken auf den Play-Link. Wahlweise erhalten Sie hier auch Informationen über die Datei sowie die Möglichkeit, sie herunterzuladen. Bei Verzeichnissen und selbst erstellten Playlisten können Sie genauso vorgehen.

Der Browser öffnet dann ein M3U-File, das alle wichtigen Informationen über den Stream enthält. Diese Datei recht er an Ihr MP3-Abspielprogramm weiter. Xmms [4], Realplayer [5] und mplayer [6] zum Beispiel können mit diesem Format umgehen. Mit den Informationen der M3U-Datei startet der Player schließlich den MP3-Stream und spielt ihn ab. Mehr Details zu M3U finden Sie im gleichnamigen Kasten.

Das M3U-Format

M3U ist ein reines Textformat für Playlisten. Eine solche Liste enthält die Länge und den Namen der Datei sowie weitere Informationen über die Files, die im Stream enthalten sein sollten. Dieses Format ermöglicht es überhaupt erst, mehrere Musikstücke hintereinander abzuspielen ohne jede einzeln auszuwählen. Eine solche Datei könnte wie folgt aussehen:

#EXTM3U
#EXTINF:223,Künstler - Lied 1 - 2005
Künstler - Lied 1.mp3
#EXTINF:391,Künstler - Lied 2 - 2005
Künstler - Lied 2 - 2005

Die erste Zeile legt fest, dass es sich um eine M3U-Datei handelt. Bei den #EXTINF-Zeilen handelt es sich um zusätzliche Informationen, wie Liedlänge, Künstlername und sonstige Informationen. Alle anderen Zeilen führen die Dateinamen auf.

Downsampling

MP3-Dateien sind häufig mit einer Bitrate von 128 KBit/s kodiert. Bei einem Stream dieser Bandbreite wäre das Upload-Volumen einer üblichen ADSL-Leitung schnell ausgelastet, denn Sie stellt zum Download 768 KBit/s, zum Upload aber nur 128 KBit/s bereit. In diesem Fall bietet es sich an, die Dateien zum Streamen mit einer niedrigeren Bitrate neu zu kodieren, das so genannte Downsampling. Auch für Benutzer mit einer Volumenbeschränkung ist es sinnvoll, so die Übertragungsrate herunterzusetzen. Dazu muss man die Datei /etc/gnump3d/gnump3d.conf editieren. Listing 2 zeigt die hierfür nötigen Konfigurationsvariablen.

Listing 2

/etc/gnump3d/gnump3d.conf

01 downsample_enabled = 1
02 downsample_"level"_"file suffix" = command args
03
04 downsample_high_mp3   = /usr/bin/lame  --mp3input -b 96 $FILENAME -
05 downsample_medium_mp3 = /usr/bin/lame  --mp3input -b 64 $FILENAME -
06 downsample_low_mp3    = /usr/bin/lame  --mp3input -b 32 $FILENAME -
07
08 downsample_high_ogg   = sox -t ogg $FILENAME -t raw - | oggenc --raw --downmix -b 96 -
09 downsample_medium_ogg = sox -t ogg $FILENAME -t raw - | oggenc --raw --downmix -b 64 -
10 downsample_low_ogg    = sox -t ogg $FILENAME -t raw - | oggenc --raw --downmix --resample 22050 -b 32 -
11 downsample_clients = ALL
12 default_quality = medium

Damit das Downsampling überhaupt funktioniert, muss es über die Variable downsample_enabled mit dem Wert 1 aktiviert werden. Die Variable in Zeile 2 legt die Syntax für die nächsten Anweisungen fest. Die Zeilen 04 bis 10 stellen drei Stufen der Bitraten-Regelung ein. Im Beispiel gibt es die Stufen high, medium und low. Nach der Stufe folgt die Dateiendung, für die der folgende Befehl gilt. So legt Zeile 4 fest, was der Server macht, wenn es sich um eine Datei mit der Erweiterung .mp3 in der Qualität high handelt.

Dabei kodiert GnuMP3d nicht die Dateien auf der Festplatte neu, sondern streamt direkt die Ausgabe des Kommandos. Bei langsamen Computern bietet sich diese Methode nicht an, weil es dann zu hörbaren Verzögerungen oder gar Aussetzern kommt. Für MP3-Dateien bietet sich hier das Programm lame[7] an, für Ogg eine Kombination aus den Programm sox[8] und oggenc[9]. Die Variable $FILENAME dürfen Sie hier auf keinen Fall verändern, da GnuMP3d für sie die im Stream enthaltenen Dateinamen einsetzt.

Die Option downsample_clients gibt an, für welche Computer im Netzwerk die Bitrate des Streams verändert werden soll (Zeile 11). In diesem Fall gilt die Anpassung für alle, es lassen sich aber auch IP-Adressen-Bereiche angeben. Die Variable default_quality legt die Standard-Bitrate fest (Zeile 12).

Gringere Bitraten als 64 KBit/s beeinträchtigen allerdings den Hörgenuss: Je höher die Bitrate, desto mehr Informationen enthält die Datei und desto besser ist die Qualität.

Einfach und gut

GnuMP3d bietet eine vergleichsweise einfache Streaming-Lösung. Das Programm läuft stabil, sicher, schnell und kommt im Gegensatz zu komplexeren Lösungen wie zum Beispiel Icecast [10] ohne den Apache-Webserver aus. Möchten Sie das Streaming professioneller betreiben und zum Beispiel bei einem Radiosender verwenden, um einen Stream in Echtzeit zu übertragen, werden Sie allerdings an Icecast nicht vorbeikommen.

Der Autor

Nico Golde ist Entwickler Freier Software. GnuMP3d begegnete er auf der Suche nach einer kleinen und sicheren Streaming-Lösung für mittelgroße Server.

LinuxUser 06/2005 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben