1

MPMusicPlayerController を使用して、エアプレイでテレビに音楽をキャストしようとしています。エアプレイが他の入力で使用されているかどうかを確認するにはどうすればよいですか?

4

3 に答える 3

1

役に立つかもしれないいくつかの既存の投稿:

Objective-C で AirPlay を検出した場合の通知はありますか?

Airplay がアクティブなときに Airplay ボタンをカスタマイズする方法

2 番目のリンク- (BOOL)isAirPlayActiveには、AudioSession フレームワークを適切に使用して現在のオーディオ出力ルートを決定する方法を定義する投稿があります。

于 2013-06-21T09:31:52.283 に答える
0

私もこの問題を抱えていました.arp -nを使用してairplayデバイスのMACアドレスを取得し、tcpdumpを使用してトラフィックを盗聴しました:

ipaddress=$(ping -c 1 $tvhostname | awk -F'[()]' '/PING/{print $2}')
arp -n $ipaddress &> /var/tmp/arp-output
fieldindex='$4'
# Parse something of the form ? (10.37.109.150) at 40:33:1a:3d:e6:ee on en0 ifscope [ethernet] 
# The awk quotes get a bit messy with the variable substitution, so split the expression up
echo Parsing mac address from line `awk -F"[ ]" "/\($ipaddress\)/{print}" /var/tmp/arp-output`
macaddress=`awk -F"[ ]" "/($ipaddress)/{print $fieldindex}" /var/tmp/arp-output`

sudo tcpdump -i $wifidevice -I ether dst $macaddress &> /var/tmp/airplay-tcpdump-output
# Get the PID of the tcpdump command
pid=$!
# Capture 10 seconds of output, then kill the job
sleep 10
sudo kill $pid
# Process the output file to see how many packets are reported captured
packetcount=`awk -F'[ ]' '/captured/{print $1}' /var/tmp/airplay-tcpdump-output`
echo Finished sniffing packets - there were $packetcount. 

完全なスクリプトは少し複雑になったので、ブログ投稿に書きました。

于 2016-01-08T17:12:22.627 に答える
0

エアプレイがアクティブかどうかを検出する別のソリューションを次に示します

- (BOOL)isAirPlayActive
{
    AVAudioSession* audioSession = [AVAudioSession sharedInstance];
    AVAudioSessionRouteDescription* currentRoute =  audioSession.currentRoute;
    AVAudioSessionPortDescription* output = [currentRoute.outputs firstObject];
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
    [[AVAudioSession sharedInstance] setActive: YES error: nil];
    return [output.portType isEqualToString:AVAudioSessionPortAirPlay];
}
于 2015-08-05T03:27:30.247 に答える