毕业设计中,有一项海康威视摄像头实时监控的功能,需要去萤石开放平台获取AppKey、Secret和AccessToken。但是有一个问题,获取到的AccessToken只有7天有效期。每隔7天就要获取一次token。项目发布后不可能通过手动去获取,而是要通过代码自动去获取。因此,去查找萤石开放平台的官方文档,通过接口进行调用。

萤石开放平台文档

因为项目采用的是ssm框架,因此在这里,使用springmvc配置定时执行任务,定期通过接口获取AccessToken,然后修改MySQL数据库中的数据,来达到定期更换token的效果。当想要访问实时监控画面时,只需在Controller中添加一个方法,从数据库中获取AccessToken,然后利用session传到前端即可。

1. 首先在spring-mvc.xml配置文件中添加

xmlns:task="http://www.springframework.org/schema/task"
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.0.xsd

配置扫描任务位置

<task:annotation-driven />
<task:scheduler id="scheduler" pool-size="10" />
<context:component-scan base-package="com.gong.*"/>

2. (因为项目需要,我将要定期执行获取AccessToken的方法放到了controller包里。)具体实现如下:

因为要用到http客户端,所以需要导入httpclient依赖。同时,因为从接口获取到的数据是Json格式,因此在这里采用阿里巴巴的fastjson。

首先在pom.xml中添加依赖

<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.5</version>
</dependency>
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version>
</dependency>

HistoryDataController类:

@Controller
@RequestMapping("/historydata")
public class HistoryDataController {@Autowiredprivate HistoryDataService historyDataService;private static String appKey = "*********************";//填上自己的appKey和Secret即可private static String appSecret="**********************";//@Scheduled(cron = "0 0 13 ? * MON")public void updateVideoToken() throws IOException {CloseableHttpClient httpClient = HttpClientBuilder.create().build();StringBuffer params = new StringBuffer();params.append("appKey="+appKey);params.append("&");params.append("appSecret="+appSecret);// 创建Post请求HttpPost httpPost = new HttpPost("https://open.ys7.com/api/lapp/token/get" + "?" + params);httpPost.setHeader("Content-Type","application/x-www-form-urlencoded");// 响应模型CloseableHttpResponse response = null;// 由客户端执行(发送)Post请求response = httpClient.execute(httpPost);// 从响应模型中获取响应实体HttpEntity responseEntity = response.getEntity();if (responseEntity != null) {//返回数据String responseString = EntityUtils.toString(responseEntity);//生成实体类(responseString就可以看到数据的)JSONObject jsonObject = JSON.parseObject(responseString);String msg = jsonObject.getString("msg");String code = jsonObject.getString("code");JSONObject dataJson = jsonObject.getJSONObject("data");Data data = JSONObject.toJavaObject(dataJson, Data.class);VideoToken videoToken = new VideoToken();videoToken.setId(1);videoToken.setAccesstoken(data.getAccessToken());if(code.equals("200")){historyDataService.updateAccessToken(videoToken);}}}@RequestMapping("/toreal")public String toRealJsp(HttpServletRequest request){int id=1;VideoToken videoToken = historyDataService.getVideoToken(id);String accesstoken = videoToken.getAccesstoken();request.setAttribute("accesstoken",accesstoken);return "real";}
}

在方法上添加了 @Scheduled(cron = "0 0 13 ? * MON")注解,意思为每周一中午13点执行一次,关于该注释的参数详解,可以点击这里进行查看

其中,Data类为自定义类,如下:

package com.gong.pojo;@lombok.Data
public class Data {private String accessToken;private long expireTime;
}

VideoToken类如下:

package com.gong.pojo;import lombok.Data;@Data
public class VideoToken {private int id;private String accesstoken;
}

在HistoryDataController中定义了HistoryDataService,调用updateAccessToken()方法来实现更新AccessToken。

其中,HistoryDataMapper.xml文件中的语句如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gong.mapper.HistoryDataMapper"><update id="updateAccessToken" parameterType="com.gong.pojo.VideoToken">update ssmiot.videotokenset accesstoken = #{accesstoken}where id = #{id}</update><select id="getVideoToken" resultType="com.gong.pojo.VideoToken">select * from ssmiot.videotoken where id = #{id}</select>
</mapper>

数据库中的表如下

在HistoryDataController中,给id赋值为1,即修改id为1的accesstoken值。

每当想进入实时监控画面时,必须通过/toreal路径去访问,该方法会去数据库获取accesstoken的值,然后传给前端页面。

<%String accesstoken = (String)request.getAttribute("accesstoken");
%>
<iframesrc="https://open.ys7.com/ezopen/h5/iframe?url=ezopen://SAKUIV@open.ys7.com/xxxxxxxxx/1.hd.live&autoplay=0&audio=1&
accessToken=<%=accesstoken%>
&templete=1" id="ysopen" allowfullscreen width="500px" height="300px">
</iframe>

其中,xxxxxxxxx处填写对应摄像头的设备序列号。

萤石开放平台-定时获取AccessToken相关推荐

  1. 萤石开放平台——怎么通过API接口远程添加摄像头?

    高科技摄像头特别是海康萤石摄像头,已经不再只局限于简单的视频功能,特别是智能AI的普及,摄像头也华丽变身成了一个个独立的智能个体,可以实现人脸抓拍,人形检测,客流统计等店铺值守场景,也可以实现安全帽识 ...

  2. 萤石开放平台(视屏直播)

    萤石开放平台(视屏直播)   1.应用的建立 登入萤石开放平台的后台,[开发者服务]-[我的应用],建立一个应用,用于获取 AppKey,AppSecret 2.设置直播 [开发者服务]-[我的资源] ...

  3. 萤石开放平台二次开发——摄像头取流至抖音直播平台

    抖音是一款全民都在使用的社交软件,拥有着上亿的用户,基于如此庞大用户量,不少用户在抖音上开展直播业务. 接下来将为大家介绍如何将接在萤石开放平台上的设备画面同步至抖音直播间. 准备工具: 抖音直播伴侣 ...

  4. 萤石开放平台的二次开发——摄像头取流至微博直播平台

    1.申请开放平台账号注册 1.1登录萤石开放平台主页:https://open.ys7.com/cn/s/index 1.2点击首页左上方的"注册"入口 1.3进入注册页面:htt ...

  5. 萤石开放平台-怎么做账号之间的联动操作?(设备托管)

    典型场景: 我是一个总部(公司下有多地分部)技术开发者,现在总部让我把所有地区分布的摄像头对接到总部进行统一管理.这类场景无论在连锁门店.工地.养殖的行业下都是常见的技术实现要求. 难点: 需要保证分 ...

  6. 萤石开放平台——怎么保存下载摄像头的视频片段?

    除了本地SD卡之外,还能怎么把摄像头的视频保存下来呢? 现在有云存储和云录制两种方式,其中云存储只提供事件存储,云录制可以通过云录制可以将告警消息产生的时刻对应的视频进行录制,实现告警消息和视频录制之 ...

  7. 萤石开放平台——摄像头取流有问题怎么排查?

    监控地址可以用我们在线工具测试:EZOPEN播放协议 直播地址可以我们在线工具测试:https://open.ys7.com/jssdk/live.html,也可以通过VLC播放器(https://w ...

  8. 海康威视网络摄像头开发流程(一)------ 萤石开放平台的账号申请

    简述 在大二下学期的时候,做过海康威视网络摄像头的系统,当时这个是我首次独立开发的系统,所以一切都是零起步.在开发过程中,遇到了很多问题,当然也都被我解决了(哈哈).今年寒假由于疫情的原因,学校开学推 ...

  9. iOS-Undefined symbols for architecture x86_64-- 调适萤石摄像头驱动程序--萤石开放平台

    Undefined symbols for architecture x86_64 报错如下 Undefined symbols for architecture x86_64:"_OBJC ...

  10. 抖音开放平台授权登录PHP,5分钟快速接入抖音开放平台,获取我的抖音粉丝列表,还有更多实用API...

    注:图片来自抖音开放平台 极速体验 即便你还没有抖音开放平台的账号,也可以极速体验一下抖音授权和接口调用的效果. 进入果创云开放平台-会员-抖音用户-抖音扫码授权. 链接:http://open.ye ...

最新文章

  1. 【CentOS 7LNMP架构33】,nginx负载均衡#180109
  2. hive防止数据误删
  3. 自己启动spark集群的实验记录
  4. keytool安装tls证书_TLS使用指南(一):如何在Rancher 2.x中进行TLS终止?
  5. c语言链表与字符结合,C语言实现双链表的(终端)添加和查询
  6. 中金所技术各部门介绍_【电视技术】液晶电视背光板各部分电路介绍
  7. 西门子博图的FB块_西门子S7-300/400PLC OB-FB-FC-DB块介绍
  8. rest api_摆脱困境:向REST API添加验证
  9. [JavaWeb基础] 015.Struts2 表单验证框架
  10. init.d目录理解
  11. 毕啸南专栏 | 对话旷视CEO印奇:AI产业2018年将迎来转折
  12. 2021安徽高考成绩及录取结婚查询,2020安徽高考录取结果查询时间及通知书发放时间...
  13. 声音均衡器怎么调好听_调音师必备:如何调出最佳人声?
  14. c# chart 点值标注_C# chart控件参数设定总结
  15. 面试官问:如何搭建测试环境?掌握这5种技能和知识就够了
  16. 天行健,君子以自强不息;地势坤,君子以厚德载物的解释
  17. 柠檬班Python高级软件测试开发2022年
  18. 山东省计算机技能大赛通报,比赛成绩通报
  19. 华为eNSP配置FR 帧中继协议
  20. 你需要知道的无代码数据分析工具

热门文章

  1. python中label组件参数_Tkinter:Label组件
  2. react-native android打包失败: GC overhead limit exceeded
  3. 设置美团用户cookie实现用户登录
  4. ANX9833|硅谷数模ANX9833方案电路|ANX9833中文设计资料|ANX9833代理
  5. matlab 数组中的一个值,MATLAB数组元素引用的三种方法
  6. 计算机中求声音传输时间公式,计算机常用计算公式汇总
  7. Excel VBA 入门基础
  8. PAAS(platform as a serverce,平台即服务)
  9. 【京东】商品评价采集
  10. 关于京东评价数目,淘宝评价数目延迟加载