ONVIF:列出同一网络中 IP 摄像机的所有主机名

Posted

技术标签:

【中文标题】ONVIF:列出同一网络中 IP 摄像机的所有主机名【英文标题】:ONVIF: Listing all hostname of IP cameras in same network 【发布时间】:2021-12-06 10:02:51 【问题描述】:
DiscoveryManager manager = new DiscoveryManager();
manager.setDiscoveryTimeout(10000);
manager.discover(new DiscoveryListener() 
    @Override
    public void onDiscoveryStarted() 
        System.out.println("Discovery started");
    

    @Override
    public void onDevicesFound(List<Device> devices) 
        for (Device device : devices)
            System.out.println("Devices found: " + device.getHostName());
    
);

我使用上面的代码来获取 IP 摄像机的所有主机名,在描述我的问题之前我想提一件事。我正在使用 IP 网络摄像头 android 应用程序让我的手机像 IP cam 一样。通过上面的代码设置,给出所有主机名。但是这个 sn-p 没有给出实际 IP 摄像机的主机名。提前谢谢你。

【问题讨论】:

【参考方案1】:

此代码使用 Onvif 协议。但 IP 网络摄像头 android 应用程序可能不是 Onvif 设备,因此该设备无法与您的代码通信。 这像: 你是英国人,我是越南人。你说“你叫什么名字?”,我不明白。我需要学习英语。就像你的 IP 网络摄像头需要设置 Onvif 协议。

【讨论】:

非常感谢@james Z 的回答,但问题是我可以得到IP 摄像机的RTSP 链接。我仍然无法获得 IP 摄像机的端口号。如果您对此有任何解决方案,请帮助我。再次非常感谢您 如何获取 IP 摄像机的 RTSP 链接?你能告诉我你的代码或你的方法吗 @Vittel Solutions,嗨,当我发布此问题时,我正在使用 Spring Boot 执行此任务,现在我使用 'onvif-nvt' 和 node-onvif NPM 完成此任务。由于字符限制,我无法将整个代码粘贴到评论部分。再次感谢您。【参考方案2】:

大家好,这里是这个问题的解决方案。

public class OnvifMediaURL 

    OnvifManager manager = new OnvifManager();

    public void mediaURlFinder(String string) 

        OnvifDevice device = new OnvifDevice(string);
        manager.getServices(device, new OnvifServicesListener() 

            @Override
            public void onServicesReceived(@NotNull OnvifDevice onvifDevice, OnvifServices paths) 
            
        );

        manager.getDeviceInformation(device, new OnvifDeviceInformationListener() 
            @Override
            public void onDeviceInformationReceived(@NotNull OnvifDevice device,
                    @NotNull OnvifDeviceInformation deviceInformation) 
                // TODO Auto-generated method stub
            
        );

        manager.getMediaProfiles(device, new OnvifMediaProfilesListener() 

            @Override
            public void onMediaProfilesReceived(@NotNull OnvifDevice device,
                    @NotNull List<OnvifMediaProfile> mediaProfiles) 
                manager.getMediaStreams(device, mediaProfiles.get(0), new OnvifMediaStreamURIListener() 

                    @Override
                    public void onMediaStreamURIReceived(@NotNull OnvifDevice device,
                            @NotNull OnvifMediaProfile profile, @NotNull String uri) 
                        // TODO Auto-generated method stub
                        System.out.println("URL " + uri); //Printing RTSP URL
                    
                );

            
        );

    


将您从 OnvifDiscovery 获得的主机名、用户名和密码传递给 mediaURlFinder( ) 方法,它会为您提供 RTSP 链接,您可以获得其他一些详细信息,如制造商、序列号等。 我想提一下,在我的情况下,我将手机用作 IP 摄像头(使用 IP Webcam 应用程序),此代码提供了 RTSP 链接。

【讨论】:

以上是关于ONVIF:列出同一网络中 IP 摄像机的所有主机名的主要内容,如果未能解决你的问题,请参考以下文章

ONVIF让NVR与网络监控摄像机更"亲密"

ONVIF设备管理器如何获取摄像机的密码摘要?

SharpPcap 可以用来在 C# 中找到我的网络中的 ip 摄像机吗

如何使用 onvif.org 从 ONVIF 摄像机获取流

波粒的网络摄像头能和海康兼容吗

EasyNVR平台使用Onvif探测设备时的操作注意事项