You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 20.04下mDNS本地缓存清除及设备在线检测技术咨询

解决mDNS缓存导致NDI设备离线检测延迟的问题

1. 主动发送mDNS查询包验证设备状态

绕过Avahi本地缓存,直接构造符合mDNS协议的UDP查询包(目标地址224.0.0.51,端口5353),查询目标NDI设备对应的服务记录(通常是_ndi._tcp.local类型)。如果在1-2秒的超时时间内未收到设备的响应包,即可判定设备已离线:

  • C++可通过libpcap或原始套接字实现数据包的发送与接收;
  • Java可使用DatagramSocket完成UDP包的收发操作,注意严格遵循mDNS协议规范设置查询包的QR位(设为0表示查询)及目标设备完整域名。

2. 调整Avahi缓存超时参数

修改/etc/avahi/avahi-daemon.conf配置文件,缩短缓存条目存活时间,降低延迟:

  • 找到[server]段,添加或修改以下参数:
    cache-ttl=30         # 将缓存条目有效期设为30秒,可按需调小
    # cache-entries-max=0  # 禁用缓存(不推荐,会增加网络开销)
    
  • 修改后重启Avahi服务:sudo systemctl restart avahi-daemon

3. 监听Avahi服务状态回调

利用Avahi的客户端API注册监听,直接获取服务的移除事件:

  • C++使用libavahi-client库,创建AvahiServiceBrowser并注册回调函数,处理AVAHI_SERVICE_REMOVE事件;
  • Java可使用JmDNS库(不依赖系统Avahi),通过ServiceListener的serviceRemoved方法监听服务下线通知。

注:该方法仅对主动发送mDNS离开(Goodbye)包的设备有效,断电等异常离线场景仍需结合其他方式补充验证。

4. 直接调用NDI SDK的设备检测接口

依托NDI自身的SDK实现设备状态检测,比依赖系统mDNS更可靠:

  • 使用NDI SDK提供的NDI_find_create_v2()等函数,定期扫描网络中的NDI设备(比如每2秒扫描一次);
  • 若连续多次扫描均未找到目标设备,立即触发停止录制逻辑。

内容的提问来源于stack exchange,提问作者burtmacklin16

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 19:03:39