Skip to content

Navigation Menu

Sign in
Sign up

Latest commit

History

24 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

java-airplay-lib

build Release ViewCount License




14.12.2022: Check out new java-airplay project: https://github.com/serezhka/java-airplay


This library is intended to easily create AirPlay2 servers acting like Apple TV. Tested with iPhone X (iOS 14.0.1)

How to use?

  • Add java-airplay-lib dependency to your project

  • Make your server discoverable by Bonjour

 String serverName = "@srzhka";
 int airPlayPort = 5001;
 int airTunesPort = 7001;
 AirPlayBonjour airPlayBonjour = new AirPlayBonjour(serverName);
 airPlayBonjour.start(airPlayPort, airTunesPort);
 ...
 airPlayBonjour.stop();

  • Listen airTunesPort and handle RTSP requests. Pass request content bytes to the library and respond with provided content bytes.
 RTSP GET | POST
 String uri = ...
 byte[] requestContent = ...
 switch (uri) {
 case "/info": {
 airPlay.info(.. byte output stream ..);
 // RTSP OK + provided bytes 
 }
 case "/pair-setup": {
 airPlay.pairSetup(.. byte output stream ..);
 // RTSP OK + provided bytes 
 }
 case "/pair-verify": {
 airPlay.pairVerify(.. requestContent input stream ..,
 .. byte output stream ..);
 // RTSP OK + provided bytes 
 }
 case "/fp-setup": {
 airPlay.fairPlaySetup(.. requestContent input stream ..,
 .. byte output stream ..);
 // RTSP OK + provided bytes
 }
 case "/feedback": {
 // RTSP OK
 }
 }
 
 RTSP SETUP
 
 airPlay.rtspSetup(.. requestContent input stream ..,
 .. byte output stream .., int videoDataPort, int videoEventPort,
 int videoTimingPort, int audioDataPort, int audioControlPort); 
 // RTSP OK + provided bytes
 
 if (airPlay.isFairPlayVideoDecryptorReady()) {
 // start listening video data on videoDataPort 
 }
 
 if (airPlay.isFairPlayAudioDecryptorReady()) {
 // start listening audio data on audioDataPort 
 }
 
 RTSP GET_PARAMETER, RECORD, SET_PARAMETER, TEARDOWN
 
 ...
 
 DECRYPT MIRROR DATA
 
 airPlay.decryptVideo(byte[] video);
 
 airPlay.decryptAudio(byte[] audio, int audioLength);

Example server

java-airplay-server with Netty

Links

Analysis of AirPlay2 Technology

Info

Inspired by many other open source projects analyzing AirPlay2 protocol. Special thanks to OmgHax.c's author 🀯

About

This library is intended to easily create AirPlay2 servers acting like Apple TV

Topics

Resources

Stars

206 stars

Watchers

19 watching

Forks

Releases

Packages

Contributors

Languages

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /