1.实现海康摄像头的图片的抓取。
思路:1.首先获取图片的url,2通过java实现图片的下载
1.使用onvif获取图片的url
//首先获取OnvifDevice的对象
OnvifDevice od = new OnvifDevice("IP","摄像头用户名","密码","Token");
//通过OnvifDevice获取Media的对象
Media media = od.getMedia();
//获取设备中的Profile集合
List<Profile> listProfiles = media.getProfiles();
//通过media中的getSnapshotUri(Token).getUri()获取图片url
//获得图片的URL
String url1 = media.getSnapshotUri(listProfiles.get(0).getToken() /* 此处不同的Token对应着通道*/ ).getUri();
2.使用java实现海康摄像头图片的下载
public static void downLoad(String urls) {
try {
//构造URL
URL url = new URL(urls);
//打开连接
URLConnection con = url.openConnection();
String username = "用户名";
String password ="密码";
String userPassword = username+":"+password;
String encoding = Base64.encodeBase64String(userPassword.getBytes());
con.setRequestProperty("Authorization", "Basic "+encoding);
//获取输入流
InputStream is = con.getInputStream();
//格式化时间
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
String format = simpleDateFormat.format(new Date());
//1k的缓冲数据
byte [] bs = new byte[1024];
//阅读到的数据长度
int len;
//输出的文件流
String filename = "D:\\a/"+format+".jpg";
File file = new File(filename);
FileOutputStream os = new FileOutputStream(file,true);
//开始读取
while((len = is.read(bs)) != -1) {
os.write(bs,0,len);
}
//完毕,关闭连接
os.close();
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
3.用代码实现根据预置点使摄像头在一段时间后移动并取照、
//根据OnvifDevice 获取PTZ的实例
PTZ ptz = od.getPtz();
//获取所有预置点的实例
List<PTZPreset> listPtzPreset = ptz.getPresets(listProfiles.get(0).getToken());
//可以通过摄像头的后台管理设置预置点,如果设置完后,可以获取预置点的x,y,如果没有设置,则获取的x为-1.0。y为-1.0。
if(listPtzPreset.get(0).getPTZPosition().getPanTilt().getX() == -1.0 && listPtzPreset.get(0).getPTZPosition().getPanTilt().getY() ==-1.0) return ;
if(listPtzPreset.get(1).getPTZPosition().getPanTilt().getX() == -1.0 && listPtzPreset.get(1).getPTZPosition().getPanTilt().getY() ==-1.0) return ;
//AbsoluteMove:移动摇摄,倾斜和变焦到一个绝对的目标
//listProfiles.get(0).getToken() :Token验证
//位置:可以通过获取的预置点获得对应的位置 :listPtzPreset.get(0).getPTZPosition()
//速度:new PTZSpeed()
ptz.absoluteMove(listProfiles.get(0).getToken(), listPtzPreset.get(0).getPTZPosition(), new PTZSpeed());
downLoadPhoto.downLoad(url1); //将抓取图片封装成一个静态方法,在downLoadPhoto类中
Thread.sleep(15000); //睡15秒
ptz.absoluteMove(listProfiles.get(0).getToken(), listPtzPreset.get(0).getPTZPosition(), new PTZSpeed());
downLoadPhoto.downLoad(url1);
Thread.sleep(15000); //睡15秒
以上就能实现摄像头15秒换一个地方的同时抓取一张图片。