2015-06-26 20 views
5

Stiamo sviluppando un'applicazione in cui il file m3u8 deve essere generato al volo per un dato video mp4. Qualcuno può farci sapere come possiamo generare il file mp4 al volo con la durata esatta del segmenter. Nel nostro caso, il segmenter ffmpeg viene creato con segmenti di lunghezza variabile e di dimensioni decimali. Per esempio: # EXTM3U # EXT-X-VERSION: 3 # EXT-X-TARGETDURATION: 7 # EXT-X-PLAYLIST-TYPE: VODffmpeg genera m3u8 e segmenti manualmente

#EXTINF:5.005, 
test.mp4.ts?start=0.000&end=5.005 
#EXTINF:6.715, 
test.mp4.ts?start=5.005&end=11.720 
#EXTINF:6.548, 

Qualcuno può aiutarci a creare tale M3U8 file senza creare alcun segmento. Creeremo manualmente i segmenti su richiesta.

Inoltre, quando creiamo i segmenti manualmente, si verifica una piccola balbuzie (sfarfallio) quando il video passa al segmento successivo. Quando lo leggo online, dice che potrebbe essere dovuto al contatore di continuità. Qualcuno può aiutarci a risolvere anche noi

Grazie.

risposta

2

Soluzione 1

È possibile utilizzare -hls_flags single_file per memorizzare tutti i segmenti in un unico file ts. La playlist risultante conterrà le lunghezze e gli offset di ciascun segmento e il client le richiederà autonomamente.

Esempio per 6s segmenti:

ffmpeg -i input -c:v libx264 -r 25 -g 75 -sc_threshold 0 -c:a libfdk_aac -hls_time 6 -hls_playlist_type vod -hls_flags single_file out.m3u8 

#EXTM3U 
#EXT-X-VERSION:4 
#EXT-X-TARGETDURATION:6 
#EXT-X-MEDIA-SEQUENCE:0 
#EXT-X-PLAYLIST-TYPE:VOD 
#EXTINF:6.000000, 
#EXT-X-BYTERANGE:[email protected] 
out.ts 
#EXTINF:6.000000, 
#EXT-X-BYTERANGE:[email protected] 
out.ts 
#EXTINF:6.000000, 
#EXT-X-BYTERANGE:[email protected] 
out.ts 
[...] 
#EXT-X-ENDLIST 

Il EXT-X-BYTERANGE è supportata in versione 4. Se avete bisogno di versione 3 è necessario trasformare questa playlist in una versione 3 uno e fare un gestore di restituire l'intervallo corretto con il tipo MIME corretto:

#EXTINF:6.000000, 
handler?file=out.ts&offset=xxx&length=yyy 

Soluzione 2

Utilizzare nginx con la nginx-vod-module che può anche fare DASH e altri

+0

C'è un modo per creare l'elenco m3u8 (con tutti gli intervalli di byte) senza creare prima il file ts? E poi basta creare un file specifico (intervallo di byte) in seguito? Sarebbe stato carino conservare il file originale e creare solo un m3u8 e quindi creare le parti al volo? – MrApnea

+0

@FSDaniel Non se si desidera la durata esatta del segmento e il supporto per molti codec che richiedono la ricodifica e in questo caso è più efficiente ricodificare il file una volta e non al volo. Il modulo nginx offre il reimballaggio immediato dei file MP4 su DASH, HDS, HLS, MSS' per un sottoinsieme di codec, è tutto nella parte superiore del README. – aergistal