通过海康sdk实现指定时间段内的录像文件下载
通过海康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文档描述的流程来实现下载功能:
实现方式
- 初始化sdk和用户注册设备流程自行事项,本篇文章暂时略过该过程。
- 调用录像文件查找接口NET_DVR_FindFile,判断该时间段内是否存在录像。
- 调用NET_DVR_FindNextFile_V30按时间逐个获取查找到的文件信息。
- 调用NET_DVR_FindClose_V30关闭文件查找,释放资源。
- 组织下载信息结构体NET_DVR_PLAYCOND
- 检测下载路径是否存在,如果不存在则创建下载路径。
- 调用NET_DVR_GetFileByTime_V40按时间下载录像文件。
- 调用HCNetSDK.INSTANCE.NET_DVR_PlayBackControl(net_DVR_GetFileByTime_V40, HCNetSDK.NET_DVR_PLAYSTART, 0, null);控制录像下载状态 开始下载
- 提供获取录像文件下载进度的接口。
下载录像文件接口
/*** @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实现指定时间段内的录像文件下载相关推荐
- LiveNVR监控流媒体Onvif/RTSP功能支持海康摄像头通过海康SDK的方式接入直播观看录像回看预置位操作
LiveNVR功能支持海康摄像头通过海康SDK的方式接入直播观看录像回看预置位操作 1.流媒体服务说明 2.支持海康SDK接入 3.视频广场查看播放 4.预置位接口 4.RTSP/HLS/FLV/RT ...
- LiveNVR监控流媒体Onvif/RTSP功能支持海康摄像头通过海康SDK接入支持回看倍速播放海康设备存储的设备录像
LiveNVR功能支持海康摄像头通过海康SDK接入支持回看倍速播放海康设备存储的设备录像 1.流媒体服务说明 2.支持海康SDK接入 3.查看设备录像 3.1.时间轴模式 3.2.列表模式 4.RTS ...
- 通过海康SDK预览获取回调的PS流数据自己解析然后前端播放
最近在玩视频相关的,也算是一步一步的深入吧. 第一版: 用海康SDK进行历史数据下载: https://blog.csdn.net/qq_16504067/article/details/114538 ...
- 最详细的JavaWeb服务器端通过海康SDK实现对摄像机的控制。
需求介绍: 近期需求,需要通过JavaWeb开发,实现在web页面上对海康摄像机进行调焦.控制方向.调光圈大小等操作.通过研究海康官网给的demo,进行JavaWeb二次开发.同时也欢迎各位小伙伴留言 ...
- 【166】VS2022调试通过海康人脸抓拍SDK的C++代码
具体的开发环境配置方法可以参考 [160]VS2022调试通过海康摄像头烟火识别SDK 下面是人脸抓拍的C++代码,把原来示例中的CreateFile函数改成了CreateFileA函数,避免出现无法 ...
- 【173】VS2022调试通过海康温度报警SDK的C++代码
具体的开发环境配置方法可以参考 [160]VS2022调试通过海康摄像头烟火识别SDK 操作系统: Windows 需要先在海康平台设置好报警温度,然后就可以编写代码监听警报.此功能可以用于火灾报警的 ...
- linux特定时间运行一次所有任务,linux 上在指定时间段内每隔多少分钟自动执行任务计划crontab...
#/bin/sh datename=$(date +%Y%m%d-%H%M%S) echo $datename >> /tmp/logtest.txt */2 19,20 * * * /b ...
- linux查找某时间段文件夹,shell查找指定时间段内的文件
#!/bin/bash #20170905 输入参数格式 echo "显示"$1"的备份文件" date_0=$1 date_1=`expr $date_0 + ...
- 【160】VS2022调试通过海康摄像头烟火识别SDK
下面是我根据海康官方文档代码,放到VS 2022 版本中调试通过后的代码: #include <stdio.h> #include <iostream> #include &q ...
最新文章
- 2018计算机职称考试题,2018年职称计算机Powerpoint考试试题及答案
- 新概念 Lesson 7 A new dress 定冠词、不定冠词
- salt 执行命令等待_saltstack异步执行命令
- 电气论文:基于遗传算法加非线性规划的水火电力系统经济调度(有程序和数据)
- 二十六、数据挖掘电力窃漏电用户自动识别
- oracle数据库登录审计,oracle数据库审计
- Google 推出数据集搜索!百度怎么看?
- python 包含汉字的文件读写之每行末尾加上特定字符
- Qt +ffmpeg(vp8) 记录视频每一帧并生成webm文件格式
- SAP 特殊字符的处理CL_ABAP_CHAR_UTILITIES(去除多余的换行符、换页符、Tab符)
- 根据正则表达式创建NFA的Thompson算法 python实现
- 网页占满整个屏幕_css设置网页占满屏幕
- xx省联通SUN M5000清除故障灯MBU_B Degraded
- MacW小编分享设计师们常用Sketch插件合集,让你效率翻倍!
- 无线网服务器亮红灯什么情况,无线网猫光信号闪红灯是什么原因
- 使用jira管理Scrum敏捷项目实战(四)jira自定义电子看板、敏捷看板、KANBAN配置
- 什么是GLEW GLFW GLM
- Error:(343, 83) java: 从lambda 表达式引用的本地变量必须是最终变量或实际上的最终变量
- mysql8(解压包)安装配置教程
- android智能手机编程考试答案,Android智能手机编程形考作业