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. Activa el procesamiento del módulo en la ubicación circundante. Establece el tamaño inicial del búfer utilizado para procesar archivos MP4. 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 Predeterminado 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 El valor 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. Predeterminado 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. Predeterminado 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.Ejemplo de configuración#
location /video/ {
mp4;
mp4_buffer_size 1m;
mp4_max_buffer_size 5m;
}
Directivas#
mp4#
mp4_buffer_size#
mp4_max_buffer_size#
mp4_limit_rate#
mp4_limit_rate
on
| off
| factor;mp4_limit_rate off;
off
desactiva la limitación de velocidad.on
establece un factor de 1.1
.mp4_limit_rate_after#
mp4_limit_rate_after
time;mp4_limit_rate_after 60s;
mp4_start_key_frame#
mp4_start_key_frame
on
| off
;mp4_start_key_frame off;