2016-03-20 46 views
11

Ho creato segmenti di lunghezza fissa per un video MP4 lungo utilizzando Mp4Box. Mp4Box crea un meta file info mv_init.mp4 e segmenti come mv_1.m4s, mv_2.m4s, ... Trasmetto in streaming il video utilizzando le estensioni HTML Media Source e lo streaming funziona correttamente.Calcola il suffisso del file di segmento .m4s nello streaming video HTML5 quando l'utente cerca un'altra volta

Il problema è che Non riesco a utilizzare la funzione di ricerca del tempo del mio lettore HTML5. Quando un utente utilizza la barra di ricerca per cercare un altro punto temporale, devo recuperare il file di segmento corretto (mv_{number}.m4s) per quello currentTime.

Ad esempio:

  • durata del video: 2 ore
  • segmento dimensioni: 10 secondi
  • utente cerca di tempo: 25 minuti

25 minuti = 25 × 60 secondi = 1500 secondi. Poiché ogni segmento è di 10 secondi, ho bisogno del numero di segmento 1500/10 = 150. Il file di segmento necessario è mv_150.m4s.

Il calcolo sembra corretto, ma il lettore HTML5 quindi scarica molti più file dopo mv_150.m4s prima di continuare con lo streaming.

Come calcolare correttamente il numero del file di segmento, in modo che dopo la ricerca, lo streaming funzioni senza problemi, senza scaricare file aggiuntivi?

Per creare i segmenti del video MP4, ho usato il seguente comando:

MP4Box -dash 10000 -out video.mpd -dash-profile live -segment-name mv_ -rap video.mp4 
+0

Sei l'autore del lettore? Puoi per favore includere un [mcve]? Cioè un esempio minimale che dimostra il problema. Quale browser utilizzi? – Palec

risposta

3

ho studiato sulla questione e ho trovato la vera causa. La calucazione per il caricamento dei segmenti era corretta. Il problema era con l'intervallo di fotogrammi chiave nel file video. Un fotogramma chiave è una cornice nel video da cui il video può successivamente caricare ed eseguire da quel punto. Quindi nel mio caso ho bisogno di inserire il keyframe all'inizio di ogni segmento. Pertanto, quando cerchiamo attraverso il video in diverse posizioni temporali, il prossimo segmento che viene caricato contiene un fotogramma chiave all'inizio di esso.

I fotogrammi chiave nel file video possono essere impostati utilizzando FFMPEG. Ad esempio, se abbiamo un video con segmenti di 5 secondi, dobbiamo creare un fotogramma chiave a intervalli di 5 secondi usando ffmpeg. Un altro punto importante durante l'impostazione dei fotogrammi chiave è la ricerca del FRAME RATE del video. Il video deve avere una frequenza fotogrammi fissa in modo da poter calcolare con precisione la posizione del fotogramma chiave.

Esempio:

Video File: gladiator.mp4 

Segment Size: 5 seconds 

Non abbiamo impostare Frame Rate e KEY INTERVALLO telaio utilizzando FFMPEG

ffmpeg -i gladiator.mp4 -x264-params keyint = 120: min-keyint = 120: no-scenecut = 1 -r 24 uscita gladiatore.mp4

keyint=120 i.e; 24 fps * 5 seconds = 120 

E ora creiamo i file segmentati utilizzando MP4Box

MP4Box -dash 5000 -frag 5000 -out gladiator.mpd -dash profilo on-demand -segment-name mv_ gladiator-output.mp4

Quindi creerà segmenti come mv_1, mv_2, .. e così via con i fotogrammi chiave all'inizio di ogni file di segmento.

Seekable Dash Streaming Example