如何检查是不是正在使用airplay?

Posted

技术标签:

【中文标题】如何检查是不是正在使用airplay?【英文标题】:how to check if the airplay is being used?如何检查是否正在使用airplay? 【发布时间】:2013-06-04 07:05:35 【问题描述】:

我正在尝试使用 MPMusicPlayerController 通过 airplay 在电视上播放音乐。如何检查其他输入是否正在使用播放?

【问题讨论】:

【参考方案1】:

几个可能有用的现有帖子:

Is there any notification for detecting AirPlay in Objective-C?

How to customize the Airplay button when airplay is active

第二个链接中有一篇文章定义了方法- (BOOL)isAirPlayActive,它巧妙地使用了Audiosession框架来确定当前的音频输出路径。

【讨论】:

【参考方案2】:

这是另一种检测airplay是否处于活动状态的解决方案

- (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];

【讨论】:

【参考方案3】:

我也遇到了这个问题,最后我使用 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. 

完整的脚本最终有点复杂,所以我把它写在了blog post。

【讨论】:

以上是关于如何检查是不是正在使用airplay?的主要内容,如果未能解决你的问题,请参考以下文章

iPad应用程序上的airplay

如何判断 AirPlay 是不是在镜像?

AirPlay 协议 - 如何使用原始 PCM 而不是 ALAC

如何开始使用airplay? [关闭]

如何使用 AirPlay 查找可用屏幕?

新 Apple TV(第 3 代)上的 Airplay,第二个屏幕不是 1080p