【问题标题】:The way to find out if AirPlay audio device is in use, password protected by CoreAudio methods判断 AirPlay 音频设备是否正在使用的方法,受 CoreAudio 方法保护的密码
【发布时间】:2012-12-24 10:41:21
【问题描述】:

我目前在我的应用程序中遇到了 AirPlay 设备的问题。我使用这个topic 作为airplay 设备配置的示例。但是目前找不到两个问题的解决方案:

首先,我无法检测到airplay设备当前是否忙,因为它不支持同时输入?我试图在 CoreAudio 中找到任何属性,但没有任何运气。

我发现的第二个问题是关于启用密码的播放设备。无论是否输入密码,我都无法收到任何通知,因此我的应用程序无法对任何事件做出应有的反应

提前感谢您的帮助。

【问题讨论】:

    标签: macos core-audio airplay


    【解决方案1】:

    我不熟悉新的 CoreAudio API,所以可能有更简单的方法。这是我去年解决同样问题的方法。

    您可以通过 Bonjour(也称为多播 DNS 或 Zeroconf)确定设备是否需要密码。您应该能够将源名称与 CoreAudio 信息相匹配。对于音频 AirPlay,您需要检查 _raop._tcp 设备。以下是它在终端上的工作方式:

    首先,发现附近的 AirPlay 设备(注意 dns-sd 命令在 Mountain Lion 之前称为 mDNS):

    劳伦特〜$ 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 de Laurent

    然后,获取 AirPlay 实例的完整记录:

    laurent ~ $ dns-sd -L "406C8F53F1DD@iMac de Laurent" _raop._tcp local 查找 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 stack 了解更多信息。

    【讨论】:

    • 非常感谢劳伦特。这是非常有用的信息。我升级了这个答案,但这仍然不是“正确”的方式。当我使用 CoreAudio 时,“正确”的方式是将它用于该设备的所有工作。如果我找不到任何其他解决方案,我会将此答案标记为例外。
    • 是的,直接在 CoreAudio 中执行此操作会更有意义。但是,由于对 AirPlay 的第三方支持在 OSX 中是相当新的,因此在 API 中发现大漏洞也就不足为奇了。
    猜你喜欢
    • 1970-01-01
    • 2022-01-11
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    相关资源
    最近更新 更多