Raspberry Pi 2 Model B を AirPlay サーバに (Shairport Sync 利用編)

Raspberry Pi 2 Model B を AirPlay サーバに」で、「ShairPort」を使用して、AirPlay サーバを設定したのですが、以下の点で、若干問題が生じたのと、気になっていた点がありました。

  • iOS デバイス側で曲をスキップすると、再生が止まってしまう。
  • サーバ側で UDP ポートについて広い範囲で入力を許可としないといけない。

派生版 (?) の「Shairport Sync」を使用してみたところ、これらの問題を解決することが出来ました。


■前提条件

Raspberry Pi 2 Model B を AirPlay サーバに」の「ALSA の設定」の項目の設定が全て完了し、また前回と環境も同じであることとなります。


■ shairport-sync のインストール

インストール方法はほとんど「GitHub – mikebrady/shairport-sync: AirPlay audio player. Shairport Sync adds multi-room capability with Audio Synchronisation」の「Building And Installing」の「General Build Instructions」の項目そのままでいけます。

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

# useradd -s /bin/false shairport-sync
# adduser shairport-sync audio

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

# apt-get install build-essential git autoconf automake libtool libdaemon-dev libasound2-dev libpopt-dev libconfig-dev libavahi-client-dev libssl-dev libpolarssl-dev libsoxr-dev

※上記では入れているけれど、OpenSSL でいくなら多分 libpolarssl-dev はいらないと思います。

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

$ git clone https://github.com/mikebrady/shairport-sync.git
$ cd shairport-sync
$ autoreconf -i -f
$ ./configure --with-alsa --with-avahi --with-ssl=openssl --with-metadata --with-soxr --with-systemd
$ make

・インストール

root 権限になり、上記でビルドしたディレクトリに移動してインストールをする。

# make install

・サービスの設定

今まで、ShairPort を使用していたので、それを停止して、自動起動しないようにします。

# systemctl stop shairport.service
# systemctl disable shairport.service

■ shairport-sync の設定

・/etc/shairport-sync.conf (root:shairport-sync 640) ファイルの設定

とりあえず私は以下のようにしました。

general =
{
	name = "Speaker";
	password = "test"		// この AirPlay サーバに接続するためのパスワードを適当に設定。
	interpolation = "soxr";
	output_backend = "alsa";
	mdns_backend = "avahi";
	port = 5000;
	udp_port_base = 6001;
	udp_port_range = 3;
	statistics = "yes";
	drift = 352;
	resync_threshold = 0;	// これを 0 に設定しないと、同期が外れたときに数秒ミュートしてしまうので。
	log_verbosity = 0;
};

metadata =
{
};

sessioncontrol =
{
};

alsa =
{
	output_device = "hw:0,0";
	mixer_device = "hw:0";
	mixer_control_name = "PCM";
	// この辺りの設定値は、「aplay -l」や、「alsamixer」とかで調べてみる。
};

pipe =
{
};

stdout =
{
};

ao =
{
};

latencies =
{
};

・通過させるべきポート

以下のポートさえ通過させておけば、OK かと思われます。

  • UDP 5353 あて (INPUT / OUTPUT とも)
  • TCP 5000 あて (INPUT のみ)
  • UDP 6001, 6002, 6003 (INPUT はこのポートへの着信、OUTPUT はソースポートがこのポートとするもの)

・サービスの設定

すでに /lib/systemd/system/shairport-sync.service として設定ファイルがインストールされているので、これをそのまま利用します。

# systemctl enable shairport-sync.service
# systemctl start shairport-sync.service

以上で iOS デバイス側から、AirPlay で「Speaker」が表示されるので、そちらを選択して音楽を再生すれば、設定した本サーバを利用しての再生が出来ると思います。

なお、ShairPort も今回設定した Shairport Sync でも、時々再生中に音が途切れることがありますが、これはもう仕方が無いのかなぁ、と思います。

Shairport Sync は、50ms ほど同期がずれると再同期させるため、ミュートするような動作のようなのですが、これが結構気になるので、再同期をしない (resync_threshold = 0;) として、少しの音切れが生じる程度にしています。

ちなみに、Shairport Sync は、Debian の次期バージョン (stretch) に収録されるみたいですね。

Raspberry Pi 2 Model B を AirPlay サーバに (Shairport Sync 利用編)” への2件のコメント

  1. 設定ファイルが見つかりません…
    cat /etc/shairport-sync.conf
    cat: /etc/shairport-sync.conf: No such file or directory

    OSの再インストールを3回ほど繰り返しましたが
    結果は同じくshairport-sync.conf が見つかりません。

    対処方法がありましたら教えてください
    よろしくお願い致します。

    使用機材:Raspberry Pi 2 Model B

    • 使用している OS の種類が不明ですが、Debian 8 の場合だと、OS 再インストールではなく、Shairport Sync そのものをインストールする必要があります。

      詳しくは、「Shairport Sync の README」を確認されることをお勧めいたします。

      また、インストールしても設定ファイルがない場合は、自分で作成する必要があります。

コメントを残す

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