MP4#

El módulo proporciona soporte de pseudo-streaming del lado del servidor para archivos MP4. Estos archivos típicamente tienen extensiones de nombre de archivo .mp4, .m4v o .m4a.

El pseudo-streaming funciona en colaboración con un reproductor multimedia compatible. El reproductor envía una solicitud HTTP al servidor con el tiempo de inicio especificado en el argumento de la cadena de consulta (denominado simplemente start y especificado en segundos), y el servidor responde con el flujo de forma que su posición de inicio corresponda al tiempo solicitado, por ejemplo:

http://example.com/elephants_dream.mp4?start=238.88

Esto permite realizar una búsqueda aleatoria en cualquier momento, o iniciar la reproducción en medio de la línea de tiempo.

Para admitir la búsqueda, los formatos basados en H.264 almacenan metadatos en un llamado "moov atom". Es una parte del archivo que contiene la información de índice para todo el archivo.

Para iniciar la reproducción, el reproductor primero necesita leer los metadatos. Esto se hace enviando una solicitud especial con el argumento start=0. Muchos programas de codificación insertan los metadatos al final del archivo. Esto es subóptimo para el pseudo-streaming, porque el reproductor tiene que descargar todo el archivo antes de iniciar la reproducción. Si los metadatos están ubicados al principio del archivo, es suficiente que Angie simplemente comience a enviar el contenido del archivo. Si los metadatos están ubicados al final del archivo, Angie debe leer todo el archivo y preparar un nuevo flujo para que los metadatos vengan antes que los datos multimedia. Esto implica cierta sobrecarga de CPU, memoria y E/S de disco, por lo que es una buena idea preparar de antemano un archivo original para pseudo-streaming, en lugar de hacer que Angie haga esto en cada solicitud.

El módulo también admite el argumento end de una solicitud HTTP que establece el punto final de la reproducción. El argumento end puede especificarse junto con el argumento start o por separado:

http://example.com/elephants_dream.mp4?start=238.88&end=555.55

Para una solicitud coincidente con un argumento distinto de cero start o end, Angie leerá los metadatos del archivo, preparará el flujo con el rango de tiempo solicitado y lo enviará al cliente. Esto tiene la misma sobrecarga descrita anteriormente.

Si el argumento start apunta a un fotograma de vídeo que no es clave, el inicio de dicho vídeo quedará roto. Para solucionar este problema, el vídeo puede anteponerse con el fotograma clave antes del punto start y con todos los fotogramas intermedios entre ellos. Estos fotogramas serán ocultados de la reproducción mediante una lista de edición.

Si una solicitud coincidente no incluye los argumentos start y end, no hay sobrecarga y el archivo se envía simplemente como un recurso estático. Algunos reproductores también admiten solicitudes de rango de bytes, y por lo tanto, no requieren este módulo.

Al compilar desde el código fuente, este módulo no se compila por defecto; debe habilitarse con la opción de compilación --with-http_mp4_module. En los paquetes e imágenes de nuestros repositorios, el módulo está incluido en la compilación.

Advertencia

Si se utilizó previamente un módulo mp4 de terceros, debe deshabilitarse.

Una funcionalidad de pseudo-streaming similar para archivos FLV es proporcionada por el módulo FLV.

Ejemplo de configuración#

location /video/ {
    mp4;
    mp4_buffer_size     1m;
    mp4_max_buffer_size 5m;
}

Directivas#

mp4#

Syntax

mp4;

Predeterminado

Context

location

Activa el procesamiento del módulo en la ubicación circundante.

mp4_buffer_size#

Syntax

mp4_buffer_size size;

Predeterminado

mp4_buffer_size 512K;

Context

http, server, location

Establece el tamaño inicial del búfer utilizado para procesar archivos MP4.

mp4_max_buffer_size#

Syntax

mp4_max_buffer_size size;

Predeterminado

mp4_max_buffer_size 10M;

Context

http, server, location

Durante el procesamiento de metadatos, podría ser necesario un búfer más grande. Su tamaño no puede exceder el tamaño especificado, o de lo contrario Angie devolverá el error 500 (Internal Server Error) y registrará el siguiente mensaje:

"/some/movie/file.mp4" mp4 moov atom is too large: 12583268, you may want to increase mp4_max_buffer_size

mp4_limit_rate#

Syntax

mp4_limit_rate on | off | factor;

Predeterminado

mp4_limit_rate off;

Context

http, server, location

Limita la velocidad de transferencia del archivo MP4 solicitado al cliente. Para calcular el límite, el factor se multiplica por la tasa de bits promedio del archivo.

  • El valor off desactiva la limitación de velocidad.

  • El valor on establece un factor de 1.1.

  • El límite se aplica después de alcanzar el valor establecido por mp4_limit_rate_after.

Las solicitudes se limitan de forma individual: si el cliente abre dos conexiones, la tasa resultante se duplica. En este sentido, considere usar limit_conn y directivas asociadas.

mp4_limit_rate_after#

Syntax

mp4_limit_rate_after time;

Predeterminado

mp4_limit_rate_after 60s;

Context

http, server, location

Establece (en términos de tiempo de reproducción) la cantidad de datos multimedia transferidos que activa el límite de velocidad establecido por mp4_limit_rate.

mp4_start_key_frame#

Syntax

mp4_start_key_frame on | off;

Predeterminado

mp4_start_key_frame off;

Context

http, server, location

Fuerza que el vídeo de salida siempre comience con un fotograma clave. Si el argumento de inicio no apunta a un fotograma clave, los fotogramas iniciales se ocultarán mediante una lista de edición mp4. Las listas de edición son compatibles con los principales reproductores y navegadores como Chrome, Safari, QuickTime y ffmpeg, y parcialmente compatibles con Firefox.