萤石云枪机球机云台接入控制实战-含源码-layui

标题最终效果图,下班后摄像头关闭了

主要使用到的技术栈:layui,阿里图标库,layui内置jquery ,mui.min.js,ezuikit.js,萤石云

开始用vedio.js来做,可以播放m3u8的码流,但当前码流结束后不能自动播放下一个,所以需要手动调用,但由于萤石云官方的个人用户并发只有3,请求稍微频繁一点就会建议我买vip,本屌没有钱,所以只能去调他的官网api.

期间也查看了海康威视的sdk,发现比较麻烦,后台发http请求还不如直接js发,所以放弃.

参考资料:

   萤石云http开发文档:http://open.ys7.com/doc/zh/book/index/device_ptz.html#device_ptz-api3

 播放会用到如下接口:UIKit Javascript 使用说明,可以下载一个demo,很简单,注意需要引入萤石云的js文件,建议下载到本地

<script src="https://open.ys7.com/sdk/js/1.4/ezuikit.js"></script>

控制部分那就是用ajax调用http接口了,官方提供的控制功能还不少.

可以先用官方的接口做下测试

 这里需要准备摄像头的AppKey,Secret,AccessToken,还有你摄像头的通道

 这个token有效期才7天,过期还要通过接口重新获取,而且官方说不能频繁调用,如图:

都准备好就可以直播啦,其实直播只需要那个码流地址,就是点击自己的摄像头,进入通道,找到hls的那个地址,有普通和高清 ,地址最后为m3u8的,拷贝出来,在页面定义一个vedio标签

<video id="player1" width=320 height=200 poster="" controls playsInline webkit-playsinline autoplay><source src="高清的播放地址.hd.m3u8" type="application/x-mpegURL" />
</video>

js中初始化一下 

<script>var player1 = new EZUIPlayer('player1');var player2 = new EZUIPlayer('player2');
</script>

不出意外的话,到这里你的视频直播效果已经出来了,但我们还是要控制,要控制呀,不能控制我自己呀!!!

这里搞好后用户需要安装flash插件才能直播,要注意!

好的,我们继续

控制功能官方提供的接口很丰富,大致看一下,

因为我用的是layui嘛,所以用layui自带的jquery发ajax请求比较坑,当然本屌也找到了解决办法,有好几种, 我用的是下面这一种

layui.use(['jquery', 'layer'], function(){var $ = layui.$,layer = layui.layer;$.post('https://open.ys7.com/api/lapp/device/ptz/start',data,function(res){if(res.code==200){layer.msg(res.msg, {time: 2000});}else{layer.msg(res.msg, {time: 2000});}},'json');return false;});

data里面封装的就是请求的参数,不要急,稍后我会附上完整代码

开始呢,我做了个云台旋转和停止的功能,用的layui自带的button按钮,效果挺丑的,所以本屌发粪涂墙了一把,决定换点图标,翻遍了layui的文档,图标只有140个,我要的控制形状按钮都木有,这怎么难的住我,直接找layui整合阿里图标库的方案,参考如下两个帖子:

https://blog.csdn.net/qq_42402854/article/details/80830125

https://blog.csdn.net/kuchawyz/article/details/82707191?utm_source=blogxgwz1

大致就是去阿里官方图标库找到自己喜欢的图标并且下载下来放到layui里面使用,我就去找了一套

选择自己需要的放到购物车

 选择下载代码

代码下载好后拷贝到自己项目中,最好单独建个文件夹,然后修改iconfont.css,改成layui内置的型号

 将红框的iconfont字样替换成layui-icon。搞不明白的参考那两个帖子吧,不过净是坑,还不如看我的

改好就可以在代码里面添加按钮啦,这六个样式分别是上下左右,停止,放大,缩小

<p class="layui-text-bottom"><button class="layui-icon layui-icon-up" lay-submit="" lay-filter="add" onclick="control(0)"></button><button class="layui-icon layui-icon-down" lay-submit="" lay-filter="add" onclick="control(1)"></button><button class="layui-icon layui-icon-left" lay-submit="" lay-filter="add" onclick="control(2)"></button><button class="layui-icon layui-icon-right" lay-submit="" lay-filter="add" onclick="control(3)"></button><button class="layui-icon icon-pause" lay-submit="" lay-filter="add" onclick="stop()"></button><button class="layui-icon icon-plus-circle" lay-submit="" lay-filter="add" onclick="control(8)"></button><button class="layui-icon icon-minus-circle" lay-submit="" lay-filter="add" onclick="control(9)"></button>
</p>

加了后不美观,所以我又加了个mui.css,让图标大小适中

<link href="mui.min.css" rel="stylesheet">
<script src="mui.min.js"></script>

 这下美美哒啦,跟文章一开头的样子一模一样了,接下来写点击控制的方法啦,当然你要参考官方文档

 开始控制功能需要5个参数,都是必填,所以一个一个来吧,一个control方法搞定,传不同参数就行,我分别传了0,1,2,3,8,9

停止控制功能的参数只要三个,所以不需要在onclick中传

<link rel="stylesheet" href="../../layuiadmin/layui/css/layui.css" media="all">
<link rel="stylesheet" href="../../layuiadmin/style/admin.css" media="all">
<link rel="stylesheet" href="../../layuiadmin/layui/font/font_2wmcsfamra2/iconfont.css">
<script src="../../layuiadmin/layui/layui.js"></script>
<script>layui.config({base: '../../layuiadmin/' //静态资源所在路径}).extend({index: 'lib/index' //主入口模块}).use(['index', 'sample']);//这三个参数控制开始和停止都需要传,所以我抽取出来了data={accessToken: '你自己的token,7天就会过期',deviceSerial:'你自己的设备号',channelNo:'设备的通道号'}//开始控制var control=function (direction) {data.direction=direction;//控制方式,我传了0,1,2,3,8,9data.speed='2';//转动速度我直接写死了,有0,1,2三个值layui.use(['jquery', 'layer'], function(){var $ = layui.$,layer = layui.layer;$.post('https://open.ys7.com/api/lapp/device/ptz/start',data,function(res){if(res.code==200){layer.msg(res.msg, {time: 2000});}else{layer.msg(res.msg, {time: 2000});}},'json');return false;});}//停止转动var stop=function () {layui.use(['jquery', 'layer'], function(){var $ = layui.$ ,layer = layui.layer;$.post('https://open.ys7.com/api/lapp/device/ptz/stop',data,function(res){if(res.code==200){layer.msg(res.msg, {time: 2000});}else{layer.msg(res.msg, {time: 2000});}},'json');return false;});}</script>

好吧,到这个时候效果完全出来了,其实我是不满足的,我想要的效果是做个云台,鼠标移动到视频上效果就出来,否则自动隐藏,但没时间了,下次再做吧.

所有源码和依赖的css,js我都放在csdn下载那里了,你可以照着我的教程来自己做,也可以直接去下载,下载地址是:

https://download.csdn.net/download/m0_37609579/10851681

搞定了,大佬们点赞呀!

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

海康威视综合安防平台视频摄像头接入Java

1、原型设计 2、寻找接口 官网接口链接 返回参数 参数名称数据类型是否必须参数描述codestringFalse返回码&#xff0c;0:接口业务处理成功&#xff0c;其它参考附录E.other.1msgstringFalse接口执行情况说明信息dataobjectFalse区域信息结构体totalnumberFalse查询数据记录总…

保姆级低代码实战教程——玩转PagePlug表格开发,增删改查分页如此简单

目录 1、背景介绍 2、连接数据源 2.1 新增数据源 2.2 填写数据源信息 3、表格数据的展示 3.1 新增查询&#xff0c;编写查询语句 3.2 使用表格组件 3.3 同步数据源与表格列名 4、表格的数据新增 4.1 新增查询&#xff0c;编写新增语句 4.2 表格配置新增一行&#xf…

chatgpt-web发布之docker打包流程

docker打包流程 1、使用docker前置准备&#xff1a; 电脑下载docker桌面版&#xff0c;以及开启虚拟机步骤&#xff1a;https://blog.csdn.net/qq_34905631/article/details/126573826下载docker桌面版 &#xff1a;https://docs.docker.com/desktop/install/windows-install…

(001)我们一起学Python;基本运算

&#xff08;一&#xff09;将 Python 当做计算器 ①除法 (/)永远返回一个浮点数。 floor 除法可以使用 // 运算符得到整数结果&#xff08;丢掉任何小数部分&#xff09;&#xff1b;要计算余数你可以使用 % PS:Python的命令行交互工具IDLE可以将文本打印&#xff0c;快捷键…

Day22——HTML

文章目录 HTML一、 关于 html 那些事1. 为什么要学 html&#xff1f;2. 什么是 html&#xff1f;3. 发展史4. 优势5. W3C 标准6. 学习 html 要达到的方法和目标7. 第一个 HTML 案例 二、HTML 的基础知识1. HTML 的基本结构1.1 HTML 头部元素1.1.1 title 标签1.1.2 base 标签1.1…

二流公司前端,月入账工资3万元「web前端薪资如何?」

一个好的 Web 前端年薪会有多少? 作为一名普通员工来说的话,比较好的公司会给什么待遇呢? 匿名用户 昨天发的工资,匿了,二流互联网公司前端。 2013年底的行情 拿了一年了。 update 2017年拿了半年了… 这次不算奖金了 每月到手的。 罗龙浩支付宝口碑前端负责人 2012…

(006)我们一起学Python;列表----超级结构体

if else d的匹配在C和Python上是完全不同的&#xff0c;Python依靠对其匹配&#xff0c;而C是就近匹配。所以Python有更好的可读性和代码更优美简洁。 条件表达式&#xff08;三元操作符&#xff09; 根据判断条件&#xff0c;来进行赋值操作 assert这个关键字 我们称之为断言…

java之JVM学习全过程学习记录

关注公众号&#xff1a;”奇叔码技术“ 回复&#xff1a;“java面试题大全”或者“java面试题” 即可免费领取资料 java之JVM学习记录其中有许多借鉴综合&#xff0c;感谢通哥也感谢大佬们&#xff0c;一起学习加油&#xff09; 关注公众号&#xff1a;”奇叔码技术“ 1、J…

linux 1060显卡,Steam最受欢迎显卡型号出炉,GTX 1060 依然是王道!

原标题&#xff1a;Steam最受欢迎显卡型号出炉&#xff0c;GTX 1060 依然是王道&#xff01; 2019年7月Steam 硬件和软件调查报告。 作为一名忠实游戏玩家 除了好玩的游戏作品外 基本还会关心硬件配置等 不知道大家的游戏配置 一般多久升级一次 通哥的1060倒是真的战斗蛮久了 近…

通过javasocket实现客户端与客户端的联系

首先建立两个文件夹Client_1跟Server_1的文件夹 CloseUtil.java是关闭流class&#xff0c;当我们的输入流跟输出流以及端口出问题以及不想要时&#xff0c;可以通哥这个class实现关闭&#xff0c;client跟server两个都是一样的 Server_1 首先是server.java 其次是Mychannel.j…

对话华为云专家,摆脱无意义“内卷”

本期推荐&#xff1a;【云享人物大咖面对面】华为云首席产品官方国伟独家专访&#xff1a;当下云发展有待突破的并不是技术问题&#xff1b;现在为什么是#华为云# 的最佳时机&#xff1b;以不变应万变&#xff0c;什么是云产品规划的三个关键出发点&#xff1b;生态对于云的意义…

Could not create connection to database server.

bug日记&#xff1a;Could not create connection to database server. 网上查了很多博客&#xff0c;指出了两个方向 yml(yaml)里面数据库的配置问题mysql-connector-java 的版本号问题 结合我的报错&#xff0c;项目一测试登录&#xff0c;就报错这个&#xff0c;而且错误…

eclipse 根据路径文件名定位文件

前言 以前用ctrlshiftr 根据文件名正则匹配文件&#xff0c;能够很快定位到具体的文件。 后来我遇到了恩 类似于如下图这样&#xff08;习惯起相同文件名的队友&#xff09; 解决办法 苦搜网上无果&#xff0c;本来心思开发个eclipse插件&#xff0c;后来插入一个项目要带领…

OAuth2 的授权流程

文章目录 &#x1f4d6; OAuth2 的授权流程&#x1f4d1; 参与的角色&#x1f4d1; 授权流程&#x1f4d1; 授权许可 Authorization Grant&#x1f4d1; 直白话 OAuth2 流程 &#x1f4d6; OAuth2 的授权流程 &#x1f4d1; 参与的角色 1️⃣ Resource Owner资源所有者&#…

k8s --> 19 k8s集群down机

文章目录 一、master节点1、在masster节点操作 二、故障排查1、查看6443&#xff08;api-server&#xff09;2、检查docker和kubelet服务3、查看日志4、登录master机器5、故障处理 一、master节点 1、在masster节点操作 kubectl get node kubectl get 报错&#xff1a;Unab…

CCS_3200编译错误汇总一(通)

CC3200编译错误汇总 1CC3200提示编译器版本不对 解决办法&#xff1a;官网去下载最新版本的编译器&#xff0c;官网的结构可能会改变&#xff0c;但是找到 Compiler下载相关的就能够找到&#xff0c;这个办法可能不是万能&#xff0c;多换几个编译器编译试 一下。 在Project-…

田渊栋:关于GPT-4的一些感想

点击上方“AI遇见机器学习”&#xff0c;选择“星标”公众号 重磅干货&#xff0c;第一时间送 来自&#xff1a;新智元 作者&#xff1a;田渊栋 编辑&#xff1a;桃子 【导读】对于研究者们而言&#xff0c;GPT-4的出现意味着什么呢&#xff1f; OpenAI昨天发布了GPT-4&#xf…

网络错误 请确保您已连接到网络并重试

windows2008从windows2003网络拷贝总提示:网络错误 请确保您已连接到网络并重试 处理办法&#xff1a; 运行 gpedit.msc&#xff0c;对组策略--计算机配置--windows设置--安全设置--本地策略--安全选项 中的 “网络安全&#xff1a;LAN管理器身份验证级别”项的值“没有定义”…

chrome连接已重置_如何重置(或调整)Chrome的下载设置

chrome连接已重置 By default, Chrome saves all downloaded files to the same location—a dedicated “Downloads” folder. The thing is, this isn’t always practical for all types of download files. The good news is you can easily tweak this setting. 默认情况下…

用友t1系统服务器连接失败,登录T1时服务器连接失败,请重新确认是怎么回事?...

可以重新再建一个新账套吗&#xff1f;&#xff1f;&#xff1f; 可以重新再建一个新账套吗&#xff1f;&#xff1f;&#xff1f;[] 您好&#xff0c;软件未限制账套的个数&#xff0c;您可以在建立账套的服务社区李珊:怎么建立&#xff1f;&#xff1f;铧霖钢材经营部:您打开…