Add Remote Audio Output Protocol stream output plugin
authorMichael Hanselmann <public@hansmi.ch>
Tue, 16 Dec 2008 21:26:10 +0000 (22:26 +0100)
committerRémi Denis-Courmont <rdenis@simphalempin.com>
Fri, 19 Dec 2008 17:03:50 +0000 (19:03 +0200)
commitbc9a84781306ab22d2facc636a2f82eb6ba2abd3
treec6491a1e4c99ec376edd1ea1e439f1d2d3883b6c
parentbf89dc16d4bc6fff1c4bcd53d078f4c046eca11f
Add Remote Audio Output Protocol stream output plugin

Apple AirPort Express devices can play audio streamed over the
network. The Remote Audio Output Protocol was reverse-engineered
by Jon Lech Johansen in 2004. He also released a proof of concept
implementation named JustePort.

The control protocol is similar to interleaved RTSP record mode and
based on HTTP. It is used to negotiate details before sending music
data over an AES encrypted TCP connection. RSA is used to encrypt the
AES key before transfering it via an HTTP header. To this day, only
the public part of the RSA key has been made public while the private
part remains unknown.

VLC uses libgcrypt for encryption. Unfortunately, libgcrypt doesn't
support the OAEP standard as defined in RFC2437 and RAOP demands
OAEP padding for RSA encrypted data. OAEP has been reimplemented from
scratch based on the specification for this plugin. These functions,
MGF1 and AddOaepPadding, can be adopted for libgcrypt at a later time.

All input data must be encoded using the Apple Lossless codec with
44100 Hz and 2 channels. The "transcode" plugin can be used to
reencode input data. Updating the volume while playing is not yet
supported. Except for logging, no use is made of the audio delay
and jack type reported by the device.

Apple's RAOP-compatible devices announce themselves on the network
using Zeroconf, but discovering them is not implemented in this
plugin. The service type is "_raop._tcp".

The "raop" plugin can be used like this:
--sout='#transcode{acodec=alac,channels=2}:raop{host=hostname}'

It also supports a "volume" parameter with a range from 0 to 255.

Signed-off-by: Michael Hanselmann <public@hansmi.ch>
Signed-off-by: Rémi Denis-Courmont <rdenis@simphalempin.com>
configure.ac
modules/stream_out/Modules.am
modules/stream_out/raop.c [new file with mode: 0644]