Sto tentando di prendere un file video di 5 minuti e produrre una playlist e un file HTTP Live Stream a file singolo.ts
. Il formato del file della playlist può supportare intervalli di byte anziché file separati a partire da iOS 5, che è un ottimo obiettivo per i miei casi d'uso. Ma, quando eseguo il mio ffmpeg
comando, la prima voce nella .m3u8
playlist risultante non inizia al byte 0 (o quasi).
Per esempio:
ffmpeg -i input -hls_flags single_file out.m3u8
Produce una playlist in questo modo:
#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
Si noti che la prima EXT-X-BYTERANGE
voce non è @0
: è circa 63 MB nel .ts
file 68 MB . In effetti, quando si carica la playlist in un <video>
tag e si apre l'HTML con Safari, la riproduzione del video inizia a circa 20 secondi dalla fine del video di input, non a 0, e non è possibile scrub in precedenza.
Perché ha ffmpeg
prodotto una playlist che non include tutto il video ? Quando guardo il .ts
file prodotto insieme alla playlist, è presente tutto il contenuto del video.
Vedo questo nelle recenti ffmpeg
build statiche sotto Linux, così come in una versione di Homebrew di ffmpeg
2.7.1 sotto OS X.