La playlist HLS di ffmpeg non inizia all'inizio


5

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 ffmpegcomando, la prima voce nella .m3u8playlist 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-BYTERANGEvoce non è @0: è circa 63 MB nel .tsfile 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 ffmpegprodotto una playlist che non include tutto il video ? Quando guardo il .tsfile prodotto insieme alla playlist, è presente tutto il contenuto del video.

Vedo questo nelle recenti ffmpegbuild statiche sotto Linux, così come in una versione di Homebrew di ffmpeg2.7.1 sotto OS X.

Risposte:


6

Dopo aver letto di nuovo la documentazione HLS , ho finalmente notato questa opzione:

hls_list_size size

Imposta il numero massimo di voci della playlist. Se impostato su 0, il file elenco conterrà tutti i segmenti. Il valore predefinito è 5.

Abbastanza sicuro, nella mia domanda iniziale, ci sono 5 EXT-X-BYTERANGEvoci dalla fine del video, coerenti con il valore predefinito dichiarato. L'impostazione hls_list_sizeper 0come indicato in effetti garantire la video inizia all'inizio e comprende tutti gli intervalli di byte attesi.


1
Che bizzarro default! Quando si utilizzano intervalli di byte, si potrebbe pensare che si renderanno conto di voler una playlist per l'intero file (per impostazione predefinita).
Giovanni,

Col senno di poi, penso che l'impostazione predefinita di ffmpeg sia stata selezionata con il pensiero (probabilmente corretto) che il caso d'uso più comune della funzione sarebbe quello di codificare flussi in tempo reale, dove solo gli ultimi segmenti sono ciò che il visitatore potrebbe desiderare mentre iniziano a giocare .
Collin Allen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.