Streaming de taxa de bits adaptável HTTP

2

A Apple incluiu o HTTP Adaptive Bitrate Streaming no iPhone OS 3.0, em particular o Safari trata isso automaticamente.

Eu gostaria de jogar com isso de uma maneira de baixo custo, mas espero que ele exija um servidor HTTP personalizado no pior caso, e scripts PHP / etc interessantes no melhor dos casos.

Mas primeiro preciso saber quais são as diferenças de protocolo ou padrão. O HTTP é razoavelmente simples como um protocolo, mas a taxa de bits adaptável significa que o tamanho do arquivo é diferente, os locais do bloco são diferentes em taxas de bits diferentes etc. Por exemplo, o cliente informa ao servidor algo especial sobre o fluxo enquanto está fazendo o download? tudo tratado no lado do servidor?

A eliminação de pausas de buffering para o usuário final é muito atraente para fluxos de vídeo ao vivo e pré-gravados, e fazer ambos sobre HTTP é ainda melhor, considerando que muitas redes e governos estão limitando o tráfego sem porta 80.

  • Quais são os detalhes técnicos da transmissão de taxa de bits adaptável HTTP, especialmente a implementação da Apple?

-Adam

    
por Adam Davis 01.07.2009 / 20:49

4 respostas

3

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.

link

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

    
por 01.07.2009 / 21:43
1

Akamai descreve-o como tal:

Starting with iPhone OS version 3.0 and QuickTime X, you can send streaming audio and video over HTTP from an ordinary web server for playback on iPhone, iPod touch, or other devices, such as desktop computers, without the limitations of Progressive Downloads.

The new streaming protocol supports Multiple Bitrates and automatically switches to the optimal bit-rate based on network conditions for a smooth quality playback experience. This implementation also provides for media encryption and user authentication over HTTPS, allowing publishers to protect their work. Both Live and On demand content can be delivered using the 3.0 specification.

HTTP Streaming to the iPhone consists of three parts: the server component, the Akamai network, and the client software.

In a typical configuration, a hardware encoder takes audio-video input and turns it into an MPEG-2 transport stream containing H.264 video and AAC or HE-AAC audio. The encoded stream is then split into a series of short media files by a stream segmenter. The segmenter also creates and maintains an index file containing the list of short media files that were created. These files are placed on a web server.

A media player built into the iPhone OS is provided a link to the index file, it then requests the media files in order and plays them without any pauses or gaps between segments

Então, aparentemente, você precisa do segmentador de fluxo para criar conteúdo adequadamente. O servidor HTTP é genérico nesta tecnologia.

    
por 01.07.2009 / 21:11
1

Nenhum segmentador de janelas - o segmentador de iPhone não está funcionando corretamente por motivos desconhecidos. Você deve estar registrado desenvolvedor iPhone para poder baixar o segmentador

    
por 16.10.2009 / 07:42
0

Svitoch, você tem leopardo da neve? Ele vem com segmentador de fluxo de maçã. basta digitar man mediastreamsegmenter para ver o manual.

    
por 07.02.2010 / 05:58