Protocolo de comunicación de transmisión de medios basado en HTTP
HTTP Live Streaming (también conocido como HLS ) es un protocolo de comunicaciones de transmisión de tasa de bits adaptativa basado en HTTP desarrollado por Apple Inc. y lanzado en 2009. El protocolo es compatible con reproductores multimedia, navegadores web, dispositivos móviles y servidores de transmisión multimedia. A partir de 2022 , una encuesta anual de la industria del video ha determinado constantemente que es el formato de transmisión más popular. [2][actualizar]
HLS se parece a MPEG-DASH en que funciona dividiendo el flujo general en una secuencia de pequeñas descargas de archivos basadas en HTTP, cada una de las cuales descarga un fragmento corto de un flujo de transporte general potencialmente ilimitado. Se envía al cliente una lista de flujos disponibles, codificados a diferentes velocidades de bits, mediante una lista de reproducción M3U extendida . [3]
Basado en transacciones HTTP estándar, HTTP Live Streaming puede atravesar cualquier firewall o servidor proxy que permita el paso del tráfico HTTP estándar, a diferencia de los protocolos basados en UDP como RTP . Esto también permite ofrecer contenido desde servidores HTTP convencionales y entregarlo a través de redes de entrega de contenido basadas en HTTP ampliamente disponibles . [4] [5] [6] El estándar también incluye un mecanismo de cifrado estándar [7] y distribución de clave segura mediante HTTPS , que juntos proporcionan un sistema DRM simple . Las versiones posteriores del protocolo también permiten el avance y rebobinado rápido en modo truco y la integración de subtítulos.
Apple ha documentado HTTP Live Streaming como un borrador de Internet (envío individual), la primera etapa del proceso de publicación como una solicitud de comentarios (RFC). A partir de diciembre de 2015, los autores de ese documento solicitaron al RFC Independent Stream Editor (ISE) que publicara el documento como una RFC informativa (no estándar) fuera del proceso de consenso de la IETF . [8]
En agosto de 2017, se publicó la RFC 8216 para describir la versión 7 del protocolo. [9]
Arquitectura
HTTP Live Streaming utiliza un servidor web convencional , que implementa soporte para HTTP Live Streaming (HLS), para distribuir contenido audiovisual y requiere software específico, como OBS , para adaptar el contenido a un formato adecuado ( códec ) para su transmisión en tiempo real a través de una red . La arquitectura del servicio comprende:
- Servidor
- Codificar y encapsular el flujo de vídeo de entrada en un formato adecuado para su distribución. Luego, se prepara para su distribución segmentándolo en diferentes archivos. En el proceso de entrada, el vídeo se codifica y segmenta para generar fragmentos de vídeo y un archivo de índice.
- Codificador: codifica archivos de vídeo en formato H.264 y audio en AAC , MP3 , AC-3 o EC-3 . [10] Este es encapsulado por MPEG-2 Transport Stream o MPEG-4_Part_14 para transportarlo.
- Segmentador: divide el stream en fragmentos de igual longitud. También crea un archivo de índice que contiene referencias de los archivos fragmentados, guardados como .m3u8 .
- Distribuidor
- Formado por un servidor web estándar, acepta solicitudes de los clientes y entrega todos los recursos (archivo de lista de reproducción .m3u8 y archivos de segmento .ts) necesarios para la transmisión .
- Cliente
- Solicitar y descargar todos los archivos y recursos, reuniéndolos para que puedan ser presentados al usuario como un video de flujo continuo. El software cliente descarga primero el archivo de índice a través de una URL y luego los diversos archivos multimedia disponibles. El software de reproducción ensambla la secuencia para permitir la visualización continua al usuario.
Características
HTTP Live Streaming ofrece mecanismos para que los reproductores se adapten a condiciones de red poco fiables sin provocar interrupciones de reproducción visibles para el usuario. Por ejemplo, en una red inalámbrica poco fiable, HLS permite al reproductor utilizar un vídeo de menor calidad, lo que reduce el uso del ancho de banda. Los vídeos HLS pueden estar altamente disponibles proporcionando varios servidores para el mismo vídeo, lo que permite al reproductor cambiar sin problemas si uno de los servidores falla.
Adaptabilidad
Para permitir que un reproductor se adapte al ancho de banda de la red, el vídeo original se codifica en varios niveles de calidad distintos . El servidor ofrece un índice, llamado lista de reproducción maestra , de estas codificaciones , llamadas transmisiones variantes . El reproductor puede elegir entre las transmisiones variantes durante la reproducción y cambiar de una a otra sin problemas a medida que cambian las condiciones de la red.
Usando MP4 fragmentado
En la WWDC 2016, Apple anunció [11] la inclusión de direccionamiento por rango de bytes para archivos MP4 fragmentados , o fMP4, lo que permite reproducir contenido a través de HLS sin necesidad de multiplexarlo en MPEG-2 Transport Stream . La industria consideró esto como un paso hacia la compatibilidad entre HLS y MPEG-DASH . [12] [13]
HLS de baja latencia
Existen dos extensiones HLS no relacionadas con un nombre de baja latencia y un acrónimo correspondiente:
- Apple Low Latency HLS (ALHLS), anunciado por Apple en la WWDC2019 [14]
- Lenguaje de línea comunitaria (LHLS), que fue anterior a la publicación de Apple y supuestamente es más simple [15]
El resto de esta sección describe el ALHLS de Apple. Reduce el retraso de cristal a cristal cuando se transmite a través de HLS al reducir el tiempo para iniciar las reproducciones de transmisión en vivo y mantener ese tiempo durante un evento de transmisión en vivo. Funciona agregando archivos de segmentos de medios parciales a la mezcla, de manera muy similar al fMP4 de MPEG-CMAF. A diferencia de CMAF, ALHLS también admite archivos de transporte TS MPEG-2 parciales. Un segmento de medios parcial es un segmento estándar (por ejemplo, 6 segundos) dividido en segmentos iguales de menos de un segundo (por ejemplo, 200 milisegundos). El primer segmento estándar se reemplaza por la serie de segmentos parciales. Los segmentos subsiguientes son del tamaño estándar. [16]
Se requiere HTTP/2 para enviar los segmentos junto con la lista de reproducción, lo que reduce la sobrecarga de establecer conexiones HTTP/TCP repetidas.
Otras características incluyen:
- Actualizaciones de listas de reproducción Delta: solo se envía lo que cambió entre listas de reproducción, que generalmente caben en una sola MTU, lo que hace más eficiente la carga de las listas de reproducción que, con ventanas DVR grandes, pueden ser bastante grandes.
- Bloqueo de recarga de listas de reproducción: al solicitar listas de reproducción de medios en vivo, espere hasta que el primer segmento también esté listo y devuelva ambos al mismo tiempo (ahorrando solicitudes HTTP/TCP adicionales)
- Informes de reproducción: agregue metadatos a otras reproducciones de medios para que el cambio entre ABR sea más rápido
- Nuevas etiquetas agregadas: EXT-X-SERVER-CONTROL / EXT-X-PART / EXT-X-SKIP / EXT-X-RENDITION-REPORT
- Se agregaron devoluciones de llamadas URL QUERY_STRING ?_HLS
Apple también ha añadido nuevas herramientas: tsrecompressor produce y codifica un flujo continuo de audio y vídeo de baja latencia. La herramienta mediastreamsegmenter está ahora disponible en una versión de baja latencia. Es un segmentador HLS que recibe un flujo UDP/MPEG-TS de tsrecompressor y genera una lista de reproducción multimedia, incluidas las nuevas etiquetas mencionadas anteriormente.
La compatibilidad con HLS de baja latencia está disponible en la versión beta de tvOS 13 y en iOS y iPadOS 14. [17]
El 30 de abril de 2020, Apple agregó las especificaciones de baja latencia a la segunda edición de la especificación HLS principal. [18]
Inserción dinámica de anuncios
La inserción dinámica de anuncios se admite en HLS mediante información de empalme basada en la especificación SCTE-35 . El mensaje de empalme SCTE-35 se inserta en el archivo de lista de reproducción de medios mediante la etiqueta EXT-X-DATERANGE. Cada splice_info_section() de SCTE-35 está representada por una etiqueta EXT-X-DATERANGE con un atributo SCTE35-CMD. Un par de entrada/salida de empalme SCTE-35 señalado por los comandos splice_insert() está representado por una o más etiquetas EXT-X-DATERANGE que llevan el mismo atributo ID. El comando de salida de empalme SCTE-35 debe tener el atributo SCTE35-OUT y el comando de entrada de empalme debe tener el atributo SCTE35-IN.
Entre las dos etiquetas EXT-X-DATERANGE que contienen los atributos SCTE35-OUT y SCTE35-IN respectivamente, puede haber una secuencia de URI de segmentos de medios. Estos segmentos de medios normalmente representan programas de anuncios que pueden reemplazarse por el anuncio local o personalizado. El reemplazo del anuncio no requiere el reemplazo de los archivos de medios, solo se deben cambiar los URI en la lista de reproducción para que apunten a diferentes programas de anuncios. El reemplazo del anuncio se puede realizar en el servidor de origen o en el dispositivo de reproducción de medios del cliente.
Implementaciones de servidores
Las implementaciones de servidor notables que admiten transmisión en vivo HTTP incluyen:
- Adobe Media Server admite HLS para dispositivos iOS (HLS) y transmisión en vivo HTTP protegida (PHLS).
- Akamai admite HLS para transmisiones en vivo y bajo demanda.
- AT&T admite HLS en todos los formatos, en vivo o bajo demanda.
- Las cámaras IP de Axis Communication admiten HLS a través de la aplicación CamStreamer ACAP
- Instart admite HLS para transmisiones a pedido.
- Amazon CloudFront admite HLS para transmisiones bajo demanda.
- Bitmovin admite HLS para transmisión en vivo y bajo demanda.
- CDNetworks admite HLS para transmisiones en vivo y bajo demanda.
- Cisco Systems : admite la entrega completa de extremo a extremo para servicios Live/TSTV/VOD/HLS y Cloud DVR.
- Cloudflare admite HLS para transmisiones en vivo y bajo demanda.
- EdgeCast Networks admite la transmisión entre dispositivos mediante HLS.
- Fastly admite HLS para transmisiones en vivo y bajo demanda. [19]
- Helix Universal Server de RealNetworks es compatible con iPhone OS 3.0 y versiones posteriores para transmisión HTTP en vivo o bajo demanda de contenido H.264 y AAC a iPhone, iPad y iPod.
- Los servicios multimedia IIS de Microsoft admiten Smooth Streaming y HTTP Live Streaming en vivo y bajo demanda .
- El nivel 3 admite transmisiones HLS en vivo y bajo demanda.
- Limelight Networks admite HLS para algunas cuentas. [20]
- Nginx con el módulo nginx-rtmp-module admite HLS en modo en vivo. La versión comercial Nginx Plus, que incluye el módulo ngx_http_hls_module , también admite VOD HLS/HDS. [21]
- Nimble Streamer admite HLS en modo en vivo y VOD. También es compatible con la especificación HLS de baja latencia de Apple.
- Node.js con el paquete hls-server admite la codificación hls en modo en vivo y la conversión de archivos locales. [22]
- OvenMediaEngine es un proyecto de código abierto que admite HLS de baja latencia (LL-HLS) y HLS para transmisión en vivo.
- PeerTube es compatible con HLS
- Storm Streaming Server admite HLS como modo de respaldo para su reproductor Media Source Extensions [23]
- Tata Communications CDN admite HLS para transmisiones en vivo y bajo demanda.
- TVersity admite HLS junto con la transcodificación sobre la marcha para la reproducción de cualquier contenido de video en dispositivos iOS.
- Unreal Media Server admite HLS de baja latencia a partir de la versión 9.5. [24]
- Ustream admite la transmisión en vivo mediante HLS. La transmisión ingresada se vuelve a transcodificar si el códec de audio y video original no cumple con los requisitos de HLS.
- VLC Media Player admite HLS para ofrecer transmisiones en vivo y bajo demanda a partir de la versión 2.0.
- Wowza Streaming Engine de Wowza Media Systems admite HLS y HLS encriptado para transmisión en vivo (con DVR), transmisión a pedido y la especificación Apple Low Latency HLS.
Uso
- Google agregó compatibilidad con transmisión en vivo HTTP en Android 3.0 (Honeycomb). [25]
- HP agregó soporte para transmisión en vivo HTTP en webOS 3.0.5. [26]
- Microsoft agregó soporte para transmisión en vivo HTTP en el motor de renderizado EdgeHTML en Windows 10 en 2015. [27]
- Microsoft agregó soporte para transmisión en vivo HTTP en IIS Media Services 4.0. [28]
- Yospace agregó compatibilidad con transmisión en vivo HTTP en Yospace HLS Player y SDK para la versión flash 1.0. [ cita requerida ]
- Sling Media agregó soporte de transmisión en vivo HTTP a sus Slingboxes y sus aplicaciones SlingPlayer. [29]
- En 2014/15, la BBC introdujo transmisiones HLS-AAC para su radio por Internet en vivo y sus servicios de audio a pedido, y respalda esas transmisiones con sus clientes iPlayer Radio . [30]
- Twitch utiliza HTTP Live Streaming (HLS) para transmitir y escalar la transmisión en vivo a muchos espectadores simultáneos, y también admite múltiples variantes (por ejemplo, 1080p, 720p, etc.). [31]
Jugadores y servidores compatibles
La transmisión en vivo HTTP es compatible de forma nativa con los siguientes sistemas operativos:
Windows 10 solía tener soporte nativo para HTTP Live Streaming en EdgeHTML , un motor de navegador propietario que se usaba en Microsoft Edge (ahora conocido como Edge Legacy) antes de la transición al motor de navegador Blink basado en Chromium . Edge Legacy se incluyó en Windows 10 hasta la versión 2004. Fue reemplazado por Edge Chromium en la versión 20H2. Junto con Windows 11 , Microsoft lanzó un Media Player actualizado que admite HLS de forma nativa.
Clientela
Servidores
Codificadores en vivo
Codificadores VOD
Véase también
Referencias
- ^ Pantos, R.; May, W. (2017). "Listas de reproducción". Transmisión en directo HTTP. IETF . pág. 9. sec. 4. doi : 10.17487/RFC8216 . ISSN 2070-1721. RFC 8216 . Consultado el 15 de enero de 2020 .
- ^ Lederer, Stefan. "Informe para desarrolladores de vídeo de 2022" (PDF) . Bitmovin . Consultado el 25 de octubre de 2023 .
- ^ Jordan, Larry (10 de junio de 2013). "Los conceptos básicos de la transmisión en directo a través de HTTP". El blog de Larry . Larry Jordan & Associates . Consultado el 18 de junio de 2013 .
- ^ "MPEG-DASH frente a Apple HLS frente a Smooth Streaming frente a Adobe HDS". Bitmovin . 29 de marzo de 2015.
- ^ Chen, Songqing; Shen, Bo; Tan, Wai-tian; Wee, Susie; Zhang, Xiaodong (9 de julio de 2006). "Un caso para la transmisión por Internet a través de servidores web". Conferencia internacional IEEE sobre multimedia y exposiciones de 2006. págs. 2145–2148. doi :10.1109/ICME.2006.262660. eISSN 1945-788X. ISBN 9781424403677. ISSN 1945-7871. S2CID 9202042.
- ^ Songqing Chen; Bo Shen; Wee, S.; Xiaodong Zhang (23 de julio de 2007). "SProxy: una infraestructura de almacenamiento en caché para soportar la transmisión por Internet". IEEE Transactions on Multimedia . 9 (5): 1062–1072. CiteSeerX 10.1.1.74.4838 . doi :10.1109/TMM.2007.898943. ISSN 1520-9210. S2CID 870854.
- ^ Pantos, R. (30 de septiembre de 2011). "HTTP Live Streaming". Grupo de trabajo de ingeniería de Internet . Consultado el 18 de junio de 2013 .
- ^ "Historial de draft-pantos-http-live-streaming" . Consultado el 17 de abril de 2017 .
La transmisión cambió de Ninguna a ISE
- ^ Pantos, Roger; May, William (agosto de 2017). Transmisión en directo HTTP. doi : 10.17487/RFC8216 . RFC 8216. Consultado el 5 de septiembre de 2017 .
- ^ Roger, Pantos; William, May. "Transmisión en directo HTTP". tools.ietf.org . Consultado el 23 de enero de 2017 .
- ^ Novedades en transmisión en vivo HTTP. Desarrollador de Apple .
- ^ Siglin, Tim (16 de junio de 2016). "HLS ahora admite MP4 fragmentado, lo que lo hace compatible con DASH". StreamingMedia.com .
- ^ Grandl, Reinhard (15 de junio de 2016). "WWDC16: HLS admite MP4 fragmentado y se vuelve compatible con MPEG-DASH". Bitmovin.com .
- ^ HLS de baja latencia. Desarrollador de Apple .
- ^ "La comunidad nos dio transmisión en vivo con baja latencia. Luego Apple nos la quitó". 2019-06-14 . Consultado el 2019-06-17 .
- ^ "Documentación para desarrolladores de Apple". developer.apple.com . Consultado el 10 de agosto de 2022 .
- ^ Speelmans, Pieter-Jan (9 de diciembre de 2020). "Baja latencia en todas partes: cómo implementar LL-HLS en distintas plataformas". Theo . Consultado el 11 de marzo de 2021 .
- ^ Pantos, Roger (30 de abril de 2020). «Transmisión en directo HTTP, segunda edición». IETF . Consultado el 30 de abril de 2020 .
- ^ "Video CDN | Transmisión de video | Entrega de transmisión | Fastly". www.fastly.com . Consultado el 1 de octubre de 2020 .
- ^ "Guía de codificación". Compatibilidad con video de Limelight Orchestrate . Limelight Networks. Archivado desde el original el 2013-08-01 . Consultado el 14 de noviembre de 2013 .
- ^ "Módulo ngx_http_hls_module". nginx.org .
- ^ "hls-server". npm. 12 de febrero de 2018.
- ^ "Storm Streaming". Storm Streaming . Consultado el 30 de julio de 2021. Dispositivos
de salida: HLS, MPEG-DASH, WebSocket, RTMP
- ^ "Unreal Media Server". umediaserver.net . Consultado el 30 de julio de 2021 .
Unreal Media Server admite la ingesta de transmisiones en vivo desde una amplia gama de codificadores de hardware y software en vivo que envían transmisiones a través de WebRTC, RTMP, RTSP, MPEG2-TS, HLS,
- ^ "Características destacadas de la plataforma Android 3.0". Desarrolladores de Android . Archivado desde el original el 28 de enero de 2011.
- ^ "Actualizaciones de webOS 3.0.5". Archivado desde el original el 22 de enero de 2012.
- ^ "Transmisión de vídeo adaptativa simplificada: anuncio de compatibilidad con HLS y DASH en Windows 10". Blog del equipo de Internet Explorer . 29 de enero de 2015.
- ^ ab Siglin, Tim (1 de noviembre de 2010). "First Look: Microsoft IIS Media Services 4". StreamingMedia.com . Consultado el 30 de julio de 2011 .
- ^ Chan, David (26 de noviembre de 2010). «Reseña de la aplicación para iPad: SlingPlayer». Blogcritics . Archivado desde el original el 15 de abril de 2014. Consultado el 14 de abril de 2014 .
- ^ Scott, Andrew (27 de febrero de 2015). "Audio Factory: una descripción general". Blog de Internet . BBC.
Los únicos recursos a pedido serán AAC HLS. ... Todavía estamos hablando con los fabricantes y muchos confían en que podrán brindar a sus usuarios acceso a todos nuestros 57 flujos HLS AAC a 320 kb/s en unas pocas semanas o meses.
- ^ Shen, Yueshi (2017). "Transcodificación y transmuxación de video en vivo: FFmpeg vs TwitchTranscoder, parte 1".
- ^ "Formatos multimedia admitidos". Desarrolladores de Android .
- ^ "Transmisión en vivo HTTP (HLS) | ¿Puedo usar... Tablas de soporte para HTML5, CSS3, etc." caniuse.com .
- ^ "Firefox para Android 50.0, ver todas las nuevas funciones, actualizaciones y correcciones". Mozilla .
- ^ Giles, Ralph; Smole, Martin (28 de noviembre de 2017). "Reproducción DASH de vídeo AV1 en Firefox". Mozilla Hacks: el blog para desarrolladores web .
- ^ "Firefox para Android Beta 59.0beta, ver todas las nuevas funciones, actualizaciones y correcciones". Mozilla .
- ^ Slivka, Eric (15 de noviembre de 2010). "Se encontraron indicios del servicio 'iTunes Live Stream' en iTunes 10.1". MacRumors .
- ^ "#2943 (Soporte para transmisión en vivo HTTP como cliente)". Rastreador de errores de VLC . 9 de julio de 2009.
- ^ "Reproducción de vídeo en streaming HLS con el reproductor VLC - Foros de VideoLAN". forum.videolan.org .
- ^ "Windows 8 - Transmisión en vivo HTTP". www.3ivx.com .
- ^ "3ivx - Programa de socios desarrolladores de Xbox Live - Proveedor de componentes". www.3ivx.com .
- ^ NV, THEO Technologies. "Reproductor de vídeo HTML5 – THEOplayer". www.theoplayer.com .
- ^ Reproductor, Radiant Media. "Historial de versiones - Radiant Media Player". www.radiantmediaplayer.com .
- ^ "dailymotion – Medium". Medio .
- ^ "Página de demostración de hls.js". Archivado desde el original el 20 de noviembre de 2015.
- ^ "Orange-OpenSource/hasplayer.js". GitHub .
- ^ "Chispa". Chispa .
- ^ "google/shaka-player". GitHub .
- ^ "Demostración de Shaka Player". shaka-player-demo.appspot.com .
- ^ "Fluid Player - Reproductor de vídeo HTML5". www.fluidplayer.com .
- ^ "Documentación de Fluid Player". docs.fluidplayer.com .
- ^ "reproductor-fluido/reproductor-fluido". GitHub .
- ^ "QMPlay2 - Qt Media Player 2". 22 de octubre de 2023 – vía GitHub.
- ^ "marakew/AvProxy". GitHub .
- ^ Ozer, Jan (2015). "Reseña: Bitcodin, un servicio de codificación de video en la nube de Bitmovin". www.StreamingMediaGlobal.com .
- ^ "Entrega de videos HLS - Brightcove Learning". support.brightcove.com .
- ^ "MediaGoom. Transmisión web esencial".