Bereitstellen von HLS-Videos hoher Qualität für Web und Mobilgeräte

Herausgeber von Videos wissen, wie wichtig es ist, eine Strategie zur Abdeckung unterschiedlicher Geräte zu haben. Bisher war jedoch kein Protokoll sowohl mit Mobilgeräten als auch mit Playern im Web kompatibel. Aufgrund der Player-seitigen Unterstützung für das segmentierte Streaming hat ein Format für die Bereitstellung von Videos für Mobilgeräte und Webbrowser große Bedeutung erlangt.

HLS-Geräte

HTTP-Live-Streaming (HLS) ist ein Protokoll für die Videobereitstellung, das von Apple ursprünglich als Teil des iOS-Betriebssystems implementiert wurde. Mit der Videocodierlösung, die auf der API von Brightcove Zencoder basiert, ist das Vorbereiten von Content für HLS kein Problem. Es gibt jedoch einige Dinge, über die Herausgeber von Videos informiert sein sollten, was die Optimierung von Content für die jeweilige Situation betrifft. Mit diesem Leitfaden können Sie sich einen Überblick über wichtige Informationen zur Wiedergabe von HLS-Videos in Browsern und auf Mobilgeräten sowie über spezielle Empfehlungen zur Codierung verschaffen.

Was ist HLS?

Für HLS werden segmentierte H.264 MPEG-2 TS-Videos und M3U8-Deskriptordateien verwendet, um Live- und On-Demand-Videos mit adaptiver Bitrate bereitzustellen. Eine M3U8-Datei ist ein Index, mit dem der Client informiert wird, welche Streams und Segmente jeweils verfügbar sind. Das Gerät wählt aus der primären Manifestdatei je nach Bandbreite und CPU-Beschränkungen automatisch den am besten geeigneten Stream aus, lädt das Segment herunter und hängt es an den Wiedergabepuffer an.

Wie der Name schon vermuten lässt, werden Daten bei HLS per HTTP übertragen. Dadurch ergeben sich gegenüber herkömmlichen Streaming-Protokollen wie RTP oder RTMP einige Vorteile:

  • Niedrigere Infrastrukturkosten
  • Mögliche Zwischenspeicherung in CDNs und anderen HTTP-Cacheinfrastruktureinheiten
  • Geringeres Risiko durch Proxy- und Firewall-Beschränkungen
  • Echtzeitoptimierung durch Clientheuristik (adaptive Bitrate)
  • Integrierte Redundanz
  • Einfache Implementierung des HTML5-Players
Apple Store

Im Apple App Store gelten strenge Vorgaben für Videos, die über iOS-Anwendungen bereitgestellt werden. Streaming ist für alle Videoinhalte erforderlich, die eine Länge von 10 Minuten oder eine Menge von 5 MB an übertragenen Daten innerhalb von 5 Minuten übersteigen (133 KBit/s). Außerdem wird von Apple verlangt, dass Entwickler als Alternative für mobile Netzwerke einen Audiostream mit 64 Kbit/s (oder weniger) bereitstellen. Anwendungen, die diese Anforderungen nicht erfüllen, werden vom App Store abgelehnt. Weitere Informationen zur Bereitstellung von Videos im App Store erhalten Sie online in der iOS Developer Library von Apple im Abschnitt mit der HTTP-Live-Streaming-Dokumentation: http://bit.ly/zgHSJX

Mobilgeräte

Im Allgemeinen verfügen neuere Geräte über eine höhere Verarbeitungsleistung und können höhere H.264-Profile unterstützen. Seit der Einführung des iPhone 4S (und höher) unterstützen iOS-Geräte drei verschiedene H.264-Profile: Baseline, Main und High. In Bezug auf Android-Funktionen ist es aufgrund der großen Zahl von Geräten schwieriger, eine allgemeine Aussage zu treffen. Moderne Android-Geräte der Oberklasse verfügen jedoch mindestens über die gleiche Unterstützung wie das iPhone 4. Diese Profile und dazugehörigen H.264-Ebenen werden genutzt, um bestimmte Client-Wiedergabefunktionen zu klassifizieren. Diese Geräte weisen zwar keinen Standardbildschirm in High Definition-Größe auf, aber einige Geräte können über den Apple Digital AV Adapter oder Apple VGA Adapter standardmäßige HD- und SD-Auflösungen ausgeben.

IPHONE 1 BIS 3GS, IPOD TOUCH 1 - 3 IPHONE 4, IPAD 1, APPLE TV 1&2, IPOD TOUCH 4&5 & NEUERE ANDROID-GERÄTE* IPHONE 4S+, IPAD 2 - 4, APPLE TV 3, NEUERE ANDROID-GERÄTE*
Profil Baseline-Profil Main-Profil High-Profil
Ebene Ebene 3.0 Ebene 3.1** Ebene 4.1***
Audio AAC-Audio, 1 - 2 Kanäle AAC-Audio, 1 - 2 Kanäle AAC-LC-Audio, 1 - 2 Kanäle
Max. Bildrate 30 fps 30 fps 30 fps*
Videobitrate Bis zu 1,5 Mbit/s Bis zu 5 MBit/s Bis zu 5 MBit/s
Audiobitrate Bis zu 160 Kbit/s Bis zu 160 Kbit/s Bis zu 160 Kbit/s
Audio-Samplingrate 48.000 oder weniger 48.000 oder weniger 48.000 oder weniger
Bildschirmauflösung 480 x 320 iPhone 4/4s: 960x640
iPad 1: 1024x768
iTouch: 1136x640
iPhone 5+: 1136x640
iPad 2: 1024x768
iPad 3/4: 2048x1536

* Das iPhone 5S und die meisten neuen Android-Geräte der Oberklasse unterstützen jetzt die Profilebene „High“ (4.2, 60fps)
** Der iPod Touch 5 unterstützt Ebene 4.1 und niedriger
*** Apple TV 3 unterstützt Ebene 4.0 und niedriger

Desktop und OTT

Der einzige Browser mit nativer HLS-Unterstützung ist derzeit Safari (Version 4.0+), aber in anderen Browsern kann ein Flash-Fallback genutzt werden, um die Wiedergabe zu ermöglichen. Video.js bietet HLS-Unterstützung über seine Flash-Komponente, damit HLS für fast alle Browser verwendet werden kann. Viele Anwendungen und OTT-Geräte (Over-the-top), z. B. QuickTime, VLC, Apple TV, Roku, Google TV und XBMC, unterstützen HLS ebenfalls. Je nach Verbindungsgeschwindigkeit bieten diese Geräte auch Unterstützung für das High-Profil.

Erweiterte Funktionen

HLS-Videos werden ständig weiterentwickelt, und im Laufe der Zeit werden neue Funktionen hinzugefügt. Mittlerweile unterstützt HLS eine Reihe erweiterter Funktionen, z. B.:

  • AES-128-Verschlüsselung für Contentsicherheit
  • CEA-608-Untertitel im Transportstream
  • Live-Streaming und On-Demand-Videos
  • Audiospuren können ein Standbild enthalten, z. B. Cover oder Video-Screenshots
  • Streamen von Metadaten, einschließlich zeitgesteuerter Metadaten per ID3-Format

6 Tipps zur Codierung von HLS

Hier erhalten Sie sechs Tipps für die bestmögliche Nutzung der HLS-Codierung. Diese Empfehlungen gelten gleichermaßen für die Live- und On-Demand-Transcodierung.

  1. Verwenden Sie HE-AAC-Audio. Standardmäßiges AAC-Audio (meist als AAC-LC bezeichnet) klingt bei Bitraten von 96 KBit/s und höher hervorragend, aber bei niedrigeren Bitraten ist die Komprimierung zu merken. Dies ist für HTTP-Live-Streaming wichtig, da im App Store für die meisten Apps ein Stream mit 64 KBit/s erforderlich ist. Das HE-AAC-Profil („High Efficiency AAC“) ist für die Verwendung bei niedrigen Bitraten optimiert und klingt deutlich besser als AAC-LC im 64 KBit/s-Bereich, der für HLS so wichtig ist.
  2. Apple empfiehlt, die Audioparameter jeweils unverändert zu lassen, um Artefakte zu vermeiden. Wenn sich die Audiodaten von einem Stream zum anderen unterscheiden, können beim Wechseln zwischen Audio-Bitraten Sprünge und hörbares „Knacken“ auftreten. Falls Sie unterschiedliche Audio-Bitraten bereitstellen müssen, um die Qualität bestimmter Streams zu verbessern, sollten Sie zumindest eine Standard-Samplingrate beibehalten.
  3. Die Keyframe-Rate sollte ein passendes Intervall der Segmentgröße sein. Wenn die Segmentgröße beispielsweise 10 Sekunden beträgt, sollte die Keyframe-Rate 2 Sekunden, 2,5 Sekunden, 3,33 Sekunden, 5 Sekunden oder 10 Sekunden betragen. Einige Codierer, z. B. Zencoder, fügen Keyframes automatisch an den passenden Stellen ein. Verwenden Sie in Verbindung mit Zencoder die Einstellung force_keyframe_rate, um die richtige Keyframe-Ausrichtung zwischen Streams sicherzustellen.
  1. Beachten Sie das Format. Beim MPEG TS-Format wird viel unnötige Füllung (Padding) verwendet, und mit einem nicht optimierten TS-Muxer kann HLS erheblich größer als MP4 werden, nämlich bis zu 10 - 20 %. Sowohl bei Zencoder als auch bei Apple werden stark optimierte TS-Muxer verwendet, mit dem dieser Größenanstieg für TS verringert wird.
    Angeforderte Bitrate Größenanstieg
    Optimierung von Zencoder für HLS 364 Kbit/s 4,83 %
    HLS ohne Optimierung 364 Kbit/s 16,34 %
  2. Erwägen Sie eine Einschränkung von Spitzen bei der Bitrate, um eine gute Streaming-Leistung zu erzielen. Wir empfehlen Ihnen die Nutzung einer Spitzen-Bitrate (bitrate_cap) in Höhe von 150 % der durchschnittlichen Bitrate innerhalb eines Puffers von 3 bis 5 Sekunden.
  3. Der streams sollte alle relevanten Informationen enthalten. Dies ist besonders wichtig, wenn Sie mehrere H.264-Profile bereitstellen, um jeweils den richtigen Codec-Wert anzugeben. Mit diesen Einstelllungen wird verhindert, dass Legacy-Geräte versehentlich Segmente herunterladen, die sie nicht decodieren können. Verwenden Sie beispielsweise den Wert avc1.42E01F, mp4a.40.2 für das Profil Baseline 3.0 und den Wert avc1.42E01F, mp4a.40.2 für Main 3.1.

Ausgaben und Wiedergabe

HLS-Videos bestehen aus Indexdateien (.M3U8-XML-Manifeste), die entweder auf andere M3U8-Dateien oder einzelne Videosegmente (.ts-Segmente, meist mit einer Länge von 2 bis 10 Sekunden) verweisen. Bei Verwendung von Zencoder enthält der unter base_url angegebene Speicherort ein M3U8-Manifest, nachdem der Codierauftrag abgeschlossen wurde.

Wiedergabe von Zencoder-Ausgaben

Darstellung der HLS-Dateistruktur von Apple

Sie können Gruppen von Segmenten auf Ordner aufteilen, indem Sie dies unter base_urlangeben. Stellen Sie dabei lediglich sicher, dass der Wert path für den playlist -Teil der API-Anforderung jeweils den Speicherort für den individuellen Stream widerspiegelt. Andernfalls verweist die Manifestdatei auf einen leeren Speicherort. Wenn der Client die Datei „playlist.m3u8“ (primäre Indexdatei) abruft, entscheidet er basierend auf den Plattform- und Netzwerkbeschränkungen, welcher Stream wiedergegeben wird.

BEISPIEL: GRUNDLEGENDER HTML5-TEST-PLAYER MIT NUTZUNG VON VIDEO.JS

      
	<!DOCTYPE html>
	<html>
	<head>
		<title>Testplayer für HTTP-Live-Streaming </title>
		<link href="http://vjs.zencdn.net/c/video-js.css" rel="stylesheet" type="test/css">
		<script src="http://vjs.zencdn.net/c/video.js"></script>
        </head>
	<body>
		<video id="example_video_1" class="video-js vjs-default-skin" controls autoplay
		width="640" height="360" data-setup="{}">
			<source src="http://YourServerHere/playlist.m3u8" type="application/x-mpegURL" />
		</video>
	</body>
	</html>
			

Empfehlungen für die Codierung

Unser Ziel ist es, dass Ihr Video hervorragend aussieht. Da die Videokomprimierung jedoch eine subjektive Kunst ist, können wir Ihnen als Starthilfe lediglich eine Reihe von Empfehlungen an die Hand geben. Möglicherweise ist Ihre Anwendung für Smartphones oder andere Mobilgeräte bestimmt. In diesem Fall ist es ratsam, weitere Streams am unteren Ende des Spektrums hinzuzufügen. Falls Ihre Anwendung jedoch für Geräte ausgelegt ist, die über eine Verbindung mit einem stärkeren Netzwerk verfügen, können Sie die Gesamtzahl der bereitgestellten Streams ggf. reduzieren. Wenn das Quellmaterial einen großen Anteil an Schwenkungen, Bewegungen oder Schnitten aufweist, kann eine Erhöhung der video_bitrate erforderlich sein, um die gewünschten Ergebnisse zu erzielen.

Generell gilt für alle Dinge in Verbindung mit Videos, dass Sie die Beurteilung der Gesamtqualität Ihren Augen überlassen sollten. Verwenden Sie einen Testplayer und den Parameter clip_length, um je nach Bedarf kleine Teststreams auszugeben und Einstellungen anzupassen. Wenn Sie dann noch die sechs oben aufgeführten Tipps beherzigen, sieht Ihr Video auf jedem iOS-Gerät fantastisch aus.

Auflösung Profil Bitrate @16:9 @4:3 Audio Kommentare
1280x960 High@4.0 4 MBit/s 1280 x 720 1280x960 64 Kbit/s HE-AAC
1024x768 Main@3.1 2 MBit/s 1024 x 576 1024x768 56 Kbit/s HE-AAC
960 x 640 Main@3.1 1,5 Mbit/s 960 x 540 854 x 640 56 Kbit/s HE-AAC
640 x 432 Main@3.1 1 MBit/s 640 x 360 576 x 432 56 Kbit/s HE-AAC
480 x 320 Baseline@3.0 600 KBit/s 480 x 272 426 x 320 56 Kbit/s HE-AAC
400 x 288 Baseline@3.0 400 KBit/s 400 x 224 384 x 288 56 Kbit/s HE-AAC
400 x 288 Baseline@3.0 200 KBit/s 400 x 224 384 x 288 56 Kbit/s HE-AAC Bildrate dezimieren
(nur Audio) (nur Audio) (nur Audio) (nur Audio) (nur Audio) 56 Kbit/s HE-AAC Standbild einfügen

Hinweise

  1. Dies sind lediglich Empfehlungen. Andere Auflösungen und Bitraten sind ebenso gültig und können unter bestimmten Umständen sogar vorzuziehen sein. Bei komplexem Content sind beispielsweise ggf. höhere Bitraten und bei einfachem Content entsprechend niedrigere Bitraten ratsam.
  2. Diese sechs Auflösungen und Bitraten bieten eine relativ gute Abdeckung bei wechselnden Bandbreiten. Sie können natürlich noch mehr Auflösungen und Profile hinzufügen (oder auch weglassen) – Apple empfiehlt beispielsweise 8.
  3. In der ersten Spalte ist die generalisierte Auflösung angegeben. Das fertige Video weist je nach Seitenverhältnis des Videos (4:3 oder 16:9) eine andere Auflösung auf, die in den Spalten 4 und 5 angegeben ist.
  4. Die Bildrate sollte auf maximal 30 begrenzt sein. Erzwingen Sie niemals eine Änderung der Bildrate. Dezimieren Sie zur Sicherstellung einer reibungslosen Wiedergabe lediglich Bildraten, die zu hoch sind. Verringern Sie die Bildraten für den Stream mit den niedrigsten Werten auf maximal 15.
  1. Erzwingen Sie zur Sicherstellung der Kompatibilität mit dem iPhone 1 für die Baseline-Streams die Nutzung von nur einem H.264-Referenzbild.
  2. Verwenden Sie ein Keyframe-Intervall von 5 oder 10 mit erzwungener Keyframe-Ausrichtung.
  3. Begrenzen Sie Samplingraten auf maximal 44.100, um die größtmögliche Kompatibilität zu erzielen.
  4. Erwägen Sie die Begrenzung von Spitzen bei den Bitraten, um eine reibungslose Wiedergabe sicherzustellen. Ein guter Kompromiss zwischen Qualität und Wiedergabeleistung ist eine Deckelung der Bitrate auf 150 % der durchschnittlichen Bitrate und ein Pufferwert von 3 bis 5 Sekunden.