Raspberry Pi 2 Model B を AirPlay サーバに

何本煎じのネタかわからないぐらい情報がありますが、自分自身で Raspberry Pi 2 Model B 上の Debian GNU/Linux 8 (Raspbian ではない) のシステムに、「abrasive/shairport · GitHub」をインストールした際の記録です。

手元の iOS デバイスの音楽を、iOS デバイスと同一ネットワーク内のサーバに接続した USB-DAC 経由でスピーカーから流す、と言うのを行いました。

なお、サーバには既に avahi-daemon が設定済みであることが前提です。


■ ALSA の設定

USB-DAC を優先とするために、ALSA を設定します。

・ALSA の設定ユーティリティをインストール

# apt-get install alsa-utils

・サウンドカードを確認

# cat /proc/asound/modules
 0 snd_bcm2835
 1 snd_usb_audio

今回は USB-DAC の snd_usb_audio をデフォルトにします。

・/etc/modprobe.d/alsa-base.conf 設定ファイルを作成 (snd_usb_audio をデフォルトに)

options snd slots=snd_usb_audio,snd_bcm2835
options snd_usb_audio index=0
options snd_bcm2835 index=1

・設定を有効にするため再起動

# reboot

・設定を確認

# cat /proc/asound/modules 
 0 snd_usb_audio
 1 snd_bcm2835

・ボリュームなどを調整

# alsamixer

・テストで再生 (USB-DAC 経由で再生されば OK)

# aplay /usr/share/sounds/alsa/Front_Center.wav

■ shairport のインストールとテスト

・shairport 実行用のユーザを作成し、audio グループに属させる

# useradd -s /bin/sh shairport
# adduser shairport audio

・ビルドに必要なパッケージをインストールする

# apt-get install build-essential libssl-dev libavahi-client-dev libasound2-dev

・shairport ユーザになり、任意のディレクトリでビルドする

# cd /usr/local/src/shairport
# chown -R shairport shairport
# su shairport
$ cd shairport
$ git clone https://github.com/abrasive/shairport.git
$ cd shairport
$ ./configure
$ make

・テスト起動

$ ./shairport

AirPlay クライアントから再生して、shairport 経由で音が出るか確認します。

ここで、iOS デバイスからは認識されるのに、認識されないとか、認識されても音が出ないと言う場合、パケットフィルタリングの影響の可能性が高いです。

サーバ側では、TCP 5002 ポート、UDP 35000 〜 65535 ポートでサーバに着信できるようにする必要があるようです。(私も UDP のほうではまりました。)

・インストール

# cd /usr/local/src/shairport/shairport
# make instsll

/usr/local/bin/shairport に実行ファイルがインストールされます。


■システム起動時に自動的に実行するようにする

・実行ユーザについてログインできなくする

# usermod -s /bin/false shairport

・systemd 関係のファイルがサンプルで入っているので、コピーして使用

# cp -p /usr/local/src/shairport/shairport/scripts/systemd/shairport.service /etc/systemd/system/
# chown root:root /etc/systemd/system/shairport.service

・/etc/systemd/system/shairport.service ファイルの中身を以下のように変更する

[Unit]
Description=Shairport AirTunes receiver
After=sound.target
Requires=avahi-daemon.service
After=avahi-daemon.service

[Service]
ExecStart=/usr/local/bin/shairport
Restart=always
User=shairport
Group=shairport

[Install]
WantedBy=multi-user.target

・systemd をリロードする

# systemctl daemon-reload

・起動するか確認

# systemctl start shairport.service

・停止するか確認

# systemctl stop shairport.service

・起動時に有効とする

# systemctl enable shairport.service

これで、サーバリブートをしても自動的に shairport が起動されます。

結果的には、ちゃんと再生されましたが、結構なレンジで UDP を開けなければいけないのが嫌だなぁ。


■参考サイト


■追記

Shairport Sync での設定のメモも記載しました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です