私は新しい CoreAudio API に慣れていないので、もっと簡単な方法があるかもしれません。昨年、同じ問題を解決した方法を次に示します。
Bonjour (マルチキャスト DNS または Zeroconf とも呼ばれます) を使用して、デバイスがパスワードを必要とするかどうかを判断できます。ソース名と CoreAudio 情報を一致させることができるはずです。オーディオ AirPlay の場合、_raop._tcp
デバイスを確認する必要があります。ターミナルからの操作は次のとおりです。
dns-sd
まず、近くの AirPlay デバイスを検出します (このコマンドはmDNS
Mountain Lionの前に呼び出されることに注意してください)。
ローレント ~ $ dns-sd -B _raop._tcp
_raop._tcp の参照
日付: ---2013年1月15日(火)---
17:37:31.977 ...開始中...
ドメイン サービス タイプ インスタンス名の場合のタイムスタンプ A/R フラグ
17:37:31.977 2 4 ローカルを追加します。_raop._tcp. 406C8F53F1DD@iMac デ ローラン
次に、AirPlay インスタンスの完全なレコードを取得します。
laurent ~ $ dns-sd -L "406C8F53F1DD@iMac de Laurent" _raop._tcp ローカル
ルックアップ 406C8F53F1DD@iMac de Laurent._raop._tcp.local
日付: ---2013年1月15日(火)---
17:43:47.097 ...開始中...
17:43:47.098 406C8F53F1DD@iMac\032de\032Laurent._raop._tcp.local. iMac-de-Laurent.local.:5000 (インターフェース 4) でアクセスできます。
et=0,1 ek=1 ss=16 raAudioFormats=ALAC,L16 tp=UDP pw=false txtvers=1 ramach=iMac12,1 vn=3 md=0,1,2 sv=false sm=false ch=2 sr =44100 rast=afs rastx=iafs cn=0,1
pw=false
パスワードがないことを示します。これが基本的な考え方です。DNSServiceResolveで同じことを行う必要があります。
現在、私が知っているデバイスがビジーかどうかを確認する唯一の方法は、実際に接続することです。内部的に AirPlay は RTSP を使用するため、次のリクエストを送信できます。
RTSP/1.0 オプション *
# 空行
デバイスがステータス 453 で応答する場合は、既にストリーミングされていることを意味します。
詳細については、私のAirPlay RTSP スタックを確認してください。