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秒換一個地方的同時抓取一張圖檔。