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.