AirMediaPlayerを使うためにBonjour for Windowsのソースをビルドしたまとめ

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