Wie funktioniert HTTP Adaptive Bitrate Streaming Arbeit auf dem iPhone?
-
21-08-2019 - |
Frage
Apple hat im iPhone OS 3.0 HTTP Adaptive Bitrate Streaming enthalten, insbesondere Safari diese automatisch behandelt.
Ich mag mit dieser in einer kostengünstigen Weise spielen, aber ich erwarte, werde es einen benutzerdefinierte HTTP-Server im schlimmsten Fall, und interessante PHP / etc scripting im besten Fall erforderlich ist.
Aber zuerst muss ich wissen, was das Protokoll Unterschiede oder Standard. HTTP ist ziemlich einfach, wie ein Protokoll, aber adaptives Bitrate bedeutet die Dateigröße unterschiedlich ist, die Brocken Standorte unterschiedlich sind an unterschiedlichen Bitraten, usw. Zum Beispiel ist der Client des Server etwas Besonderes über den Stream sagen, wie es herunterzuladen, oder ist es alle auf der Server-Seite behandelt?
Die Beseitigung Puffer Pausen für die Endanwender sehr attraktiv für Live- und Video-Streams Pre-recorded und tut sowohl über HTTP besser noch viele Netzwerke und Regierungen begrenzen nicht Port 80 Verkehr.
gegeben- Was die technischen Details für HTTP adaptiven Bitrate-Streaming sind, vor allem Apples Implementierung?
-
Wo ist das am besten umgesetzt - Teil des HTTP-Servers selbst Teil eines mod, in einem Skript ...
-
Welche Änderungen für die Client-Seite erforderlich sind, wenn man dies in einer Anwendung zu implementieren ist?
Lösung
Update
Sieht aus wie Apple einen IETF-Entwurf Vorschlag gemacht, und einige Leute arbeiten bereits an segmenters:
HTTP Live Streaming - draft-pantos-http-live-streaming-01
http://tools.ietf.org/id/draft -pantos-http-Live-Streaming-01.txt
iPhone HTTP Streaming mit FFMpeg und ein Open-Source-Segmentierer
http: // www.ioncannon.net/programming/452/iphone-http-streaming-with-ffmpeg-and-an-open-source-segmenter/
Sieht aus wie der HTTP-Server einfach als ein stummer HTTP-Server fungiert. Stochern die Beispiel-Website zur Verfügung gestellt von Akamai gibt mir genügend Informationen, um loszulegen mit statischen Inhalten Streaming.
Das Whitepaper ( http://www.akamai.com/dl/akamai/iphone_wp .pdf ) liefert Informationen über den Transportstrom-Codierung, so dass die .ts Ströme sind einfach.
Der Encoder (oder eine separate segmenter Prozess) wird H.264 / AAC produzieren Inhalt in einer Folge von kleinen Gehalt Segmente, in MPEG-2-TS-Format (.ts). Es gibt auch eine M3U8 Index-Datei, Referenzen der Segmente; im Falle die M3U8 von Live-Inhalten ist kontinuierlich aktualisiert das widerzuspiegeln neueste Inhalte.
H.264-Codierung sollte Single-Pass sein Baseline-Profil, Rahmen Nachbestellung deaktiviert. Key-Frames werden vorgeschlagen alle 5 Sekunden, im Idealfall ein noch Teiler der gewählten Segmentlänge.
Die Website bietet eine M3U8-Datei, die einfach eine M3U Playlist ist, aber in dem UTF-8-Zeichencodierungsformat.
Diese Datei verknüpft dann zu einer M3U8-Datei für jede Bitrate. Ich nehme an, sie alle Schnitte an den gleichen Positionen (alle 2 oder 10 Sekunden, zum Beispiel) haben müssen, so daß Schalt nahtlos sein kann. Es scheint völlig Client angetrieben zu werden -. Der Kunde entscheidet, wie Bandbreite zu messen und welche Version es geht zu erhalten
Der Inhalt der Hauptdatei ist:
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=860000
hi/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=512000
med/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=160000
lo/prog_index.m3u8
Dann wird jeder der anderen Dateien sind:
hallo / prog_index.m3u8
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10,
fileSequence0.ts
#EXTINF:10,
fileSequence1.ts
#EXTINF:10,
fileSequence2.ts
#EXTINF:10,
fileSequence3.ts
#EXTINF:1,
fileSequence4.ts
#EXT-X-ENDLIST
med / prog_index.m3u8
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10,
fileSequence0.ts
#EXTINF:10,
fileSequence1.ts
#EXTINF:10,
fileSequence2.ts
#EXTINF:10,
fileSequence3.ts
#EXTINF:1,
fileSequence4.ts
#EXT-X-ENDLIST
lo / prog_index.m3u8
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10,
fileSequence0.ts
#EXTINF:10,
fileSequence1.ts
#EXTINF:10,
fileSequence2.ts
#EXTINF:10,
fileSequence3.ts
#EXTINF:1,
fileSequence4.ts
#EXT-X-ENDLIST
Dies funktioniert mit dem HTML-5-Video-Tag:
<video width="640" height="480">
<source src="content1/content1.m3u8" />
</video>
Es gibt noch viele offene Fragen, aber das ist wahrscheinlich genug, um loszulegen.
Andere Tipps
Und ein kleiner Player in Python + GStreamer http://code.google.com/ p / HLS-Player /
Sehen Sie dies für eine Open-Source-Encoder und Segmentierer und einige andere coole Sachen:)