iOS4から搭載されたAirPlayという、AppleTVとかに再生している音楽や動画を飛ばす機能なのですが、再生先としてWindows PCが使える AirMediaPlayer が公開されました。
Windows を AirPlay対応にする非純正アプリ AirMediaPlayer - Engadget Japanese
が、依存コンポーネント全部最新にしているにもかかわらず「Bonjourがインストールされていない」と表示されます。調べてみると、古いBonjour for Windowsに入っていたdnssdX.dllに依存している様子。
そもそもAirMediaPlayerの実装がまずいよなーと思いつつ、古いものを探すも見つからなかったのでソースからビルドしました。
まず、Appleのサイトからソースをダウンロードします。ソースブラウザが公開されているのですが、tarballとかで落としてくる機能が見つからなかったので、こういうコード書いてがすっと取ってきました。
require 'rubygems' require 'hpricot' require 'open-uri' base_url = "http://opensource.apple.com" base_path = "/source/mDNSResponder/mDNSResponder-258.13/" class Downloader def initialize (base_url, base_path) @base_url = base_url @base_path = base_path end def exec_downloader download_dir(@base_path) end def download_dir(path) relative_path = path[@base_path.length..path.length] if relative_path != nil puts relative_path system("mkdir -p #{relative_path}") end url = @base_url+path doc = Hpricot( open(url).read ) (doc/:td).each do |td| if td.attributes['valign'] (td/:a).each do |link| if link[:href] =~ /^[^\/].+[^\/]$/ system "wget -O #{relative_path}#{link[:href]} #{url}#{link[:href]}?txt" elsif link[:href] =~ /^[^\/].+[\/]$/ download_dir path + link[:href] end end end end end end Downloader.new(base_url, base_path).exec_downloader
で、このスクリプトでダウンロードするとVBのサンプルが開けないので「Clients\DNSServiceBrowser.VB\My%20Projects」の%20を半角スペースに変更します。
そして、VisualStudio 2008もしくは2010で開いて、ビルドします。デフォルトでx64が選択されているので、32bit OSの人は構成をWin32に切り替えることを忘れずに。エラーが一杯出ますが特に気にしなくていいです。
その後、mDNSWindows\DLLX\{x64,Win32}\Debug に入っている dnssdX.dll を C:\Program Files\Bonjour\ あたりにコピーしておきます。
そして、管理者権限のあるコマンドプロンプトを開いて、regsvr32 dnssdX.dll です。
うちで一番大きい画面でいい音が鳴るスピーカーを持つTouchsmart PCにとばせて満足しました。音楽の方は未対応みたいなのがちょっと残念でした。
2010/12/24(Fri) 追記
id:tmyt に tarball のありかを教えてもらいました。涙目。
http://opensource.apple.com/tarballs/mDNSResponder/mDNSResponder-258.13.tar.gz