毕业设计中,有一项海康威视摄像头实时监控的功能,需要去萤石开放平台获取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. iOS学习之路十三(动态调整UITableViewCell的高度)
  2. 8.0系统安装Xposed框架失败Xposed framework version XX is installed
  3. Tensorboard可视化:基于LeNet5进行面部表情分类
  4. Webpack 基础使用
  5. Finalize/Dispose资源清理模式
  6. 华为云IoT体验:基于IoT平台构建智慧路灯应用
  7. (三)进程各种id:pid、pgid、sid、全局pid、局部pid
  8. 联想拯救者Y7000P拆机清灰学习
  9. js简单图解冒泡排序
  10. iOS 获取屏幕方向,和强制屏幕旋转
  11. 位掩码(BitMask)——介绍与使用
  12. kali linux网络扫描~局域网扫描
  13. eNSP路由器连接外网
  14. 如何变更Win10系统电脑的锁屏壁纸?分享经验!怎样选择Win10电脑的锁屏壁纸?
  15. Tensorflow of python36 in win10
  16. 讯飞智能录音笔SR502帮职场人
  17. 在打开文章时,判断用户是否点赞或者收藏,切换显示点赞收藏图标;
  18. java sdk和java api 的区别
  19. 吴佳怡最新街拍曝光  潮酷girl演绎初秋时尚
  20. 假如古代皇帝也懂负载均衡算法

热门文章

  1. 飞鹅WiFi打印机配置,php调用接口
  2. 谈下离开北京到杭州的感受
  3. 【英语-同义词汇词组】due to的用法及相关词组(because of | owing to)的用法区别
  4. JS数组常用的方法shift,unshift,splice,split,slice
  5. SSMS 18 安装过程中出现严重错误
  6. Flutter Dart 数字转成中文金额大写
  7. 今日头条视频如何收益
  8. android背光,Android背光亮度调节
  9. 面试官:如何设计群聊消息的已读未读功能?
  10. ZooKeeper作为注册中心