這兩天在 Reddit 上看到一個關於「AirPlay 2 on Linux」的帖子,其中推薦了 Shairport Sync 項目,於是我打算給家裡在用的樹莓派的 AirPlay 升級一下。大家有能力的可以直接去看原文,裡面文件寫的很詳細
準備#
-
一台 Linux 或 FreeBSD 的設備,其性能至少要大於等於樹莓派 2
-
319 和 320 端口沒有被佔用
-
一個音箱(最好是 3.5mm 接口)
開始安裝#
首選建議大家先將系統更新到最新狀態,可以大大減少許多莫名其妙的問題。
sudo apt-get update #檢查更新
sudo apt-get upgrade #執行更新
關閉 Wi-Fi 節能管理#
如果你使用設備使用 Wi-Fi 連接的話,需要將節能管理關閉,可以避免安裝後設備進入節能後搜索不到音箱。
iwconfig wlan0 power off
安裝依賴#
apt install --no-install-recommends build-essential git xxd xmltoman \ autoconf automake libtool libpopt-dev libconfig-dev libasound2-dev \ avahi-daemon libavahi-client-dev libssl-dev libsoxr-dev libplist-dev \ libsodium-dev libavutil-dev libavcodec-dev libavformat-dev uuid-dev libgcrypt-dev
nqptp#
nqptp是 Shairport Sync 監控時間的重要依賴,需要手動編譯安裝。
git clone https://github.com/mikebrady/nqptp.git #下載項目
cd nqptp #進入項目目錄
autoreconf -fi #編譯
./configure --with-systemd-startup #配置
make #構建環境
make install #安裝
安裝完畢後,需要啟動 nqptp:
systemctl enable nqptp #設置自動啟動
systemctl start nqptp #啟動nqptp
sps-alsa-explore#
一個可以幫助我們 Shairport Sync 的工具,可以很直觀的列出當前的音頻輸出設備,需要手動編譯安裝。
git clone https://github.com/mikebrady/sps-alsa-explore.git #下載項目
cd sps-alsa-explore #進入項目目錄
autoreconf -fi #編譯
./configure #配置
make #構建環境
將音箱連接到樹莓派,然後在 sps-alsa-explore 目錄下執行./sps-alsa-explore
:
記錄下Device Full Name:"hw:Headphones"
和Possible mixers:"Headphone"
在後續配置文件中使用。
#
編譯安裝 Shairport Sync#
git clone https://github.com/mikebrady/shairport-sync.git #下載項目
cd shairport-sync #進入項目目錄
git checkout development #切換到development分支
autoreconf -fi #編譯
./configure --sysconfdir=/etc --with-alsa --with-soxr --with-avahi --with-ssl=openssl --with-systemd --with-airplay-2 #配置
make -j #構建環境
make install #安裝
#
配置 Shairport Sync#
Shairport Sync 的配置文件路徑在/etc/shairport-sync.conf
,其中輸出設備這裡需要配置一下,熟悉 vi/vim 的朋友可以直接 sudo vi /etc/shairport-sync.conf
配置一下,其中output_device
和mixer_control_name
都可以在前面./sps-alsa-explore
的結果中找到。
alsa =
{
output_device = "hw:Headphones";
mixer_control_name = "Headphone";
};
配置文件中有大量註釋說明,大家可以按需配置。
啟動 Shairport Sync#
systemctl enable shairport-sync #設置自動啟動
systemctl start shairport-sync #啟動Shairport Sync
添加到 HomeKit#
在添加配件時,點擊「沒有代碼或無法掃描?」,家庭 app 就會發現 AirPlay 2 設備,點擊即可加入。
遇到的問題#
在「多房間音頻系統」播放時存在延遲,我翻了下Shairport Sync的 Issues 發現並不是所有人都存在這個問題,通常 HDMI 連接的設備都會存在 100 毫秒左右的延遲。在文檔的常見問題中給出的解決方法是手動設置一個延遲,在配置文件/etc/shairport-sync.conf
中有一個audio_backend_latency_offset_in_seconds
配置項單位為秒:
有其他問題的話可以先到文檔中排查 「Troubleshooting」
使用感受#
折騰完用了幾天後感覺還算是可用狀態,借此也讓我體驗到「多房間音頻系統」的功能,但僅限於聽歌或播客之類的音頻,AirPlay 的延遲一就是個頭疼的問題,許多視頻軟件由於沒有適配會出現音畫不同步問題,就算適配 AirPlay 之後也會存在一個緩衝的延遲。但作為音頻播放器在「多房間音頻系統」時還是很方便的。
當然對於不喜歡折騰的人,Airport Express 2 (A1392) 也許是更好的選擇,簡單配置就可以讓音箱支持 AirPlay2,咸魚價格在 150~200。