Skip to content

jqssun/android-airplay-server

Repository files navigation

AirPlay Receiver for Android

Stars GitHub license build release

A fully featured free and open-source implementation of AirPlay for Android that turns your device into an AirPlay-compatible display and speaker, based on UxPlay. It is the first open-source AirPlay 2 receiver for Android and Android TV, and works with iOS/iPadOS, macOS devices as well as other sender implementations.

Get it on Google Play Get it on F-Droid Get it on GitHub

demo.mp4

Compatibility

  • Android 7.0+, including Android TV
  • AirPlay devices on the same subnet, including iOS/iPadOS, macOS devices, or other sender implementations

Features

  • Screen mirroring with H.264 and H.265 (HEVC) video decoding
  • Video streaming with support for live streams and remote playback controls
  • Audio streaming with AAC-ELD, AAC-LC and ALAC audio decoding
  • Music streaming with track information, cover art, and remote playback controls
  • Support for Android TV with directional pad navigation and seeking controls
  • Support for Picture-in-Picture, automatic resolution and mode switching
  • Optional PIN authentication
  • Video resolution, overscan, and frame rate control
  • Audio latency control and support for software decoder fallback
  • Debug overlay with real-time statistics (FPS, bitrate, codec, resolution, frame count, audio volume, etc.)
  • Android native media session integration with notification controls

Warning

DRM content (e.g. from the Apple TV application) is not supported.

Implementation

This application uses the C-based UxPlay library to implement the AirPlay/RAOP protocol, with a JNI bridge to the Android application layer. Audio can be decoded via MediaCodec (AAC) or the Apple ALAC decoder (software fallback), while mirroring video is decoded via MediaCodec and rendered to a SurfaceView. HLS sessions are served through a local playlist proxy.

flowchart LR
    AppleDevice["Apple Device (Sender)"]
    UxPlay["UxPlay (C/JNI)<br/>RAOP + mDNS<br/>FairPlay + HLS"]
    AndroidApp["Android (Receiver)<br/>MediaCodec + AudioTrack<br/>ExoPlayer (HLS)"]

    AppleDevice -- "RAOP / HLS" --> UxPlay
    UxPlay --> AndroidApp
Loading

CMake is used for native C/C++ components under app/src/main/cpp. Submodules must be initialized before building.

git submodule update --init --recursive
./gradlew assembleDebug

Check out the CI for more details on reproducible builds.

Credits

  • UxPlay for the AirPlay/RAOP server implementation
  • ALAC for the lossless audio decoder

Disclaimer: This project is not affiliated with Apple Inc.

About

First open-source AirPlay receiver implementation for Android with mirroring, video and audio support

Resources

License

Stars

102 stars

Watchers

1 watching

Forks

Packages

 
 
 

Contributors