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.segmentses una lista de objetosSegmentque representan los segmentos de medios en la lista de reproducción.playlist.durationes la duración total de la lista de reproducción en segundos.playlist.media_sequencees 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.


