Skip to content
  • Michael Hanselmann's avatar
    Add Remote Audio Output Protocol stream output plugin · bc9a8478
    Michael Hanselmann authored
    
    
    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: default avatarMichael Hanselmann <public@hansmi.ch>
    Signed-off-by: default avatarRémi Denis-Courmont <rdenis@simphalempin.com>
    bc9a8478