Im Folgenden möchte ich mal im Detail beschreiben, wie die Streams und die nette Übersicht unter http://stream.xenim.de/ genau funktionieren und wie man es bei Interesse nachbauen kann. Ich beschreibe dabei nur die Installation auf Debian 3.1 Sarge; die Anleitung sollte aber auch auf andere Distributionen übertragbar sein, wenn man die Paketbezeichnungen entsprechend anpasst. Der erste Teil beschreibt das Ganze recht allgemein und sollte von jedem, der schoneinmal vor einem Computer gesessen hat, verstanden werden können, der zweite Teil enthält dann die detailierte Installationsbeschreibung, für die grundliegende Kenntnisse der Linuxsystemadministration erforderlich sind.

Wie alles zusammenpasst

Zunächst einmal braucht man natürlich einen Mp3- oder Ogg-Stream. Das verteilen dieses Streams erledigt Icecast. Woher bekommt der Icecast aber die Audiodaten? Da gibt es im Groben und Ganzen zwei Möglichkeiten: Die eine ist, die Daten von einem anderen Server einfach weiterzuverteilen (zu "relayen"). Dabei klinkt es sich wie ein normaler Player bei einem anderen Server (Icecast oder Shoutcast) ein und verteilt die weiter. Diese Möglichkeit nutzt man vorallem, um den ursprünglichen Server zu entlasten, falls dieser für die Hörerzahl nicht so gut genug ans Internet angebunden ist. Die zweite Möglichkeit für den Icecast an Audiodaten zu kommen, ist, sich direkt von einer Quelle versorgen zu lassen. Das funktioniert zB mit dem Winamp/xmms-Plugin oddcast oder unter Linux mit ices. (Genauere Infos gibt es demnächst hier nach einem kleinen Update)

Jetzt hat man einen (oder mehrere) Server, der (die) Streams anbieten Wie kommen jetzt die Informationen über die Streams (URL, Metadaten, Hörerzahlen, etc) von den Streamingservern in die Übersicht? Das erledigt eine Funktion names »Yellow Pages«. Die ist normalerweise dazu gedacht, die eigenen Streams in große, öffentliche Verzeichnisse (wie dir.xiph.org) einzutragen, damit die gefunden und auch gehört werden. Diese Funktion ist im Standardicecast bereits integriert.

Nun sollen die Daten nicht in einem öffentlichen Verzeichnis, sondern in einer bestimmten Übersicht landen. Dazu braucht man das, was die Betreiber größerer Verzeichnisse auch verwenden. Diese Software (auch als »Yellow Pagess« oder kurz yp bezeichnet) ist auch Open-Source muss auf dem eigenen Server installiert werden. Die Adresse des yp trägt man in allen Icecaststreamingservern ein, woraufhin diese regelmäßig die benötigten Daten an das yp schicken. Dort nimmt das yp die Daten entgegen und schaufelt sie in eine Datenbank. In der Datenbank wird immer nur der aktuelle Stand der Daten und Nutzerzahlen vorgehalten. Die Seite wird immer dynamisch aus dieser Datenbank generiert.

Wie wird aus diesen Daten die schicke Grafik generiert? Dazu braucht man ein anderes Stück Software namens rrdtools (Round Robin Datenbank Tools). Das ist noch eine Datenbank, die aber nicht nur einen Datensatz, sondern einen Datensatz pro Zeitabschnitt speichert. Dadurch hat man dann auch den zeitlichen Verlauf der Hörerzahlen. Von der ersten Datenbank (in die das yp die Daten speichert) in die zweite Round-Robin-Datenbank kommen die Daten durch ein kleines Perlskript, das - wenn eine Sendung gestreamt wird - regelmäßig in etwa alle 3-5 Minuten läuft. Das Perlscript übernimmt auch das genieren der Grafik aus den Daten der Round-Robin-Datenbank. Damit wären dann alle Teile beisammen: Stream, Tabelle und Grafik.

Die Details

Icecast

Das Paket, das Debian Sarge mitliefert ist etwas veraltet, also ist selberkompilieren angesagt. Also Downloaden, entpacken, ./configure, Abhängigkeiten (Debianpakete libxml2-dev, libxslt1-dev, libcurl3-dev, libogg-dev, libvorbis-dev, liblame-dev) installieren, make, make install (Alternativ könnten man sich auch ein Debianpaket dafür bauen oder das bestehende aktualisieren). Die Binary sollte dann in /usr/local/bin/icecast gelandet sein, die Konfigurationsdatei deponiert man dann am zweckmäßigsten in /usr/local/etc/. In der Konfiguration ändert man dann ersteinmal die Passwörter: Das Admin-Passwort braucht man eigentlich nur für das Webinterface und sollte eigentlich geheim bleiben, das Source-Passwort wird für die Sourceprogramme (oddcast, ices) benötigt und muss gegebenenfalls an diejenigen weitergegeben werden, die dann das Signal liefern. Unter sollte man dann die URL von dem noch zu installierenden yp eingetragen werden:

<directory>
    <yp-url-timeout>15</yp-url-timeout>
    <yp-url>http://directory-server.tld/cgi-bin/yp_cgi</yp-url>
</directory>

sollte einen FQDN enthalten, aus dem die Streamurls gebaut werden. Der bei unter voreingestellte Wert 8000 sollte beibehalten werden, die unter einzustellenden Pfade kann man der angehängten Datei entnehmen.

YellowPages

Das yp ist eigentlich nicht viel mehr als ein kleines CGI-Programm. Daher braucht man einen Webserver, der auch cgi-Programme ausführt. Auf den meisten Servern sollte Apache2 schon installiert und konfiguriert sein (wenn nicht hilft YaCy beim Finden einer Anleitung). Das yp gibt es garnicht als Debian-Paket, daher ist wieder selbstkompilieren an der Reihe. Erst die benötigten Librabies libxml2-dev und libmysqlclient14-dev als Debianpakete installieren. Die libcgi muss wieder händisch installiert werden: Download, entpacken, Bug fixen (Datei libcgi-1.0/src/cgi.c öffnen, in Zeile 339, »13« gegen »14« tauschen), ./configure, make, make install. Dann erst ist yp selbst dran: downloaden - diesmal aus dem SVN: svn co http://svn.xiph.org/trunk/icecast2yp/, automake, ./configure, make. Dann erhält man ein paar Binaries, die ypcgi kopiert man in das cgi-Verzeichnis des Webservers, die entstehende URL (http://web.server.tld/cgi-bin/ypcgi oder ähnlich) trägt man dann in die Icecast Konfigurationsdatei ein. Für den nächstens Schritt braucht man einen laufenden MySQL-Server (das ist die erste Datenbank), der aber auch auf jedem Standardwebserver vorhanden sein sollte (wenn nicht, hilft wieder YaCy). Dort braucht das yp einen User und eine Datenbank. Als kleinen Test kann man yp_cgi einfach auf der Konsole starten, wenn dann eine Meldung wie »YPResponse: 0« »YPMessage: No action specified« kommt, sollte alles wie gewünscht funkionieren.

Jetzt kann man schoneinmal einen kompletteren Test durchführen und einen Stream an den Icecast legen. Wenn alles geht, wie es soll, sollten sich jetzt die Tabellen in der MySQL-Datenbank mit Daten füllen.

Tabelle auf der Webseite

Diese Tabelle wird einfach mit PHP dynamisch aus den MySQL-Tabellen gelesen, nach Servern sortiert, die Hörer ein wenig addiert und dann ausgegeben. Der komplette Source der Seite ist am Ende verlinkt.

rrd und Grafik

Die Round Robin Datenbank speichert immer eine bestimmte Anzahl von Datensätzen, wenn die erreicht ist, werden die ältesten wieder überschrieben. Weitere Details der Funktionsweise der rrd findet man in Artikel des Linuxmagazins oder in der Dokumentation zu den rrdtools. Ich habe bei dieser Übersicht die Anzahl so bestimmt, dass die Datenbank einen Zeitraum von fünf Stunden abdeckt. Die Round-Robin-Datenbanken werden von einem Perlscript, das die Daten aus der MySQL-Datenbank ausliest, gefüttert. Dabei wird für die Hörerzahlen eines Streams jeweils eine Datenbank genutzt. Die Datenbanken an sich sind einfache Dateien, die sich an beliebigen Stellen im Dateisystem ablegen lassen. Ich habe als Dateinamen für die einzelnen Datenbankdateien jeweils die md5sum der Streamurl gewählt, weil man damit allen Problemen mit Sonderzeichen im Dateinamen aus dem Weg geht. Die Zuordnung zwischen den vorhandenen Dateien, den MD5-Summen und den Streamurls übernimmt eine XML-Datei. Für neue Streams werden automatisch neue Datenbanken und Einträge in der XML-Datei erzeugt. Die Farben für die Graphen und die Kästchen in der Tabelle werden mit Trick 18 bestimmt: es wird wieder die MD5-sum der Streamurl bestimmt und dann nimmt man einfach die ersten sechs Zeichen der MD5sum und hat einen Farbbezeichner, der als HTML-Farbangabe geeignet ist.

Dateien:

Re: Wie funktioniert das Streaming für das Chaosradio genau?
[...] dann wiederum per MP3 ins Internet gestreamt. Hier kommt Nicecast zum Einsatz, das den Stream zur Xenim Streaming-Infrastruktur [...]
Re: Wie funktioniert das Streaming für das Chaosradio genau?

Hi,

wie bekommt ihr icecast (2.x) dazu als mp3 zu streamen, afaik kann doch der 2er nur noch ogg, was mich sehr stoehrt gerade in bezug auf die einbindung in einen flash player. Gibts da irgendwie einen trick ? Antwort auch gerne per mail.

Thx

Stephan

Comment by Sonic Lux Mon Jul 7 17:54:46 2008
Ich glaube du verwechselst da was. ICES2 kann nur OGG... der Icecast2-SERVER kann beides. Will man mit ices mp3 streamen, benöntigt man Ices0.x
Comment by Anonymous Mon Apr 18 14:12:23 2011
Add a comment