5.12.2009 / Timo Hetzel

HTTP Live Streaming

Mit Snow Leopard und dem iPhone OS 3.0 hat Apple eine neue Technologie vorgestellt und bei der IETF als Standard vorgeschlagen, mit der On Demand- oder Live-Medien-Streams verbreitet werden können: HTTP Live Streaming.

Für die Bits und so Plus-Mitglieder bieten wir seit einiger Zeit einen Audio-Live-Stream während der Aufzeichnung der Sendung an, der über Icecast verbreitet wird. Das funktioniert zwar hinreichend gut, hat aber gerade beim mobilen Empfang einige Schwierigkeiten:

Mehrere Qualitätsstufen sind zwar möglich (bieten wir momentan auch nicht an), müssten aber vom Empfänger manuell ausgewählt werden. Nutzt der Hörer einen mit einer Bitrate, die für das Netz zu hoch ist, bricht der Stream ab, einen automatischen Fallback gibt es nicht. Das QuickTime-Plugin im mobilen Safari auf dem iPhone bricht außerdem den Stream gerne beim Wechsel von Wifi nach 3G oder EDGE ab.

Unter anderem diese beiden Probleme soll HTTP Live Streaming lösen.

Der elementare Medienstream (MP3, H.264, AAC) wird durch einen Segmenter geschickt, der Segmente von gleicher Laufzeit (z.B. 10 Sekunden) erzeugt, und in einen MPEG2-Transportstream verpackt (für H.264, AAC). Diese Segmente werden auf einem HTTP-Server abgelegt.

Referenziert werden die verschiedenen Qualitätsstufen und die Segmente über Playlists, nicht unähnlich einer M3U-Datei, die man noch vom guten alten Winamp kennt.

Daraus resultiert auch die leichte Skalierbarkeit: Wenn alle Bits über HTTP ausgeliefert werden, kann man ein CDN wie Akamai oder Amazon S3/Cloudfront nutzen. Akamai hostet auch eine Seite mit Demo-Streams.

Wir schicken das Live-Signal mit Nicecast auf den Server, dort wird es wie bisher über Icecast ausgeliefert, und zusätzlich für HTTP Live Streaming abgegriffen und weiterverarbeitet. Angenehmer Nebeneffekt: Die Playlist der Segmente kann ein gleitendes zeitliches Fenster enthalten, in dem sich der Client frei bewegen kann. Sprich: Im Live-Stream kann zurückgespult werden.

Apple hat wohl vorerst die alte Content-Industrie im Auge. Die Dokumentation empfiehlt Broadcast-grade Hardware-Encoder, die beim Fernsehsender ohnehin schon in den Schrank geschraubt sind. Außerdem ist es potentiell eine Grußkarte in Richtung Adobe für das Streaming von Medieninhalten.

Der (offene) Software-Support dagegen muss erst noch geschrieben werden. Ein guter Startpunkt sind die Skripte von Carson McDonald, die einen Stream z.B. über den QuickTime Broadcaster entgegennehmen, mit ffmpeg in verschiedenen Qualitätsstufen encodieren und segmentieren, und per S3/Cloudfront ausliefern. Die Kosten dafür halten sich auch in erfreulichen Grenzen. Für 5 Minuten Video für 100 Zuseher rechnet er mit 0,20 USD.

Der Support auf Client-Seite könnte auch noch verbessert werden: QuickTime X unterstützt, trotz anderslautendem Marketingmaterial, noch keine Authentifizierung für die Playlisten. Auf dem iPhone dagegen funktioniert das schon, und auch das Umschalten zwischen den verschiedenen Qualitätsstufen der Streams je nach Verbindungsgeschwindigkeit scheint zuverlässig bei Tempo 160 auf der Autobahn zu klappen.

Steht sicher noch am Anfang, ist aber sehr vielversprechend, dieses HTTP Live Streaming.

Update: eine detaillierte technische Anleitung zu unserem Setup gibt es bei Thorsten Philipp