Sistema automatizado para descargar episodios de Mediaset Infinity con desencriptación Widevine L3. El proyecto consta de tres componentes principales que trabajan en conjunto para automatizar el proceso de descarga.
- Función: Scraping de la página de episodios
- Tecnología: Puppeteer en modo headless
- Salida:
monitor_results.jsoncon lista de episodios - Características:
- Auto-scroll para cargar todos los episodios
- Parsing de títulos y números de episodio
- Detección automática de temporada desde CONFIG
- Función: Captura de URL del manifiesto MPD
- Tecnología: Puppeteer con técnicas anti-detección
- Salida: JSON con manifest URL, cookies, user agent, referer
- Características:
- Stealth mode (oculta webdriver, mock de plugins)
- Interceptación de peticiones de red
- Parsing de respuestas SMIL
- Filtrado de manifiestos de anuncios
- Función: Orquestador principal del flujo completo
- Tecnología: Node.js + child_process
- Características:
- Ejecuta monitor para obtener lista de episodios
- Verifica si episodios ya existen en Plex
- Gestión de claves (archivo
keys.txto captura manual) - Lanza extractor para obtener manifest
- Descarga streams con
N_m3u8DL-RE.exe - Desencripta con FFmpeg
- Fusiona audio/vídeo
- Mueve resultado a Plex
- Limpia archivos temporales automáticamente
Mediaset Infinity usa DRM Widevine L3 para proteger el contenido. Las claves de desencriptación deben obtenerse para cada episodio.
¿Por qué no Puppeteer?
- Mediaset detecta navegadores controlados por Puppeteer
- Error:
PLAYBACK-DRM-6001al intentar reproducir - Bloqueo de DRM incluso con técnicas anti-detección
Solución Actual:
- Helper automático que abre Firefox (navegador real)
- Extensión Widevine L3 Decrypter en Firefox
- Captura manual guiada por instrucciones automáticas
- Lectura automática de
keys.txt
Flujo:
Usuario ejecuta npm start
↓
Autobot detecta episodio sin clave
↓
Helper abre Firefox automáticamente
↓
Muestra instrucciones en consola
↓
Usuario captura clave con extensión
↓
Usuario guarda en keys.txt línea N
↓
Usuario presiona ENTER
↓
Script lee clave y continúa descarga
PLEX_DIR=G:\Plex\Series\La isla de las tentaciones (2020)
SERIES_NAME=La isla de las tentaciones
SERIES_SEASON=9
SERIES_URL=https://www.mediasetinfinity.es/.../temporada-9/episodios/
EXTRACTOR_TIMEOUT=600000
MONITOR_TIMEOUT=60000KID1:KEY1 # Episodio 1
KID2:KEY2 # Episodio 2
# Episodio 3 (vacío)
KID4:KEY4 # Episodio 4
Importante: Línea N = Episodio N
monitor_results.json- Lista de episodios encontradosdownloads/- Archivos encriptados y desencriptados temporalestemp/*.bat- Scripts de descarga generados dinámicamentebrowser_profile/- Perfil de Chrome para extractor (cookies, sesiones)
- Carga variables de
.env - Valores por defecto si no existen
- Centralización de toda la configuración
- Reintentos automáticos con backoff exponencial
- Configurable (número de intentos, delay)
- Usado en monitor y descarga
- Valida formato KID:KEY (32 hex:32 hex)
- Detecta claves duplicadas
- Avisa antes de intentar descargar
- Niveles: DEBUG, INFO, WARN, ERROR
- Mensajes consistentes y claros
- Preparado para logging a archivo
- Abre Firefox automáticamente
- Muestra instrucciones paso a paso
- Espera confirmación del usuario
- Lee clave de
keys.txtautomáticamente
1. npm start
↓
2. Monitor scrapes episodios → monitor_results.json
↓
3. Para cada episodio:
├─ Verifica si existe en Plex → Skip si existe
├─ Busca clave en keys.txt
│ ├─ Si existe → Usa clave
│ └─ Si no existe → Helper Firefox
├─ Lanza Extractor → Obtiene manifest URL
├─ Descarga streams con N_m3u8DL-RE
├─ Desencripta con FFmpeg
├─ Fusiona audio + vídeo
├─ Mueve a Plex
└─ Limpia archivos temporales
- Función: Descarga de streams DASH/HLS
- Ubicación:
src/executables/N_m3u8DL-RE.exe - Uso: Descarga vídeo y audio encriptados
- Función: Desencriptación y fusión de streams
- Requisito: Debe estar en PATH del sistema
- Uso:
ffmpeg -decryption_key <KEY> -i input.mp4 -c copy output.mp4 ffmpeg -i video.mp4 -i audio.m4a -c copy merged.mp4
- Eliminados archivos temporales (30 MB)
- Eliminada extensión incompatible
- Activada eliminación automática de archivos encriptados
- Creado
.envpara valores configurables - Eliminado hardcoding (5 valores)
- CONFIG centralizado en todos los archivos
- Reintentos automáticos en fallos de red
- Validación de claves Widevine
- Detección de claves duplicadas
- Reemplazado console.log por logger
- Mensajes claros y consistentes
- Niveles configurables
- Helper de Firefox (60% automático)
- Apertura automática de navegador
- Instrucciones guiadas
- Lectura automática de claves
- README completo
- Guías de troubleshooting
- Investigación de alternativas documentada
- Mediaset detecta Puppeteer → No se puede automatizar 100%
- Solución: Helper de Firefox con navegador real
N_m3u8DL-RE.exees Windows-onlynpx.cmden código (Windows-específico)- Rutas con backslash
- Deben obtenerse manualmente para cada episodio
- No hay API pública para obtenerlas
- Extensión requiere navegador real
- Nombre de serie en parsing de títulos (línea 143 autobot.ts)
- Formato de título final (puede variar por serie)
- Detectar automáticamente cuando Firefox se cierra
- Validar clave antes de continuar descarga
- Añadir timeout configurable para espera de usuario
- Logging a archivo con rotación
- Soporte para múltiples series simultáneas
- Interfaz web para gestión de claves
- Notificaciones cuando hay nuevos episodios
- Base de datos para tracking de episodios
- Portabilidad a Linux/Mac
- Dockerización del proyecto
- API REST para control remoto
- Integración con otros servicios de streaming
- Archivos TypeScript: 8
- Utilidades: 4
- Líneas de código: ~1200
- Dependencias: 5 (puppeteer, dotenv, tslib, typescript, ts-node)
- Herramientas externas: 2 (N_m3u8DL-RE, FFmpeg)
- Tiempo de descarga: ~5-10 min por episodio (depende de conexión)
- Espacio temporal: ~2-3 GB por episodio (se limpia automáticamente)
Este proyecto es para uso personal y educativo. Respeta los derechos de autor y términos de servicio de Mediaset Infinity.
Apache-2.0
Última actualización: 2025-12-19
Versión: 1.0.0
Estado: ✅ Producción