Open-source AirPlay 2 Apple Device receiver for Fire TV & Android
Install • What It Does • How It Works • Build • Credits
AirReceiver, AirScreen, and AirPin all charge you to do AirPlay on Fire TV. Every "open-source AirPlay for Android" project on GitHub was either dead, audio-only, or required a Raspberry Pi. This project fixes that.
┌─────────────┐ mDNS + RTSP ┌──────────────────────────────────┐
│ iPhone │◄─────────────────►│ FirePlay (APK) │
│ │ │ │
│ Music │ ALAC audio │ ALACDecoder ──► AAudio out │
│ Photos │ H.264 video │ MediaCodec ──► SurfaceView │
│ Video │ AAC-ELD audio │ MediaCodec ──► AAudio out │
│ │ │ │
│ AirPlay 2 │ FairPlay pair │ UxPlay protocol lib (GPL-3) │
└─────────────┘ └──────────────────────────────────┘
- On your Fire TV, install the free Downloader app from the Amazon Appstore.
- Go to Settings → My Fire TV → Developer Options → turn on Install unknown apps for Downloader.
(No Developer Options? Settings → My Fire TV → About → click "Fire TV" 7 times.) - Open Downloader and type:
is.gd/fireplay_tv - Press Go → Install → Open. You'll see the FirePlay splash screen — it's now listening.
- On your iPhone: Music or Photos → tap the AirPlay icon → pick FirePlay.
adb connect <fire-tv-ip>:5555
adb install fireplay-v0.1.0-debug.apkAPKs attached to every GitHub release.
F-Droid metadata is ready under fastlane/metadata/. Submission planned at v0.2.
Amazon Appstore is intentionally not a target — Apple has a history of DMCA-noticing AirPlay reimplementations.
| iPhone source | What you get on the TV |
|---|---|
| Music app | Lossless ALAC audio through TV speakers |
| Photos (still) | Full-resolution photo displayed |
| Photos (video) | H.264 video + AAC-ELD sound |
| YouTube etc. (legacy AirPlay) | HLS video |
| Feature | Status |
|---|---|
| iPhone screen mirroring (Control Center) | Planned for v0.2 |
| Netflix / Disney+ / HBO casting | Blocked by Apple FairPlay DRM — no open-source project can do this |
| Milestone | Status |
|---|---|
| mDNS advertisement (JmDNS) | ✅ |
| iOS 17/18 pairing (FairPlay 2-round) | ✅ |
| Music — ALAC → AAudio | ✅ |
| Photos/Video — H.264 → MediaCodec → Surface | ✅ |
| Video sound — AAC-ELD → MediaCodec → AAudio | ✅ |
| Per-device identity (no collisions on multi-receiver LANs) | ✅ |
| Idle splash screen with branding | ✅ |
| iPhone screen mirroring | 🚧 |
| F-Droid release | 🚧 |
Protocol layer (lib-uxplay/) — vendored from FDH2/UxPlay, GPL-3.
Handles SRP-6a pairing, FairPlay emulation, RAOP RTP demux, NTP sync.
Audio (audio_renderer_aaudio.cpp):
- Music: ALAC packets → Apple's open-source ALACDecoder → PCM → AAudio output
- Video sound: AAC-ELD packets → Android
AMediaCodec→ PCM → same AAudio stream
Video (video_renderer_mediacodec.cpp):
- H.264 NAL units from iPhone →
AMediaCodechardware decoder →ANativeWindow(SurfaceView) - Zero CPU-copy rendering path
Discovery:
- Android's built-in NsdManager is unreliable advertising to Apple clients
- We use JmDNS with hand-built Bonjour TXT records instead
Requirements: Android NDK r27+, SDK with platforms;android-28, JDK 17.
git clone https://github.com/jimnoneill/FirePlay.git
cd FirePlay
# Windows: edit local.properties with your SDK/NDK paths, then:
gradle assembleDebug
adb install app/build/outputs/apk/debug/app-debug.apkThe build script build.ps1 sets up env vars for Windows ARM64 machines.
| Device | OS | Result |
|---|---|---|
| Fire TV Cube 3rd Gen (AFTGAZL) | Fire OS 7.7.1 | ✅ Music + Photos + Video |
| iPhone 13 | iOS 18 (AirPlay/870.14.1) | ✅ Full pairing + streaming |
The APK ships both armeabi-v7a and arm64-v8a — any Fire TV / Android TV running Android 9+ should work.
- FDH2/UxPlay — AirPlay 2 protocol stack (GPL-3)
- macosforge/alac — Apple ALAC decoder (APSL)
- KDAB/android_openssl — prebuilt OpenSSL for Android
- libimobiledevice/libplist — Apple plist parser (LGPL-2.1)
- jmdns/jmdns — Apple-compatible mDNS in Java
If FirePlay saved you the $5 AirReceiver fee — or if you just think open-source AirPlay on Android should exist — you can help keep it going.
GPL-3.0 (inherited from UxPlay). See LICENSE.
Built with relentless determination and Claude Code.