diff --git a/.history/public/webs/css/style_20231212135453.css b/.history/public/webs/css/style_20231212135453.css new file mode 100644 index 0000000..ff83339 --- /dev/null +++ b/.history/public/webs/css/style_20231212135453.css @@ -0,0 +1,28 @@ +@charset "utf-8"; +* { + margin:0; + padding:0; +} +html { + width:100%; + height:100%; + font-size:12px; + font-family:Arial, Helvetica, sans-serif; + -webkit-text-size-adjust:none; + background:#FFFFFF; + overflow: hidden; +} +body { + width: 100%; + height: 100%; +} +.h5-left { + float: left; +} + +.h5-play-wrap { + width: 100%; + height: 100%; + position: relative; + overflow: hidden; +} diff --git a/.history/public/webs/index_20231212133606.js b/.history/public/webs/index_20231212133606.js new file mode 100644 index 0000000..12c196c --- /dev/null +++ b/.history/public/webs/index_20231212133606.js @@ -0,0 +1,307 @@ +let $ip, + $port, + $user, + $password, + $loginState, + $stream, + $volume, + $canvas, //canvas播放视频DOM + $video, //video播放视频DOM + $canvas_ivs, //canvas绘图DOM + $video_wrap, //视频外层Wrap + $videoLoading, //“加载中...”提示 + WndIndex = 0, //宫格窗口Id + WebCaps = null; //webCapsConfig文件转存变量 +let isLogin = false; //是否登录 +let channel = 0; //当前通道 +let curPage = 1; //视频下载列表的当前页 +let totalPage = 1; //视频下载列表的总页数 +let recordArr = []; //视频文件数组 +let canvasSon = null; //canvas绘图实例 +let playerInstance = []; //播放|回放实例数组 +let recordInstance = []; //录像下载实例数组 +let talkInstance = []; //对讲实例数组 +let ivsInstance = []; //canvas绘图实例数组 +let cutInstance = []; //视频裁剪实例数组 +let onlineChannel = []; //当前成功拉流的视频通道数组 +let isCuting = false; //是否正在进行视频裁剪 +let downList = []; //勾选的视频下载列表 +let downItemIndex = 0; //视频下载索引 +let canvasParam = { + //canvas绘图默认传参 + strokeColor: "#FF0000", + title: "", + resizeEnable: false, + moveEnable: false, + closeEnable: true, + array: true, + showSize: false, + selectType: "inSide", + disappear: true, + selected: false, +}; +const lINENUMBER = 16; //回放列表每页显示录像条数 +let curEnlargeWnd = 0; + +/** + * @description 初始化 + */ +const init = () => { + let videoStr = ""; + for (var i = 0; i < 16; i++) { + videoStr += + '
'; + } + document.querySelector(".h5-play-wrap").innerHTML = videoStr; + document.querySelectorAll(".h5-play-wrap div").forEach((item, index) => { + item.addEventListener("click", function (event) { + let _wndIndex = event.target.parentNode.getAttribute("wnd-index") - 0; + if ( + !(playerInstance[_wndIndex] && playerInstance[_wndIndex].isPlayback) + ) { + channel = event.target.parentNode.getAttribute("channel") - 0; + document.querySelectorAll("#h5_channel_list li").forEach((item) => { + item.classList.remove("fn-fontRed"); + }); + } + document + .querySelectorAll(".h5-play-wrap div") + .forEach(function (item, index) { + if (index === _wndIndex) { + item.style.borderColor = "rgb(255, 204, 0)"; + if ( + !( + playerInstance[_wndIndex] && + playerInstance[_wndIndex].isPlayback + ) + ) { + if (onlineChannel.indexOf(channel) > -1) { + document + .querySelector( + '#h5_channel_list li[channel="' + channel + '"]' + ) + .classList.add("fn-fontRed"); + } + } + WndIndex = _wndIndex; + setVideoDom(); + } else { + item.style.borderColor = "rgb(125, 125, 125)"; + } + }); + }); + }); + $ip = $("#h5_ip"); + $port = $("#h5_port"); + $user = $("#h5_user"); + $password = $("#h5_password"); + $loginState = $("#h5_loginState"); + $stream = $("#h5_stream"); + $volume = $("#h5_volume"); + $video_wrap = document.querySelector(".h5-play-wrap"); + setVideoDom(); + + let inputArr = document.querySelectorAll("input[btn-for]"); + for (let node of inputArr) { + node.addEventListener("click", bindClickEvent); + } + + let selArr = document.querySelectorAll("select[sel-for]"); + for (let node of selArr) { + node.addEventListener("change", bindChangeEvent); + } + [ + "fullscreenchange", + "webkitfullscreenchange", + "mozfullscreenchange", + "msfullscreenchange", + ].forEach((item, index) => { + document.addEventListener(item, fullscreenchange, false); + }); + onPreview(false); +}; +/** + * @description 切换宫格时重新设置当前视频dom + */ +const setVideoDom = () => { + $canvas = $("#h5_canvas_" + WndIndex); + $video = $("#h5_video_" + WndIndex); + $canvas_ivs = $("#h5_ivs_" + WndIndex); + $videoLoading = $("#h5_loading_" + WndIndex); +}; +/** +/** + * @description 预览 + * @param {boolean} isPlayback 是否是回放 + * @param {string} url 回放视频的url + * @param {number} playbackIndex 回放视频的索引 + * @param {boolean} isChangeStream 是否是切换码流导致的重新拉流 + */ +const onPreview = (isPlayback, url, playbackIndex, isChangeStream) => { + if ( + playerInstance[WndIndex] && + onlineChannel.indexOf(channel) > -1 && + !isChangeStream + ) { + alert("通道" + (channel + 1) + "已存在!"); + return; + } + let ip = window.location.href.split("?")[2]; + let channel = window.location.href.split("?")[1]; + onStopPreview(); + var player = null; + let options = { + wsURL: "ws://" + ip + ":" + "8200" + "/rtspoverwebsocket", + rtspURL: + "rtsp://" + + ip + + ":" + + "8200" + + `/cam/realmonitor?channel=${channel}` + + "&subtype=0" + + "&proto=Private3", + username: "admin", + password: "pyss2017", + lessRateCanvas: true, + playback: isPlayback, + isPrivateProtocol: false, + realm: RPC.realm, //设备登录返回的realm + playbackIndex: playbackIndex, + }; + player = new PlayerControl(options); + + player.on("MSEResolutionChanged", function (e) { + console.log(e); + }); + player.on("PlayStart", function (e) { + console.log(e); + $videoLoading.style.display = "none"; + if (!player.isPlayback) { + onlineChannel.push(channel); + updateChannelList(); + // if(curWndType !== 1) { + // clickNextWnd(); + // } + } + }); + + player.on("GetFrameRate", function (e) { + console.log("GetFrameRate: " + e); + }); + player.on("FrameTypeChange", function (e) { + console.log("FrameTypeChange: " + e); + }); + player.on("Error", function (e) { + //console.log('Error: ' + JSON.stringify(e)) + }); + player.on("IvsDraw", function (e) { + //console.log('IvsDraw: ' + JSON.stringify(e)) + }); + player.on("WorkerReady", function () { + player.connect(); + }); + player.init($canvas, $video); + $canvas.parentNode.setAttribute("channel", channel); + $videoLoading.style.display = ""; +}; +/** + * @description 更新通道列表 + */ +const updateChannelList = () => { + document.querySelectorAll("#h5_channel_list li").forEach((item) => { + item.classList.remove("fn-fontBlue"); + item.classList.remove("fn-fontRed"); + if (onlineChannel.indexOf(item.getAttribute("channel") - 0) > -1) { + item.classList.add("fn-fontBlue"); + } + }); +}; +/** + * @description 停止预览 + */ +const onStopPreview = () => { + if (playerInstance[WndIndex]) { + playerInstance[WndIndex].stop(); + playerInstance[WndIndex].close(); + playerInstance[WndIndex] = null; + let _index = onlineChannel.indexOf(channel); + onlineChannel.splice(_index, 1); + updateChannelList(); + let dom = $canvas; + if (dom.style.display === "none") { + dom = $video; + } + dom.style.display = "none"; + if (talkInstance[WndIndex]) { + talkInstance[WndIndex].talk("off"); + talkInstance[WndIndex] = null; + } + if (recordInstance[WndIndex]) { + recordInstance[WndIndex].startRecord(false); + recordInstance[WndIndex] = null; + } + } +}; +/** + * @description 自定义选择器 + * @param {string} str dom元素 + */ +function $(str) { + if (str.charAt(0) == "#") { + return document.getElementById(str.substring(1)); + } else if (str.charAt(0) == ".") { + return document.getElementsByClassName(str.substring(1)); + } else { + return document.getElementsByTagName(str); + } +} +/** + * @description 设置样式 + * @param {object} obj dom元素 + * @param {*} json css样式 + */ +function setStyle(obj, json) { + for (let i in json) { + obj.style[i] = json[i]; + } +} +/** + * @description 绑定click事件 + * @param {object} event event对象 + */ +function bindClickEvent(event) { + let $el = event.target, + method = $el.getAttribute("btn-for"), + disabled = $el.getAttribute("disabled"); + if (!disabled) { + eval(method + "()"); + } +} +/** + * @description 绑定change事件 + * @param {object} event event对象 + */ +function bindChangeEvent(event) { + let $el = event.target, + method = $el.getAttribute("sel-for"), + disabled = $el.getAttribute("disabled"); + if (!disabled) { + eval(method + "()"); + } +} +function fullscreenchange() { + if (getFull()) { + return; + } +} +init(); diff --git a/.history/public/webs/index_20231212133742.js b/.history/public/webs/index_20231212133742.js new file mode 100644 index 0000000..12c196c --- /dev/null +++ b/.history/public/webs/index_20231212133742.js @@ -0,0 +1,307 @@ +let $ip, + $port, + $user, + $password, + $loginState, + $stream, + $volume, + $canvas, //canvas播放视频DOM + $video, //video播放视频DOM + $canvas_ivs, //canvas绘图DOM + $video_wrap, //视频外层Wrap + $videoLoading, //“加载中...”提示 + WndIndex = 0, //宫格窗口Id + WebCaps = null; //webCapsConfig文件转存变量 +let isLogin = false; //是否登录 +let channel = 0; //当前通道 +let curPage = 1; //视频下载列表的当前页 +let totalPage = 1; //视频下载列表的总页数 +let recordArr = []; //视频文件数组 +let canvasSon = null; //canvas绘图实例 +let playerInstance = []; //播放|回放实例数组 +let recordInstance = []; //录像下载实例数组 +let talkInstance = []; //对讲实例数组 +let ivsInstance = []; //canvas绘图实例数组 +let cutInstance = []; //视频裁剪实例数组 +let onlineChannel = []; //当前成功拉流的视频通道数组 +let isCuting = false; //是否正在进行视频裁剪 +let downList = []; //勾选的视频下载列表 +let downItemIndex = 0; //视频下载索引 +let canvasParam = { + //canvas绘图默认传参 + strokeColor: "#FF0000", + title: "", + resizeEnable: false, + moveEnable: false, + closeEnable: true, + array: true, + showSize: false, + selectType: "inSide", + disappear: true, + selected: false, +}; +const lINENUMBER = 16; //回放列表每页显示录像条数 +let curEnlargeWnd = 0; + +/** + * @description 初始化 + */ +const init = () => { + let videoStr = ""; + for (var i = 0; i < 16; i++) { + videoStr += + ''; + } + document.querySelector(".h5-play-wrap").innerHTML = videoStr; + document.querySelectorAll(".h5-play-wrap div").forEach((item, index) => { + item.addEventListener("click", function (event) { + let _wndIndex = event.target.parentNode.getAttribute("wnd-index") - 0; + if ( + !(playerInstance[_wndIndex] && playerInstance[_wndIndex].isPlayback) + ) { + channel = event.target.parentNode.getAttribute("channel") - 0; + document.querySelectorAll("#h5_channel_list li").forEach((item) => { + item.classList.remove("fn-fontRed"); + }); + } + document + .querySelectorAll(".h5-play-wrap div") + .forEach(function (item, index) { + if (index === _wndIndex) { + item.style.borderColor = "rgb(255, 204, 0)"; + if ( + !( + playerInstance[_wndIndex] && + playerInstance[_wndIndex].isPlayback + ) + ) { + if (onlineChannel.indexOf(channel) > -1) { + document + .querySelector( + '#h5_channel_list li[channel="' + channel + '"]' + ) + .classList.add("fn-fontRed"); + } + } + WndIndex = _wndIndex; + setVideoDom(); + } else { + item.style.borderColor = "rgb(125, 125, 125)"; + } + }); + }); + }); + $ip = $("#h5_ip"); + $port = $("#h5_port"); + $user = $("#h5_user"); + $password = $("#h5_password"); + $loginState = $("#h5_loginState"); + $stream = $("#h5_stream"); + $volume = $("#h5_volume"); + $video_wrap = document.querySelector(".h5-play-wrap"); + setVideoDom(); + + let inputArr = document.querySelectorAll("input[btn-for]"); + for (let node of inputArr) { + node.addEventListener("click", bindClickEvent); + } + + let selArr = document.querySelectorAll("select[sel-for]"); + for (let node of selArr) { + node.addEventListener("change", bindChangeEvent); + } + [ + "fullscreenchange", + "webkitfullscreenchange", + "mozfullscreenchange", + "msfullscreenchange", + ].forEach((item, index) => { + document.addEventListener(item, fullscreenchange, false); + }); + onPreview(false); +}; +/** + * @description 切换宫格时重新设置当前视频dom + */ +const setVideoDom = () => { + $canvas = $("#h5_canvas_" + WndIndex); + $video = $("#h5_video_" + WndIndex); + $canvas_ivs = $("#h5_ivs_" + WndIndex); + $videoLoading = $("#h5_loading_" + WndIndex); +}; +/** +/** + * @description 预览 + * @param {boolean} isPlayback 是否是回放 + * @param {string} url 回放视频的url + * @param {number} playbackIndex 回放视频的索引 + * @param {boolean} isChangeStream 是否是切换码流导致的重新拉流 + */ +const onPreview = (isPlayback, url, playbackIndex, isChangeStream) => { + if ( + playerInstance[WndIndex] && + onlineChannel.indexOf(channel) > -1 && + !isChangeStream + ) { + alert("通道" + (channel + 1) + "已存在!"); + return; + } + let ip = window.location.href.split("?")[2]; + let channel = window.location.href.split("?")[1]; + onStopPreview(); + var player = null; + let options = { + wsURL: "ws://" + ip + ":" + "8200" + "/rtspoverwebsocket", + rtspURL: + "rtsp://" + + ip + + ":" + + "8200" + + `/cam/realmonitor?channel=${channel}` + + "&subtype=0" + + "&proto=Private3", + username: "admin", + password: "pyss2017", + lessRateCanvas: true, + playback: isPlayback, + isPrivateProtocol: false, + realm: RPC.realm, //设备登录返回的realm + playbackIndex: playbackIndex, + }; + player = new PlayerControl(options); + + player.on("MSEResolutionChanged", function (e) { + console.log(e); + }); + player.on("PlayStart", function (e) { + console.log(e); + $videoLoading.style.display = "none"; + if (!player.isPlayback) { + onlineChannel.push(channel); + updateChannelList(); + // if(curWndType !== 1) { + // clickNextWnd(); + // } + } + }); + + player.on("GetFrameRate", function (e) { + console.log("GetFrameRate: " + e); + }); + player.on("FrameTypeChange", function (e) { + console.log("FrameTypeChange: " + e); + }); + player.on("Error", function (e) { + //console.log('Error: ' + JSON.stringify(e)) + }); + player.on("IvsDraw", function (e) { + //console.log('IvsDraw: ' + JSON.stringify(e)) + }); + player.on("WorkerReady", function () { + player.connect(); + }); + player.init($canvas, $video); + $canvas.parentNode.setAttribute("channel", channel); + $videoLoading.style.display = ""; +}; +/** + * @description 更新通道列表 + */ +const updateChannelList = () => { + document.querySelectorAll("#h5_channel_list li").forEach((item) => { + item.classList.remove("fn-fontBlue"); + item.classList.remove("fn-fontRed"); + if (onlineChannel.indexOf(item.getAttribute("channel") - 0) > -1) { + item.classList.add("fn-fontBlue"); + } + }); +}; +/** + * @description 停止预览 + */ +const onStopPreview = () => { + if (playerInstance[WndIndex]) { + playerInstance[WndIndex].stop(); + playerInstance[WndIndex].close(); + playerInstance[WndIndex] = null; + let _index = onlineChannel.indexOf(channel); + onlineChannel.splice(_index, 1); + updateChannelList(); + let dom = $canvas; + if (dom.style.display === "none") { + dom = $video; + } + dom.style.display = "none"; + if (talkInstance[WndIndex]) { + talkInstance[WndIndex].talk("off"); + talkInstance[WndIndex] = null; + } + if (recordInstance[WndIndex]) { + recordInstance[WndIndex].startRecord(false); + recordInstance[WndIndex] = null; + } + } +}; +/** + * @description 自定义选择器 + * @param {string} str dom元素 + */ +function $(str) { + if (str.charAt(0) == "#") { + return document.getElementById(str.substring(1)); + } else if (str.charAt(0) == ".") { + return document.getElementsByClassName(str.substring(1)); + } else { + return document.getElementsByTagName(str); + } +} +/** + * @description 设置样式 + * @param {object} obj dom元素 + * @param {*} json css样式 + */ +function setStyle(obj, json) { + for (let i in json) { + obj.style[i] = json[i]; + } +} +/** + * @description 绑定click事件 + * @param {object} event event对象 + */ +function bindClickEvent(event) { + let $el = event.target, + method = $el.getAttribute("btn-for"), + disabled = $el.getAttribute("disabled"); + if (!disabled) { + eval(method + "()"); + } +} +/** + * @description 绑定change事件 + * @param {object} event event对象 + */ +function bindChangeEvent(event) { + let $el = event.target, + method = $el.getAttribute("sel-for"), + disabled = $el.getAttribute("disabled"); + if (!disabled) { + eval(method + "()"); + } +} +function fullscreenchange() { + if (getFull()) { + return; + } +} +init(); diff --git a/.history/src/views/Zhou/ZNYWJK_20231212133900.vue b/.history/src/views/Zhou/ZNYWJK_20231212133900.vue new file mode 100644 index 0000000..83bd78e --- /dev/null +++ b/.history/src/views/Zhou/ZNYWJK_20231212133900.vue @@ -0,0 +1,1156 @@ + +
+
+
+ 当前摄像头信息
+
+ 摄像头视频监控
+
+ 摄像头列表
+监控17:回转窑南侧
+07:12:18
+监控16:篦冷机
+07:12:18
+
+ 温度监测1
+{{ item.name }}
+{{ item.count }}
+编号:{{ item.bianhao }}
+{{ item.name }}
+{{ item.count }}
+编号:{{ item.bianhao }}
+
+ 温度监测2
+
+
+
+ 当前摄像头信息
+
+ 摄像头视频监控
+
+ 摄像头列表
+监控17:回转窑南侧
+07:12:18
+监控16:篦冷机
+07:12:18
+
+ 温度监测1
+{{ item.name }}
+{{ item.count }}
+编号:{{ item.bianhao }}
+{{ item.name }}
+{{ item.count }}
+编号:{{ item.bianhao }}
+
+ 温度监测2
+
+
+
+ 当前摄像头信息
+
+ 摄像头视频监控
+
+ 摄像头列表
+监控17:回转窑南侧
+07:12:18
+监控16:篦冷机
+07:12:18
+
+ 温度监测1
+{{ item.name }}
+{{ item.count }}
+编号:{{ item.bianhao }}
+{{ item.name }}
+{{ item.count }}
+编号:{{ item.bianhao }}
+
+ 温度监测2
+
+
+
+ 当前摄像头信息
+
+ 摄像头视频监控
+
+ 摄像头列表
+监控17:回转窑南侧
+07:12:18
+监控16:篦冷机
+07:12:18
+
+ 温度监测1
+{{ item.name }}
+{{ item.count }}
+编号:{{ item.bianhao }}
+{{ item.name }}
+{{ item.count }}
+编号:{{ item.bianhao }}
+
+ 温度监测2
+
+
+
+ 当前摄像头信息
+
+ 摄像头视频监控
+
+ 摄像头列表
+监控17:回转窑南侧
+07:12:18
+监控16:篦冷机
+07:12:18
+
+ 温度监测1
+{{ item.name }}
+{{ item.count }}
+编号:{{ item.bianhao }}
+{{ item.name }}
+{{ item.count }}
+编号:{{ item.bianhao }}
+
+ 温度监测2
+
+
+
+ 当前摄像头信息
+
+ 摄像头视频监控
+
+ 摄像头列表
+监控17:回转窑南侧
+07:12:18
+监控16:篦冷机
+07:12:18
+
+ 温度监测1
+{{ item.name }}
+{{ item.count }}
+编号:{{ item.bianhao }}
+{{ item.name }}
+{{ item.count }}
+编号:{{ item.bianhao }}
+
+ 温度监测2
+
+
+
+ 当前摄像头信息
+
+ 摄像头视频监控
+
+ 摄像头列表
+监控17:回转窑南侧
+07:12:18
+监控16:篦冷机
+07:12:18
+
+ 温度监测1
+{{ item.name }}
+{{ item.count }}
+编号:{{ item.bianhao }}
+{{ item.name }}
+{{ item.count }}
+编号:{{ item.bianhao }}
+
+ 温度监测2
+
+
+
+ 当前摄像头信息
+
+ 摄像头视频监控
+
+ 摄像头列表
+监控17:回转窑南侧
+07:12:18
+监控16:篦冷机
+07:12:18
+
+ 温度监测1
+{{ item.name }}
+{{ item.count }}
+编号:{{ item.bianhao }}
+{{ item.name }}
+{{ item.count }}
+编号:{{ item.bianhao }}
+
+ 温度监测2
+
+
+
+ 当前摄像头信息
+
+ 摄像头视频监控
+
+ 摄像头列表
+监控17:回转窑南侧
+07:12:18
+监控16:篦冷机
+07:12:18
+
+ 温度监测1
+{{ item.name }}
+{{ item.count }}
+编号:{{ item.bianhao }}
+{{ item.name }}
+{{ item.count }}
+编号:{{ item.bianhao }}
+
+ 温度监测2
+
+
基本信息
+ 设备信息
@@ -62,7 +64,11 @@运行
电流/电压曲线
+
实时数据
+
+
+
+
+
+ 实时负荷功率
+