Canal a partir de un archivo¶
La entrada file convierte un archivo MP4 local en un stream en vivo pleno: el archivo se reproduce en bucle. Es una herramienta de producción para canales de cortinilla: un canal técnico de «volvemos enseguida», un canal de promoción y un respaldo para cuando caen las fuentes.
Configuración¶
streams:
- name: promo
inputs:
- file:
path: /storage/promo.mp4
dvr: {}
El archivo puede ser multipista: varias calidades de vídeo y varias pistas de audio en un solo MP4 dan un stream MBR pleno con selección de idioma — sin transcodificador en el servidor.
Cómo preparar el archivo con ffmpeg¶
Para que un archivo MBR se reproduzca sin costuras, todas las calidades deben estar perfectamente alineadas: timestamps idénticos y keyframes en los mismos sitios. Se logra con una sola pasada de ffmpeg con el filtro split:
ffmpeg -y -i source.mkv \
-filter_complex "\
[0:v:0]split=3[vhi][vme][vlo]; \
[vhi]scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=25,setpts=PTS-STARTPTS[v1]; \
[vme]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=25,setpts=PTS-STARTPTS[v2]; \
[vlo]scale=960:540:force_original_aspect_ratio=decrease,pad=960:540:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=25,setpts=PTS-STARTPTS[v3]" \
-map "[v1]" -c:v:0 libx264 -b:v:0 6000k -g:v:0 100 -keyint_min:v:0 100 \
-sc_threshold:v:0 0 -x264-params:v:0 "scenecut=0:open_gop=0" \
-map "[v2]" -c:v:1 libx264 -b:v:1 3000k -g:v:1 100 -keyint_min:v:1 100 \
-sc_threshold:v:1 0 -x264-params:v:1 "scenecut=0:open_gop=0" \
-map "[v3]" -c:v:2 libx264 -b:v:2 1200k -g:v:2 100 -keyint_min:v:2 100 \
-sc_threshold:v:2 0 -x264-params:v:2 "scenecut=0:open_gop=0" \
-map 0:a:0 -c:a:0 aac -b:a:0 192k -ac 2 -ar 48000 \
-metadata:s:v:0 title="1080p" -metadata:s:v:1 title="720p" -metadata:s:v:2 title="540p" \
-metadata:s:a:0 language=eng \
-movflags +faststart \
promo.mp4
Lo que aquí importa:
- una sola pasada, una sola fuente,
split— todas las calidades obtienen timestamps idénticos; setpts=PTS-STARTPTS— la línea de tiempo de cada calidad empieza en cero;- el mismo
fpsen todas las calidades; - GOP rígido:
-g=-keyint_min,-sc_threshold 0yscenecut=0:open_gop=0— keyframes estrictamente cada N fotogramas y en los mismos sitios; el codificador no puede insertarlos en los cambios de escena; - audio AAC a 48 kHz estéreo;
-movflags +faststart— el índice al principio del archivo;-metadata:s:v title=.../language=...— las etiquetas de calidad y los idiomas de las pistas acaban en las playlists.
Un ejemplo completo y funcional con varias pistas de audio está en el repositorio de sapsan: storage/king.sh.
Comprobación¶
Abra http://server/streaming/v/promo/index.m3u8 — en la playlist master deben estar todas las calidades, y la conmutación entre ellas no debe dar tirones.