Python M3U8: Trabajo con Listas de Reproducción M3U8 en Python
Las listas de reproducción M3U8 son un formato de archivo utilizado para transmitir contenido multimedia en vivo o bajo demanda a través de HTTP Live Streaming (HLS). Estas listas de reproducción contienen una lista de segmentos de medios que se pueden descargar y reproducir secuencialmente para crear un flujo de video o audio.
Python proporciona un módulo llamado m3u8
para trabajar con listas de reproducción M3U8. Este módulo permite cargar listas de reproducción, extraer información sobre los segmentos de medios y descargar los segmentos de medios.
Instalación
Para instalar el módulo m3u8
, ejecute el siguiente comando en su terminal:
pip install m3u8
Importación del módulo
Para importar el módulo m3u8
, agregue la siguiente línea al comienzo de su script:
import m3u8
Cargando una lista de reproducción
Para cargar una lista de reproducción, use la función load()
o loads()
. La función load()
carga una lista de reproducción desde una URL, mientras que la función loads()
carga una lista de reproducción desde una cadena.
# Cargar una lista de reproducción desde una URL
playlist = m3u8.load('https://example.com/playlist.m3u8')
# Cargar una lista de reproducción desde una cadena
playlist = m3u8.loads('EXTM3U
EXT-X-VERSION:3
EXT-X-TARGETDURATION:10
EXT-X-MEDIA-SEQUENCE:1
EXTINF:10,
https://example.com/media-1.ts
EXTINF:10,
https://example.com/media-2.ts
EXTINF:10,
https://example.com/media-3.ts
EXT-X-ENDLIST')
Información sobre los segmentos de medios
Una vez que haya cargado una lista de reproducción, puede acceder a información sobre los segmentos de medios usando los atributos del objeto playlist
.
playlist.segments
es una lista de objetosSegment
que representan los segmentos de medios en la lista de reproducción.playlist.duration
es la duración total de la lista de reproducción en segundos.playlist.media_sequence
es el número de secuencia del primer segmento de medios.
for segment in playlist.segments:
print(segment.uri, segment.duration)
Descarga de segmentos de medios
Para descargar un segmento de medios, use la función get()
. Esta función devuelve un objeto io.BytesIO
que contiene el contenido del segmento de medios.
segment = playlist.segments[0]
with open('media-1.ts', 'wb') as f:
f.write(segment.get())
Ejemplo completo
El siguiente ejemplo muestra cómo cargar una lista de reproducción M3U8, extraer información sobre los segmentos de medios y descargar un segmento de medios.
import m3u8
# Cargar la lista de reproducción
playlist = m3u8.load('https://example.com/playlist.m3u8')
# Imprimir información sobre los segmentos de medios
for segment in playlist.segments:
print(f'Segmento {segment.media_sequence}: {segment.uri}, {segment.duration} segundos')
# Descargar el primer segmento de medios
segment = playlist.segments[0]
with open('media-1.ts', 'wb') as f:
f.write(segment.get())
Este ejemplo imprimirá lo siguiente:
Segmento 1: https://example.com/media-1.ts, 10 segundos
Segmento 2: https://example.com/media-2.ts, 10 segundos
Segmento 3: https://example.com/media-3.ts, 10 segundos
Conclusión
El módulo m3u8
proporciona una API sencilla para trabajar con listas de reproducción M3U8. Este módulo puede ser utilizado para descargar, reproducir y analizar contenido multimedia en vivo o bajo demanda a través de HLS.