通过海康sdk实现指定时间段内的录像文件下载

  • 实现方式
    • 录像文件下载实现流程
    • 实现方式
      • 下载录像文件接口
      • 提供获取录像文件下载进度

个人博客:banmajio’s blog

海康sdk二次开发系列文章
海康sdk捕获码流数据通过JavaCV推成rtmp流的实现思路(PS流转封装RTMP)
海康sdk进行历史回放时,码流数据回调过快问题的解决方法
海康sdk项目(java)部署Linux环境相关问题总结
海康sdk部署Linux环境下无法播放子码流的问题
海康sdk项目部署Linux系统时出现java.lang.UnstisfiedLinkError:jnidispatch(xxx)not found in resource path错误
通过海康sdk捕获码流数据实现抓图功能
海康sdk查询指定时间段内NVR的录像文件列表

实现方式

录像文件下载实现流程

根据海康sdk文档描述的流程来实现下载功能:

实现方式

  1. 初始化sdk和用户注册设备流程自行事项,本篇文章暂时略过该过程。
  2. 调用录像文件查找接口NET_DVR_FindFile,判断该时间段内是否存在录像。
  3. 调用NET_DVR_FindNextFile_V30按时间逐个获取查找到的文件信息。
  4. 调用NET_DVR_FindClose_V30关闭文件查找,释放资源。
  5. 组织下载信息结构体NET_DVR_PLAYCOND
  6. 检测下载路径是否存在,如果不存在则创建下载路径。
  7. 调用NET_DVR_GetFileByTime_V40按时间下载录像文件。
  8. 调用HCNetSDK.INSTANCE.NET_DVR_PlayBackControl(net_DVR_GetFileByTime_V40, HCNetSDK.NET_DVR_PLAYSTART, 0, null);控制录像下载状态 开始下载
  9. 提供获取录像文件下载进度的接口。

下载录像文件接口

/*** @Title: download* @Description: 下载指定时间录像文件* @param pojo* @return: JSONObject**/@PostMapping(value = "/download")public JSONObject download(@RequestBody @Valid CameraPojo pojo) {JSONObject json = new JSONObject(true);// 自行调用注册设备的接口获取注册句柄HCLoginSDK login = null;// 将接口传入的yyyy-MM-dd HH:mm:ss格式的时间转为sdk接口时间的结构体NET_DVR_TIME lpStartTime = Utils.getNvrTime(pojo.getStarttime());NET_DVR_TIME lpStopTime = Utils.getNvrTime(pojo.getEndtime());// 查找录像文件NativeLong lFindFileHandle = HCNetSDK.INSTANCE.NET_DVR_FindFile(login.getLUserID(),new NativeLong(Integer.valueOf(pojo.getChannel())), 0, lpStartTime, lpStopTime);if (lFindFileHandle.intValue() < 0) {int errorcode = HCNetSDK.INSTANCE.NET_DVR_GetLastError();logger.error("hcsdk 按时间查找录像文件失败,错误码:" + errorcode);json.put("message", "按时间查找录像文件失败 错误码:" + errorcode);return json;}// 按时间逐个获取查找到的文件信息HCNetSDK.NET_DVR_FINDDATA_V30 findData = new HCNetSDK.NET_DVR_FINDDATA_V30();NativeLong lFindFileNextHandle;while (true) {lFindFileNextHandle = HCNetSDK.INSTANCE.NET_DVR_FindNextFile_V30(lFindFileHandle, findData);if (lFindFileNextHandle.intValue() != 1002) {break;}}if (lFindFileNextHandle.intValue() != 1000) {int errorcode = HCNetSDK.INSTANCE.NET_DVR_GetLastError();logger.error("hcsdk 按时间逐个获取查找到的文件信息失败,错误码:" + errorcode);json.put("message", "按时间逐个获取查找到的文件信息失败 错误码:" + errorcode);return json;}// 关闭文件查找,释放资源。HCNetSDK.INSTANCE.NET_DVR_FindClose_V30(lFindFileHandle);// 下载条件结构体HCNetSDK.NET_DVR_PLAYCOND pDownloadCond = new HCNetSDK.NET_DVR_PLAYCOND();pDownloadCond.dwChannel = Integer.valueOf(pojo.getChannel());pDownloadCond.struStartTime = lpStartTime;pDownloadCond.struStopTime = lpStopTime;pDownloadCond.byDrawFrame = 0;pDownloadCond.byStreamType = (byte) ("sub".equals(pojo.getStream()) ? 1 : 0);String videopath = null;try {String starttime = new SimpleDateFormat("yyyyMMddHHmmss").format(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(pojo.getStarttime()));String endtime = new SimpleDateFormat("yyyyMMddHHmmss").format(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(pojo.getEndtime()));videopath = config.getVideopath() + starttime + "-" + endtime + ".mp4";} catch (ParseException e) {e.printStackTrace();}// 检测下载路径是否存在,如果不存在则创建下载路径Utils.checkPath(config.getVideopath());// 按时间下载录像文件NativeLong net_DVR_GetFileByTime_V40 = HCNetSDK.INSTANCE.NET_DVR_GetFileByTime_V40(login.getLUserID(),videopath, pDownloadCond);if (net_DVR_GetFileByTime_V40.intValue() == -1) {int errorcode = HCNetSDK.INSTANCE.NET_DVR_GetLastError();logger.error("hcsdk 按时间下载录像文件失败 错误码:" + errorcode);json.put("message", "hcsdk 按时间下载录像文件失败 错误码:" + errorcode);return json;}// 控制录像下载状态 开始下载HCNetSDK.INSTANCE.NET_DVR_PlayBackControl(net_DVR_GetFileByTime_V40, HCNetSDK.NET_DVR_PLAYSTART, 0, null);IntByReference LPOutValue = new IntByReference();// 通过key来获取下载句柄和下载路径String key = UUID.randomUUID().toString();CacheUtil.DWONLOADHANDLE.put(key, net_DVR_GetFileByTime_V40);CacheUtil.DWONLOADPATH.put(key, videopath);logger.info("hcsdk 开始下载录像文件:" + videopath);json.put("message", "开始下载录像文件");json.put("key", key);return json;}

提供获取录像文件下载进度

/*** @Title: getDownloadProgress* @Description: 获取录像文件下载进度* @param key* @return: JSONObject**/@GetMapping(value = "downprogress")public JSONObject getDownloadProgress(@NotBlank(message = "key不能为空") String key) {JSONObject json = new JSONObject(true);IntByReference LPOutValue = new IntByReference();HCNetSDK.INSTANCE.NET_DVR_PlayBackControl(CacheUtil.DWONLOADHANDLE.get(key), HCNetSDK.NET_DVR_PLAYGETPOS, 0,LPOutValue);if (LPOutValue.getValue() == 100) {logger.info("hcsdk 录像文件下载成功 下载路径:" + CacheUtil.DWONLOADPATH.get(key));json.put("message", "录像文件下载成功");json.put("videopath", CacheUtil.DWONLOADPATH.get(key));return json;}json.put("message", "录像文件正在下载");json.put("downprogress", LPOutValue.getValue() + "%");return json;}

通过海康sdk实现指定时间段内的录像文件下载相关推荐

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

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

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

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

  3. 通过海康SDK预览获取回调的PS流数据自己解析然后前端播放

    最近在玩视频相关的,也算是一步一步的深入吧. 第一版: 用海康SDK进行历史数据下载: https://blog.csdn.net/qq_16504067/article/details/114538 ...

  4. 最详细的JavaWeb服务器端通过海康SDK实现对摄像机的控制。

    需求介绍: 近期需求,需要通过JavaWeb开发,实现在web页面上对海康摄像机进行调焦.控制方向.调光圈大小等操作.通过研究海康官网给的demo,进行JavaWeb二次开发.同时也欢迎各位小伙伴留言 ...

  5. 【166】VS2022调试通过海康人脸抓拍SDK的C++代码

    具体的开发环境配置方法可以参考 [160]VS2022调试通过海康摄像头烟火识别SDK 下面是人脸抓拍的C++代码,把原来示例中的CreateFile函数改成了CreateFileA函数,避免出现无法 ...

  6. 【173】VS2022调试通过海康温度报警SDK的C++代码

    具体的开发环境配置方法可以参考 [160]VS2022调试通过海康摄像头烟火识别SDK 操作系统: Windows 需要先在海康平台设置好报警温度,然后就可以编写代码监听警报.此功能可以用于火灾报警的 ...

  7. linux特定时间运行一次所有任务,linux 上在指定时间段内每隔多少分钟自动执行任务计划crontab...

    #/bin/sh datename=$(date +%Y%m%d-%H%M%S) echo $datename >> /tmp/logtest.txt */2 19,20 * * * /b ...

  8. linux查找某时间段文件夹,shell查找指定时间段内的文件

    #!/bin/bash #20170905 输入参数格式 echo "显示"$1"的备份文件" date_0=$1 date_1=`expr $date_0 + ...

  9. 【160】VS2022调试通过海康摄像头烟火识别SDK

    下面是我根据海康官方文档代码,放到VS 2022 版本中调试通过后的代码: #include <stdio.h> #include <iostream> #include &q ...

最新文章

  1. 2018计算机职称考试题,2018年职称计算机Powerpoint考试试题及答案
  2. 新概念 Lesson 7 A new dress 定冠词、不定冠词
  3. salt 执行命令等待_saltstack异步执行命令
  4. 电气论文:基于遗传算法加非线性规划的水火电力系统经济调度(有程序和数据)
  5. 二十六、数据挖掘电力窃漏电用户自动识别
  6. oracle数据库登录审计,oracle数据库审计
  7. Google 推出数据集搜索!百度怎么看?
  8. python 包含汉字的文件读写之每行末尾加上特定字符
  9. Qt +ffmpeg(vp8) 记录视频每一帧并生成webm文件格式
  10. SAP 特殊字符的处理CL_ABAP_CHAR_UTILITIES(去除多余的换行符、换页符、Tab符)
  11. 根据正则表达式创建NFA的Thompson算法 python实现
  12. 网页占满整个屏幕_css设置网页占满屏幕
  13. xx省联通SUN M5000清除故障灯MBU_B Degraded
  14. MacW小编分享设计师们常用Sketch插件合集,让你效率翻倍!
  15. 无线网服务器亮红灯什么情况,无线网猫光信号闪红灯是什么原因
  16. 使用jira管理Scrum敏捷项目实战(四)jira自定义电子看板、敏捷看板、KANBAN配置
  17. 什么是GLEW GLFW GLM
  18. Error:(343, 83) java: 从lambda 表达式引用的本地变量必须是最终变量或实际上的最终变量
  19. mysql8(解压包)安装配置教程
  20. android智能手机编程考试答案,Android智能手机编程形考作业

热门文章

  1. IOS 开发必备网址
  2. 【云原生】第二篇--容器管理工具 Docker生态架构及部署
  3. 【数据库】Redis
  4. 使用Python解决Teamviewer被误认为商业用途的问题
  5. Cesium之粒子---简单粒子特效
  6. vsCode常用插件(汉化,高亮)
  7. 一加和小米哪个好 一加用技术领先树立起品牌典范
  8. 学游戏原画的步骤是什么?超适合小白的学习方法
  9. 字符转换 提取一个字符串中的所有数字字符('0'……'9'),将其转换为一个整数输出。 首位不能是0
  10. 2019-CSP赛后总结