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