萤石云枪机球机云台接入控制实战-含源码-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,9
        data.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

搞定了,大佬们点赞呀!

 

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十步杀一人_千里不留行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值