AirPlay 投屏设备发现稳定性:mDNS 缓存一致性问题定位与修复

背景 APlayReceiver 是 APlay 项目里的 Linux AirPlay/RAOP 接收端。Apple 设备发现 AirPlay 接收端依赖 Bonjour,也就是 mDNS + DNS-SD。 这次问题的现象是: 昨天 Apple 设备可以发现 APlayReceiver。 晚上设备自动休眠,没有关机,第二天 Apple 设备的投屏设备列表…

Wireshark 分析 AirPlay 投屏

背景 在调试 AirPlay 投屏接收端时,最容易遇到一个反直觉现象:接收端日志里明明已经收到了 SETUP、RECORD、SET_PARAMETER 等 RTSP 请求,但 Wireshark 里使用下面的``rtsp`显示过滤器却是空的: 这很容易让人怀疑: 是不是根本没有抓到 RTSP? 是不是 AirPlay 使用的不是标准 RTSP? 日志中为什…

AirPlay mDNS 双栈发现:A 和 AAAA 到底该怎么发

背景 在把 UxPlay 的 DNS-SD/Avahi 依赖替换为内置 mDNS responder 时,PR review 里出现了一个很典型的双栈问题: 使用内置 mdnsd 时,AirPlay 客户端会先建立一个 IPv4 TCP 连接,然后很快又建立一个 IPv6 TCP 连接,前一个 IPv4 连接被替换;使用 Avahi 时,只看到 IPv6…

APlay 为什么不把 mDNS 拆成独立进程

背景 在 UxPlay 的 PR #523 中,我们用内置的 mDNS responder 替换了 Avahi 依赖。PR 的 reviewer 提出了一个架构建议:是否应该把 mDNS 功能拆成独立进程,让用户自己选择用什么 mDNS 实现(Avahi、mDNSResponder 等)? 这个建议本身很合理——桌面场景下确实可以这样分工。但当目标平台变成…

AirPlay mDNS Harness:模拟 AirPlay 设备的技术实现

在 APlay 项目中,mDNS 服务发现是 AirPlay/RAOP 设备被发现的基础。本文介绍的 AirPlay mDNS harness 借助一个轻量的验证框架,无需真实硬件,在单机上完成了 mDNS 协议实现的验证。本文从流程、代码到协议细节,完整解析这个"模拟设备"是如何工作的。 背景:为什么需要模拟设备 APlay 是一个支持 AirPlay/R…

AirPlay 投屏设备发现

背景:设备发现到底是什么? AirPlay 设备发现不是"手机去扫局域网里所有 IP",而是通过 mDNS/DNS-SD 完成的。 可以把它理解成局域网里的"小广播查询": Apple 设备向 224.0.0.251:5353 或 IPv6 的 ff02::fb:5353 发 UDP 组播查询。 查询内容是"谁提供 _airplay._tcp.local…