Duplicación de pantalla de macOS al Amazon Fire TV, por tu red local, con códecs por hardware y cero nube.
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.
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.
┌────────────────────┐ 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.
- 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.
ScreenCaptureKitpara capturar, codificador H.264 Baseline de VideoToolbox en el Mac, decodificadorMediaCodecen el Fire TV. La CPU de ambos lados apenas se despeina. - Latencia baja. Sockets POSIX con
TCP_NODELAY,AllowFrameReordering = falseen 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
.applleva dentro su propia copia deadby 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
/24en 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).
- Descarga
FIVER TV AMAZON.appdesde la pestaña Releases de este repositorio. - Muévela a
~/Applicationsy á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. - 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.
- 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.
# 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.shLa 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.
- Mac: macOS 14 Sonoma o superior (las APIs de
ScreenCaptureKitque 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.0bajo./toolchain/.
| 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. |
- 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.
| 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. |
- 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
adbo cliente ADB puro en Swift). - Puerto del emisor a Linux y Windows a partir de la misma especificación de protocolo.
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:
- Abre una issue describiendo el problema o la propuesta.
- Haz fork, crea una rama con un nombre descriptivo.
- Commit con el formato
<área>: <resumen imperativo>— mira el histórico congit logpara el tono. - 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.
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