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>
Showing
modules/stream_out/raop.c
0 → 100644
Please register or sign in to comment