xbmc/shairplay

Name: shairplay

Owner: Team Kodi

Description: Apple airplay and raop protocol server

Forked from: juhovh/shairplay

Created: 2016-07-08 16:52:11.0

Updated: 2017-02-19 11:52:01.0

Pushed: 2016-12-03 16:56:53.0

Homepage:

Size: 539

Language: C

GitHub Committers

UserMost Recent Commit# Commits

Other Committers

UserEmailMost Recent Commit# Commits

README

Shairplay

Free portable AirPlay server implementation similar to ShairPort.

Currently only AirPort Express emulation is supported.

Disclaimer

All the resources in this repository are written using only freely available information from the internet. The code and related resources are meant for educational purposes only. It is the responsibility of the user to make sure all local laws are adhered to.

Installation

First you need to install some dependencies, for example on Ubuntu you would write:

 apt-get install autoconf automake libtool
 apt-get install libltdl-dev libao-dev libavahi-compat-libdnssd-dev
 apt-get install avahi-daemon

togen.sh
nfigure

 make install

Notice that libao is required in order to install the shairplay binary, otherwise only the library is compiled and installed.

Usage

Check available options with `shairplay --help`:

e: shairplay [OPTION...]

, --apname=AirPort            Sets Airport name
, --password=secret           Sets password
, --server_port=5000          Sets port for RAOP service
  --ao_driver=driver          Sets the ao driver (optional)
  --hwaddr=address            Sets the MAC address, useful if running multuple instances
  --ao_devicename=devicename  Sets the ao device name (optional)
  --ao_deviceid=id            Sets the ao device id (optional)
, --help                      This help

Start the server with `shairplay`, if you are connected to a Wi-Fi the server should show as an AirPort Express on your iOS devices and Mac OS X computers in the same network.

Notice that you need to have the airport.key file in your working directory when starting the shairplay service. It is not included in the binary for possible legal reasons.

Multiple Instances

Shairplay advertises over mDNS in the form 485D607CEE22@Dining Room Speakers where 485D607CEE22 is a MAC address. This is hardcoded to a nonsense value, which is not a problem so long as it's unique. However, if you run multiple Shairplay instances, iOS devices will only recognize one of them. To fix this, supply the –hwaddr option with different values on each device.

Related software
Description

Short description about what each file in the main library does:

lib/base64.*         - base64 encoder/decoder
lib/dnssd.*          - dnssd helper functions
lib/http_parser.*    - HTTP parser from joyent (nginx fork)
lib/http_request.*   - Request parser that uses http_parser
lib/http_response.*  - Extremely simple HTTP response serializer
lib/httpd.*          - Generic HTTP/RTSP server
lib/logger.*         - Logging related functions
lib/netutils.*       - Mostly socket related code
lib/raop.*           - Main RAOP handler, handles all RTSP stuff
lib/raop_rtp.*       - Handles the RAOP RTP related stuff (UDP/TCP)
lib/raop_buffer.*    - Parses and buffers RAOP packets, resend logic here
lib/rsakey.*         - Decrypts and parses the RSA key to bigints
lib/rsapem.*         - Converts the RSA PEM key to DER encoded bytes
lib/sdp.*            - Extremely simple RAOP specific SDP parser
lib/utils.*          - Utils for reading a file and handling strings

Short description about what each file in the Qt application does:

V-Qt/main.cpp                 - Initializes the application
V-Qt/mainapplication.cpp      - Creates the tray icon and starts RAOP
V-Qt/raopservice.cpp          - Handles all communication with the library
V-Qt/raopcallbackhandler.cpp  - Converts C callbacks to Qt callbacks
V-Qt/audiooutput.cpp          - Takes care of the actual audio output

This work is supported by the National Institutes of Health's National Center for Advancing Translational Sciences, Grant Number U24TR002306. This work is solely the responsibility of the creators and does not necessarily represent the official views of the National Institutes of Health.