1Shairplay 2========= 3Free portable AirPlay server implementation similar to [ShairPort](https://github.com/abrasive/shairport). 4 5Currently only AirPort Express emulation is supported. 6 7Disclaimer 8---------- 9All the resources in this repository are written using only freely available 10information from the internet. The code and related resources are meant for 11educational purposes only. It is the responsibility of the user to make sure 12all local laws are adhered to. 13 14Installation 15------------ 16 17First you need to install some dependencies, for example on Ubuntu you would 18write: 19``` 20sudo apt-get install autoconf automake libtool 21sudo apt-get install libltdl-dev libao-dev libavahi-compat-libdnssd-dev 22sudo apt-get install avahi-daemon 23``` 24 25``` 26./autogen.sh 27./configure 28make 29sudo make install 30``` 31 32Notice that libao is required in order to install the shairplay binary, 33otherwise only the library is compiled and installed. 34 35Usage 36----- 37 38Check available options with ```shairplay --help```: 39 40``` 41Usage: shairplay [OPTION...] 42 43 -a, --apname=AirPort Sets Airport name 44 -p, --password=secret Sets password 45 -o, --server_port=5000 Sets port for RAOP service 46 --ao_driver=driver Sets the ao driver (optional) 47 --ao_devicename=devicename Sets the ao device name (optional) 48 --ao_deviceid=id Sets the ao device id (optional) 49 -h, --help This help 50``` 51 52Start the server with ```shairplay```, if you are connected to a Wi-Fi the 53server should show as an AirPort Express on your iOS devices and Mac OS X 54computers in the same network. 55 56Notice that you need to have the airport.key file in your working directory when 57starting the shairplay service. It is not included in the binary for possible 58legal reasons. 59 60Related software 61---------------- 62 63* [ShairPort](https://github.com/abrasive/shairport), original AirPort Express emulator 64* [ALAC](http://craz.net/programs/itunes/alac.html), ALAC decoder by David Hammerton 65 66Description 67----------- 68 69Short description about what each file in the main library does: 70 71``` 72src/lib/base64.* - base64 encoder/decoder 73src/lib/dnssd.* - dnssd helper functions 74src/lib/http_parser.* - HTTP parser from joyent (nginx fork) 75src/lib/http_request.* - Request parser that uses http_parser 76src/lib/http_response.* - Extremely simple HTTP response serializer 77src/lib/httpd.* - Generic HTTP/RTSP server 78src/lib/logger.* - Logging related functions 79src/lib/netutils.* - Mostly socket related code 80src/lib/raop.* - Main RAOP handler, handles all RTSP stuff 81src/lib/raop_rtp.* - Handles the RAOP RTP related stuff (UDP/TCP) 82src/lib/raop_buffer.* - Parses and buffers RAOP packets, resend logic here 83src/lib/rsakey.* - Decrypts and parses the RSA key to bigints 84src/lib/rsapem.* - Converts the RSA PEM key to DER encoded bytes 85src/lib/sdp.* - Extremely simple RAOP specific SDP parser 86src/lib/utils.* - Utils for reading a file and handling strings 87``` 88 89Short description about what each file in the Qt application does: 90 91``` 92AirTV-Qt/main.cpp - Initializes the application 93AirTV-Qt/mainapplication.cpp - Creates the tray icon and starts RAOP 94AirTV-Qt/raopservice.cpp - Handles all communication with the library 95AirTV-Qt/raopcallbackhandler.cpp - Converts C callbacks to Qt callbacks 96AirTV-Qt/audiooutput.cpp - Takes care of the actual audio output 97``` 98 99