Instalar un servicio de streaming

El objetivo de esta práctica es montar un servicio de streaming de audio y video para poder usar:

  1. Un cliente multimedia

  2. o un navegador web

Y poder ver el video o el audio que quieras. Como muestra de audio y video puedes utilizar cualquier archivo pero que tengas sus derechos (puedes usar alguna de estas muestras ).

Requisitos Previos

Conceptos del tema Servicios de Streaming (Audio y Video)

Tener montado un servicio HTTPs (Instalar un servicio HTTP) y asegurado con TLS

Hay diferentes alternativas para hacer streaming desde un servidor. En esta práctica te propongo usar HLS sobre Apache . Los requisitos son:

  1. Acceder con usuario y contraseña (Autenticación Básica) para …

  2. Ver y/o Escuchar el archivo (o archivos) en el directorio web (<tu servidor>/streaming)

Si tienes montado un reproductor de HLS en una web (con HTML + JS), no tengo que usar VLC. Pero cualquiera de los dos me sirve.

Puedes seguir los pasos en usar HLS sobre Apache (en inglés):

  1. Requisitos de infraestructura:

    1. Supongo que tienes tu sistema actualizado

    2. ¿Tienes un servicio HTTPs en el puerto 443? ¿En el 80? Puedes apagar el del puerto 80

    3. ¿Tienes instalado ffmpeg en tu servidor?

  2. Prepara los archivos multimedia

    1. Creas el directorio donde estarán tus recursos multimedia

    2. Codificas el video (o audio) en los segmentos y el índice (playlist) ( hls with ffmpeg / HLS Packaging using ffmpeg )

  3. Configuración del servidor web

    1. No hace falta permitir el uso de .htaccess (AllowOverride None), porque puedes configurar el servidor

    2. Defines el directorio de los archivos (Alias)

    3. Defines el manejo de listas m3u8 (mime types) y segmentos (.ts)

Extra 1. Añadir autenticación

  1. Configuras la autenticación (básica, sobre TLS) …

  2. … con el usuario y contraseña (usuario1 / usuario1)

Extra 2. Usar Navegador Web estándar

Para usar un navegador web estándar, tiene que ser compatible con HLS ( Streaming Compatibility ). Por ejemplo Safari o Chrome. Una opción es usar HTML5 con un reproductor específico (por ejemplo video.js )

Solución

Creación de Archivos Multimedia

La creación y organización de los archivos (recuerda que se guardan segmentos y se organizan en listas) depende de muchos factores. Estos son dos ejemplos que te van a funcionar:

Revisando el manual de ffmpeg puedes ver esta muy sencilla (). Te sirve pero te deja el directorio lleno de archivos .ts y es un poco desordenada si tienes muchos archivos.

> ffmpeg -i sample_640x360.avi \
  -c:v h264 \
  -flags +cgop -g 48 \
  -hls_time 2 \
  sample_640x360.m3u8

Esta es más compleja ( Creating a Master Playlist with Ffmpeg ), pero se entiende paso a paso y ves el proceso completo de creación. Si necesitaras hacerlo en un sistema en producción, te permite ajustar los parámetros a tu medida. En este caso crea dos versiones del video, con diferentes resoluciones y tasa de transferencia. En el directorio crea dos directorios v0 y v1 con los segmentos y deja la lista principal en el principal (que es lo que te suele interesar).

>   ffmpeg -y -i sample_1280x720_surfing_with_audio.mp4 \
  -preset slow -g 48 -sc_threshold 0 \
  -map 0:0 -map 0:1 -map 0:0 -map 0:1 \
  -s:v:0 640x360 -c:v:0 libx264 -b:v:0 365k -s:v:1 960x540 -c:v:1     libx264 -b:v:1 2000 \
  -c:a copy -var_stream_map "v:0,a:0 v:1,a:1" \
  -master_pl_name sample_1280x720_surfing_with_audio.m3u8 \
  -f hls -hls_time 6 -hls_list_size 0 \
  -hls_segment_filename "v%v/fileSequence%d.ts" v%v/prog_index.m3u8
Configuración del servidor

Documentado en el archivo httpd.conf global httpd.conf):

  1. Configuración del directorio

  2. Configuración de los tipos MIME y el manejo

Y ya está, para verlo puedes usar VLC con el url de la lista o un navegador que lo tenga integrado ( Streaming Compatibility )