Cómo ofrecer vídeos HLS de gran calidad
en navegadores web y dispositivos móviles

Aunque los editores de vídeo siempre han sido muy conscientes de la importancia de una estrategia multidispositivo, hasta ahora no existía ningún protocolo compatible tanto con reproductores móviles como con reproductores web. Al permitir la retransmisión segmentada de secuencias en el reproductor, se trata de un formato que ha adquirido una especial importancia para la difusión de vídeos en navegadores web y dispositivos móviles.

Dispositivos HLS

HTTP Live Streaming, o HLS, es un protocolo de difusión de vídeo implementado inicialmente por Apple en su sistema operativo iOS. Aunque la solución de codificación de vídeo Zencoder de Brightcove, controlada a través de una API, facilita la preparación de contenidos para HLS, conviene que los editores de vídeo conozcan algunos detalles a la hora de optimizar sus contenidos para su situación particular. Esta guía contiene información importante sobre la reproducción de vídeo HLS en los navegadores y dispositivos móviles, así como recomendaciones concretas de codificación.

¿Qué es HLS?

HLS utiliza vídeo H.264 MPEG-2 TS segmentado y archivos descriptores M3U8 para difundir el vídeo en directo y a la carta con tasas de bits adaptativas. Un archivo M3U8 es un índice que permite al cliente saber qué secuencias y segmentos están disponibles en un momento dado. El dispositivo selecciona automáticamente la secuencia más adecuada desde el archivo de manifiesto primario teniendo en cuenta las limitaciones de ancho de banda y de CPU. A continuación, descarga el segmento y lo añade al búfer de reproducción.

Como su nombre da a entender, HLS transmite datos a través de HTTP, ofreciendo diversas mejoras sobre los protocolos de transmisión tradicionales, como RTP o RTMP, entre las que se cuentan:

  • Reducción de los costes de infraestructura
  • Posibilidad de almacenamiento en memoria caché en redes CDN y otras infraestructuras de caché HTTP
  • Reducción de las amenazas procedentes de restricciones de proxy y cortafuegos
  • Optimización en tiempo real mediante heurística en el equipo cliente (tasa de bits adaptativa)
  • Redundancia integrada
  • Implementación sencilla de reproductores HTML5
Apple Store

La tienda App Store de Apple ha establecido unos requisitos estrictos para los vídeos difundidos a través de aplicaciones para iOS. Exige la utilización de la retransmisión en directo (streaming) para todo contenido de vídeo cuya duración supere los 10 minutos o 5 MB de datos en un periodo de 5 minutos (133 kbps). Apple también exige que los desarrolladores ofrezcan una secuencia de audio de 64 kbps (o menos) como respaldo en caso de difusión a través de redes de datos móviles. Las aplicaciones que no cumplen estos requisitos no pueden publicarse en App Store. Para obtener más información sobre la difusión de vídeo a través de App Store, consulte el documento en línea de Apple "HTTP Live Streaming Overview" incluido en la biblioteca para desarrolladores "iOS Developer Library": http://bit.ly/zgHSJX.

Dispositivos móviles

En general, los dispositivos más recientes tienen más potencia de procesamiento y admiten los perfiles más exigentes de H.264. Desde el modelo iPhone 4S, los dispositivos iOS admiten los tres perfiles de H.264: Baseline, Main y High. Resulta más difícil definir las prestaciones generales de Android por la gran diversidad de sus dispositivos. No obstante, se puede afirmar que los dispositivos más modernos y potentes del ecosistema Android tienen como mínimo las mismas capacidades que el iPhone 4. Estos perfiles y sus correspondientes niveles H.264 se utilizan para clasificar la capacidad de reproducción específica de cada cliente. Aunque estos dispositivos no tienen pantallas de alta definición de tamaño estándar, algunos pueden reproducir el vídeo en resoluciones estándar HD y SD en un televisor gracias a los adaptadores Apple Digital AV Adapter o Apple VGA Adapter.

IPHONE 1 A 3GS, IPOD TOUCH 1-3 IPHONE 4, IPAD 1, APPLE TV 1 Y 2, IPOD TOUCH 4 Y 5, Y DISPOSITIVOS ANDROID MÁS RECIENTES* IPHONE 4S+, IPAD 2-4, APPLE TV 3, DISPOSITIVOS ANDROID MÁS RECIENTES*
Perfil: Perfil "Baseline" Perfil "Main" Perfil "High"
Nivel Nivel 3.0 Nivel 3.1** Nivel 4.1***
Audio Audio AAC, 1 a 2 canales Audio AAC, 1 a 2 canales Audio AAC-LC, 1 a 2 canales
Tasa de fotogramas máxima 30 fps 30 fps 30 fps*
Tasa de bits para vídeo Hasta 1,5 Mbps Hasta 5 Mbps Hasta 5 Mbps
Tasa de bits para audio Hasta 160 kbps Hasta 160 kbps Hasta 160 kbps
Tasa de muestreo de audio 48.000 o menos 48.000 o menos 48.000 o menos
Resolución de la pantalla 480x320 iPhone 4/4s: 960x640
iPad 1: 1024x768
iTouch: 1136x640
iPhone 5+: 1136x640
iPad 2: 1024x768
iPad 3/4: 2048x1536

* El iPhone 5S y la mayoría de los modelos nuevos de gama alta de Android ahora admiten el perfil High con un nivel 4.2 y a 60 fps.
** El iPod Touch 5 admite el nivel 4.1 o inferior.
*** Apple TV 3 admite el nivel 4.0 o inferior.

Escritorio y OTT

Por el momento, el único navegador que admite HLS de forma nativa es Safari (versión 4.0 o posterior), aunque se puede utilizar un respaldo para Flash para activar la reproducción en otros navegadores. Video.js soporta HLS en su componente para Flash, lo que permite utilizar HLS en casi todos los navegadores. Muchas aplicaciones y dispositivos OTT, como Quicktime, VLC, Apple TV, Roku, Google TV y XBMC, también admiten HLS. Si la velocidad de conexión lo permite, estos dispositivos soportan hasta el perfil High.

Funciones avanzadas

El vídeo HLS se encuentra en constante evolución y cada poco tiempo se añaden nuevas funciones. Actualmente, HLS permite una amplia variedad de funciones avanzadas, como:

  • Cifrado AES-128 para seguridad de los contenidos
  • Subtítulos CEA-608 en la secuencia de transporte
  • Vídeo en directo y a la carta
  • Las pistas de audio pueden contener una imagen fija, como carátulas de un vídeo o capturas de pantalla.
  • Metadatos de la secuencia, como metadatos cronometrados utilizando el formato ID3

6 consejos para la codificación HLS

Aquí tiene seis consejos para conseguir los mejores resultados de la codificación HLS. Estas recomendaciones se pueden aplicar por igual a la transcodificación en directo y a la carta.

  1. Utilice audio HE-AAC. El audio AAC estándar (llamado a menudo AAC-LC) suena muy bien con tasas de bits de 96 kbps y superiores, pero con tasas de bits inferiores se percibe la compresión. Esto es importante para la retransmisión de secuencias HTTP en directo, ya que la tienda App Store exige secuencias de 64 kbps para la mayoría de aplicaciones. El perfil HE-AAC ("High Efficiency AAC") está optimizado para tasas de bits bajas y suena mucho mejor que AAC-LC en el rango de 64 kbps, tan importante para HLS.
  2. Apple recomienda mantener en todo momento los mismos parámetros de audio para evitar contratiempos. Si el audio cambia de una secuencia a otra, se pueden producir saltos y clics audibles provocados por la conmutación entre las tasas de bits de audio. Si necesita proporcionar diferentes tasas de bits de audio para mejorar la calidad de determinadas secuencias, mantenga al menos una tasa de muestreo estándar.
  3. La tasa de fotogramas clave debe ser un intervalo par del tamaño del segmento. Por ejemplo, si el tamaño del segmento es de 10 segundos, la tasa de fotogramas clave debe ser de 2 segundos, 2,5 segundos, 3,33 segundos, 5 segundos o 10 segundos. Algunos codificadores, como Zencoder, colocan automáticamente los fotogramas clave en los lugares apropiados. Utilice la función force_keyframe_rate de Zencoder para garantizar una alineación correcta de fotogramas clave entre las sucesivas secuencias.
  1. Tenga en cuenta los datos de encabezado del formato. El formato MPEG-TS utiliza una gran cantidad de rellenos innecesarios. Con un muxer TS no optimizado, HLS puede generar archivos notablemente mayores que sus equivalentes para MP4, generalmente hasta un 10 o 20 % mayores. Tanto Zencoder como Apple utilizan muxers TS altamente optimizados que minimizan los datos TS superfluos.
    Tasa de bits solicitada Datos superfluos
    HLS optimizado por Zencoder 364 kbps 4,83 %
    HLS no optimizado 364 kbps 16,34 %
  2. Considere la posibilidad de limitar los picos de la tasa de bits para asegurar un buen funcionamiento de la secuencia. Recomendamos establecer una tasa de bits máxima (bitrate_cap) equivalente a un 150 % de la tasa de bits media dentro de un búfer de 3 a 5 segundos.
  3. El valor de streams debe contener toda la información pertinente. Esto es especialmente importante al ofrecer varios perfiles H.264 para incluir el valor del códec correcto. Estos ajustes impiden que los dispositivos más antiguos descarguen accidentalmente segmentos que no pueden descodificar. Por ejemplo, utilice los valores “avc1.42E01F, mp4a.40.2” para el perfil Baseline 3.0 y “avc1.42E01F, mp4a.40.2” para Main 3.1

Salidas y reproducción

El vídeo HLS consta de varios archivos de índice (manifiestos XML .M3U8) que llevan a otros archivos M3U8 o segmentos de vídeo individuales (segmentos .ts, generalmente con una duración de 2 a 10 segundos). Al utilizar Zencoder, la ubicación base_url especificada contendrá un manifiesto .M3U8 una vez completada la tarea de codificación.

Reproducciones de salida de Zencoder

Representación de la estructura de archivos HLS de Apple

También tiene la opción de organizar cada conjunto de segmentos en carpetas utilizando un base_urlindividual. Solo tiene que asegurarse de que el valor path de la parte playlist de la solicitud de la API refleje la ubicación de almacenamiento de cada secuencia individual. De lo contrario, el archivo de manifiesto apuntará a una ubicación vacía. Cuando el equipo cliente obtiene el archivo playlist.m3u8 (archivo de índice primario), decide qué secuencia alternativa reproducir teniendo en cuenta las limitaciones de la plataforma y la red.

EJEMPLO: PRUEBA DEL REPRODUCTOR HTML5 BÁSICO USANDO VIDEO.JS

      
	<!DOCTYPE html>
	<html>
	<head>
		<title>Reproductor de pruebas de transmisión de secuencias en directo vía HTTP </title>
		<link href="http://vjs.zencdn.net/c/video-js.css" rel="stylesheet" type="test/css">
		<script src="http://vjs.zencdn.net/c/video.js"></script>
        </head>
	<body>
		<video id="example_video_1" class="video-js vjs-default-skin" controls autoplay
		width="640" height="360" data-setup="{}">
			<source src="http://SuServidorAquí/playlist.m3u8" type="application/x-mpegURL" />
		</video>
	</body>
	</html>
			

Recomendaciones de codificación

Queremos que su vídeo sea impresionante, pero como que la compresión de vídeo es un tipo de arte subjetivo, solo podemos ofrecerle una serie de recomendaciones como punto de partida. Su aplicación puede estar orientada a dispositivos móviles, en cuyo caso seguramente querrá incluir secuencias adicionales en el extremo inferior del espectro. Por otra parte, su aplicación puede estar diseñada para dispositivos conectados a redes más potentes, en cuyo caso puede limitar el número total de secuencias que probablemente necesite ofrecer. Si el material de origen contiene una proporción elevada de panorámicas, movimientos o cortes, puede ser necesario incrementar las opciones de video_bitrate para conseguir los resultados deseados.

Como siempre en todo lo relacionado con el vídeo, deje que sean sus ojos los que juzguen la calidad general. Utilice un reproductor de prueba y el parámetro clip_length para generar pequeñas secuencias de salida de prueba y modifique los ajustes según sea necesario. Si no olvida los seis consejos mencionados anteriormente, su vídeo tendrá sin duda alguna un aspecto fantástico en cualquier dispositivo iOS.

Resolución Perfil: Tasa de bits Relación 16:9 Relación 4:3 Audio Comentarios
1280x960 High@4.0 4 Mbps 1280x720 1280x960 64kbps HE-AAC
1024x768 Main@3.1 2 Mbps 1024 x 576 1024x768 56kbps HE-AAC
960x640 Main@3.1 1,5 Mbps 960 x 540 854x640 56kbps HE-AAC
640x432 Main@3.1 1 Mbps 640 x 360 576x432 56kbps HE-AAC
480x320 Baseline@3.0 600 kbps 480x272 426x320 56kbps HE-AAC
400x288 Baseline@3.0 400 kbps 400x224 384x288 56kbps HE-AAC
400x288 Baseline@3.0 200 kbps 400x224 384x288 56kbps HE-AAC Tasa de bits decimada
(solo audio) (solo audio) (solo audio) (solo audio) (solo audio) 56kbps HE-AAC Incluir imagen de captura

Notas

  1. Estos datos son simplemente recomendaciones. Diferentes resoluciones y tasas de bits no solo son perfectamente válidas, sino que incluso pueden ser preferibles en determinadas circunstancias. Por ejemplo, los contenidos complejos pueden justificar el uso de mayores tasas de bits, mientras que para contenidos más sencillos pueden ser suficientes tasas de bits bajas.
  2. Estas seis resoluciones y tasas de bits proporcionan una cobertura razonablemente buena del ancho de banda variable. Por supuesto que se pueden crear más (de hecho, Apple recomienda ocho), así que añada o elimine las resoluciones y perfiles que necesite.
  3. La primera columna es la resolución generalizada. Dependiendo de la relación de aspecto del vídeo (4:3 o 16:9), el vídeo final tendrá una resolución diferente, indicada en las columnas 4 y 5.
  4. La tasa de fotogramas debe limitarse a 30 o menos. Nunca fuerce un cambio de la tasa de fotogramas. Para garantizar una reproducción fluida, simplemente reduzca las tasas de fotogramas que sean demasiado altas. Para obtener la secuencia más baja, disminuya las tasas de fotogramas a 15 o menos.
  1. Para compatibilidad con el iPhone 1, fuerce el uso de solo un fotograma de referencia H.264 para secuencias con el perfil "Baseline".
  2. Use un intervalo de fotogramas clave de 5 o de 10, con alineación de fotogramas clave forzada.
  3. Si necesita la máxima compatibilidad posible, limite las frecuencias de muestreo de audio a 44.100 o menos.
  4. Considere la posibilidad de limitar los picos de tasas de bits para ofrecer una reproducción fluida. Para conseguir un buen equilibrio entre calidad y reproducción, intente utilizar una tasa máxima de bits del 150 % con respecto a la tasa de bits media y un búfer de 3 a 5 segundos.