Creates a new Sink to stream to an Airplay device.
Normally this sink is automatically created with RAOP Discover with the right parameters but it is possible to manually create a RAOP sink as well.
Module Name
libpipewire-module-raop-sink
Module Options
Options specific to the behavior of this module
- raop.ip: The ip address of the remote end.
- raop.port: The port of the remote end.
- raop.name: The name of the remote end.
- raop.hostname: The hostname of the remote end.
- raop.transport: The data transport to use, one of "udp" or "tcp". Defaults to "udp".
- raop.encryption.type: The encryption type to use. One of:
- "none" - No encryption
- "RSA" - Legacy RSA encryption
- "auth_setup" - Legacy auth setup
- "pair_transient" - Transient pairing (3rd party devices, PIN 3939)
- "pair_homekit" - HomeKit pairing (3rd party with persistent keys)
- "pair_apple" - Apple pairing (Apple TV, HomePod) Default is "none".
- raop.audio.codec: The audio codec to use. Needs to be "PCM". Defaults to "PCM".
- raop.password: The password to use.
- raop.latency.ms: The playback delay on the receiver in milliseconds, i.e. how long after sending the audio is played. Lower values reduce the delay but need a more reliable network. Values below 250 are raised to 250, and a larger Audio-Latency requested by the receiver takes precedence. Default is 1500.
- raop.disable-volume: If set to "true", the module will not send volume commands to the remote device. Volume and mute are then applied in software instead and the sink is advertised as having no hardware volume control. Default is "false".
- raop.auth_key: Stored authorization key from pair-setup (for pair_homekit/pair_apple). Format: 128 hex chars (Ed25519 private key) + 64 hex chars (server public key).
- raop.pairing-pin: PIN for the one-time pairing that produces raop.auth_key. For Apple devices (Apple TV/HomePod) this is the code shown on the device. For receivers that display their code on screen only when asked (LG webOS TVs and similar), set it to the literal "WAIT": the module runs POST /pair-pin-start so the code appears, then reads the code from raop.pairing-pin-file and completes pair-setup on the same connection. When set, the module runs pair-setup, logs the resulting key, and stops (it does not stream). Set raop.auth_key to that value and remove raop.pairing-pin to connect from then on.
- raop.pairing-pin-file: File the module polls for the on-screen PIN when raop.pairing-pin=WAIT (default /tmp/pipewire-raop-pin). Write the digits shown on the receiver to this file within ~28s.
- raop.auth-key-file: Optional path to also write the authorization key to after pairing.
- stream.props = {}: properties to be passed to the sink stream
Options with well-known behavior.
Example configuration
# ~/.config/pipewire/pipewire.conf.d/my-raop-sink.conf
context.modules = [
{ name = libpipewire-module-raop-sink
args = {
# Set the remote address to tunnel to
raop.ip = "127.0.0.1"
raop.port = 8190
raop.name = "my-raop-device"
raop.hostname = "My Service"
#raop.transport = "udp"
raop.encryption.type = "RSA"
#raop.audio.codec = "PCM"
#raop.password = "****"
#raop.latency.ms = 1500
#raop.disable-volume = "true"
#audio.format = "S16"
#audio.rate = 44100
#audio.channels = 2
#audio.position = [ FL FR ]
stream.props = {
# extra sink properties
}
}
}
]
See also
RAOP Discover