java 通过onvif抓取海康摄像头图片

java 通过onvif抓取海康摄像头图片


前言

网上也有类似的案例,不过案例中使用jar包都已经过时,下面是个人一步步验证并测试完成。
监控设备必须支持Onvif协议,且启用ONVIF。

下载onvif.jar地址:
链接:https://pan.baidu.com/s/1Gizbnt8k0yWSvjfhdCU3yA?pwd=27mg
提取码:27mg


一、把onvif.jar放到自己的maven仓库

mvn install:install-file -Dfile=onvif.jar -DgroupId=com.xiaoxiao.onvif -DartifactId=onvif -Dversion=1.0.0 -Dpackaging=jar

二、pom文件引入jar包

<dependency>
    <groupId>com.xiaoxiao.onvif</groupId>
    <artifactId>onvif</artifactId>
    <version>1.0.0</version>
</dependency>

三、测试代码

	public static void main(String[] args) throws SOAPException, IOException {
        String cameraIp = "192.168.33.42";
        String username = "admin";
        String password = "admin";
        // 首先获取OnvifDevice的对象
        OnvifDevice od = new OnvifDevice(cameraIp, username, password);

        // 通过OnvifDevice获取Media的对象
        MediaDevices media = od.getMedia();

        // 获取设备中的Profile集合
        String profileToken = od.getDevices().getProfiles().get(0).getToken();

        // 通过media中的getSnapshotUri(Token).getUri()获取图片url
        // 获得图片的URL
        String url1 = media.getSnapshotUri(profileToken);/* 此处不同的Token对应着通道*/
        // System.out.println(url1);
        saveFile(url1, username, password);
    }

    public static void saveFile(String urls, String username, String password) throws IOException {
        // 账号密码base64编码(海康)
        String userPassword = username + ":" + password;
        String encoding = Base64.encodeBase64String(userPassword.getBytes());
        // 构造URL
        URL url = new URL(urls);
        // 打开连接
        URLConnection con = url.openConnection();
        con.setRequestProperty("Authorization", "Basic " + encoding);
        // 格式化时间
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HHmmssSSS");
        String format = simpleDateFormat.format(new Date());
        // 输出的文件流
        String path = "D:/a";
        File pathFile = new File(path);
        if (!pathFile.exists()) {
            pathFile.mkdirs();
        }
        String filename = path + "/" + format + ".jpg";
        File file = new File(filename);
        // 1k的缓冲数据
        byte[] bs = new byte[1024];
        // 阅读到的数据长度
        int len;
        // 获取输入流
        InputStream inputStream = con.getInputStream();
        // 开始读取
        FileOutputStream outputStream = new FileOutputStream(file, true);
        while ((len = inputStream.read(bs)) != -1) {
            outputStream.write(bs, 0, len);
        }
        inputStream.close();
        outputStream.close();
    }

四、监控设备中onvif快照地址

  • 海康onvif照片地址:http://192.168.33.42/onvif-http/snapshot?Profile_1
  • 大华onvif照片地址:http://192.168.33.42/onvifsnapshot/media_service/snapshot?channel=1&subtype=0

五、参考链接地址

解决海康摄像头抓取图片需要验证问题

整合ONVIF云台控制获取RTPM流地址

使用的onvif.jar包下载地址

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值