Proyecto pensado para tu caso: TV RCA antiguo con Android 7 y PC en red local.
No usa VLC ni software comercial. Hace mirroring por navegador con latencia baja y setup simple.
- La PC captura pantalla con
mss. - Comprime cada frame a JPEG en memoria.
- Sirve la transmision por HTTP MJPEG con Flask.
- El TV abre una URL local desde su navegador y reproduce el stream.
Este enfoque suele ser mas compatible con Android 7 que opciones modernas mas pesadas.
- Windows con Python 3.10 o superior.
- PC y TV en la misma red (idealmente LAN o WiFi 5G).
- Ejecuta
start_stream.bat. - En la consola veras una URL como
http://192.168.1.50:8080si usas el espejo standalone. - Abre esa URL en el navegador del TV.
Edita el comando en start_stream.bat y cambia:
--fps 12si quieres menos carga y mas estabilidad.--quality 55para ahorrar ancho de banda.--max-width 1280y--max-height 720para limitar el tamaño de salida.--monitor 2si quieres transmitir otra pantalla.
Valores recomendados para Android 7:
fps: 10 a 18quality: 50 a 70max-width: 960 a 1280max-height: 540 a 720
- Si no carga en el TV, prueba primero desde el movil con la misma URL.
- Si se corta, usa 5 GHz o cable LAN.
- Si hay congelamientos, reduce
fps,qualityoscale. - Permite Python en el Firewall de Windows cuando lo pida.
- Es video sin audio, optimizado para mirroring ligero y compatible.
- Si luego quieres audio, se puede extender con WebRTC o RTSP.
Este modo es para reproducir links de YouTube en una URL local fija del televisor, sin recargar manualmente.
- Servicio principal TV:
http://IP_DE_TU_PC:8081 - URL fija TV:
http://IP_DE_TU_PC:8081 - Auto-refresh: la pagina detecta nuevos videos sola cada pocos segundos.
- Cola: acepta varios links y los reproduce en orden.
- Control remoto por Telegram: pausa, siguiente, volumen, estado y cola.
- Crea tu bot con BotFather y copia el token.
- Copia
.env.examplea.env. - Rellena
TELEGRAM_BOT_TOKENen.env. - Opcional pero recomendado: define
TELEGRAM_ALLOWED_CHAT_IDpara restringir acceso.
- Ejecuta
start_tvbot.bat. - Deja abierta en la tele la URL fija que imprime la consola.
- Desde Telegram manda links de YouTube al bot.
Nota: al iniciar, el launcher limpia automaticamente procesos huertanos antiguos del servicio en el puerto 8081 para evitar estados viejos y errores 404 por version mezclada.
- Ejecuta
start_tvbot_gui.bat. - La GUI arranca con una pantalla animada de saludo, te pide elegir un usuario y te deja decidir si el servidor debe encenderse al entrar.
- La ventana principal usa
CustomTkintercon sidebar y secciones separadas:Dashboard,Mirroring,Reproductor,BibliotecayConfiguración. - Cada usuario guarda su propia base visual local en
tvbot_ui_state_<usuario>.jsony su selección entvbot_profiles.json. - El panel de
Configuraciónconcentra lo avanzado:.env, updates, import/export y logs.
El proyecto también expone un panel web moderno para usarlo desde la red local sin mezclar control y consumo:
- Abre
http://IP_DE_TU_PC:8081/adminpara el panel admin. - Usa
http://IP_DE_TU_PC:8081/homecomo vista de consumo separada para la biblioteca. - Usa
http://IP_DE_TU_PC:8081/watchcomo salida TV fija. - El panel admin agrupa
Dashboard,Mirroring,BibliotecayConfiguraciónen una sola interfaz dinámica, y la administración de biblioteca ya vive dentro de ese mismo panel. - La estética evita el negro puro y usa un fondo oscuro suave para cansar menos la vista.
- La ruta heredada
http://IP_DE_TU_PC:8081/admin_libraryqueda como alias para entrar directo a la sección de biblioteca dentro del panel central.
Novedades de la UI local:
- El inicio muestra un saludo animado y un selector de usuario.
- La base para encender o apagar el servidor aparece al inicio y también en cada usuario dentro de la ventana principal.
- El dashboard local se centra en acciones rápidas: series/películas, reproducción, programación y cambio de usuario.
- La selección de usuario modifica la base visual local sin tocar la lógica del servidor o la biblioteca.
Novedades recientes en GUI:
- El bloque de entorno inicial (
.env) ahora queda oculto por defecto cuando ya terminaste la configuración inicial (TV_FIRST_SETUP_DONE=1). - Los mensajes de error/estado (banner inferior) ahora se ven correctamente y no quedan tapados por el contenido.
- El inicio de mirror hace reintentos cortos en segundo plano para evitar fallos por arranque tardío del servicio.
La primera vez, si falta .env, la app lo crea desde .env.example para que completes el token.
Para generar el programa como .exe:
- Ejecuta
build_exe.bat. - El binario final queda en
dist\TVBotStudio.exe. start_tvbot_gui.batusa ese.exesi ya existe.
La GUI puede minimizarse a la bandeja del sistema para seguir en segundo plano.
Si quieres que la PC quede a la espera desde que prende Windows:
- Ejecuta
install_listener_autostart.batuna sola vez. - Eso deja el listener en la carpeta de inicio de Windows.
- Al arrancar la PC, el listener queda esperando comandos de Telegram.
- Si mandas
/playdesde Telegram, el listener despierta el servicio principal y lo deja listo para reproducir.
Para quitarlo del inicio, borra el acceso directo TVBot Listener.lnk de la carpeta de inicio de Windows.
Para iniciar la GUI automaticamente al entrar a Windows (mas confiable que Startup en algunos equipos):
- Ejecuta
install_tvbot_task_autostart.batuna sola vez. - Verifica estado con
install_tvbot_task_autostart.bat --status. - Para quitarlo, usa
install_tvbot_task_autostart.bat --remove.
La GUI ahora tiene una caja para pegar una URL y dos rutas:
Auto Smart -> TV: intenta resolver stream directo en paralelo y lo inyecta al TVBot.Fallback mirror: abre la pagina en tu PC y usa mirroring para mostrarla en la TV.
Auto Smart multinivel:
- Nivel 1:
yt-dlpagresivo (cookies navegador, user-agent moderno, fallback chrome/firefox). - Nivel 2:
requests + BeautifulSouppara detectar streams en HTML y scripts inline. - Nivel 3:
Playwrightheadless para capturar.m3u8/.mp4desde tráfico de red.
Si falla, la GUI muestra un diagnóstico por nivel con motivo exacto y sugerencia.
Si falta Playwright, aparece banner con botón Instalar ahora.
Recomendacion:
- Usa
Auto Smart -> TVcomo opcion por defecto. - Si falla por DRM/anti-bot, usa
Fallback mirror.
- Puedes reordenar la cola desde la GUI arrastrando una tarjeta y soltándola sobre otra posición.
- El orden se sincroniza con el servidor usando el mismo flujo que
/mover A B. - Si prefieres Telegram, los comandos de cola siguen disponibles (
/cola,/borrar N,/mover A B,/limpiar).
Usando la misma URL base de TV:
http://IP_DE_TU_PC:8081/remote-> control movil con panelAhora / Siguiente / Despues.http://IP_DE_TU_PC:8081/metrics-> tablero de metricas en vivo.
API nueva:
GET /api/metricsGET /api/diagnosticPOST /api/control/export_config(localhost)POST /api/control/import_config(localhost)POST /api/control/update/check(localhost)POST /api/control/update/apply(localhost)
Se agregó un módulo adicional y aislado para ver series/películas en la misma LAN sin logins ni PINes.
GET /home-> pantalla principal con salas, continuidad y reproductor HTML5.GET /-> redirige a la pantalla principal de la biblioteca.GET /admin_library-> alias heredado que redirige a/admin?section=library.GET /api/library/state-> estado completo de la biblioteca.POST /api/library/series-> crear serie.POST /api/library/series/<series_id>/episodes-> agregar episodio.POST /api/library/rooms/<room_id>/play-> reproducir y guardar progreso de la sala.POST /api/library/rooms/<room_id>/progress-> heartbeat de progreso.GET /library/stream/<episode_id>-> salida de reproducción para episodio local o YouTube resuelto.
Estado nuevo:
my_library.json
Notas:
- Las tres salas quedan fijas como
Sala 1,Sala 2ySala 3. Sala 1sigue siendo la base TV fija en/watch.- El progreso de cada sala se guarda de forma independiente.
- La vista principal usa CSS/JS embebidos y no recarga al cambiar de sala o sección.
/estado/cola/pausar/play/siguiente/volumen 80/calidad auto|baja|media|alta/directo URL(intenta primario y luego secundario)/autosmart URL(prueba estrategias en paralelo)/playlist URL [inicio]/borrar N/mover A B/off [segundos|episodio|cola]/canceloff/ayuda/diagnostico/limpiar
Comando adicional en servicio principal:
/detener(apaga el servicio y vuelve a modo listener)
La calidad por defecto es auto (adaptativa). Puedes fijar el arranque en .env con TV_QUALITY_MODE=auto|baja|media|alta.
Persistencia y recuperacion:
- El estado de sesion se guarda en
tvbot_state.json(cola, actual, calidad, volumen). - Al reiniciar el servicio, la sesion se restaura automaticamente.
- Si un stream del video actual expira, el servidor intenta renovar el link automaticamente; si falla, salta al siguiente.
Playlist con inicio:
- Puedes enviar una playlist de YouTube con
/playlist URL [inicio]. - Ejemplo:
/playlist https://www.youtube.com/playlist?list=XXXX 5 - Importa en bloque comenzando desde ese indice (limite de carga por comando: 25).
Si quieres tener solo un proceso minimo siempre activo, usa el listener:
- Ejecuta
start_listener.bat. - En Telegram usa
/activarpara encender el servicio completo. - El listener cede el token al bot principal automaticamente.
- Para volver a listener, usa
/detenerdesde el bot principal.
Comandos del listener:
/activar/detenerpc/estadopc/off [segundos]/canceloff
- Las URLs directas generadas por
yt-dlppueden expirar tras unas horas. - Si un video falla por expiracion, vuelve a mandarlo al bot y se renueva.
El servidor stream_mirror.py expone:
GET /health
Campos principales:
fps_actualframes_droppedqueue_sizelatency_ms
Notas de mirror integrado en TV Bot:
- Endpoint de control en servicio principal:
POST /api/control/mirror/startyPOST /api/control/mirror/stop. - Si el mirror no puede arrancar, ahora devuelve error real (por ejemplo monitor inválido o timeout de captura) para mostrar diagnóstico claro en GUI.