Pergunta

A Apple incluiu o fluxo de bits Adaptive Adaptive HTTP no iPhone OS 3.0, em particular o Safari lida com isso automaticamente.

Eu gostaria de jogar com isso de maneira de baixo custo, mas espero que exija um servidor HTTP personalizado na pior das hipóteses e scripts interessantes de PHP/etc no melhor caso.

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

A eliminação de pausas de buffer para o usuário final é muito atraente para fluxos de vídeo ao vivo e pré-gravados, e fazer tanto o 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 do streaming de taxa de bits adaptável HTTP, especialmente a implementação da Apple?
  • Onde isso é melhor implementado - parte do próprio servidor HTTP, parte de um mod, em um script ...?

  • Que mudanças são necessárias para o lado do cliente, se alguém implementar isso em um aplicativo?

Foi útil?

Solução

Atualizar

Parece que a Apple fez uma proposta de rascunho da IETF, e algumas pessoas já estão trabalhando em segmentadores:

HTTP Live Streaming-Draft-pantos-http-live-streaming-01
http://tools.ietf.org/id/draft-pantos-http-live- streaming-01.txt

iPhone HTTP Streaming com FFMPEG e um segmento de código aberto
http://www.ionscannon.net/programming/452/iphone-http-treaming-with-ffmpeg-and-an-open-source-seginteter/


Parece que o servidor HTTP atua simplesmente como um servidor HTTP idiota. Antigando o site de exemplo fornecido pela Akamai me fornece informações suficientes para começar com a transmissão de conteúdo estático.

http://iphone.akamai.com/

O whitepaper ( http://www.akamai.com/dl/akamai/iphone_wp.pdf ) Fornece informações sobre a codificação do fluxo de transporte, para que os fluxos .TS sejam diretos.

O codificador (ou um processo de segmento separado) produzirá conteúdo H.264/AAC em uma sequência de pequenos segmentos de conteúdo, no formato MPEG-2 TS (.TS). Há também um arquivo de índice M3U8 que faz referência aos segmentos; No caso do conteúdo ao vivo, o M3U8 é atualizado continuamente para refletir o conteúdo mais recente.

A codificação H.264 deve ser um perfil de linha de base de passagem única, reordenar o quadro desativado. Os principais quadros são sugeridos a cada 5 segundos, idealmente um divisor uniforme do comprimento do segmento escolhido.

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 vincula a um arquivo M3U8 para cada taxa de bits. Suponho que todos eles devem ter cortes nas mesmas posições (a cada 2 ou 10 segundos, por exemplo) para que a comutação possa ser perfeita. Parece ser completamente orientado ao cliente - o cliente decide como medir a largura de banda e qual versão vai 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

Então cada um dos outros arquivos é:

Oi/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 existem muitas perguntas sem resposta, mas isso provavelmente é suficiente para começar.

Outras dicas

E um pequeno jogador em Python+Gstreamer http://code.google.com/p/hls-player/

Veja isso para um codificador e segmento de código aberto e algumas outras coisas legais :)

http://www.ionscannon.net/programming/452/iphone-http-treaming-with-ffmpeg-and-an-open-source-seginteter/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top