<!-- review: finished -->

<a id="http-mp4"></a>

# 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:

```none
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](https://github.com/flowplayer/flowplayer/wiki/7.1.1-video-file-correction) 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:

```none
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](#mp4-start-key-frame) 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.

Cuando [se compila desde el código fuente](https://es.angie.software//angie/docs/installation/sourcebuild.md#sourcebuild), este módulo no se compila por defecto; debe habilitarse con la `‑‑with‑http_mp4_module` [opción de compilación](https://es.angie.software//angie/docs/installation/sourcebuild.md#configure). En los paquetes e imágenes de [nuestros repositorios](https://es.angie.software//angie/docs/installation/index.md#install-packages), el módulo está incluido en la compilación.

#### WARNING
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](https://es.angie.software//angie/docs/configuration/modules/http/http_flv.md#http-flv).

<a id="configuration-example-31"></a>

## Ejemplo de configuración

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

<a id="directives-32"></a>

## Directivas

<a id="index-0"></a>

<a id="id1"></a>

### mp4

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `mp4`;   |
|--------------------------------------------------------------------------------------------|----------|
| Predeterminado                                                                             | —        |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | location |

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

<a id="index-1"></a>

<a id="mp4-buffer-size"></a>

### mp4_buffer_size

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `mp4_buffer_size` size;   |
|--------------------------------------------------------------------------------------------|---------------------------|
| Predeterminado                                                                             | `mp4_buffer_size 512K;`   |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | http, server, location    |

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

<a id="index-2"></a>

<a id="mp4-max-buffer-size"></a>

### mp4_max_buffer_size

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `mp4_max_buffer_size` size;   |
|--------------------------------------------------------------------------------------------|-------------------------------|
| Predeterminado                                                                             | `mp4_max_buffer_size 10M;`    |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | 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

<a id="index-3"></a>

<a id="mp4-limit-rate"></a>

### mp4_limit_rate

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `mp4_limit_rate` `on` | `off` | factor;   |
|--------------------------------------------------------------------------------------------|-------------------------------------------|
| Predeterminado                                                                             | `mp4_limit_rate off;`                     |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | 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](#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](https://es.angie.software//angie/docs/configuration/modules/http/http_api.md#limit-conn) y directivas asociadas.

<a id="index-4"></a>

<a id="mp4-limit-rate-after"></a>

### mp4_limit_rate_after

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `mp4_limit_rate_after` time;   |
|--------------------------------------------------------------------------------------------|--------------------------------|
| Predeterminado                                                                             | `mp4_limit_rate_after 60s;`    |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | http, server, location         |

Establece
(en términos de
[tiempo de reproducción](https://es.angie.software//angie/docs/configuration/configfile.md#syntax))
la cantidad de datos multimedia transferidos
que activa
el límite de velocidad establecido por
[mp4_limit_rate](#mp4-limit-rate).

<a id="index-5"></a>

<a id="mp4-start-key-frame"></a>

### mp4_start_key_frame

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `mp4_start_key_frame` `on` | `off`;   |
|--------------------------------------------------------------------------------------------|---------------------------------------|
| Predeterminado                                                                             | `mp4_start_key_frame off;`            |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | 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.
