Aufzeichnen von MP3-Streams im Web
Im Internet gibt es eine Reihe Programme, mit denen man die Streams von Shoutcast- oder Icecast-Radiostationen mithören und aufzeichnen kann.
An diesem Beispiel kann man sehen, wie's funktioniert.
Über eine Socket-Verbindung.
Um einen Shoutcast-Stream zu erhalten, wird ein Request an einen Host geliefert, dieser antwortet, wenn alles richtig läuft, mit einem ununterbrochenen Datenstrom.
Dieser Stream enthält als erstes Informationen zum Radiosender. Die Radiosender-Informationen enden mit CrLf & CrLf, jede separate Information besteht aus einer Zeile, die mit CrLf endet. Als erste Zeile kommt eine Information zum Verbindungsstatus. "ICY 200 OK" bedeutet, dass die Verbindung steht. Wenn diese Meldung fehlt, stimmt etwas mit der Verbindung nicht. Jede der folgenden Zeilen beginnt mit einer Kennung und Doppelpunkt, darauf folgt der Inhalt.
Kennung | Inhalt |
---|---|
icy-name | Name des Servers / Radiosenders |
icy-genre | Genre des gesendeten Musik |
icy-br | Bitrate des gesendeten Inhalts |
icy-url | URL des Radiosenders im Internet |
icy-metaint | Meta-Intervall des gesendeten Inhalts |
Nicht alle Kennungen müssen vorhanden sein.
Auf die Sender-Information folgt schon der Datenstrom mit Musik und Text. Das besondere an den Shoutcast-Streams ist, dass sie zusätzlich zwischen den Musikdaten Text-Informationen zum Inhalt (z.B. Titel und Interpret eines Musikstückes) enthalten können. Die folgende Grafik erläutert dies:
Auf eine Folge von Musik-Bytes folgt ein Text-Informations-Abschnitt, darauf folgen wieder Musik-Bytes und so weiter... Jeder Musik-Byte-Abschnitt ist gleich lang. Diese Länge ist in den oben genannten Sender-Informationen als Meta-Intervall (icy-metaint) enthalten.
Wenn man die MusicByte-Abschnitte zusammensetzt, hat man schon eine funktionierende MP3-Datei.
Die Länge eines Text-Informations-Abschnitts variiert, er ist aber mindestens 1 Byte lang. Das erste Byte des Text-Informations-Abschnitts, nennen wir es mal Längen-Byte, gibt an, wie lang dieser Text-Abschnitt (in Byte) wirklich ist (Länge des dieses Abschnitts = ErstesByte * 16 + 1).
Wenn das Längen-Byte den Wert 0 hat, folgt keine Information, im Fall <> 0, eine Byte-Folge, die einen String mit Kontext-Informationen zum aktuellen Musik- oder Text-Titel enthält. Immer wenn dieser String sich ändert, beginnt ein neuer Titel.
Damit kann man Musiktitel oder Textabschnitte voneinander trennen. Allerdings ist dies eine unsaubere Art von Trennung. Die Sender liefern keinen exakt positionierten Wechsel, und normalerweise überschneiden sich Musik und Text. Professionelle Programme zum Aufzeichnen von MP3-Streams verwenden Methoden, mit denen Änderungen in der Lautstärke und im Rhythmus festgestellt werden, an diesen Punkten entsteht dann ein neuer Titel, der in der Nachbearbeitung in der Lautstärke noch ein- und ausgeblendet wird.
Nun erst mal viel Spaß beim Experimentieren und Grüße,
Thomas Bergner