![](https://i-blog.csdnimg.cn/blog_migrate/3ee8c2d35ae874cc67fa2f3d9719f7cc.png)
主要使用到的技术栈: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
搞定了,大佬们点赞呀!