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?

War es hilfreich?

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.

http://iphone.akamai.com/

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:)

http://www.ioncannon.net/programming/452/iphone-http-streaming-with-ffmpeg-and-an-open-source-segmenter/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top