Skip to content

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Control Remoto Multimedia PC-Móvil

Control remoto para lo que se está reproduciendo en tu PC Windows (Spotify, VLC, o streaming en el navegador/apps como Netflix, HBO Max, Paramount+) desde tu celular Android, por la misma red Wi-Fi.

El servicio de la PC solo interactúa con las teclas multimedia / controles de reproducción del sistema operativo (Windows System Media Transport Controls). Nunca accede, inicia sesión ni almacena información de tus cuentas en las plataformas de streaming — solo lee título, app y estado de reproducción, lo mismo que ya expone el centro de "Reproduciendo ahora" de Windows.

Funciones principales:

  • Emparejamiento por código QR: la PC muestra un QR (clic derecho en el ícono de la bandeja → "Vincular nuevo dispositivo") que el celular escanea para conectar y emparejar en un solo paso — es el método principal; el descubrimiento por red e IP manual quedan como "Opciones avanzadas" por si el QR no es una opción.
  • Detección y control de múltiples reproductores a la vez (Spotify, un video en el navegador, Paramount+, etc. simultáneamente) — deslizá hacia los lados en la pantalla de control para pasar de uno a otro.
  • Interfaz personalizada por plataforma: cada app se identifica con su nombre y color de marca, y los botones se adaptan a lo que esa app realmente soporta (algunas exponen adelantar/retroceder 10s, otras solo play/pausa — ver la sección de solución de problemas sobre por qué).
  • Reconexión automática: una vez emparejado, la app vuelve a conectar sola con tu PC cada vez que la abres, sin pedir el PIN de nuevo — y si la conexión se corta mientras la usas (la PC se reinicia, el Wi-Fi falla un momento), reintenta sola en segundo plano sin que tengas que cerrar y volver a abrir nada.
  • Trackpad de mouse remoto: un botón "Mouse" abre un panel táctil para mover el cursor de la PC arrastrando el dedo, con doble toque como clic izquierdo.
  • Gestión de dispositivos emparejados: clic derecho en la bandeja → "Dispositivos emparejados" muestra quién tiene acceso y permite revocarlo al instante.
  • Atajo de doble clic: doble clic directo en el ícono de la bandeja de la PC pausa/reanuda lo que esté sonando, sin tocar el celular.

Iconografía

Ícono del servicio de PC
Servicio de PC / bandeja del sistema / instalador
Ícono de la app Android
App Android

Los archivos fuente están en docs/branding/. Se usan tal cual para el ícono de bandeja y del .exe/instalador en la PC, y se convierten a los formatos de mipmap adaptativos que exige Android para el ícono de la app y la pantalla de splash.

Tabla de contenidos

  1. Arquitectura
  2. Requisitos previos
  3. Estructura del proyecto
  4. Servicio de escritorio (PC)
  5. Aplicación Android
  6. Dónde quedan los instaladores generados
  7. Primer uso: vincular la PC con el celular
  8. Solución de problemas
  9. Licencia

1. Arquitectura

Componente Tecnología Rol
Servicio de PC (pc-service/) Python 3.12 + asyncio Detecta todas las sesiones de reproducción activas a la vez vía SMTC de Windows (no solo una), controla cada una por su propia sesión, mueve el mouse (pynput), expone un servidor WebSocket en la LAN, emparejamiento por PIN, descubrimiento por broadcast UDP, ícono en la bandeja del sistema.
App Android (android-app/) Kotlin + Jetpack Compose Descubre la PC en la red, se empareja y recuerda la conexión, muestra un selector/deslizador cuando hay varios reproductores activos y controla el que elijas (adaptando los botones a lo que esa plataforma realmente soporta), más un trackpad de mouse remoto.

Comunicación: WebSocket (ws://) sobre la red local, con emparejamiento por PIN de un solo uso y token persistente por dispositivo. Ver el detalle completo del protocolo en pc-service/remote_media_server/protocol.py.


2. Requisitos previos

Herramienta Versión usada Para qué Descarga
Windows 10/11 (64-bit) Ejecutar el servicio de PC
Python 3.12.x Compilar y correr el servicio de PC (winsdk no publica binarios precompilados para Python 3.14+, por eso 3.12) python.org/downloads/release/python-31210
Android Studio (incluye JDK 21 y Android SDK) Ladybug o superior Compilar la app Android developer.android.com/studio
Inno Setup 6 6.7.x Generar el instalador .exe de Windows jrsoftware.org/isdl.php
Android SDK Platform 36 + Build-Tools 36.0.0 Se instalan desde el SDK Manager de Android Studio
ADB (incluido en el Android SDK) Instalar el APK en un dispositivo físico

Instalación rápida por línea de comandos (usando winget, incluido en Windows 10/11):

winget install --id Python.Python.3.12 -e
winget install --id JRSoftware.InnoSetup -e
winget install --id Google.AndroidStudio -e

Tras instalar Android Studio, ábrelo una vez y usa More Actions → SDK Manager para instalar Android SDK Platform 36 y Android SDK Build-Tools 36.0.0 si no vienen preseleccionados.


3. Estructura del proyecto

Control remoto/
├── LICENSE
├── README.md                          <- este archivo
├── pc-service/                        <- servicio de Windows
│   ├── requirements.txt
│   ├── app_entry.py                   <- punto de entrada para PyInstaller
│   ├── remote_media_server/           <- código fuente del servicio
│   ├── tests/manual_ws_client.py      <- cliente de prueba manual
│   └── packaging/
│       ├── build_exe.spec             <- receta de PyInstaller
│       ├── installer.iss              <- receta de Inno Setup
│       ├── app_icon.ico
│       ├── license_installer.txt      <- términos mostrados en el instalador
│       ├── dist/                      <- ControlRemotoMultimedia.exe (generado)
│       └── installer_output/          <- ControlRemotoMultimedia-Setup.exe (generado)
└── android-app/                       <- app Android (Gradle)
    ├── gradlew.bat / gradlew
    ├── app/
    │   └── build/outputs/apk/debug/   <- app-debug.apk (generado)
    └── ...

4. Servicio de escritorio (PC)

4.1 Preparar el entorno

Crea un entorno virtual con Python 3.12 e instala las dependencias:

cd "pc-service"
py -3.12 -m venv .venv
.\.venv\Scripts\python.exe -m pip install --upgrade pip
.\.venv\Scripts\python.exe -m pip install -r requirements.txt

4.2 Ejecutar en modo desarrollo

.\.venv\Scripts\python.exe -m remote_media_server.main

Deberías ver un ícono nuevo en la bandeja del sistema. Clic derecho → "Mostrar código de emparejamiento" para obtener el PIN y la IP que usará el celular.

4.3 Compilar el ejecutable (PyInstaller)

.\.venv\Scripts\python.exe -m pip install pyinstaller
.\.venv\Scripts\python.exe -m PyInstaller packaging\build_exe.spec `
    --distpath packaging\dist `
    --workpath packaging\build `
    --noconfirm

Esto genera packaging\dist\ControlRemotoMultimedia.exe (un solo archivo, sin ventana de consola — los logs quedan en %APPDATA%\RemoteMediaControl\service.log).

4.4 Generar el instalador de Windows (Inno Setup)

cd packaging
& "$env:LOCALAPPDATA\Programs\Inno Setup 6\ISCC.exe" installer.iss

installer.iss define un asistente de instalación completo (Inno Setup, "modern wizard style") con:

  • Pantalla de bienvenida.
  • Página de aceptación de términos (LicenseFile=license_installer.txt) — el usuario debe aceptar para continuar.
  • Página de selección de carpeta de instalación (por defecto %LOCALAPPDATA%\Programs\Control Remoto Multimedia, sin requerir permisos de administrador; el usuario puede cambiarla).
  • Tareas opcionales marcables: iniciar automáticamente con Windows (activada por defecto, ya que el servicio está pensado para correr en segundo plano) y crear acceso directo en el escritorio.
  • Acceso directo en el Menú Inicio + desinstalador registrado en "Agregar o quitar programas".

El resultado queda en packaging\installer_output\ControlRemotoMultimedia-Setup.exe.

Nota sobre SmartScreen/antivirus: el ejecutable no está firmado digitalmente (requiere un certificado de firma de código pagado). Es normal que Windows SmartScreen o el antivirus muestren una advertencia de "editor no reconocido" la primera vez — es esperable en software independiente sin firmar, no indica que el archivo esté dañado. Para continuar: "Más información" → "Ejecutar de todas formas".


5. Aplicación Android

5.1 Configurar el SDK

Gradle necesita saber dónde está tu Android SDK. Cualquiera de estas dos opciones funciona:

  • Opción A — variable de entorno (recomendada, no depende de un archivo local):
    $env:ANDROID_SDK_ROOT = "$env:LOCALAPPDATA\Android\Sdk"
  • Opción B — crea android-app\local.properties (no se versiona en git) con:
    sdk.dir=C:/Users/TU_USUARIO/AppData/Local/Android/Sdk

Gradle también necesita un JDK 17+. Android Studio ya trae uno embebido (JBR):

$env:JAVA_HOME = "C:\Program Files\Android\Android Studio\jbr"

5.2 Compilar el APK

El proyecto incluye el Gradle Wrapper (gradlew.bat), así que no hace falta instalar Gradle por separado:

cd "android-app"
.\gradlew.bat assembleDebug

Esto descarga las dependencias (Compose, OkHttp, kotlinx.serialization, etc.) la primera vez y genera el APK.

5.3 Instalar en un dispositivo

Con el celular conectado por USB y la depuración USB activada (Ajustes → Opciones de desarrollador):

& "$env:LOCALAPPDATA\Android\Sdk\platform-tools\adb.exe" install -r `
    "app\build\outputs\apk\debug\app-debug.apk"

Acepta el diálogo de autorización que aparece en el teléfono la primera vez.


6. Dónde quedan los instaladores generados

⚠️ Las rutas de esta tabla son ubicaciones locales en tu disco (relativas a la carpeta del proyecto), no enlaces web. Estas carpetas están excluidas de git a propósito (ver .gitignore en cada subproyecto) porque son artefactos generados — no existen en el repositorio ni en GitHub hasta que tú las subas manualmente (ver más abajo cómo publicarlas).

Artefacto Ruta dentro del proyecto Qué es
Instalador de Windows pc-service/packaging/installer_output/ControlRemotoMultimedia-Setup.exe El instalador con asistente (licencia, carpeta de instalación, inicio automático) — esto es lo que compartes/subes para que alguien instale el servicio de PC.
Ejecutable suelto pc-service/packaging/dist/ControlRemotoMultimedia.exe El .exe sin empaquetar en instalador (por si prefieres distribuirlo como portable).
APK de Android android-app/app/build/outputs/apk/debug/app-debug.apk El instalable para el celular. Firmado con la clave de debug de Android (válido para instalar directamente vía adb install o transfiriéndolo al teléfono; para publicarlo en Google Play se necesitaría además configurar una firma de release).

Cómo publicarlos en GitHub

Commitear binarios de ~10-30 MB directamente al repositorio no es buena práctica (infla el historial de git). La forma correcta es usar GitHub Releases, que están pensadas justo para esto:

  1. Sube el código (sin los binarios, ya excluidos por .gitignore):
    git init
    git add .
    git commit -m "Version inicial"
    git branch -M main
    git remote add origin https://github.com/TU_USUARIO/Control-remoto.git
    git push -u origin main
  2. En GitHub, entra a tu repositorio → pestaña "Releases""Create a new release".
  3. Arrastra ControlRemotoMultimedia-Setup.exe y app-debug.apk al cuadro de "Attach binaries".
  4. Publica el release. GitHub te dará ahí un enlace permanente y funcional para cada archivo (algo como https://github.com/TU_USUARIO/Control-remoto/releases/download/v1.0.0/ControlRemotoMultimedia-Setup.exe), que sí puedes enlazar desde este README una vez lo tengas.

7. Primer uso: vincular la PC con el celular

  1. Instala y abre el servicio en la PC (por el instalador o ControlRemotoMultimedia.exe directo). Aparecerá un ícono en la bandeja del sistema.
  2. En el primer arranque, Windows puede preguntar si permitir la app en redes privadas — acepta, si no, el descubrimiento y la conexión no van a funcionar.
  3. Instala y abre la app en el Android.
  4. Empareja con la PC: en la PC, clic derecho en el ícono de la bandeja → "Vincular nuevo dispositivo" — aparece una ventana con un código QR. En el celular, toca "Escanear código QR" y apunta la cámara — conecta y empareja en un solo paso, sin escribir nada. Este paso solo se hace una vez — la app recuerda la conexión y reconecta sola en adelante.
    • Si el QR no es una opción (sin cámara, PC sin monitor a mano, etc.), toca "Opciones avanzadas" en la pantalla de vinculación para desplegar la búsqueda automática por red y la entrada manual de IP + PIN.
  5. Reproduce algo (Spotify, VLC, Netflix/HBO/Paramount+, un video en el navegador) — la app pasa automáticamente a la pantalla de control, mostrando la plataforma detectada y los botones que esa sesión realmente soporta.
  6. Si hay más de un reproductor activo a la vez, desliza la pantalla hacia los lados para pasar de uno a otro.
  7. Toca "Mouse" en la parte superior para abrir el trackpad remoto: arrastra para mover el cursor de la PC, doble toque para hacer clic.
  8. Para administrar quién tiene acceso, clic derecho en la bandeja de la PC → "Dispositivos emparejados" — lista cada celular emparejado con un botón para revocarlo al instante. Y para un atajo rápido sin abrir el celular: doble clic directo en el ícono de la bandeja pausa/reanuda lo que esté sonando.

8. Solución de problemas

Síntoma Causa probable Solución
La app Android no encuentra la PC Firewall bloqueando el broadcast UDP, o están en redes Wi-Fi distintas Acepta el permiso de firewall en la PC; en su defecto, ingresa la IP manualmente (la bandeja la muestra).
winsdk falla al instalar (pip install) Estás usando una versión de Python distinta a 3.12 (no hay binario precompilado) Usa exactamente py -3.12 al crear el entorno virtual.
Gradle no encuentra el SDK Falta ANDROID_SDK_ROOT o local.properties Revisa la sección 5.1.
El instalador de Windows muestra advertencia de SmartScreen El .exe no está firmado digitalmente Esperado en software sin firmar — "Más información" → "Ejecutar de todas formas".
Un botón de control no aparece para cierta plataforma (ej. adelantar/retroceder, siguiente capítulo) Esa app/plataforma no expone esa acción al sistema operativo (limitación de Windows SMTC, no del proyecto) — confirmado incluso forzando el comando directamente, la app simplemente lo ignora No hay solución posible desde este proyecto — la app solo muestra lo que la plataforma reporta soportar.
"Escanear código QR" pide acceso a la cámara y no escanea Es el escáner del sistema (Google Play Services), no la app — puede tardar un momento en la primera vez que se usa en el dispositivo Acepta el permiso de cámara si lo pide; si sigue sin funcionar, usa "Opciones avanzadas" para emparejar con IP manual + PIN.

9. Licencia

Este proyecto se distribuye bajo la licencia MIT.

About

Control remoto para lo que se está reproduciendo en tu PC Windows (Spotify, VLC, o streaming en el navegador/apps como Netflix, HBO Max, Paramount+) desde tu celular Android, por la misma red Wi-Fi.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages