今天我来总结一下海康摄像头的录制功能的实现。

1.首先海康摄像头是有自己的官方文档的

https://www.hikvision.com/cn/download_61.html

在这个连接中我们可以找到海康摄像头的SDK,我下载的SDK如下图所示

其中有一个类是HCNetSDK.java,这个是sdk的核心类,使用这个类再加上dll(windows系统)或.so(Linux系统)文件即可实现摄像头的视频后台录制了。

这里博主用到了几个类截图如下:

由于代码行数比较多,这里就不再贴出来代码了,一会放个连接大家去下载吧 。

https://download.csdn.net/download/lp840312696/11267104

下边是需要引用的jar包

        <dependency><groupId>com.sun.jna</groupId><artifactId>jna</artifactId><version>3.0.9</version></dependency><dependency><groupId>com.sun.jna</groupId><artifactId>jna-examples</artifactId><version>1.0.0</version></dependency>

还有一个调用工具类的service,使用这个service就可以实现视频的录制了

package com.youyou.quartz.service;import com.youyou.util.StringUtils;
import com.youyou.util.camera.hk.Constant;
import com.youyou.util.camera.hk.HkvUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;@Service()
public class VideoRecordEOService {/*** 创建log*/private static final Logger logger = LoggerFactory.getLogger(VideoRecordEOService.class);private static final ExecutorService EXECUTOR_SERVICE = Executors.newFixedThreadPool(50);/*** 用来保存摄像头录制对象,key为摄像头id*/private static Map<String, HkvUtil> hkvUtilMap = new ConcurrentHashMap<>();/*** 开始录制视频** @param key      摄像头的唯一标识* @param ip       ip地址* @param port     端口号* @param username 用户名* @param pass     密码* @return* @author 刘朋* <br/>date 2019-07-01*/public void startRecord(String key, String ip, String port, String username, String pass) {//首先判断一下摄像头录制对象是否已经存在,如果存在则说明摄像头已经在录制视频了,需要保存视频,重新录制HkvUtil hkvUtil1 = hkvUtilMap.get(key);if (Objects.nonNull(hkvUtil1)) {//重新开始录制reStartRecord(hkvUtil1);return;}String iChannelNum = "1";String preset = "";//枪机没有预置点位//参数MapMap<String, String> paramMap = new HashMap<>();try {//初始化if (HkvUtil.init()) {logger.info("开始初始化");HkvUtil hkvUtil = new HkvUtil(ip, port, username,pass, iChannelNum, preset);//开始录制paramMap = hkvUtil.jButtonStartSaveData();//如果录制失败if (StringUtils.equals(paramMap.get(Constant.Global.CODE), "-1")) {hkvUtilMap.remove(key);} else {hkvUtilMap.put(key, hkvUtil);}paramMap.put(Constant.Global.IP, ip);paramMap.put(Constant.Global.CAMERA_ID, key);}} catch (Exception e) {logger.error("IP:" + ip + " 录制失败!");e.printStackTrace();paramMap.put(Constant.Global.CODE, "-1");paramMap.put(Constant.Global.DESC, "录像失败");}}/*** 重新录制** @param hkvUtil* @return* @author 刘朋* <br/>date 2019-06-26*/public void reStartRecord(HkvUtil hkvUtil) {EXECUTOR_SERVICE.submit(new VideoRecordEOService.AutoStopThread(hkvUtil));}// AutoStopThread for Start Recording after minutesclass AutoStopThread implements Runnable {private HkvUtil hkvUtil;AutoStopThread(HkvUtil hkvUtil) {this.hkvUtil = hkvUtil;}@Overridepublic void run() {logger.info("自动停止录像线程已开始!");/* try {Thread.sleep(1 * 60 * 1000L);} catch (InterruptedException e) {logger.error(e.getMessage(), e);//中断线程Thread.currentThread().interrupt();}*/logger.info("停止录像");//停止录像成功if (hkvUtil != null && hkvUtil.jButtonStopSaveData()) {logger.info("停止录像成功!");//重新录制Map<String, String> paramMap = hkvUtil.jButtonStartSaveData();//如果录制失败if (StringUtils.equals(paramMap.get(Constant.Global.CODE), "-1")) {logger.info("重新录像失败!");hkvUtilMap.remove(paramMap.get(Constant.Global.CAMERA_ID));}logger.info("再次: {}", paramMap);/*if (paramMap.get(Constant.Global.CODE).equals(Constant.Global.SUCCESS_CODE)) {//重新录制reStartRecord(hkvUtil);}*/logger.info("保存数据库完毕");} else {logger.info("停止录像失败!");}}}}

如果想要隔几分钟保存一次视频文件,还需要后边的两个类。

1.线程工具类

package com.youyou.util;import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;/*** 线程工具类** @author 刘朋* <br/>date 2019-06-28*/
public class ThreadUtils {/*** 延迟并以固定休息时间循环执行命令** @param command 需要重复执行的线程* @param delay   执行的时间间隔(秒)* @return* @author 刘朋* <br/>date 2018-10-11*/public static void scheduleWithFixedDelay(Runnable command, long delay) {scheduleWithFixedDelayMillisecond(command, delay * 1000);}/*** @param command 需要重复执行的线程* @param delay   执行的时间间隔(毫秒)* @return* @author 刘朋* <br/>date 2019-04-29*/public static void scheduleWithFixedDelayMillisecond(Runnable command, long delay) {//定义计划执行者服务,单线程执行器ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();//将线程放入到服务中,它就会自己去跑啦executorService.scheduleWithFixedDelay(command, 0, delay, TimeUnit.MILLISECONDS);}
}

2.跟随系统启动时的触发类

package com.youyou.quartz.starter;import com.youyou.quartz.service.VideoRecordEOService;
import com.youyou.util.ThreadUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;/*** //TODO 添加类/接口功能描述** @author 刘朋* <br/>date 2019-07-01*/
@Component
public class Starter implements CommandLineRunner {private static final Logger LOGGER = LoggerFactory.getLogger(Starter.class);@Autowiredprivate VideoRecordEOService videoRecordEOService ;@Overridepublic void run(String... args) throws Exception {videoRecord();}/*** 园区摄像头录制视频*/private void videoRecord() {LOGGER.info("摄像头测试开始!");Runnable runnable = () -> {//保存录制的视频videoRecordEOService.startRecord("1","192.168.1.64","8000","admin","q1234567");};//5分钟执行一次ThreadUtils.scheduleWithFixedDelay(runnable, 300);}
}

这样就可以实现海康摄像头后台录制视频的功能了,如果有哪里写的不全面的话,可以留言来通知我,我会及时修改完善的。

海康摄像头录制功能实现相关推荐

  1. LiveNVR监控流媒体Onvif/RTSP功能支持海康摄像头通过海康SDK的方式接入直播观看录像回看预置位操作

    LiveNVR功能支持海康摄像头通过海康SDK的方式接入直播观看录像回看预置位操作 1.流媒体服务说明 2.支持海康SDK接入 3.视频广场查看播放 4.预置位接口 4.RTSP/HLS/FLV/RT ...

  2. 海康摄像头二次开发详解,包含海康摄像头登录、海康云台控制、视频下载等功能

    海康摄像头二次开发详解 准备 海康摄像头SDK开发下载路径: 开发过程中遇到的问题记录: 添加maven依赖 下面代码中会出现的实体类 CameraManage实体类: ControlDto实体类: ...

  3. LiveNVR监控流媒体Onvif/RTSP功能支持海康摄像头通过海康SDK接入支持回看倍速播放海康设备存储的设备录像

    LiveNVR功能支持海康摄像头通过海康SDK接入支持回看倍速播放海康设备存储的设备录像 1.流媒体服务说明 2.支持海康SDK接入 3.查看设备录像 3.1.时间轴模式 3.2.列表模式 4.RTS ...

  4. Java版基于springboot+maven海康摄像头sdk抓拍功能的二次开发

    相信在用Java开发海康摄像头的小袁袁都很苦恼官网给的SDK,官方的SDK中有demo,有文档,可那大多都是基于C写的文档,找了半天终于找到一个java版本的,进去一看还是用Jfream写的C/S版的 ...

  5. 海康摄像头开发笔记(一):连接防爆摄像头、配置摄像头网段、设置rtsp码流、播放rtsp流、获取rtsp流、调优rtsp流播放延迟以及录像存储

    文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/131679108 红胖子(红模仿)的博文大全:开发技术集合( ...

  6. 海康摄像头的二次开发(java)

    海康摄像头的二次开发(java) 我第一次接触海康摄像头的二次开发的项目,一开始的时候摸不清套路,走了不少弯路,现在准备把我的一些经验留下来,让大家参考一下. 1.首先到海康的官网下载设备网络SDK: ...

  7. 两个rtsp同时抓流_海康摄像头同时添加到两台海康硬盘录像机上

    相信大家都有这种经历,我我为啥要多买两个摄像头呀,我直接一个摄像头添加到两台硬盘录像机上不香吗? 海康摄像头一般不建议同时添加到超过三台录像机,由于取流限制~ 那么如何同时添加到两台海康录像机上呢? ...

  8. 海康摄像头恢复出厂监控录像视频恢复

    "你好,我这边海康的摄像头恢复出厂了,能恢复前段时间的一些视频数据么?" 海康威视作为中国领先的监控产品供应商之一,海康的监控录像机使用极其广泛,而监控通过摄像头的录制将数据存储到 ...

  9. 海康摄像头的ISAPI协议

    海康威视是一家领先的视频监控设备制造商,其摄像头产品可以通过 ISAPI(Intelligent Security Application Programming Interface)协议进行控制和管 ...

  10. 海康摄像头实时显示与字符叠加详解

    1.说明 文章详细叙述了海康摄像头的两种实时显示方法--基于SDK 解码显示和基于数据流回调显示,并且讲述了这在两种显示方法下如何往画面添加字符和图像,最后比较了这两种方法的优劣.文章全程给以详细的程 ...

最新文章

  1. MySQL查询日志介绍
  2. 美妆AI要抢李佳琦的饭碗?
  3. 如何用命令隐藏文件夹
  4. centos安装mysql步骤,CentOS安装mysql超详细步骤
  5. mysql 查询指定字段数据_MySQL使用select语句查询指定表中指定列(字段)的数据
  6. 【Python】RotatingFileHandler:log日志文件自定义大小+滚动输出
  7. hbase官方网站声称的兼容是否是100%兼容?
  8. VS2010与Windows7共舞:对库进行编程
  9. 使用 EclEmma 进行覆盖测试
  10. 免费送《你的知识需要管理》签名书活动,秒杀
  11. Git fatal: write error: Broken pipe
  12. 游戏筑基开发之C语言编程技巧
  13. QT实现经纬度转换为图片像素坐标
  14. java 过滤微信昵称_java过滤微信昵称特殊字符
  15. buuctf——密码学的心声
  16. HaaS Lab 快速体验
  17. Binwalk的安装和使用
  18. [树状数组] Galahad
  19. Batch Nornaliation:Accelerating Deep Network Training by ReducingInternal Covariate Shift
  20. 沉密神采,如对至尊 --中国书法

热门文章

  1. 计算机网络常用五种编码方式,五种常见的基带数字编码方式
  2. c语言环比,同比、环比的区别及计算公式
  3. 怎样复制秀米html码,来,今天学习秀米的“复制粘贴”快捷键~
  4. 研究生如何参加以及准备学术会议详细攻略-9000字
  5. Word TOC域的使用说明
  6. css在文字中间插入下划线,css实现文字自定义下划线
  7. CMS漏洞(发货100CMS、SHECMS、ZHCMS、MACCMS)详解实战
  8. php 登陆微博,用新浪微博账号登录(第三方登录)
  9. php 图片折角处理,如何使用CSS3实现折角效果
  10. PostgreSql对比MySQL优势