ShairPortをインストールする

ShairPortはCとPerlで記述され、AAPLのデコーダ(alac.c)、RAOPパケットハンドラ(hairtunes.c)、AirPlay互換サーバ(shairport.pl)により構成される。OpenSSLやlibao(オーディオ出力ライブラリ)、Avahi(オープンソースによるZeroconf/Bonjour相当の実装)などいくつかのライブラリに依存するため、別途手配が必要だ。LinuxやMac OS XなどUNIX系OSの多くで動作すると推定されるが、今回はMac OS Xをテスト機として利用している。

ShairPortのビルドはMac OS X 10.6.7で行ったが、上述のライブラリはMacPorts経由で用意した。ディスクイメージの形で配布されるMacPortsの基礎部分を導入後、以下のとおりportコマンドを実行すれば、依存関係を解決したうえで必要なパッケージをインストールしてくれる。ただし、MacPorts導入直後は関連するパッケージのインストール作業が多いため、5時間程度は見ておいたほうがいいだろう。

$ sudo port install libao openssl nss avahi

Perlスクリプトの動作には、「HTTP::Message」などいくつかのPerlモジュールを別途手配する必要がある。以下のとおりコマンドを実行すれば、CPAN(インターネット上のPerlソフトウェアアーカイブ)から自動的にモジュールをダウンロードし、適切な位置にインストールしてくれる。

$ sudo cpan HTTP:Message
$ sudo cpan Crypt::OpenSSL::RSA
$ sudo cpan IO::Socket::INET6

アプリケーション間でやりとりを行うメッセージバス(D-Bus)と、Avahiのサービスを起動しておく必要もある。その手順は以下のとおり、MacPortsの導入後に実行すること。

$ sudo launchctl load -w /Library/LaunchAgents/org.freedesktop.dbus-session.plist 
$ sudo launchctl load -w /Library/LaunchDaemons/org.freedesktop.dbus-system.plist 
$ sudo launchctl load -w /Library/LaunchDaemons/org.freedesktop.avahi-daemon.plist

これでようやくShairPortのインストールに着手できる。その手順は以下のとおり、バージョンは本稿執筆時点で最新のv0.03を例にしているため、適宜読み替えてほしい。

$ curl -O http://mafipulation.org/static/shairport-0.03.tar.gz
$ tar xzf shairport-0.03.tar.gz
$ cd shairport-0.03
$ make

Macが「AirPlayスピーカ」として動作した!

Perlスクリプト「shairport.pl」を実行すると、ShairPortのサービスが開始され、同一サブネット上に存在するAirPlayクライアント(iTunesやiOSアプリ)からの指示待ち状態となる。なお、MacPortsを利用する場合、MacPortsに収録のPerlを使用することになるので、shairpoint.plの先頭行を「#!/opt/local/bin/perl」に書き換えておいたほうがいいだろう。

$ ./shairpoint.pl

最初のテストは、iOSアプリ「iPod」で行った。iPhone 4に転送済のオーディオファイル3種(MP3/AAC/ALAC)を再生し、shairpot.plが動作中のMacでどのように音声が聴こえるか、ステレオミニプラグにつないだステレオヘッドホンで検証してみた。

いずれのファイルも再生に成功したが、再生途中で何度となく「missing frame」と表示され、音が途切れるトラブルが発生した。この現象はMP3/AAC/ALACいずれの場合でも発生したため、ShairPort側の実装にかかわる問題と考えられる。

ShairPortをターミナルから実行したところ。現行バージョンではパケットロスが頻繁に発生するため、オーディオファンには不満が残るはず

iOSデバイスから出力先にShairPortを選択すれば、MacやLinuxを外部スピーカーとして利用できる

気になる音質はといえば、iPhone 4のステレオミニプラグに接続したときよりクリアに感じられた。AirPlay(旧AirTunes)で音楽を聴く場合、すべてのオーディオファイルは必要ならばデコードされたうえでALACデータとして配信されるため、理論的には劣化の余地がない。そのため、人間の耳にはiPhone 4とMacそれぞれに内蔵されたDACの性能差として感じられるはずで、筆者にはMacBook Pro 13インチに内蔵のDACがより高音質に聞こえた、ということになる。

iTunes Storeで購入したDRM(FairPlay)付のAACも再生できた。再生開始までのネゴシエーションに時間がかかることもなく、DRMなしの曲と扱い方は変わらない。ビデオについてもDRMの有無は影響しなかったが、音声はShairPortで映像はiPhone 4、しかも音と映像が同期しないというチグハグな再生になった。

ShairPortが動作しはじめると、iTunesの外部スピーカーとして選択できるようになる

ShairPortの今後だが、リバースエンジニアリングの実施が明白なだけに、Appleが静観するとは考えにくい。いずれ作者に公開停止を求めることは確実だろう。

しかし、AirPlayはサードパーティーに供与されていることもあり、いちど流出したプライベートキーを無効化することは難しい。Apple TVなど自社製品はファームウェアアップデートで対応できるかもしれないが、サードパーティーのAV機器にまで迅速な対応を求めるのは厳しいだろう。かつてコピーガードが破られ現在でも手のうちようがない、DVD-VideoのCSSという前例もある。Appleがどのようなアクションを起こすか、今後に注目したい。