Onvif发现设备工具类

 每分钟refreshDevice方法会将局域网内的设备更新到deviceSet集合中,controller层随用随取。

import be.teletask.onvif.DiscoveryManager;
import be.teletask.onvif.OnvifManager;
import be.teletask.onvif.listeners.DiscoveryListener;
import be.teletask.onvif.models.Device;
import be.teletask.onvif.models.OnvifDevice;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.HashSet;
import java.util.List;

@Slf4j
@Component
public class OnvifUtil {

    public static Boolean isRefreshDevice = true;

    @Getter
    public static HashSet deviceSet = new HashSet<>();

    public static void discoveryDevice() {
        DiscoveryManager manager = new DiscoveryManager();
        manager.setDiscoveryTimeout(30000);
        manager.discover(new DiscoveryListener() {
            @Override
            public void onDiscoveryStarted() {
                System.out.println("Discovery started");
            }

            @Override
            public void onDevicesFound(List devices) {
                deviceSet.clear();
                deviceSet.addAll(devices);
            }
        });
    }


    public static boolean refreshDeviceIsRunning = false;

    @Scheduled(cron = "0 */1 * * * ?")
    public void refreshDevice() {
        log.info("定时任务refreshDevice开始运行");
        try {
            if (isRefreshDevice && !refreshDeviceIsRunning) {
                refreshDeviceIsRunning = true;
                discoveryDevice();
            }
        } catch (Exception ignored) {
        }finally {
            refreshDeviceIsRunning = false;
        }
    }
}

 Maven依赖:


    be.teletask.onvif
    onvif
    1.0.2

 中央仓库没有,需要指定jcenter仓库,加在pom的project标签内就行。


    
        随便取一个仓库名称
        https://jcenter.bintray.com/
    

你可能感兴趣的:(java,开发语言,Onvif,发现设备,discovery)