ffmpeg Lista de reprodução HLS não começando no início

5

Estou tentando obter um arquivo de vídeo de 5 minutos e produzir uma lista de reprodução de transmissão ao vivo em arquivo único HTTP e .ts . O formato de arquivo da lista de reprodução pode suportar intervalos de bytes em vez de arquivos separados no iOS 5, o que é um bom destino para os meus casos de uso. Mas, quando eu executo meu comando ffmpeg , a primeira entrada na lista de reprodução .m3u8 resultante não inicia no (ou mesmo perto) byte 0.

Por exemplo:

ffmpeg -i input -hls_flags single_file out.m3u8

Produz uma lista de reprodução assim:

#EXTM3U
#EXT-X-VERSION:4
#EXT-X-TARGETDURATION:11
#EXT-X-MEDIA-SEQUENCE:63
#EXTINF:1.376367,
#EXT-X-BYTERANGE:568324@63107840
out.ts
#EXTINF:1.334667,
#EXT-X-BYTERANGE:235564@63676164
out.ts
#EXTINF:1.918589,
#EXT-X-BYTERANGE:343288@63911728
out.ts
#EXTINF:10.427078,
#EXT-X-BYTERANGE:3311996@64255016
out.ts
#EXTINF:5.672333,
#EXT-X-BYTERANGE:52828@67567012
out.ts
#EXT-X-ENDLIST

Observe que a primeira entrada EXT-X-BYTERANGE não é @0 - é cerca de 63 MB no arquivo.ts de 68 MB%. De fato, ao carregar a lista de reprodução em uma tag <video> e abrir o HTML com o Safari, a reprodução de vídeo começa a cerca de 20 segundos do final do vídeo de entrada, não a 0, e não há como excluir mais cedo.

Por que ffmpeg produziu uma playlist que não inclui todo o vídeo ? Quando vejo o arquivo .ts produzido ao lado da playlist, todo o conteúdo do vídeo está presente.

Eu vejo isso em recentes ffmpeg construções estáticas no Linux, bem como uma versão construída em homebrew de ffmpeg 2.7 .1 no OS X.

    
por Collin Allen 21.10.2015 / 01:01

1 resposta

6

Depois de ler a documentação do HLS novamente , finalmente percebi esta opção:

hls_list_size size

Set the maximum number of playlist entries. If set to 0 the list file will contain all the segments. Default value is 5.

Com certeza, na minha pergunta inicial, há 5% deEXT-X-BYTERANGE entradas do final do vídeo, consistentes com o valor padrão indicado. A definição de hls_list_size para 0 , conforme indicado, garante que o vídeo comece no início e inclua todos os intervalos de bytes esperados.

    
por 03.11.2015 / 18:13