Come funziona HTTP Adaptive Bitrate streaming su iPhone?
-
21-08-2019 - |
Domanda
Apple ha incluso HTTP Adaptive Bitrate streaming in iPhone OS 3.0, in particolare Safari gestisce automaticamente.
Mi piacerebbe giocare con questo in un modo a basso costo, ma mi aspetto che sarà richiede un server HTTP personalizzato nel peggiore dei casi, e interessante PHP / etc scripting nel migliore dei casi.
Ma prima ho bisogno di sapere quali siano le differenze di protocollo o di serie è. HTTP è ragionevolmente semplice come un protocollo, ma bitrate adattivo significa che la dimensione del file è diverso, le posizioni chunk sono diversi a diversi bitrate, ecc Per esempio, non il cliente dire al nulla server di speciale il flusso come è il download, o è tutto gestito sul lato server?
L'eliminazione delle pause di buffering per l'utente finale è molto interessante sia per il vivo e pre-registrati flussi video, e facendo sia su HTTP è ancora meglio dato molte reti e governi stanno limitando il traffico non porta 80.
- Quali sono i dettagli tecnici per HTTP streaming adattivo bitrate, in particolare l'implementazione di Apple?
-
Dove si trova questo meglio attuato -? Parte del server HTTP stesso, parte di un mod, in uno script ...
-
Quali cambiamenti sono necessari per il lato client, se si dovesse implementare questo in un'applicazione?
Soluzione
Aggiornamento
Sembra che Apple ha fatto un progetto di proposta IETF, e alcune persone stanno già lavorando su segmenters:
HTTP Live Streaming - progetti-Pantos-http-live-streaming-01
http://tools.ietf.org/id/draft -pantos-http-live-streaming-01.txt
iPhone HTTP Streaming con FFMpeg e un
Open Source segmenter
http: // www.ioncannon.net/programming/452/iphone-http-streaming-with-ffmpeg-and-an-open-source-segmenter/
Sembra che il server HTTP semplicemente agisce come un server HTTP muto. Rovistando il sito esempio fornito da Akamai mi dà abbastanza informazioni per iniziare con lo streaming di contenuti statici.
Il whitepaper ( http://www.akamai.com/dl/akamai/iphone_wp .pdf ) fornisce informazioni circa la codifica flusso di trasporto, in modo che i flussi ts sono semplici.
L'encoder (o un segmenter separata processo) produrrà H.264 / AAC contenuto in una sequenza di piccolo contenuto segmenti, in formato MPEG-2 TS (Ts). C'è anche un file indice M3U8 che riferimenti i segmenti; nel caso di contenuti dal vivo del M3U8 è Aggiornamento continuo per rispecchiare la contenuti più recenti.
codifica H.264 dovrebbe essere singolo passaggio Baseline Profile, telaio riordino Disabilitato. I fotogrammi chiave sono suggeriti ogni 5 secondi, idealmente un ancora divisore la lunghezza del segmento prescelto.
Il sito web fornisce un file M3U8, che è semplicemente un elenco di riproduzione M3U, ma nel formato di codifica caratteri UTF-8.
Il file collega poi a un file M3U8 per ciascun bitrate. I assumere tutti devono avere tagli alle stesse posizioni (ogni 2 o 10 secondi, per esempio) in modo che il passaggio può essere senza soluzione di continuità. Sembra essere completamente cliente guidato -. Il cliente decide come misurare la larghezza di banda e di quale versione si sta per ottenere
Il contenuto del file principale sono:
#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
Poi ciascuno degli altri file sono:
hi / 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
<video width="640" height="480">
<source src="content1/content1.m3u8" />
</video>
lo / prog_index.m3u8
<*>Questo funziona con il tag HTML 5 video:
<*>Ci sono ancora un sacco di domande senza risposta, ma questo è probabilmente abbastanza per iniziare.
Altri suggerimenti
E un piccolo lettore in Python + GStreamer http://code.google.com/ p / HLS-player /
Vedere questo per un encoder open source e segmenter e alcune altre cose interessanti:)