海康安防平台对接

news2024/12/27 13:51:36

1.前置准备工作

1.1下载h5播放器

https://open.hikvision.com/download/5c67f1e2f05948198c909700?type=10

在这里插入图片描述
在这里插入图片描述
安装包解压
在这里插入图片描述
1.2配置nginx反向代理
将解压的h5放到nginx目录下
在这里插入图片描述
在这里插入图片描述
配置nginx配置文件,修改如下两个配置
在这里插入图片描述

 server {
        listen       9051;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   F:/nginx/nginx-1.22.1/h5play/demo;
            index  /demo.html /index.htm;
        }

浏览器访问,可以出来页面说明显示正常

http://localhost:9051/demo.html

在这里插入图片描述

1.3获取安防平台的ip,两个密钥,需要找对接相关人员,并同时要求开放你的ip可以访问安防平台

官方文档,可以参考,用处不大

https://open.hikvision.com/docs/docId?productId=5c67f1e2f05948198c909700&version=%2F9e6b1870e25348608d01b5669a7f3595&tagPath=%E6%96%87%E6%A1%A3%E8%AF%B4%E6%98%8E

2.java后台实现

2.1获取实时监控url

package com.example.demo.haikang;

import com.example.demo.util.ArtemisUtil;
import com.hikvision.artemis.sdk.ArtemisHttpUtil;
import com.hikvision.artemis.sdk.config.ArtemisConfig;
import org.json.JSONException;
import org.json.JSONObject;


import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class GetCameraPreviewURL {

    public static String GetCameraPreviewURL(){

        /**
         * STEP1:设置平台参数,根据实际情况,设置host appkey appsecret 三个参数.
         */
        ArtemisConfig.host = "ip:端口,一般是433"; // 平台的ip端口
        ArtemisConfig.appKey = "密钥1";  // 密钥appkey
        ArtemisConfig.appSecret = "密钥2";// 密钥appSecret

        /**
         * STEP2:设置OpenAPI接口的上下文
         */
        final String ARTEMIS_PATH = "/artemis";

        /**
         * STEP3:设置接口的URI地址
         */
        final String previewURLsApi = ARTEMIS_PATH + "/api/video/v1/cameras/previewURLs";
        Map<String, String> path = new HashMap<String, String>(2) {
            {
                put("https://", previewURLsApi);//根据现场环境部署确认是http还是https
            }
        };

        /**
         * STEP4:设置参数提交方式
         */
        String contentType = "application/json";

        /**
         * STEP5:组装请求参数
         */
        JSONObject jsonBody = new JSONObject();
        try {
            //监控点唯一标识
            jsonBody.put("cameraIndexCode", "587f55d033dcdd73306");
            //码流类型,0:主码流,1:子码流,2:第三码流,参数不填,默认为主码流
            jsonBody.put("streamType", 0);
            //取流协议,“rtsp”:RTSP协议,“rtmp”:RTMP协议,“hls”:HLS协议
            jsonBody.put("protocol", "ws");
            //传输协议,0:UDP,1:TCP,默认是TCP      "playType":"back-",
            jsonBody.put("transmode", 1);
            //扩展内容,格式:key=value
            jsonBody.put("expand", "streamform=ps");
        } catch (JSONException e) {
            e.printStackTrace();
        }
        String body = jsonBody.toString();
        /**
         * STEP6:调用接口
         */
        String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, contentType , null);// post请求application/json类型参数
        Map map = com.alibaba.fastjson.JSONObject.parseObject(result, Map.class);
        String data = map.get("data").toString();
        Map mapurl = com.alibaba.fastjson.JSONObject.parseObject(data, Map.class);
        Object url = mapurl.get("url");
        System.out.println("url路径:"+url);
        return result;
    }


    public static void main(String[] args) {
        //String result = GetCameraPreviewURL();  2022-12-12T00:00:00.000+08:00
        //String result = getCameraPlayBackURL("533dcdd73306","2022-12-11T00:00:00.000+08:00","2022-12-13T00:00:00.000+08:00");
        String result = ArtemisUtil.getCameraPlayBackURL("71db88fc77179", "2022-12-11T00:00:00.000+08:00", "2022-12-13T00:00:00.000+08:00");
        System.out.println("***********************************************************************8");
        System.out.println("result结果示例: " + result);
    }
}

在这里插入图片描述
复制后面的url路径:ws到页面中,选择高级模式

在这里插入图片描述
注意:协议部分根据自己的情况选择,本人不清楚这个什么意思,切换后无法看到监控
在这里插入图片描述
2.2获取回放视频url

package com.example.demo.util;
import com.hikvision.artemis.sdk.ArtemisHttpUtil;
import com.hikvision.artemis.sdk.config.ArtemisConfig;
import org.json.JSONException;
import org.json.JSONObject;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ArtemisUtil {




    static {
        // 代理API网关nginx服务器ip端口
        ArtemisConfig.host = ""ip:端口,一般是433"";
        // 秘钥appkey
        ArtemisConfig.appKey = "密钥1";
        // 秘钥appSecret
        ArtemisConfig.appSecret = "密钥2";
    }

    /**
     * 获取监控点回放取流url
     */
    public static String getCameraPlayBackURL(String cameraIndexCode, String beginTime, String endTime) {

        String getRootApi = ARTEMIS_PATH + "/api/video/v2/cameras/playbackURLs";
        Map<String, String> path = new HashMap<String, String>(2) {
            {
                put("https://", getRootApi);
            }
        };

        String contentType = "application/json";

        JSONObject jsonBody = null;
        try {
            jsonBody = new JSONObject();
            jsonBody.put("cameraIndexCode", cameraIndexCode);
            jsonBody.put("recordLocation", 0);//存储类型,0:中心存储,1:设备存储,默认为中心存储
            jsonBody.put("protocol", "ws");
            jsonBody.put("transmode", 1);
            jsonBody.put("beginTime", beginTime);//开始查询时间
            jsonBody.put("endTime", endTime);//结束查询时间,IOS8601格式:yyyy-MM-dd’T’HH:mm:ss.SSSXXX
            jsonBody.put("expand", "streamform=ps");
        } catch (JSONException e) {
            e.printStackTrace();
        }
        String body = jsonBody.toString();

        String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, contentType, null);
        return result;
    }

    /**
     * 时间格式转换
     * 将时间抓换成IOS8601格式
     * @param data
     * @param formatType
     * @return
     */
    public static String dateToString(Date data, String formatType){
        return new SimpleDateFormat(formatType).format(data);
    }
}

ws:开头为回放路径:去掉后面的日期,复制到页面
在这里插入图片描述
在这里插入图片描述
注意:需要根据自己的情况选择是0还是1
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/95406.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python密码锁屏窗体界面

程序示例精选 Python密码锁屏窗体界面 如需安装运行环境或远程调试&#xff0c;见文章底部微信名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《Python密码锁屏窗体界面》编写代码&#xff0c; 原理上没有采用Windows自带锁屏模块&#xff0c;是通过软…

通过左旋和右旋来实现搜索二叉树的自平衡

首先左旋和右旋的概念都是在平衡二叉树的基础上提出的。并对AVL树 SB树 红黑树在原理层面进行了简单的介绍&#xff0c;无coding。 什么是左旋&#xff1f; 假设存在下述平衡二叉树&#xff08;某个结点的左子节点都小于该结点&#xff0c;右子结点右大于大结点&#xff09;&…

初识单链表/单链表头指针的创建

链表的概念及结构 概念&#xff1a;链表是一种物理存储结构上非连续、非顺序的存储结构。链表不像数组中的元素那样&#xff0c;每个数据的的地址是连续的。数组的物理存储结构&#xff1a;数组中上一个数据的地址和下一个数据的地址是连续的&#xff0c;正好差一个整型大小 链…

做副业找不到好项目?公众号依旧是最优选择

大家好&#xff0c;我是蝶衣王的小编&#xff0c;今天分享一下公众号还是否值得做呢 说到做自媒体账号赚钱&#xff0c;有些人可能会说是2022年谁看公众号&#xff0c;阅读量都不如以前了&#xff0c;大家都跑去刷短视频。其实不错&#xff0c;但是对于不想露脸的人来说&#…

深圳大学数学文化赏析MOOC第二次作业答案(满分)

一、单选题 (共 40.00 分) 1. 以下各数集中&#xff0c;不可数的一个是&#xff08; &#xff09; A. 自然数集 B. 整数集 C. 有理数集 D. 无理数集 满分&#xff1a;2.00 分 得分&#xff1a;2.00 分 你的答案&#xff1a; D 正确答案&#xff1a; D 教师评…

java计算机毕业设计ssm重点实验室系统

项目介绍 本重点实验室系统是针对目前仓库的实际需求,从实际工作出发,对过去的重点实验室系统存在的问题进行分析,完善用户的使用体会。采用计算机系统来管理信息,取代人工管理模式,查询便利,信息准确率高,节省了开支,提高了工作的效率。 本系统结合计算机系统的结构、概念、…

机器学习100天:目录

《机器学习100天》&#xff01;理论python&#xff01;实战真正的从零开始机器学习&#xff0c;循序渐进&#xff0c;适合初学者快速入门和进阶&#xff01; 思维导图&#xff1a; 第0章&#xff1a;准备工作 001 开发环境搭建 第1章&#xff1a;数据预处理 002 导入数据集 …

超级简单的vue课程设计电商购物系统,没有数据库文件,通过模拟数据操作

详细地址&#xff1a;《《《下载地址》》》 基于vue前端项目开发的电商购物系统&#xff0c;主要包括商品的列表、商品的详细页、加入购车、注册、用户登录用户等基本的功能。适合于课程设计&#xff0c;该项目的开发没有用到MYSQL数据库&#xff0c;通过模拟数据进行读取&…

转行如何自学Python并且找到工作,分享自己心得

我是25岁转行学python的。说实在&#xff0c;转行就是奔着挣钱去的。希望我的经历可以给想转行的朋友带来一点启发和借鉴。 先简单介绍下个人背景&#xff0c;三流大学毕业&#xff0c;电子商务专业&#xff0c;学习能力一般&#xff0c;没啥特别技能&#xff0c;反正就很普通…

Charles mock数据:

前提&#xff1a;确保手机已和PC上的Charles代理链接成功。 我们在平时的业务开发中&#xff0c;经常有端上已开发完成&#xff0c;但后端接口还没有Ready的情况&#xff1b;或者需要接口频繁变更数据来测试各种case的情况。这样如果过度依赖接口&#xff0c;肯定会极大降低我…

[附源码]Node.js计算机毕业设计糕点销售网站Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

毕业设计-基于大数据的房地产数据分析与预测-python

目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科…

【Numpy】Numpy光速起步(初学者必备基础知识)

Ding Jiaxiong【2022-12-16】 Gitee仓库:https://gitee.com/DingJiaxiong/machine-learning-study.git 文章目录导入numpy认识数组数组的更多信息创建基本数组添加、删除和排序元素数组的形状和大小重塑数组将一维数组转换为二维数组【即如何向数组中添加新轴】索引和切片从现有…

jsp+ssm计算机毕业设计病历管理系统设计【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…

Qt中几个函数的使用方法

一、把字符串转换成整形 demo1: QString str "FF"; bool ok; int hex str.toInt(&ok, 16); // hex 255, ok true int dec str.toInt(&ok, 10); // dec 0, ok false demo2: bool ok; QString line "123"; int line1 line.toInt(&ok)…

重新认识CSS的尺寸体系,熟悉但是不多

前情提要 为了丰富自己是知识体系&#xff08;为了日更薅羊毛&#xff09;&#xff0c;我最近频繁翻阅MDN的文档&#xff0c;果然MDN文档常看常新。 今天翻到CSS部分&#xff0c;然后发现width和height里&#xff0c;有几个属性值眼熟但是不多&#xff0c;值得好好研究一下&a…

马士兵内部共享—1658页《Java面试突击核心讲》

为助力广大程序员朋友 “面试造火箭”&#xff0c;小编今天给大家分享的便是这份马士兵内部的面试神技——1658页《Java面试突击核心讲》&#xff01; 面试神技——1658页《Java面试突击核心讲》 主要包含&#xff1a;Java基础、JVM、多线程、MySQL、Spring、SpringBoot、Spr…

HTML期末作业 蛋糕bootstrap响应式网站html+css+javascript+jquery+bootstarp

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

接手项目代码,作为测试我做了什么

推荐阅读&#xff1a; [内部资源] 想拿年薪30W的软件测试人员&#xff0c;这份资料必须领取~ Python自动化测试全栈性能测试全栈&#xff0c;挑战年薪40W 从功能测试进阶自动化测试&#xff0c;熬夜7天整理出这一份超全学习指南【附网盘资源】 测试人员如何快速熟悉项目代码…

Linux操作系统的安全合规性检查和加固

1. 账号和口令 1.1 禁用或删除无用账号 减少系统无用账号&#xff0c;降低安全风险。 操作步骤 使用命令 userdel 删除不必要的账号。 使用命令 passwd -l 锁定不必要的账号。 使用命令 passwd -u 解锁必要的账号。 1.2 检查特殊账号 检查是否存在空口令和root权限的账号…