Atualizar
Parece que a Apple fez um rascunho da proposta da IETF e algumas pessoas já estão trabalhando em segmentadores:
HTTP Live Streaming - rascunho-pantos-http-live-streaming-01
link
iPhone HTTP Streaming com FFMpeg e um Open Source Segmenter
link
Ok, parece que o servidor HTTP age simplesmente como um servidor HTTP idiota. Analisando o site de exemplo fornecido pela Akamai, obtemos informações suficientes para começar a transmitir conteúdo estático.
O white paper ( link ) fornece informações sobre a codificação do fluxo de transporte, portanto, os fluxos .ts são simples.
The encoder (or a separate segmenter process) will produce H.264/AAC content in a sequence of small content segments, in MPEG-2 TS format (.ts). There is also an M3U8 index file that references the segments; in the case of live content the M3U8 is continuously updated to reflect the latest content.
H.264 Encoding should be single-pass Baseline Profile, frame re-ordering disabled. Key frames are suggested every 5 seconds, ideally an even divisor of the chosen segment length.
O site fornece um arquivo M3U8, que é simplesmente uma lista de reprodução M3U, mas no formato de codificação de caracteres UTF-8.
Esse arquivo, em seguida, vincula a um arquivo M3U8 para cada taxa de bits. Eu suponho que todos eles devem ter cortes nas mesmas posições (a cada 2 ou 10 segundos, por exemplo) para que a troca possa ser perfeita. Parece ser totalmente orientado para o cliente - o cliente decide como medir a largura de banda e qual versão obterá.
O conteúdo do arquivo principal é:
#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
Em seguida, cada um dos outros arquivos é:
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
#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
Isso funciona com a tag de vídeo HTML 5:
<video width=”640” height=”480” >
<source src=”content1/content1.m3u8” />
</video>
Ainda há muitas perguntas não respondidas, mas isso provavelmente é o suficiente para começar.
-Adam