Skip to content

perf(windows-tray): 开始串流会被同步 mDNS 发现阻塞 #19

@ByteColtX

Description

@ByteColtX

概要

Windows 托盘点击“开始串流”后,可能需要约 10 秒才有反应。其中一个主要原因是托盘路径会在开始播放前同步执行接收端发现。

当前行为

StartStreaming 被处理后,托盘 worker 会调用 facade.play_capture()。如果 state.last_receivers 为空,ensure_receivers() 会同步调用 discover()

当前 mDNS 发现会串行扫描两类服务:

  • _raop._tcp.local.
  • _airplay._tcp.local.

每类默认超时 2 秒,因此首次开始串流时,光发现阶段就可能固定阻塞约 4 秒。

相关代码

  • src/ui/tray/mod.rs: TrayWorker::start_streaming
  • src/app/facade.rs: AppFacade::play_capture
  • src/app/facade.rs: AppFacade::ensure_receivers
  • src/discovery/browser.rs: DISCOVERY_TIMEOUT
  • src/discovery/browser.rs: MdnsDiscoveryService::discover_devices

期望行为

从托盘开始串流时应该立即有响应;当已有缓存或已选接收端时,不应强制执行完整 mDNS 发现。

建议修复

  • 对托盘已选目标优先使用缓存 receiver。
  • 将 mDNS 刷新放到后台执行,不阻塞 StartStreaming
  • 并行执行 RAOP 和 AirPlay 两类 mDNS 发现。
  • 只有缓存无法解析或目标缺失时,才回退到完整发现。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions