無意間發現PipeWire有個模組叫做RAOP Discover (libpipewire-module-raop-discover),讓Linux能將音樂傳輸到AirPlay音響。啟用後Linux會透過Avahi服務,探索區域網路中的AirPlay裝置,並自動連線。
PulseAudio也有叫做module-raop-discover
的模組,可透過pipewire-pulse相容層運作。
這裡我們使用PipeWire載入模組。
1. 測試環境#
Arch Linux版本:6.6.46
PipeWire版本:1.2.2
接收端得使用Mac電腦或者支援AirPlay的HomePod音響,某些第三方的AirPlay接收軟體也行,例如Android的AirScreen。
開源的UxPlay(版本1.69)無法處理RAOP的音訊播放請求。
2. 載入模組#
- 安裝pipewire-zeroconf套件
sudo pacman -S pipewire-zeroconf
- 啟用Avahi服務
sudo systemctl enable --now avahi-daemon
- 用pw-cli載入模組
pw-cli -m load-module libpipewire-module-raop-discover
- 編輯
~/.config/pipewire/pipewire.conf.d/raop-discover.conf
,設定登入後自動載入
context.modules = [
{
name = libpipewire-module-raop-discover
args = { }
}
]
GNOME 46桌面的音訊播放面板會自動出現AirPlay裝置,但KDE 6不會,所以我們這裡用pavucontrol統一控制。
開啟pavucontrol,選取AirPlay作為輸出裝置
從音效條的動畫來看,播放是有輸出音效沒錯,但AirPlay接收端卻無法播放音效,可能是bug?
Helvum的圖表顯示AirPlay Sink確實有出現沒錯啊!
啟用除錯輸出:PIPEWIRE_DEBUG=3 pw-cli -m load-module libpipewire-module-raop-discover
,也看不出所以然。沒幾下就broken pipe