MP4#
O módulo fornece suporte de pseudo-streaming do lado do servidor para arquivos MP4. Tais arquivos tipicamente têm as extensões de nome de arquivo .mp4, .m4v, ou .m4a.
O pseudo-streaming funciona em aliança com um reprodutor de mídia compatível. O reprodutor envia uma requisição HTTP para o servidor com o tempo de início especificado no argumento da string de consulta (chamado simplesmente start e especificado em segundos), e o servidor responde com o stream de tal forma que sua posição inicial corresponde ao tempo solicitado, por exemplo:
http://example.com/elephants_dream.mp4?start=238.88
Isso permite realizar uma busca aleatória a qualquer momento, ou iniciar a reprodução no meio da linha do tempo.
Para suportar busca, formatos baseados em H.264 armazenam metadados em um chamado "átomo moov". É uma parte do arquivo que contém as informações de índice para todo o arquivo.
Para iniciar a reprodução, o reprodutor primeiro precisa ler os metadados. Isso é feito
enviando uma requisição especial com o argumento start=0
. Muitos softwares de codificação
inserem os metadados no final do arquivo. Isso é subótimo para
pseudo-streaming, porque o reprodutor tem que baixar o arquivo inteiro antes de
iniciar a reprodução. Se os metadados estão localizados no início do arquivo, é
suficiente para o Angie simplesmente começar a enviar de volta o conteúdo do arquivo. Se os
metadados estão localizados no final do arquivo, o Angie deve ler o arquivo inteiro e
preparar um novo stream para que os metadados venham antes dos dados de mídia. Isso
envolve alguma sobrecarga de CPU, memória e E/S de disco, então é uma boa ideia
preparar um
arquivo original para pseudo-streaming com antecedência, ao invés de ter o Angie fazendo isso
a cada requisição desse tipo.
O módulo também suporta o argumento end
de uma requisição HTTP que define
o ponto final da reprodução. O argumento end
pode ser especificado com o
argumento start ou separadamente:
http://example.com/elephants_dream.mp4?start=238.88&end=555.55
Para uma requisição correspondente com um argumento start
ou end
não-zero,
o Angie lerá os metadados do arquivo, preparará o stream com o
intervalo de tempo solicitado, e o enviará para o cliente. Isso tem a mesma sobrecarga
descrita acima.
Se o argumento start
aponta para um quadro de vídeo não-chave, o início
de tal vídeo será quebrado. Para corrigir esse problema, o vídeo pode ser precedido com o quadro-chave antes do ponto start
e com todos os quadros intermediários entre eles. Esses quadros serão ocultados
da reprodução usando uma lista de edição.
Se uma requisição correspondente não incluir os argumentos start
e end
,
não há sobrecarga, e o arquivo é enviado simplesmente como um
recurso estático. Alguns reprodutores também suportam requisições de intervalo de bytes, e assim não requerem
este módulo.
Quando compilando a partir do código fonte,
este módulo não é compilado por padrão;
ele deve ser habilitado com a
‑‑with‑http_mp4_module
opção de compilação.
Em pacotes e imagens dos nossos repositórios, o módulo está
incluído na compilação.
Aviso
Se um módulo mp4
de terceiros foi usado anteriormente, ele deve ser desabilitado.
Um suporte de pseudo-streaming similar para arquivos FLV é fornecido pelo módulo FLV. Ativa o processamento do módulo em uma localização circundante. Define o tamanho inicial do buffer usado para processar arquivos MP4. Durante o processamento de metadados, um buffer maior pode se tornar necessário. Seu tamanho não pode exceder o tamanho especificado, ou então o Angie retornará o erro de servidor 500 (Internal Server Error), e registrará a seguinte mensagem: "/some/movie/file.mp4" mp4 moov atom is too large:
12583268, you may want to increase mp4_max_buffer_size Limita a taxa de transferência do arquivo MP4 solicitado para o cliente.
Para calcular o limite, o factor é multiplicado
pela taxa de bits média do arquivo. O valor O valor O limite é aplicado após atingir o valor definido por
mp4_limit_rate_after. As requisições são limitadas individualmente:
se o cliente abrir duas conexões,
a taxa resultante dobra.
Neste aspecto, considere usar limit_conn e diretivas acompanhantes. Define
(em termos de
tempo de reprodução)
a quantidade de dados de mídia transferidos
que aciona
o limite de taxa definido por
mp4_limit_rate. Força o vídeo de saída a sempre começar com um quadro-chave de vídeo. Se o argumento start não aponta para um quadro-chave, os quadros iniciais são ocultados usando uma lista de edição mp4. Listas de edição são suportadas por reprodutores e navegadores principais como Chrome, Safari, QuickTime e ffmpeg, parcialmente suportadas pelo Firefox.Exemplo de Configuração#
location /video/ {
mp4;
mp4_buffer_size 1m;
mp4_max_buffer_size 5m;
}
Diretivas#
mp4#
mp4_buffer_size#
mp4_max_buffer_size#
mp4_limit_rate#
off
desabilita a limitação de taxa.on
define um factor de 1.1
.mp4_limit_rate_after#
mp4_start_key_frame#