Python M3U8: Trabajo con Listas de Reproducción M3U8 en Python

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:

Python
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.

Python
# 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 objetos Segment 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.
Python
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.

Python
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.

Python
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.