库的 DLNACast.search() 搜不到电视的根本原因有两个:
-
Socket 端口绑定问题
库用 MulticastSocket(1900) 绑定了 SSDP 的标准端口
1900。在 Android 上这个端口通常已被系统占用,绑定失败后
socket 为 null,所有后续的 send/receive
都静默失败(异常被 catch 吃掉了)。你的补充扫描用
MulticastSocket(null) 绑定随机端口,所以能正常工作。
-
单线程 executor 竞态
库的 startSearch() 和 startResponseListener()
都提交到同一个
newSingleThreadExecutor,导致接收监听必须等发送任务完成
后才开始,中间有一段空窗期,快速响应的设备回复的 UDP
包就丢了。
库的 DLNACast.search() 搜不到电视的根本原因有两个:
Socket 端口绑定问题
库用 MulticastSocket(1900) 绑定了 SSDP 的标准端口
1900。在 Android 上这个端口通常已被系统占用,绑定失败后
socket 为 null,所有后续的 send/receive
都静默失败(异常被 catch 吃掉了)。你的补充扫描用
MulticastSocket(null) 绑定随机端口,所以能正常工作。
单线程 executor 竞态
库的 startSearch() 和 startResponseListener()
都提交到同一个
newSingleThreadExecutor,导致接收监听必须等发送任务完成
后才开始,中间有一段空窗期,快速响应的设备回复的 UDP
包就丢了。