概要
Windows 托盘开始串流慢的另一个原因是 RTSP 连接和握手是同步执行的,并且使用较长阻塞超时。
当前行为
connect_receivers() 会按顺序遍历 receiver,并对每个 receiver 执行 PreparedSession::prepare(...).handshake()。
RTSP I/O 超时为 5 秒。当前 TcpStream::connect() 没有显式使用 connect_timeout,当缓存 IP 失效、设备不可达或连接半开时,连接阶段可能阻塞较久。
与同步 mDNS 发现叠加后,整体启动耗时很容易接近观察到的 10 秒量级。
相关代码
src/session/connect.rs: connect_receivers
src/rtsp/client.rs: RTSP_IO_TIMEOUT
src/rtsp/client.rs: RtspClient::connect
src/session/raop.rs: RaopSession::handshake_with_progress
期望行为
过期或不可达的 receiver 应快速失败,不应让托盘表现得像卡死。
建议修复
- 使用
TcpStream::connect_timeout,为连接阶段设置较短超时。
- 区分连接、写请求、读响应的超时配置。
- 多个播放目标被选中时,并行连接多个 receiver。
- 通过托盘状态及时显示进度或失败原因。
概要
Windows 托盘开始串流慢的另一个原因是 RTSP 连接和握手是同步执行的,并且使用较长阻塞超时。
当前行为
connect_receivers()会按顺序遍历 receiver,并对每个 receiver 执行PreparedSession::prepare(...).handshake()。RTSP I/O 超时为 5 秒。当前
TcpStream::connect()没有显式使用connect_timeout,当缓存 IP 失效、设备不可达或连接半开时,连接阶段可能阻塞较久。与同步 mDNS 发现叠加后,整体启动耗时很容易接近观察到的 10 秒量级。
相关代码
src/session/connect.rs:connect_receiverssrc/rtsp/client.rs:RTSP_IO_TIMEOUTsrc/rtsp/client.rs:RtspClient::connectsrc/session/raop.rs:RaopSession::handshake_with_progress期望行为
过期或不可达的 receiver 应快速失败,不应让托盘表现得像卡死。
建议修复
TcpStream::connect_timeout,为连接阶段设置较短超时。