M3U8 cual es el secreto detrás de su funcionamiento?

  • Autor Autor An6oro
  • Fecha de inicio Fecha de inicio
An6oro

An6oro

Beta
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
(No tengo idea donde publicar esto)…
Trato y trato de entender su funcionamiento al mirar lo que contiene un archivo m3u8 por dentro y no logro pillar el truco, al buscar en youtube salen tipos enseñando a armar una lista m3u8 o m3u para IPTV, pero con mas link internos de .m3u8 o aveces .ts, osea no muestra la forma en que se crea de cero un m3u8 o m3u (por si acaso no hablo del m3u8 o m3u de archivos locales, hablo del online)

Básicamente 3 temas me intrigan:

1: Como se crean de 0 (armar videos con subtítulos, audio con distintos lenguajes o dub, imagen, etc).
2: Como pueden reproducir contenido si al mirar en su interior solo hay códigos y url que no son url?, o sea no abren en navegador.
3: O en su interior no tienen URL funcionales, porque todo depende más del link mismo del archivo?

por ejemplo este link tiene esta dirección: https://bitdash-a.akamaihd.net/content/sintel/hls/playlist.m3u8
y en su interior se ve así:
Insertar CODE, HTML o PHP:
#EXTM3U

#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="stereo",LANGUAGE="en",NAME="English",DEFAULT=YES,AUTOSELECT=YES,URI="audio/stereo/en/128kbit.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="stereo",LANGUAGE="dubbing",NAME="Dubbing",DEFAULT=NO,AUTOSELECT=YES,URI="audio/stereo/none/128kbit.m3u8"

#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="surround",LANGUAGE="en",NAME="English",DEFAULT=YES,AUTOSELECT=YES,URI="audio/surround/en/320kbit.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="surround",LANGUAGE="dubbing",NAME="Dubbing",DEFAULT=NO,AUTOSELECT=YES,URI="audio/stereo/none/128kbit.m3u8"

#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Deutsch",DEFAULT=NO,AUTOSELECT=YES,FORCED=NO,LANGUAGE="de",URI="subtitles_de.m3u8"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="English",DEFAULT=YES,AUTOSELECT=YES,FORCED=NO,LANGUAGE="en",URI="subtitles_en.m3u8"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Espanol",DEFAULT=NO,AUTOSELECT=YES,FORCED=NO,LANGUAGE="es",URI="subtitles_es.m3u8"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Français",DEFAULT=NO,AUTOSELECT=YES,FORCED=NO,LANGUAGE="fr",URI="subtitles_fr.m3u8"

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=258157,CODECS="avc1.4d400d,mp4a.40.2",AUDIO="stereo",RESOLUTION=422x180,SUBTITLES="subs"
video/250kbit.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=520929,CODECS="avc1.4d4015,mp4a.40.2",AUDIO="stereo",RESOLUTION=638x272,SUBTITLES="subs"
video/500kbit.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=831270,CODECS="avc1.4d4015,mp4a.40.2",AUDIO="stereo",RESOLUTION=638x272,SUBTITLES="subs"
video/800kbit.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1144430,CODECS="avc1.4d401f,mp4a.40.2",AUDIO="surround",RESOLUTION=958x408,SUBTITLES="subs"
video/1100kbit.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1558322,CODECS="avc1.4d401f,mp4a.40.2",AUDIO="surround",RESOLUTION=1277x554,SUBTITLES="subs"
video/1500kbit.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=4149264,CODECS="avc1.4d4028,mp4a.40.2",AUDIO="surround",RESOLUTION=1921x818,SUBTITLES="subs"
video/4000kbit.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=6214307,CODECS="avc1.4d4028,mp4a.40.2",AUDIO="surround",RESOLUTION=1921x818,SUBTITLES="subs"
video/6000kbit.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=10285391,CODECS="avc1.4d4033,mp4a.40.2",AUDIO="surround",RESOLUTION=4096x1744,SUBTITLES="subs"
video/10000kbit.m3u8
Como funciona todo esto?
 
por ejemplo este link tiene esta dirección: https://bitdash-a.akamaihd.net/content/sintel/hls/playlist.m3u8
y en su interior se ve así:


#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="stereo",LANGUAGE="en",NAME="English",DEFAULT=YES,AUTOSELECT=YES,URI="audio/stereo/en/128kbit.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="stereo",LANGUAGE="dubbing",NAME="Dubbing",DEFAULT=NO,AUTOSELECT=YES,URI="audio/stereo/none/128kbit.m3u8"

#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="surround",LANGUAGE="en",NAME="English",DEFAULT=YES,AUTOSELECT=YES,URI="audio/surround/en/320kbit.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="surround",LANGUAGE="dubbing",NAME="Dubbing",DEFAULT=NO,AUTOSELECT=YES,URI="audio/stereo/none/128kbit.m3u8"

#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Deutsch",DEFAULT=NO,AUTOSELECT=YES,FORCED=NO,LANGUAGE="de",URI="subtitles_de.m3u8"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="English",DEFAULT=YES,AUTOSELECT=YES,FORCED=NO,LANGUAGE="en",URI="subtitles_en.m3u8"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Espanol",DEFAULT=NO,AUTOSELECT=YES,FORCED=NO,LANGUAGE="es",URI="subtitles_es.m3u8"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Français",DEFAULT=NO,AUTOSELECT=YES,FORCED=NO,LANGUAGE="fr",URI="subtitles_fr.m3u8"

#EXT-X-STREAM-INF😛ROGRAM-ID=1,BANDWIDTH=258157,CODECS="avc1.4d400d,mp4a.40.2",AUDIO="stereo",RESOLUTION=422x180,SUBTITLES="subs"
https://bitdash-a.akamaihd.net/content/sintel/hls/video/250kbit.m3u8
#EXT-X-STREAM-INF😛ROGRAM-ID=1,BANDWIDTH=520929,CODECS="avc1.4d4015,mp4a.40.2",AUDIO="stereo",RESOLUTION=638x272,SUBTITLES="subs"
https://bitdash-a.akamaihd.net/content/sintel/hls/video/500kbit.m3u8
#EXT-X-STREAM-INF😛ROGRAM-ID=1,BANDWIDTH=831270,CODECS="avc1.4d4015,mp4a.40.2",AUDIO="stereo",RESOLUTION=638x272,SUBTITLES="subs"
https://bitdash-a.akamaihd.net/content/sintel/hls/video/800kbit.m3u8
#EXT-X-STREAM-INF😛ROGRAM-ID=1,BANDWIDTH=1144430,CODECS="avc1.4d401f,mp4a.40.2",AUDIO="surround",RESOLUTION=958x408,SUBTITLES="subs"
https://bitdash-a.akamaihd.net/content/sintel/hls/video/1100kbit.m3u8
#EXT-X-STREAM-INF😛ROGRAM-ID=1,BANDWIDTH=1558322,CODECS="avc1.4d401f,mp4a.40.2",AUDIO="surround",RESOLUTION=1277x554,SUBTITLES="subs"
https://bitdash-a.akamaihd.net/content/sintel/hls/video/1500kbit.m3u8
#EXT-X-STREAM-INF😛ROGRAM-ID=1,BANDWIDTH=4149264,CODECS="avc1.4d4028,mp4a.40.2",AUDIO="surround",RESOLUTION=1921x818,SUBTITLES="subs"
#EXT-X-STREAM-INF😛ROGRAM-ID=1,BANDWIDTH=6214307,CODECS="avc1.4d4028,mp4a.40.2",AUDIO="surround",RESOLUTION=1921x818,SUBTITLES="subs"
https://bitdash-a.akamaihd.net/content/sintel/hls/video/6000kbit.m3u8
#EXT-X-STREAM-INF😛ROGRAM-ID=1,BANDWIDTH=10285391,CODECS="avc1.4d4033,mp4a.40.2",AUDIO="surround",RESOLUTION=4096x1744,SUBTITLES="subs"
https://bitdash-a.akamaihd.net/content/sintel/hls/video/10000kbit.m3u8

Como funciona todo esto?

La primera url:
https://bitdash-a.akamaihd.net/content/sintel/hls/video/250kbit.m3u8
Da esto:

Insertar CODE, HTML o PHP:
#EXTM3U
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:2

#EXTINF:2,
https://bitdash-a.akamaihd.net/content/sintel/hls/video/250kbit/seq-0.ts
#EXTINF:2,
https://bitdash-a.akamaihd.net/content/sintel/hls/video/250kbit/seq-1.ts
#EXTINF:2,
https://bitdash-a.akamaihd.net/content/sintel/hls/video/250kbit/seq-2.ts
#EXTINF:2,
250kbit/seq-3.ts
#EXTINF:2,
250kbit/seq-4.ts
#EXTINF:2,
250kbit/seq-5.ts
#EXTINF:2,
250kbit/seq-6.ts
#EXTINF:2,
250kbit/seq-7.ts
#EXTINF:2,......... etc

La primera Url, da un archivo seq-0.ts.Que ya seria parte del video.

El .ts 30(baja resolucion porque era del 422x180 xd):
1630192281055.png
 
Última edición:
Gracias por responder, aunque quede con las mismas dudas de un principio
 
Como pueden reproducir contenido si al mirar en su interior solo hay códigos y url que no son url?, o sea no abren en navegador.
Si se puede con JWPlayer, videoJS, plyr, etc. con un simple iframe con las librerias indicadas de cada uno de esos.
 
tengo conocimiento intermedio de este tema. Necesitas reproductores compatible con .ts este formato lo que hace es que va partiendo la trasmisión en fragmento inidividuales esto es para mejorar la estabilidad del live...

cada una es dependiente de otra por eso cuando saca una URL solo muestra un fragmento del video capturado que solos dura segundos

se crea con un servidor con una capacidad decente, e instalando stream code. por cierto te puedo asesorar con un costo decente
 
(No tengo idea donde publicar esto)…
Trato y trato de entender su funcionamiento al mirar lo que contiene un archivo m3u8 por dentro y no logro pillar el truco, al buscar en youtube salen tipos enseñando a armar una lista m3u8 o m3u para IPTV, pero con mas link internos de .m3u8 o aveces .ts, osea no muestra la forma en que se crea de cero un m3u8 o m3u (por si acaso no hablo del m3u8 o m3u de archivos locales, hablo del online)

Básicamente 3 temas me intrigan:

1: Como se crean de 0 (armar videos con subtítulos, audio con distintos lenguajes o dub, imagen, etc).
2: Como pueden reproducir contenido si al mirar en su interior solo hay códigos y url que no son url?, o sea no abren en navegador.
3: O en su interior no tienen URL funcionales, porque todo depende más del link mismo del archivo?

por ejemplo este link tiene esta dirección: https://bitdash-a.akamaihd.net/content/sintel/hls/playlist.m3u8
y en su interior se ve así:
Insertar CODE, HTML o PHP:
#EXTM3U

#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="stereo",LANGUAGE="en",NAME="English",DEFAULT=YES,AUTOSELECT=YES,URI="audio/stereo/en/128kbit.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="stereo",LANGUAGE="dubbing",NAME="Dubbing",DEFAULT=NO,AUTOSELECT=YES,URI="audio/stereo/none/128kbit.m3u8"

#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="surround",LANGUAGE="en",NAME="English",DEFAULT=YES,AUTOSELECT=YES,URI="audio/surround/en/320kbit.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="surround",LANGUAGE="dubbing",NAME="Dubbing",DEFAULT=NO,AUTOSELECT=YES,URI="audio/stereo/none/128kbit.m3u8"

#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Deutsch",DEFAULT=NO,AUTOSELECT=YES,FORCED=NO,LANGUAGE="de",URI="subtitles_de.m3u8"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="English",DEFAULT=YES,AUTOSELECT=YES,FORCED=NO,LANGUAGE="en",URI="subtitles_en.m3u8"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Espanol",DEFAULT=NO,AUTOSELECT=YES,FORCED=NO,LANGUAGE="es",URI="subtitles_es.m3u8"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Français",DEFAULT=NO,AUTOSELECT=YES,FORCED=NO,LANGUAGE="fr",URI="subtitles_fr.m3u8"

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=258157,CODECS="avc1.4d400d,mp4a.40.2",AUDIO="stereo",RESOLUTION=422x180,SUBTITLES="subs"
video/250kbit.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=520929,CODECS="avc1.4d4015,mp4a.40.2",AUDIO="stereo",RESOLUTION=638x272,SUBTITLES="subs"
video/500kbit.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=831270,CODECS="avc1.4d4015,mp4a.40.2",AUDIO="stereo",RESOLUTION=638x272,SUBTITLES="subs"
video/800kbit.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1144430,CODECS="avc1.4d401f,mp4a.40.2",AUDIO="surround",RESOLUTION=958x408,SUBTITLES="subs"
video/1100kbit.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1558322,CODECS="avc1.4d401f,mp4a.40.2",AUDIO="surround",RESOLUTION=1277x554,SUBTITLES="subs"
video/1500kbit.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=4149264,CODECS="avc1.4d4028,mp4a.40.2",AUDIO="surround",RESOLUTION=1921x818,SUBTITLES="subs"
video/4000kbit.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=6214307,CODECS="avc1.4d4028,mp4a.40.2",AUDIO="surround",RESOLUTION=1921x818,SUBTITLES="subs"
video/6000kbit.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=10285391,CODECS="avc1.4d4033,mp4a.40.2",AUDIO="surround",RESOLUTION=4096x1744,SUBTITLES="subs"
video/10000kbit.m3u8
Como funciona todo esto?
Podes considerar que cada línea es una declaración y si te fijas bien en las líneas #EXT-X-STREAM-INF incluye 2 líneas importantes... "Bandwith" y "resolution", lo que significa que ese stream que copiaste va a adaptarse tanto por resolución como por la calidad optada por el usuario... la base principal es que un video en mp4 (supongamos que tengamos uno que pese 1gb) se divide para crearse el .m3u8... para hacer eso el vídeo se divide en partes requeridas según la especificación del programa que lo haga y se parte en partes bastantes iguales o quizás alguna mayor a otra, pero usualmente si tenes 100mb se parte en 33+33+34 llegando así a 100mb para no entrar en detalles de exactitud en bytes y eso... lo que haces es invocar con una serie de parámetros preestablecidos dicho video o transmisión para que se reproduzca como tal... así que el usuario en vez de estar "descargando" en su memoria del nav un video en mp4 solo descarga la pieza que verá + algunas extras como precarga, ese es el truco detrás del m3u8 y su popularidad
 
Atrás
Arriba