Escribí un artículo sobre lo mismo. Espero eso ayude.
https://www.linkedin.com/pulse/b …
Archivos HLS
HLS (HTTP Live Streaming) es un protocolo de comunicaciones de transmisión de medios basado en HTTP implementado por Apple Inc. Este es el protocolo que utilizan la mayoría de las aplicaciones de transmisión en línea. Al comienzo de la sesión de transmisión, HLS descarga una lista de reproducción M3U que contiene los metadatos para las diferentes subtransmisiones disponibles.
# EXTM3U
# VERSIÓN EXT-X: 3
# EXT-X-SEGMENTOS INDEPENDIENTES
# EXT-X-STREAM-INF: BANDWIDTH = 268400, AVERAGE-BANDWIDTH = 268400, CODECS = “avc1.66.30, mp4a.40.2”, FRAME-RATE = 25.000, CLOSED-CAPTIONS = NONE
http://ipl20171-i.akamaihd.net/hls/… . / master_Layer3.m3u8
# EXT-X-STREAM-INF: BANDWIDTH = 268400, AVERAGE-BANDWIDTH = 268400, CODECS = “avc1.66.30, mp4a.40.2”, FRAME-RATE = 25.000, CLOSED-CAPTIONS = NONE
http://ipl20171-i.akamaihd.net/… . / master_Layer3.m3u8
# EXT-X-STREAM-INF: BANDWIDTH = 510400, AVERAGE-BANDWIDTH = 510400, CODECS = “avc1.66.30, mp4a.40.2”, FRAME-RATE = 25.000, CLOSED-CAPTIONS = NONE
http://ipl20171-i.akamaihd.net/… / master_Layer4.m3u8
# EXT-X-STREAM-INF: BANDWIDTH = 510400, AVERAGE-BANDWIDTH = 510400, CODECS = “avc1.66.30, mp4a.40.2”, FRAME-RATE = 25.000, CLOSED-CAPTIONS = NONE
http://ipl20171-i.akamaihd.net/… . / master_Layer4.m3u8
# EXT-X-STREAM-INF: BANDWIDTH = 950400, AVERAGE-BANDWIDTH = 950400, CODECS = “avc1.66.30, mp4a.40.2”, FRAME-RATE = 25.000, CLOSED-CAPTIONS = NONE
http://ipl20171-i.akamaihd.net/… / master_Layer5.m3u8
# EXT-X-STREAM-INF: BANDWIDTH = 950400, AVERAGE-BANDWIDTH = 950400, CODECS = “avc1.66.30, mp4a.40.2”, FRAME-RATE = 25.000, CLOSED-CAPTIONS = NONE
http://ipl20171-i.akamaihd.net/… . / master_Layer5.m3u8
# EXT-X-STREAM-INF: BANDWIDTH = 1500400, AVERAGE-BANDWIDTH = 1500400, CODECS = “avc1.66.30, mp4a.40.2”, FRAME-RATE = 25.000, CLOSED-CAPTIONS = NONE
http://ipl20171-i.akamaihd.net/… / master_Layer6.m3u8
# EXT-X-STREAM-INF: BANDWIDTH = 1500400, AVERAGE-BANDWIDTH = 1500400, CODECS = “avc1.66.30, mp4a.40.2”, FRAME-RATE = 25.000, CLOSED-CAPTIONS = NONE
http://ipl20171-i.akamaihd.net/… . / master_Layer6.m3u8
# EXT-X-STREAM-INF: BANDWIDTH = 2270400, AVERAGE-BANDWIDTH = 2270400, CODECS = “avc1.42c01f, mp4a.40.2”, FRAME-RATE = 25.000, CLOSED-CAPTIONS = NONE
http://ipl20171-i.akamaihd.net/… / master_Layer7.m3u8
# EXT-X-STREAM-INF: BANDWIDTH = 2270400, AVERAGE-BANDWIDTH = 2270400, CODECS = “avc1.42c01f, mp4a.40.2”, FRAME-RATE = 25.000, CLOSED-CAPTIONS = NONE
http://ipl20171-i.akamaihd.net/… . / master_Layer7.m3u8
# EXT-X-STREAM-INF: BANDWIDTH = 72600, AVERAGE-BANDWIDTH = 72600, CODECS = “avc1.42c015, mp4a.40.2”, FRAME-RATE = 25,000, CLOSED-CAPTIONS = NONE
http://ipl20171-i.akamaihd.net/… / master_Layer1.m3u8
# EXT-X-STREAM-INF: BANDWIDTH = 72600, AVERAGE-BANDWIDTH = 72600, CODECS = “avc1.42c015, mp4a.40.2”, FRAME-RATE = 25,000, CLOSED-CAPTIONS = NONE
http://ipl20171-i.akamaihd.net/… . / master_Layer1.m3u8
# EXT-X-STREAM-INF: BANDWIDTH = 134200, AVERAGE-BANDWIDTH = 134200, CODECS = “avc1.42c015, mp4a.40.5”, FRAME-RATE = 25.000, CLOSED-CAPTIONS = NONE
http://ipl20171-i.akamaihd.net/… / master_Layer2.m3u8
# EXT-X-STREAM-INF: BANDWIDTH = 134200, AVERAGE-BANDWIDTH = 134200, CODECS = “avc1.42c015, mp4a.40.5”, FRAME-RATE = 25.000, CLOSED-CAPTIONS = NONE
http://ipl20171-i.akamaihd.net/… . / master_Layer2.m3u8
Como puede ver en la lista de reproducción m3u8 de muestra anterior, hay varios perfiles según el ancho de banda en el que se transmiten. Player elige el perfil más adecuado según el ancho de banda de la red en la que se realiza la transmisión.
Archivo M3U y trozos .ts
Como se ve en la lista de reproducción m3u8 anterior, hay muchos archivos m3u8 diferentes disponibles. Estos archivos m3u8 contienen archivos .ts que son fragmentos del video transcodificado. A continuación se muestra un ejemplo
# EXTM3U
# DURACIÓN EXT-X-OBJETIVO: 10
# SECUENCIA DE MEDIOS EXT-X: 0
#EXTINF: 10,
3340 / 33400.ts
#EXTINF: 10,
3340 / 33401.ts
#EXTINF: 10,
3340 / 33402.ts
#EXTINF: 10,
3340 / 33403.ts
#EXTINF: 10,
3340 / 33404.ts
#EXTINF: 10,
.
.
.
# EXT-X-ENDLIST
El “# EXT-X-TARGETDURATION: 10” sugiere que cada fragmento tiene una duración de 10 segundos.
Cuando comienza la reproducción, el reproductor primero busca los archivos hls, luego el archivo m3u8 en función de las condiciones de la red y luego los archivos / trozos .ts individuales del archivo m3u8 seleccionado. Estos fragmentos más pequeños son fáciles de descargar para el reproductor y requieren menos ancho de banda en lugar de intentar transmitir un archivo completo completo.
Red de entrega de contenido (CDN)
Si está apuntando a una audiencia mundial o si sus servidores están en algún lugar lejos de su ubicación de destino, los CDN aparecerán. CDN no es más que un servidor proxy implementado en un centro de datos. Dado que es una red distribuida globalmente, acerca su contenido al usuario para que la pérdida de datos y paquetes sea menos comparable a la transmisión desde el servidor de origen. Akamai, Cloudflare, Cloudfront, Limelight, etc. son tales CDN.
Para mejorar la calidad de transmisión en la red de datos móviles, los operadores también proporcionan sus propios CDN. Esto, en combinación con el CDN del servicio OTT, hace que la experiencia de transmisión sea mucho mejor en la red de datos móviles respectiva, ya que acerca el servidor de contenido al usuario final.
Entonces, la próxima vez que vea un video en Youtube, Netflix, Hulu o cualquier otro proveedor de OTT, sabrá lo que está sucediendo dentro del reproductor en su red. Cada minuto de cambio en la calidad del video es un cambio entre el perfil de video que se llama Adaptive Streaming . Cada falla de reproducción es un fragmento faltante o un archivo m3u8 dañado.