海康威视摄像机SDK二次开发--指定云台位置,焦距放大倍数,拍摄时长,并拆分保存为视频文件
按照config.txt配置,出现的效果是有几组参数就录制几个视频,视频时长按照配置文件录制
config.txt的内容,请参照海康威视摄像机SDK二次开发–实时预览视频流保存到指定文件中
java实现代码
package ClientDemo;import com.sun.jna.NativeLong;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.ByteByReference;
import com.sun.jna.ptr.IntByReference;import javax.swing.*;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.SimpleTimeZone;public class HIKSDKSaveRealData {private static Map configParam;public static void main(String[] args) throws Exception {HIKSDKSaveRealData HikSdk = new HIKSDKSaveRealData();/* 此处创建对象也可以创建file对象 */// 创建流对象BufferedReader br = null;try {br = new BufferedReader(new FileReader("D:\\installationPackage-all\\browerDown\\CH-HK-Wind64\\ClientDemo\\src\\ClientDemo\\config.txt"));configParam = new HashMap();CameraInfo cameraInfo = new CameraInfo();String line = null;int count = 0;while ((line = br.readLine()) != null) {if (line != "" && line.length() > 0 && count > 0) {String[] split = line.split("\\s+");configParam.put(count + "param", split);count++;} else if (line != "" && line.length() > 0 && count == 0) {String[] split = line.split("\\s+");// 设置IP等参数到对象中cameraInfo.setAddress(split[0]);cameraInfo.setPort(Short.parseShort(split[1]));cameraInfo.setUserName(split[2]);cameraInfo.setPwd(split[3]);count++;}}br.close();//查看当前DVR参数信息和初始化注册等 传入连接信息
// HikSdk.getDVRConfig(cameraInfo);HikSdk.SaveRealDataformDir(cameraInfo, "D:\\bxcf\\armCloudCamera\\realData");} catch (IOException e) {e.printStackTrace();}}/****************************************************************** 通过云台参数控制摄像机位置* param: CameraInfo 摄像机连接的基本信息* return: null* ****************************************************************/HCNetSDK sdk = HCNetSDK.INSTANCE;void SaveRealDataformDir(CameraInfo cameraInfo, String localSaveFilePath) throws Exception {CameraInfo parameter = getParameter(cameraInfo);//判断是否注册成功if (parameter.getUserId().intValue() < 0) {System.out.println("注册设备失败 错误码为: " + sdk.NET_DVR_GetLastError());} else {System.out.println("注册成功 Id为: " + cameraInfo.getUserId().intValue());}//判断是否获取到设备能力HCNetSDK.NET_DVR_WORKSTATE_V30 devWork = new HCNetSDK.NET_DVR_WORKSTATE_V30();if (!sdk.NET_DVR_GetDVRWorkState_V30(cameraInfo.getUserId(), devWork)) {System.out.println("获取设备能力集失败,返回设备状态失败...............");return;}// 录制前雨刷器先刷几圈boolean result = sdk.NET_DVR_PTZControl_Other(cameraInfo.getUserId(), cameraInfo.getChannel(),HCNetSDK.WIPER_PWRON, 0);boolean result1 = sdk.NET_DVR_PTZControl_Other(cameraInfo.getUserId(), cameraInfo.getChannel(),HCNetSDK.WIPER_PWRON, 0);boolean result2 = sdk.NET_DVR_PTZControl_Other(cameraInfo.getUserId(), cameraInfo.getChannel(),HCNetSDK.WIPER_PWRON, 1);Thread.sleep(2000);//启动实时预览功能 创建clientInfo对象赋值预览参数HCNetSDK.NET_DVR_CLIENTINFO clientInfo = new HCNetSDK.NET_DVR_CLIENTINFO();clientInfo.lChannel = cameraInfo.getChannel(); //设置通道号clientInfo.lLinkMode = new NativeLong(0); //TCP取流clientInfo.sMultiCastIP = null; //不启动多播模式//创建窗口句柄clientInfo.hPlayWnd = null;FRealDataCallBack fRealDataCallBack = new FRealDataCallBack();//开启实时预览NativeLong key = sdk.NET_DVR_RealPlay_V30(cameraInfo.getUserId(), clientInfo, fRealDataCallBack, null, true);cameraInfo.setKey(key);//判断是否预览成功if (key.intValue() == -1) {System.out.println("预览失败 错误代码为: " + sdk.NET_DVR_GetLastError());sdk.NET_DVR_Logout(cameraInfo.getUserId());sdk.NET_DVR_Cleanup();return;}// 查看文件夹是否存在,如果不存在则创建File file = new File(localSaveFilePath);if (!file.exists()) {file.mkdir();}// //预览成功后 调用接口使视频资源保存到文件中 这是完整过程视频,如果需要打开注释即可
// if (!sdk.NET_DVR_SaveRealData(cameraInfo.getKey(), file.getPath() + "/" + System.currentTimeMillis() + ".mp4")) {// System.out.println("保存到文件失败 错误码为: " + sdk.NET_DVR_GetLastError());
// sdk.NET_DVR_StopRealPlay(key);
// sdk.NET_DVR_Logout(cameraInfo.getUserId());
// sdk.NET_DVR_Cleanup();
// return;
// }try {System.out.println("开始录制");} catch (Exception e) {e.printStackTrace();}/* 获取PTZ快球位置参数* 获取水平角度,垂直角度,变倍角度* */IntByReference intByReference = new IntByReference(0);//创建PTZPOS参数对象HCNetSDK.NET_DVR_PTZPOS net_dvr_ptzpos = new HCNetSDK.NET_DVR_PTZPOS();Pointer pointer = net_dvr_ptzpos.getPointer();//执行获取参数if (!sdk.NET_DVR_GetDVRConfig(cameraInfo.getKey(), HCNetSDK.NET_DVR_GET_PTZPOS, new NativeLong(0), pointer, net_dvr_ptzpos.size(), intByReference)) {System.out.println("获取DVR参数PTZ参数失败,错误码为: " + sdk.NET_DVR_GetLastError());sdk.NET_DVR_StopRealPlay(cameraInfo.getKey());sdk.NET_DVR_Logout(cameraInfo.getUserId());sdk.NET_DVR_Cleanup();return;}// 设置参数让摄像机转动 在这里会按照拍摄时长保存视频到文件 几组参数就是几个视频for (int i = 0; i < configParam.size(); i++) {String[] param = (String[]) configParam.get(i+1 + "param");// 相机对象(用户名密码端口号IP地址等信息) param[5]-[8] 水平角度 垂直角度 放大倍数 拍摄时长PTZ(cameraInfo, net_dvr_ptzpos, param[0], param[1], param[2], param[3],localSaveFilePath);}sdk.NET_DVR_StopRealPlay(key);sdk.NET_DVR_Logout(cameraInfo.getUserId());sdk.NET_DVR_Cleanup();System.out.println("工作完成 程序结束...");System.exit(0);}class FRealDataCallBack implements HCNetSDK.FRealDataCallBack_V30 {//预览回调public void invoke(NativeLong lRealHandle, int dwDataType, ByteByReference pBuffer, int dwBufSize, Pointer pUser) {}}private void PTZ(CameraInfo cameraInfo, HCNetSDK.NET_DVR_PTZPOS net_dvr_ptzpos,String wPanpos, String wTiltPos, String wZoomPos, String time,String localSaveFilePath) throws Exception {//把数据写入net_dvr_ptzpos对象中 下面才可以获取到参数net_dvr_ptzpos.read();Pointer pointer = net_dvr_ptzpos.getPointer();/** 设置PTZPOS快球参数* 设置垂直角度,水平角度,变倍角度* 从配置文件中获取参数 设置到PTZ中* */try {net_dvr_ptzpos.wPanPos = Short.parseShort(wPanpos); //设置水平角度net_dvr_ptzpos.wTiltPos = Short.parseShort(wTiltPos); //设置垂直角度net_dvr_ptzpos.wZoomPos = Short.parseShort(wZoomPos); //设置变倍参数net_dvr_ptzpos.write(); //把数据写入缓冲区} catch (Exception e) {System.out.println("获取配置文件PTZ参数失败,请检查参数名称是否正确.....");sdk.NET_DVR_StopRealPlay(cameraInfo.getKey());sdk.NET_DVR_Logout(cameraInfo.getUserId());sdk.NET_DVR_Cleanup();return;}/** 设置PTZ参数 水平参数 垂直参数 变倍参数* */if (!sdk.NET_DVR_SetDVRConfig(cameraInfo.getUserId(), HCNetSDK.NET_DVR_SET_PTZPOS, new NativeLong(0), pointer, net_dvr_ptzpos.size())) {System.out.println("设置PTZ参数失败,错误码为: " + sdk.NET_DVR_GetLastError());sdk.NET_DVR_Logout(cameraInfo.getUserId());sdk.NET_DVR_Cleanup();return;}Thread.sleep(2000);//启动实时预览功能 创建clientInfo对象赋值预览参数HCNetSDK.NET_DVR_CLIENTINFO clientInfo = new HCNetSDK.NET_DVR_CLIENTINFO();clientInfo.lChannel = cameraInfo.getChannel(); //设置通道号clientInfo.lLinkMode = new NativeLong(0); //TCP取流clientInfo.sMultiCastIP = null; //不启动多播模式//创建窗口句柄clientInfo.hPlayWnd = null;FRealDataCallBack fRealDataCallBack = new FRealDataCallBack();//开启实时预览NativeLong key = sdk.NET_DVR_RealPlay_V30(cameraInfo.getUserId(), clientInfo, fRealDataCallBack, null, true);cameraInfo.setKey(key);//判断是否预览成功if (key.intValue() == -1) {System.out.println("预览失败 错误代码为: " + sdk.NET_DVR_GetLastError());sdk.NET_DVR_Logout(cameraInfo.getUserId());sdk.NET_DVR_Cleanup();return;}File file = new File(localSaveFilePath);if (!file.exists()) {file.mkdir();}//预览成功后 调用接口使视频资源保存到文件中if (!sdk.NET_DVR_SaveRealData(cameraInfo.getKey(), file.getPath() + "/" + System.currentTimeMillis() + ".mp4")) {System.out.println("保存到文件失败 错误码为: " + sdk.NET_DVR_GetLastError());sdk.NET_DVR_StopRealPlay(key);sdk.NET_DVR_Logout(cameraInfo.getUserId());sdk.NET_DVR_Cleanup();return;}Thread.sleep(Short.parseShort(time+"000"));System.out.println("PTZ已到达指定位置并录制结束");sdk.NET_DVR_StopSaveRealData(cameraInfo.getKey());}/****************************************************************** 注册设备并返回参数* 目的: 注册设备并返回key :Nativelong* parameters: cameraInfo*return: cameraInfo* ****************************************************************/private CameraInfo getParameter(CameraInfo cameraInfo) {//设置设备通道号 查看Demo代码 通道号为1NativeLong channel = new NativeLong(1);cameraInfo.setChannel(channel);if (!sdk.NET_DVR_Init()) {System.out.println("初始化失败..................");}//创建设备HCNetSDK.NET_DVR_DEVICEINFO_V30 deInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30();//注册用户设备NativeLong id = sdk.NET_DVR_Login_V30(cameraInfo.getAddress(), cameraInfo.getPort(),cameraInfo.getUserName(), cameraInfo.getPwd(), deInfo);cameraInfo.setUserId(id);return cameraInfo;}}
海康威视摄像机SDK二次开发--指定云台位置,焦距放大倍数,拍摄时长,并拆分保存为视频文件相关推荐
- 海康威视摄像机SDK二次开发--通过云台参数设置控制摄像机的位置
由于最近在开发海康威视摄像头,特此记录一下通过云台参数控制摄像机的位置,我这里是通过properties配置文件输入的参数,也可以不用配置文件,看具体的需求 package ClientDemo;im ...
- 海康威视摄像机SDK二次开发--提取音频保存至文件
由于最近在开发海康威视摄像头,特此记录一下如何提取音频数据,这里主要依靠语音对讲返回的音频数据,通过回调函数写入文件中,加个WAV头即可播放,编码格式可以自己设置在代码中有注释 文件结构 其中Came ...
- 海康威视摄像机SDK二次开发--实时预览视频流保存到指定文件中
开发海康威视sdk ,IPC设备,视频回调用的是官方提供的Demo中的(fRealDataCallBack ) 在最下面代码可以设置Thread.sleep()设置拍摄时长 文件结构 CameraIn ...
- 海康威视摄像机SDK二次开发--初始化windows-sdk-java环境
老师想获取海康摄像头的音频内容,因此对海康sdk进行了学习,学到了一个博主的java开发例子,在这里总结一下.第一篇是初始化windows-sdk-java的环境. 文章目录 1.环境准备 2.准备工 ...
- 海康威视工业相机SDK二次开发
海康威视工业相机SDK二次开发 好气,第一次写文章,结果没不小心保存关掉,什么都没了. 本人是一名在读研究生,被导师分配了做项目中海康工业相机的二次开发.实现的需求是:实现八个相机同时打开视频,并且分 ...
- 海康威视SDK二次开发通过云台参数设置控制摄像机的位置
海康威视SDK二次开发通过云台参数设置控制摄像机的位置 由于最近在开发海康威视摄像头,特此记录一下通过云台参数控制摄像机的位置,我这里是通过properties配置文件输入的参数,也可以不用配置文件, ...
- 海康威视工业相机SDK二次开发(VS+Opencv+QT+海康SDK+C++)(一)
最近在做一个项目,涉及到工业相机,需要对其进行二次开发.相机方面选择了海康威视,网上关于海康威视工业相机SDK的开发资料很少,官方文档里面虽然写的是支持C++开发的,但其实是C.自己也摸索了一段时间, ...
- VS2015配置海康威视工业相机SDK二次开发
1.概述: 工业相机SDK是用于控制相机的一个独立组件,支持获取实时图像数据.配置参数.对图像进行后续处理等功能.工业相机SDK兼容GigE Vision协议.USB3 Vision协议.Camera ...
- 海康威视网络摄像机 SDK二次开发(JAVA)
1.下载地址 https://www.hikvision.com/cn/download_more_406.html#prettyPhoto 根据各自情况,选择win32或者win64位 64位下载之 ...
最新文章
- 预测 motif 的计算原理
- 求13-23+33……-1003(3.6)(Java)
- 自定义数字软键盘--封装版
- 设计模式C++实现(7)——外观模式、组合模式
- linux如何调试脚本文件目录,如何在Linux下调试Bash Shell脚本的方法
- python实现将文件下内每张图片按顺序命名为txt文本文件中的内容
- codeblocks(其它软件)修改后缀文件的打开默认方式
- Java设计模式开篇
- Java8 Base64
- Keras 加载cifar100太慢,下载后在本地加载方法
- TeamViewer最新版本TV 13介绍
- 微信打开网址后自动调用手机自带默认浏览器或提示选择浏览器打开如何实现
- Cadence Allegro 技巧实战视频之PCB封装库路径设置
- 大数据之 Hive 教程
- 【JAVA】每日练习——01
- 我的自学ROS历程3-3-Vsual Studio code安装
- 打通Linux内存管理任督二脉
- 从南极之争谈软件架构十个技巧,及…
- C++实现通用的文件(万能)加密方案——包含源码
- springboot +mybatis实现多表一对一查询