为什么 Google Cast Chrome 扩展只能通过 mDNS 搜索 link-local 设备?

Why does Google Cast Chrome extension only search for link-local devices via mDNS?

Chromecast v2 设备使用 mDNS 宣布它们的存在,并且在对 _googlecast._tcp.

执行 mDNS 查询时可以发现它们

DNS-SD / Bonjour 还支持 "wide-area discovery" 的概念,它使用标准的单播 DNS 查询来查找设备。这对于更复杂的网络场景很有用 - 即您的 Chromecast 设备可能在一个 VLAN 中,但您的发送方设备在另一个 VLAN 中。

然而,当拖网 Chromium 源时,我发现 this code in mdns_api.cc 这似乎表明 Chrome 扩展只会搜索 _googlecast._tcp.local - 完全阻止其他 [= 的广域 DNS 发现=26=]投射装置。根据轶事测试,似乎 Chromecast iOS 应用程序和 SDK 也有此行为。

为什么 Chromecast Chrome 扩展的官方发现机制明确地只发现 link-local Chromecast 设备?

他们可能没有这样做 "wide-area discovery" 因为在实施过程中有很多陷阱并且没有太多收获。

假设他们确实实现了它(从规范来看,它在技术上似乎并不困难;似乎主要是一个边缘案例问题)。

你需要:

  1. 您控制的域。可以是仅限本地的域。
    • 没有多少人这样做。
  2. 您要使用的多个 VLAN。
    • 大多数家庭只有一个 VLAN。
  3. 支持广域发现的 DNS-SD 服务器。
    • 这可能是最容易拥有的东西。即使那样,大多数人也不会这样做。
  4. 用于输入要为设备 ping 的各种 WAD 服务器的 UX 流程。
    • 这是 Google 的困难部分,因为它需要在所有 SDK 中保持一致,并且使用 WAD 发现的 Chromecast 会导致所有本地媒体服务器应用程序无法运行(例如 Plex)。

(1) - (3) 是 Google 不会将其作为优先事项的原因。毕竟,Chromecast 是一种消费类设备,而且消费者的联网情况往往比较简单。 (4) 这就是为什么它不是唾手可得的果实。

您还需要解决几个问题:

  1. 如果您在单独的 VLAN 上连接到 Chromecast,然后移除它的 WAD 服务器,会发生什么情况?
    • WAD服务器掉线怎么办?
  2. 当您有多个同名的 Chromecast 时会发生什么情况?
    • 如果它们也有相同的 IP 地址怎么办(可能是因为 VLAN 可以有重叠的 IP 空间)?
  3. 如果可以使用 WAD 发现 Chromecast 但无法访问,会发生什么情况?
    • 他们是否应该尝试连接到您发现的每一个 Chromecast 以测试它是否可以访问?
      • 您将如何扩展它以在可能 "far" 远离的 VLAN 中使用 100 个 Chromecast?

我认为正是这些问题会阻止 Google 实施 WAD,即使他们愿意。