Skip to content

ScoobCoding/firemirror

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FIVER TV AMAZON

Duplicación de pantalla de macOS al Amazon Fire TV, por tu red local, con códecs por hardware y cero nube.

macOS 14+ Fire OS 6+ H.264 · 30 fps Sin nube · Sin telemetría Licencia: MIT Versión: 1.3.1

Abres la app en el Mac, pulsas un botón y tu escritorio aparece en el Fire TV. Nada más. Sin cuentas, sin anuncios, sin servidores intermedios y sin que tu vídeo salga jamás de tu red.

FIVER TV AMAZON es una aplicación nativa para macOS que se empareja con un pequeño APK receptor en tu Amazon Fire TV. Captura el escritorio con ScreenCaptureKit, lo codifica a H.264 con VideoToolbox y lo envía por TCP al receptor, que lo decodifica con MediaCodec y lo pinta directo en una SurfaceView. Cero copias intermedias, cero dependencia de servicios ajenos.

No es Google Cast. No es AirPlay. No es una extensión de Chrome. Es una tubería Mac → Fire TV construida a mano con las APIs de grabación y los decodificadores por hardware que ya tienes instalados.


Por qué existe este proyecto

Las alternativas comerciales para llevar la pantalla del Mac a un Fire TV tienen, como mínimo, uno de estos problemas:

  • Requieren una cuenta (con correo electrónico, a veces con tarjeta).
  • Subyacen en un servicio en la nube que hace de intermediario, incluso cuando ambos dispositivos están en la misma red.
  • Insertan publicidad o reclaman permisos desproporcionados (acceso a archivos, contactos, micrófono).
  • Van lentas porque recodifican el vídeo por software o añaden capas innecesarias de protocolo.
  • Dejan de funcionar cuando cambias de red, cuando el servicio se cae o cuando el fabricante decide dejar de mantener el proyecto.

FIVER TV AMAZON resuelve esto con un enfoque obstinadamente clásico: dos programas, una red local y un protocolo mínimo documentado en ARCHITECTURE.md. Si tu Mac y tu Fire TV están encendidos y comparten red, funciona. Punto.

Cómo funciona

   ┌────────────────────┐         TCP :5570          ┌────────────────────┐
   │  macOS (emisor)    │     NALUs H.264 Annex-B    │ Fire TV (receptor) │
   │  AppKit +          │ ─────────────────────────► │  Java +            │
   │  ScreenCaptureKit  │                            │  MediaCodec +      │
   │  + VideoToolbox    │                            │  SurfaceView       │
   └────────────────────┘                            └────────────────────┘
            ▲                                                   ▲
            │            ADB sobre TCP (:5555)                  │
            └───────────────────────────────────────────────────┘
                  detectar Fire TV · instalar APK · lanzar receptor

Hay dos canales independientes:

  • Plano de control (Mac → Fire TV): ADB sobre TCP en el puerto 5555. Sirve para detectar la tele, instalar el APK del receptor y lanzarlo.
  • Plano de datos (Mac → Fire TV): TCP plano en el puerto 5570 con un protocolo propio minúsculo — una cabecera de cuatro campos y tramas prefijadas por longitud. Está íntegro en ARCHITECTURE.md.

Ni UDP, ni multidifusión, ni HTTP, ni pasarela externa, ni DRM. Nada que dependa de un tercero.

Características

  • Un solo clic. Detecta el Fire TV, instala el APK, arranca el receptor y empieza a duplicar. Todo automatizado; no hace falta tocar la consola.
  • Todo por hardware. ScreenCaptureKit para capturar, codificador H.264 Baseline de VideoToolbox en el Mac, decodificador MediaCodec en el Fire TV. La CPU de ambos lados apenas se despeina.
  • Latencia baja. Sockets POSIX con TCP_NODELAY, AllowFrameReordering = false en el codificador y un keyframe por segundo. En una Wi-Fi 5 GHz sana, la sensación es inmediata.
  • LAN-only de verdad. Ni analítica, ni envío de datos anónimos, ni comprobaciones remotas de licencia. El binario no contacta con ningún dominio: el único tráfico que genera es el del propio vídeo hacia tu Fire TV.
  • Autocontenido. El .app lleva dentro su propia copia de adb y del APK del receptor. El usuario final no instala Android SDK, no abre Terminal y no toca variables de entorno.
  • Detección automática. Escanea la subred /24 en busca de Fire TVs con ADB expuesto. Si hay varios, ofrece un selector. Si no hay ninguno, admite una IP manual.
  • Selector de pantalla. En Macs con monitor externo puedes elegir qué pantalla se duplica. Por defecto se prefiere el panel integrado.
  • Interfaz en español. Copy neutro de castellano, sin anglicismos innecesarios. Se aceptan PRs con un sistema de localización en condiciones para añadir más idiomas (ver CONTRIBUTING.md).

Instalación rápida (binario precompilado)

  1. Descarga FIVER TV AMAZON.app desde la pestaña Releases de este repositorio.
  2. Muévela a ~/Applications y ábrela. La primera vez macOS pedirá el permiso de Grabación de pantalla: concédelo en Ajustes del sistema → Privacidad y seguridad → Grabación de pantalla y vuelve a abrir la app.
  3. En el Fire TV, activa la depuración ADB (Ajustes → Mi Fire TV → Opciones de desarrollador → Depuración por ADB). La primera conexión mostrará una huella de autorización en la pantalla de la tele; acéptala.
  4. En la app del Mac pulsa Iniciar duplicación. La primera vez instala el APK y lanza el receptor; a partir de ahí basta con abrir el Fire TV en la aplicación FIVER TV AMAZON.

Compilación desde el código fuente

# 1. Compilar el APK del receptor (bajo segundos tras la primera vez).
./scripts/build_receiver.sh

# 2. Empaquetar la app de macOS en ~/Desktop/FIVER TV AMAZON por defecto.
./scripts/build_mac_app.sh

# 3. Cambiar el destino de la app empaquetada.
FIVER_TV_OUTPUT="$PWD/dist" ./scripts/build_mac_app.sh

# 4. Reutilizar el APK ya compilado mientras iteras solo en la UI del Mac.
FIVER_TV_REUSE_APK=1 ./scripts/build_mac_app.sh

La cadena de compilación del receptor depende de toolchain/ (JDK + Android SDK vendorizados, en torno a 800 MB, ignorados por Git). El procedimiento para provisionarlos está detallado en ARCHITECTURE.md.

En la primera compilación se genera automáticamente un almacén de claves local firemirror-debug.keystore que solo firma tus APKs de desarrollo — no debe confundirse con una clave de publicación.

Requisitos

  • Mac: macOS 14 Sonoma o superior (las APIs de ScreenCaptureKit que utilizamos se estabilizaron en esa versión).
  • Fire TV: cualquier modelo con Fire OS 6 o superior (Android 7.1 interno) — esto cubre desde el Fire TV Stick estándar hasta el Cube. El receptor se prueba principalmente contra Fire TV Stick 4K y Stick 4K Max.
  • Red: ambos dispositivos en la misma subred /24. Wi-Fi 5 GHz recomendada; 2,4 GHz funciona si bajas a la calidad Suave.
  • Compilación: Xcode 15+ (o las Command Line Tools equivalentes), JDK 17+ y Android SDK platforms;android-28 + build-tools;35.0.0 bajo ./toolchain/.

Estructura del proyecto

Ruta Rol
mac-app/ Aplicación nativa AppKit en Swift. Producto principal.
mac-sender/ Emisor equivalente sin interfaz gráfica, pensado para integración continua y usuarios avanzados.
receiver/ Receptor para Fire TV en Java puro con MediaCodec y SurfaceView.
scripts/ Compilación, instalación y lanzamiento. Cada script tiene su cabecera explicando qué hace.
toolchain/ Ignorado por Git. SDK de Android y JDK vendorizados para compilaciones reproducibles.
ARCHITECTURE.md Recorrido completo: pipeline de captura, protocolo, caveats de sandbox, App Store.
CHANGELOG.md Historial legible de versiones (Keep a Changelog).
CONTRIBUTING.md Estilo de código, convenciones de commit y flujo de PR.

Privacidad

  • Cero telemetría. El binario no abre ninguna conexión saliente salvo la que tú inicias hacia tu propio Fire TV.
  • Cero datos personales. Ni IPs por defecto, ni nombres de usuario, ni pistas sobre la red doméstica. El escáner de subred se niega a tocar rangos que no sean los privados RFC-1918 (10/8, 172.16/12, 192.168/16).
  • Ningún servicio de nube implicado en la ruta del vídeo. Todo ocurre en tu red local.
  • Almacenes de claves locales git-ignorados; cada persona que compila se genera su propio material de firma.

Para escenarios en redes hostiles (Wi-Fi pública, alojamientos compartidos) está previsto un modo TLS opcional — ver la hoja de ruta.

Solución de problemas

Síntoma Qué hacer
No detecto ningún Fire TV Confirma que la depuración ADB está activa en el Fire TV y que ambos dispositivos están en la misma red. Si ya aparecía antes, entra en Opciones de desarrollador y responde a la petición de huella (caduca tras unos segundos).
La primera apertura del .app la bloquea macOS Es lo normal con un binario firmado ad-hoc: haz clic derecho sobre el .app y pulsa Abrir. Si descargas una Release firmada, este paso no aparece.
Pantalla negra en el Fire TV El receptor está esperando tramas. Verifica que macOS no haya revocado el permiso de Grabación de pantalla en Ajustes → Privacidad y seguridad.
"ADB no autorizado" Acepta la huella en la pantalla del Fire TV y vuelve a pulsar Detectar. La huella dura hasta que se reinicie la tele.
INSTALL_FAILED_UPDATE_INCOMPATIBLE Te ha quedado instalada una versión antigua firmada con otra clave. adb uninstall com.scoobcoding.firemirror y reinstala.
Quiero subir a la Mac App Store La versión actual no es apta para App Store porque necesita ADB fuera de la caja. Ver la hoja de ruta para el plan de helper/XPC.

Hoja de ruta

  • Canal de audio (de momento el envío es solo vídeo).
  • Modo TLS opcional para el plano de datos, pensado para Wi-Fi públicas.
  • Codificador AV1 en Apple Silicon cuando el hardware lo permita, con recaída automática a H.264.
  • Versión sandboxed de la app lista para la Mac App Store (helper XPC con adb o cliente ADB puro en Swift).
  • Puerto del emisor a Linux y Windows a partir de la misma especificación de protocolo.

Contribuir

Las PRs son bienvenidas: informes de errores, parches, traducciones o un simple nuevo codename de Fire TV en el mapa de AppState.swift → friendlyModel. El proceso completo está en CONTRIBUTING.md, pero en resumen:

  1. Abre una issue describiendo el problema o la propuesta.
  2. Haz fork, crea una rama con un nombre descriptivo.
  3. Commit con el formato <área>: <resumen imperativo> — mira el histórico con git log para el tono.
  4. Abre la PR con una descripción breve y un plan de prueba que incluya modelo de Fire TV y versión de macOS contra los que lo has verificado.

Si encuentras un problema de seguridad, por favor no abras una issue pública: abre un aviso de seguridad privado en GitHub.

Licencia

Publicado bajo licencia MIT. Puedes usarlo, forkearlo y distribuirlo sin pedir permiso. Si vendes algo encima, no estaría de más enlazar el repositorio.


FIVER TV AMAZON · duplicación LAN · H.264 · puerto 5570

About

Duplicación de pantalla de macOS al Amazon Fire TV por la red local. App nativa AppKit (ScreenCaptureKit + VideoToolbox) + receptor Android MediaCodec. H.264 30 fps, cero nube, cero telemetría.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors