# java-airplay-lib
**Repository Path**: yp_git/java-airplay-lib
## Basic Information
- **Project Name**: java-airplay-lib
- **Description**: 此项目做为加速下载使用,转自:https://github.com/serezhka/java-airplay-lib
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: https://github.com/serezhka/java-airplay-lib
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-11-10
- **Last Updated**: 2022-11-10
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# java-airplay-lib
[](https://github.com/serezhka/java-airplay-lib/actions/workflows/build.yaml)
[](https://jitpack.io/#serezhka/java-airplay-lib)

[](http://opensource.org/licenses/MIT)
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](https://jitpack.io/#serezhka/java-airplay-lib) to your project
* Make your server discoverable by [Bonjour](https://ru.wikipedia.org/wiki/Bonjour)
```java
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.
```java
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](https://github.com/serezhka/java-airplay-server) with Netty
## Links
[Analysis of AirPlay2 Technology](http://www.programmersought.com/article/2084789418/)
## Info
Inspired by many other open source projects analyzing AirPlay2 protocol. Special thanks to OmgHax.c's author 🤯
It took me several months of sleepless nights with debugger and wireshark to make this work.
If you appreciate my work, consider buying me a cup of coffee to keep me recharged
[](https://www.paypal.com/paypalme2/srzhka) [](https://money.yandex.ru/to/4100111540466689)