Das Icecast-Protokoll

Bei Icecast handelt es sich um einen freien Streamingserver. Der Server nimmt ein Signal entgegen und streamt es über einen Mountpoint, mit welchem sich die Nutzer des Servers verbinden um den Stream zu hören. Leider ist das Icecast-Protokoll nicht wirklich gut dokumentiert. Stattdessen wird darauf verwiesen, das der Quellcode verfügbar ist. Mit diesem Artikel soll diesem Problem ein wenig Abhilfe geschaffen werden. Das Icecast-Protokoll ist streng genommen einfaches HTTP. Wenn ein Eingangssignal zu einem Icecast-Server gestreamt sendet die Streamingquelle einen HTTP-Request (am Beispiel von butt):

PUT /stream123 HTTP/1.1
Authorization: Basic c291cmNlOmhhY2ttZQ==
User-Agent: butt 0.1.14
Content-Type: audio/mpeg
ice-name: no name
ice-public: 0
ice-audio-info: ice-bitrate=128;ice-channels=2;ice-samplerate=44100

Bei Mixxx würde dieser Request so aussehen:

SOURCE /stream123 HTTP/1.0
Authorization: Basic c291cmNlOmhhY2ttZQ==
User-Agent: libshout/2.0.0
Content-Type: application/ogg
ice-name: 
ice-public: 0
ice-url: http://www.mixxx.org
ice-genre: Live Mix
ice-audio-info: bitrate=128
ice-description:

Den SOURCE-Request den Mixxx hier anwendet ist seit der Version 2.4 des Icecast-Server veraltet und sollte nicht mehr genutzt werden. Stattdessen soll der PUT-Request verwendet werden. Wie man hier sehen kann erfolgt die Authentifizierung über das Basic Authentication Scheme (auch als HTTP Basic Authentication bekannt). In dem Request sind eine Reihe von ice-* Parametern zu finden:

ice-audio-info
Der Parameter ice-audio-info übermittelt eine Schlüssel-Wert-Liste von Audioinformationen. Die Parameter werden dabei durch ein Semikolon getrennt, das ganze könnte z.B. so aussehen:

channels=2;samplerate=48000;

Die Parameter müssen dabei mit der URL-Kodierung kodiert werden.

ice-bitrate
Der Parameter ice-bitrate setzt die Bitrate des Streams.

ice-description
Ist die Beschreibung des Streams nicht mit dem Tag stream-description definiert, so kann die Beschreibung über den Parameter ice-description eingestellt werden.

ice-genre
Ist das Genre des Streams nicht mit dem Tag genre definiert, so kann dies über den Parameter ice-genre eingestellt werden.

ice-name
Ist der Streamname nicht mit dem Tag stream-name definiert, so kann dies über den Parameter ice-name eingestellt werden.

ice-public
In der Konfiguration gibt es das Attribut public, welches angibt ob der Stream in einem öffentlichen Verzeichnis auftauchen soll. Ist der Public-Tag für den Mountpoint nicht definiert, kann dies über den Parameter ice-public gesetzt werden.

ice-url
Ist die URL des Streams nicht mit dem Tag stream-url definiert, so kann dies über den Parameter ice-url eingestellt werden.

Daneben gibt es noch den Content-Type welcher die Art des Streams definiert. Auf diesen Request antwortet der Icecast-Server (wenn die Authentifizierung korrekt ist) mit einem:

HTTP/1.0 200 OK

Statt dem Statuscode 200 sind noch eine Reihe weiteres Codes als Antwort möglich:

401 You need to authenticate
Die Authentifizierungsdaten sind nicht korrekt.

403 Content-type not supported
Streamformat wird von Icecast nicht unterstützt.

403 No Content-type given
Der Quellclient sendete kein Content-Type mit, dies wird allerdings zwingend benötigt.

403 internal format allocation problem
Internes Problem von Icecast mit dem gewählten Formatplugin.

403 too many sources connected
Das in der Konfiguration definierte Limit an gleichzeitig verbundenen Clients wurde überschritten.

403 Mountpoint in use
Der gewählte Mountpoint ist bereits in Benutzung.

500 Internal Server Error
Ein interner Fehler im Icecastserver, auf Clientseite gibt es für diesen Fehler keine Lösung.

Eine Besonderheit ist der Statuscode 100 (Continue) welcher gesendet wird, wenn der Client einen Request mit folgendem Inhalt gesendet hat:

Request: 100-continue

Mit dem Statuscode bestätigt der Server das der Client weiter Daten senden kann. Danach beginnt der Quellclient mit dem häppchenweisen senden des Ogg Vorbis- oder MP3-Stream – das bedeutet das eine MP3 nicht am Stück gesendet wird, sondern in Häppchen welche das Fortschreiten des Streams widerspiegeln. Beim Empfangen eines Streams passiert effektiv das selbe. Der Client (z.B. VLC) sendet dem Server einen GET-Request:

GET /stream123 HTTP/1.1
Host: 10.63.48.119:8000
User-Agent: VLC/2.2.1 LibVLC/2.2.1
Range: bytes=0-
Connection: close
Icy-MetaData: 1

Darauf antwortet der Icecast-Server mit mit:

HTTP/1.0 200 OK
Server: Icecast 2.4.0
Date: Thu, 02 Jul 2015 10:13:50 GMT
Content-Type: audio/ogg
Cache-Control: no-cache
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Pragma: no-cache
ice-audio-info: samplerate=44%2e100;channels=1;quality=0
icy-pub:1

Anschließend sendet der Icecast-Server die Audiodaten an den Client, welche dieser wiedergibt.

1001 MS-DOS Spiele

Das Internet Archiv (archive.org) hat vor einigen Tagen knapp 2400 MS-DOS Spiele aus den 80er und 90er Jahren auf seinen Seiten zur Verfügung gestellt. Nach der Veröffentlichung von einigen hundert Arcadespielen, ist dies nun die zweite größere Veröffentlichung in diesem Bereich.

Commander Keen auf archive.org

Commander Keen auf archive.org

Die Spiele stehen dabei auf der entsprechenden Unterseite zur Verfügung. Sie stehen dabei als Stream zur Verfügung, was bedeutet das man die Spiele mittels des MESS-Emulators im Browser spielen kann. Das Internet Archive verfügt über eine Ausnahmegenehmigung vom DMCA, welche es dem Archiv erlaubt, die Spiele zum Zwecke der Langzeitarchivierung zu erhalten und der Öffentlichkeit bereitzustellen.

Wer streamt es?

Mittlerweile gibt es einige Streamingdienste wie Netflix, Amazon Prime Video und ähnliche. Problematisch ist diese Auswahl immer dann, wenn man die Portale untereinander vergleichen möchte. Bekomme ich Serie X bei Netflix, oder muss ich sie doch eher bei Amazon suchen? Manchmal unterscheiden sich die Dienste auch in der Menge, so werden von einer Serie mal mehr oder weniger Staffeln, je nach Dienst, angeboten.

Wer streamt es?

Wer streamt es?

Mit Hilfe des Dienstes Wer streamt es? ist das ganze nun einfacher geworden. In der Eingabemaske wird die gewünschte Serie, bzw. der gewünschte Film eingegeben und schon erfährt man welcher Dienst wie viele Staffeln anbietet.

Open Broadcaster Software

Für das Streaming von Spielen auf Streamingdienste wie Twitch gibt es die unterschiedlichsten Softwarelösungen. Eine freie Lösung in diesem Bereich hört auf den Namen Open Broadcaster Software und wird seit knapp zwei Jahren entwickelt. Im Moment kann mit der Software nur unter Windows aufgezeichnet werden, allerdings sind Planungen im Gange auch Mac OS X und Linux zu unterstützen.

obsproject.com

obsproject.com

Lizenziert ist das ganze unter der GPL2. Der Quelltext von OBS ist auf GitHub zu finden. Die Software selbst kann über die offizielle Webseite bezogen werden.

Minecraft Twitch-Integration unter Mac OS X nutzen

Seit einiger Zeit gibt es in Minecraft eine Integration für den Streamingdienst Twitch. Damit ist es möglich sein Spiel direkt zu streamen. Möchte man das ganze unter Mac OS X nutzen, sind einige Vorarbeiten erforderlich. Im ersten Schritt muss SoundFlower heruntergeladen und installiert werden. Mittels SoundFlower ist es unter OS X möglich den Ton von einer Anwendung zu einer anderen Anwendung zu routen.

Nach dem Druck auf F6 muss das Broadcasting noch bestätigt werden

Nach dem Druck auf F6 muss das Broadcasting noch bestätigt werden

Anschließend kann Minecraft gestartet werden. Aktiviert wird das Broadcasting mittels F6 (F7 dient zum pausieren). Bei der ersten Aktivierung wird man aufgefordert seinen Minecraft-Account mit seinem Twitch-Account zu verlinken. Dafür folgt man einfach dem entsprechenden Link. Nach der Verlinkung der beiden Konten kann die Broadcast-Funktionalität genutzt werden. Wer beim Streamen Fehler wie:

TTV_EC__FRAME_QUEUE_TOO_LONG

bekommt, der sollte die Bandbreite in den Einstellungen verringern. Außerdem ist es ratsam, in den Broadcast-Einstellungen einen Server in seiner Nähe zu wählen.