feat: 视频回放管理模块添加

This commit is contained in:
kun 2024-03-19 18:03:28 +08:00
parent 81ade4bd74
commit 0c1665c383
13 changed files with 1266 additions and 15 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 843 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

View File

@ -83,12 +83,12 @@ if (process.env.NODE_ENV == 'development') {
// axios.defaults.baseURL ='http://101.43.164.214:45001/' //上海张江
// axios.defaults.baseURL ='http://101.43.164.214:45011/' //上海优益(上海建工)
// axios.defaults.baseURL = 'http://192.168.34.221:28889/' //郭圣雄本地
// axios.defaults.baseURL ='http://192.168.34.221:9111/' //郭圣雄本地
axios.defaults.baseURL ='http://192.168.34.221:9111/' //郭圣雄本地
// axios.defaults.baseURL = 'http://192.168.34.155:19111/' //彭洁本地
// axios.defaults.baseURL = 'http://182.90.224.237:51234' //郭圣雄远程
// axios.defaults.baseURL ='http://101.43.164.214:45020/' //沈阳和盈
// axios.defaults.baseURL ='http://183.249.224.118:9000/' //嘉兴王江泾公用码头
axios.defaults.baseURL ='http://101.43.164.214:11111/' // 百色三标段项目
// axios.defaults.baseURL ='http://101.43.164.214:11111/' // 百色三标段项目
// axios.defaults.baseURL = 'http://125.88.207.86:8088/'//中建四局线上(最新)地址
// axios.defaults.baseURL = 'http://125.88.207.86:8099/'//中建四局(沙湖)线上(最新)地址

View File

@ -3027,6 +3027,13 @@ const routes2 = [
component: (resolve) =>
require(["@/views/projectFront/videoManage/overview.vue"], resolve),
},
// 回放视频
{
path: "/project/replayVideo",
name: "videoOverview",
component: (resolve) =>
require(["@/views/projectFront/replayVideoManage/overview.vue"], resolve),
},
// 内网视频
{
path: "/project/insideVideo",

View File

@ -46,19 +46,19 @@ export default new Vuex.Store({
PAGESIZRS: [10, 20, 30, 50],
// UPLOADURL:' http://101.43.164.214:11111/upload/image/',// 百色
// FILEURL:' http://101.43.164.214:11111/image/',// 百色
// UPLOADURL:'http://192.168.34.221:9111/upload/image/',// 郭圣雄
// FILEURL:'http://192.168.34.221:9111/image/',//郭圣雄
UPLOADURL:'http://192.168.34.221:9111/upload/image/',// 郭圣雄
FILEURL:'http://192.168.34.221:9111/image/',//郭圣雄
// UPLOADURL:'http://10.0.1.43:6023/upload/image',//测试
// FILEURL:'http://10.0.1.43:6023/image/',//测试
BASEURL: baseUrl
? baseUrl
: window.location.protocol + "//" + window.location.host + "/", //正式环境
UPLOADURL:
window.location.protocol +
"//" +
window.location.host +
"/upload/image", //正式环境
FILEURL: window.location.protocol + "//" + window.location.host + "/image/", //正式环境
// BASEURL: baseUrl
// ? baseUrl
// : window.location.protocol + "//" + window.location.host + "/", //正式环境
// UPLOADURL:
// window.location.protocol +
// "//" +
// window.location.host +
// "/upload/image", //正式环境
// FILEURL: window.location.protocol + "//" + window.location.host + "/image/", //正式环境
//---------------------------------------------------------------------------------------------
// BASEURL: baseUrl
// ? baseUrl

View File

@ -41,3 +41,24 @@ export function getNowTime() {
return dateTime
}
// 格式化时间
export function dateFormat(oDate, fmt) {
var o = {
"M+": oDate.getMonth() + 1, //月份
"d+": oDate.getDate(), //日
"h+": oDate.getHours(), //小时
"m+": oDate.getMinutes(), //分
"s+": oDate.getSeconds(), //秒
"q+": Math.floor((oDate.getMonth() + 3) / 3), //季度
"S": oDate.getMilliseconds()//毫秒
};
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, (oDate.getFullYear() + "").substr(4 - RegExp.$1.length));
}
for (var k in o) {
if (new RegExp("(" + k + ")").test(fmt)) {
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
}
}
return fmt;
}

View File

@ -0,0 +1,494 @@
import './jsencrypt.min.js'
// import {
// WebControl
// } from './jsWebControl-1.0.0.min.js'
var isChrome = navigator.userAgent.indexOf('Chrome') > -1 // 是否是谷歌
if (isChrome) {
// let WebControl = null
var aa = () => import('./jsWebControl-1.0.0.min.js')
aa().then(res => {
console.log(res)
WebControl = res.WebControl
})
}
console.log('谷歌' + isChrome)
var oWebControl = null;
var pubKey = '';
var initCount = 0;
var a, b, c, d, types, layouts;
var width, height;
// var _thiss;
// 获取公钥
// function getPubKey(callback) {
// oWebControl.JS_RequestInterface({
// funcName: "getRSAPubKey",
// argument: JSON.stringify({
// keyLength: 1024
// })
// }).then(function (oData) {
// console.log(oData)
// if (oData.responseMsg.data) {
// pubKey = oData.responseMsg.data
// callback()
// }
// })
// }
// RSA加密
function setEncrypt(value) {
var encrypt = new JSEncrypt();
encrypt.setPublicKey(pubKey);
return encrypt.encrypt(value);
}
// 反初始化
export function unInitObjPlugin() {
console.log('调用unInitObjPlugin', '5555555');
//
if (!oWebControl) {
return false;
}
oWebControl.JS_RequestInterface({
funcName: "destroyWnd"
}).then(function (oData) {
console.log(JSON.stringify(oData ? oData.responseMsg : ''));
console.log('销毁失败');
});
//
var bIE = (!!window.ActiveXObject || 'ActiveXObject' in window); // 是否为IE浏览器
if (bIE) {
if (oWebControl != null) {
oWebControl.JS_Disconnect().then(function () {
console.log("JS_Disconnect");
}, function () { });
}
} else {
if (oWebControl != null) {
oWebControl.JS_DestroyWnd().then(function () {
console.log("JS_DestroyWnd");
}, function () { });
oWebControl.JS_StopService("window").then(function () {
oWebControl.JS_Disconnect().then(function () {
console.log("JS_Disconnect");
}, function () { });
});
}
}
}
//预览视频
export function OpenVideo(cameraIndexCode, streamMode, winIndex) {
var transMode = +'1'; //传输协议1、TCP 0、UDP
var gpuMode = +'0'; //是否启用GPU硬解1、启用 0、不启用
oWebControl.JS_RequestInterface({
funcName: "startPreview",
argument: JSON.stringify({
cameraIndexCode: cameraIndexCode,
streamMode: streamMode,
transMode: transMode,
gpuMode: gpuMode,
wndId: -1
})
}).then(function (oData) {
console.log(oData.responseMsg.code === 336)
console.log(JSON.stringify(oData ? oData.responseMsg : ''));
// if(oData.responseMsg.code === 336){
// return
// }
console.log('预览视频失败');
});
}
// 设置窗口控制回调
function setCallbacks() {
oWebControl.JS_SetWindowControlCallback({
cbIntegrationCallBack: cbIntegrationCallBack
});
}
// 页面缩放比例
function getRatio() {
let bodyWidth = document.body.clientWidth
// console.log(window.screen.width)
let bodyHeight = document.body.clientHeight
let scaleWidthNum = bodyWidth / 1920
let scaleHeightNum = bodyHeight / 1080
let ratio;
if (scaleWidthNum > scaleHeightNum) {
ratio = scaleHeightNum
} else {
ratio = scaleWidthNum
}
return ratio;
}
// 初始化
export function InitObjPlugin(appkey, secret, ip, port, type, videoData, layout) {
console.log(videoData)
a = appkey
b = secret
c = ip
d = port
types = type
layouts = layout
//
oWebControl = new WebControl({
szPluginContainer: "playWnd", //指定容器id
iServicePortStart: 15900,
iServicePortEnd: 15909,
szClassId: "23BF3B0A-2C56-4D97-9C03-0CB103AA8F11",
cbConnectSuccess: function () {
setCallbacks();
oWebControl.JS_StartService("window", {
dllPath: "./VideoPluginConnect.dll"
//dllPath: "./DllForTest-Win32.dll"
}).then(function () {
// if (type) {
// var a = document.getElementById('videoBoxContainer')
// width = a.offsetWidth - 10
// height = a.offsetHeight - 60
// } else {
// console.log(document.getElementById('videoOverview').offsetWidth,document.getElementById('videoOverview').offsetHeight)
var bottomHeight = 0
// if(window.location.href.indexOf('/project/')!=-1){
// bottomHeight = 60
// }
width = document.getElementById('videoOverview').offsetWidth
height = document.getElementById('videoOverview').offsetHeight - bottomHeight
let ratio = 1
// console.log(JSON.parse(localStorage.getItem('systemInfo')).zoomType)
if (enabledProjectV2 != 1) {
if (localStorage.getItem('systemInfo') && JSON.parse(localStorage.getItem('systemInfo')).zoomType != 1) {
ratio = getRatio()
}
}
console.log(ratio)
width = width * ratio
height = height * ratio
// width = 500
// height = 500
// console.dir(document.getElementById('videoOverview'))
console.log(width, height)
// }
window.$timeId = null;
if (window.localStorage.getItem('isIframe')) {
if (window.localStorage.getItem('isIframe') == '1') {
// width = 796
// height = 672
width = width * 0.66
height = height * 0.98
}
console.log(window.localStorage.getItem('isIframe'))
}
// 0.766667
console.log(12)
window.onresize = function () {
width = document.getElementById('videoOverview').offsetWidth
height = document.getElementById('videoOverview').offsetHeight - bottomHeight
let ratio = 1
// if(enabledProjectV2!=1){
// ratio = getRatio()
// }
width = width * ratio
height = height * ratio
clearTimeout(window.$timeId);
window.$timeId = setTimeout(() => {
var a = document.getElementById('videoBoxContainer') || document.querySelector('.videocBox')
if (a) {
width = a.offsetWidth
height = a.offsetHeight - 80
}
if (oWebControl != null) {
oWebControl.JS_Resize(width, height);
// setWndCover();
}
}, 10);
}
oWebControl.JS_CreateWnd("playWnd", width, height, {
cbSetDocTitle: function (uuid) {
oWebControl._pendBg = false;
window.parent.postMessage({
action: 'updateTitle',
msg: '子页面通知父页面修改title',
info: uuid
}, '\*'); // '\*'表示跨域参数,请结合自身业务合理设置
}
}).then(function () {
console.log("JS_CreateWnd success");
// ;
init(videoData)
});
}, function () {
});
},
cbConnectError: function () {
console.log("cbConnectError");
oWebControl = null;
console.log("插件未启动,正在尝试启动,请稍候...");
WebControl.JS_WakeUp("VideoWebPlugin://");
initCount++;
console.log(initCount)
if (initCount < 3) {
setTimeout(function () {
InitObjPlugin(a, b, c, d, types);
}, 3000)
} else {
console.log("插件启动失败,请检查插件是否安装!");
if (confirm("检测到视频插件未安装,是否下载视频插件?")) {
// window.location.href = "http://139.159.136.114:8081/itbgp/file/b092b773-ca5a-479d-b5bc-1ed84d46e762.exe"
// window.location.href = "/video/VideoWebPlugin.exe"
window.location.href = "http://101.43.164.214:11111/image/VideoWebPlugin.rar"
// window.location.href = "https://jk.cscec1b1.com:5138/image/VideoWebPlugin.exe"
}
// _thiss.$confirm('检测到视频插件未安装,是否下载视频插件?', '提示', {
// confirmButtonText: '确定',
// cancelButtonText: '取消',
// type: 'warning'
// }).then(() => {
// window.location.href="http://139.217.224.209:8080/itbgp/file/VideoWebPlugin.exe"
// }).catch(() => {
// _thiss.$message({
// type: 'info',
// message: '已取消下载'
// });
// });
}
},
cbConnectClose: function () {
console.log("cbConnectClose");
oWebControl = null;
}
});
}
//初始化
function init(videoData) {
console.log(videoData)
getPubKey(function () {
////////////////////////////////// 请自行修改以下变量值 ////////////////////////////////////
// var appkey = "20880397"; //综合安防管理平台提供的appkey必填
// var secret = setEncrypt("WhyICfLp0NAalGjRa8Hx"); //综合安防管理平台提供的secret必填
var appkey = a; //综合安防管理平台提供的appkey必填
var secret = setEncrypt(b); //综合安防管理平台提供的secret必填
var ip = c; //综合安防管理平台IP地址必填
var playMode = 0; //初始播放模式0-预览1-回放
var port = parseInt(d); //综合安防管理平台端口若启用HTTPS协议默认443
var snapDir = "D:\\SnapDir"; //抓图存储路径
var videoDir = "D:\\VideoDir"; //紧急录像或录像剪辑存储路径
var layout = layouts; //playMode指定模式的布局
// var layout = "2x2"; //playMode指定模式的布局
var enableHTTPS = 1; //是否启用HTTPS协议与综合安防管理平台交互是为1否为0
var encryptedFields = 'secret'; //加密字段默认加密领域为secret
var showToolbar = 1; //是否显示工具栏0-不显示非0-显示
var showSmart = 1; //是否显示智能信息如配置移动侦测后画面上的线框0-不显示非0-显示
var buttonIDs = "0,16,256,257,258,259,260,512,513,514,515,516,517,768,769"; //自定义工具条按钮
////////////////////////////////// 请自行修改以上变量值 ////////////////////////////////////
oWebControl.JS_RequestInterface({
funcName: "init",
argument: JSON.stringify({
appkey: appkey, //API网关提供的appkey
secret: secret, //API网关提供的secret
ip: ip, //API网关IP地址
playMode: playMode, //播放模式(决定显示预览还是回放界面)
port: port, //端口
snapDir: snapDir, //抓图存储路径
videoDir: videoDir, //紧急录像或录像剪辑存储路径
layout: layout, //布局
enableHTTPS: enableHTTPS, //是否启用HTTPS协议
encryptedFields: encryptedFields, //加密字段
showToolbar: showToolbar, //是否显示工具栏
showSmart: showSmart, //是否显示智能信息
buttonIDs: buttonIDs //自定义工具条按钮
})
}).then(function (oData) {
console.log(width, height, oWebControl)
console.log('COMPANY++++++++++++++',COMPANY)
console.log(window.localStorage.getItem('isIframe'))
if (COMPANY=='xingxuan') {
oWebControl.oDocOffset.top = 94;
oWebControl.oDocOffset.left = 280;
}
oWebControl.JS_Resize(width, height);
// console.log('OpenVideo')
for (let i = 0; i < videoData.length; i++) {
if (i < 24 && videoData.length >= i) {
// setTimeout(()=>{
OpenVideo(videoData[i].serialNumber, 0, i + 1)
// },1000)
}
}
// oWebControl.JS_Resize(1000, 600); // 初始化后resize一次规避firefox下首次显示窗口后插件窗口未与DIV窗口重合问题
});
});
}
//判断有没有初始化插件
export function isLoadPlugin(devList, layout) {
console.log('isLoadPlugin', oWebControl, devList)
if (oWebControl) {
devList.forEach(element => {
setTimeout(() => {
OpenVideo(element.serialNumber, 1)
}, 500)
});
} else {
InitObjPlugin(
devList[0].appId,
devList[0].appSecret,
devList[0].account,
devList[0].password,
false,
devList, layout
);
}
}
// 推送消息
function cbIntegrationCallBack(oData) {
console.log(JSON.stringify(oData.responseMsg));
}
//获取公钥
function getPubKey(callback) {
oWebControl.JS_RequestInterface({
funcName: "getRSAPubKey",
argument: JSON.stringify({
keyLength: 1024
})
}).then(function (oData) {
console.log(oData);
if (oData.responseMsg.data) {
pubKey = oData.responseMsg.data;
callback()
}
})
}
// 滚动条scroll
// window.onscroll = function () {
// if (oWebControl != null) {
// width = document.getElementById('videoOverview').offsetWidth
// height = document.getElementById('videoOverview').offsetHeight - 0
// oWebControl.JS_Resize(width, height);
// // setWndCover();
// }
// }
// 监听滚动条
window.addEventListener('scroll', () => {
// console.log('滚动条')
if(oWebControl != null){
width = document.getElementById('videoOverview').offsetWidth-20
height = document.getElementById('videoOverview').offsetHeight-18
oWebControl.JS_Resize(width, height );
}
},true);
// 监听窗口
// window.addEventListener('resize', () => {
// console.log('窗口')
// if(oWebControl != null){
// width = document.getElementById('videoOverview').offsetWidth-38
// height = document.getElementById('videoOverview').offsetHeight-20
// oWebControl.JS_Resize(width, height );
// }
// },true);
//窗口关闭时销毁插件
window.onunload = function () {
if (oWebControl != null) {
oWebControl.JS_HideWnd(); // 先让窗口隐藏,规避可能的插件窗口滞后于浏览器消失问题
oWebControl.JS_Disconnect().then(function () { }, function () { });
}
}
export function resizeFn(val) {
if (oWebControl) {
width = document.getElementById('videoOverview').offsetWidth
height = document.getElementById('videoOverview').offsetHeight - 0
if (val && val == 1) {
oWebControl.JS_Resize(width / 2 + 20, height - 215);
} else {
oWebControl.JS_Resize(width, height);
}
// setWndCover();
}
}
// 设置窗口遮挡
function setWndCover() {
console.log('setWndCover')
var iWidth = document.body.clientWidth;
var iHeight = document.body.clientHeight;
var oDivRect = document.getElementById('playWnd').getBoundingClientRect();
var iCoverLeft = (oDivRect.left < 0) ? Math.abs(oDivRect.left) : 0;
var iCoverTop = (oDivRect.top < 0) ? Math.abs(oDivRect.top) : 0;
var iCoverRight = (oDivRect.right - iWidth > 0) ? Math.round(oDivRect.right - iWidth) : 0;
var iCoverBottom = (oDivRect.bottom - iHeight > 0) ? Math.round(oDivRect.bottom - iHeight) : 0;
iCoverLeft = (iCoverLeft > width) ? width : iCoverLeft;
iCoverTop = (iCoverTop > height) ? height : iCoverTop;
iCoverRight = (iCoverRight > width) ? width : iCoverRight;
iCoverBottom = (iCoverBottom > height) ? height : iCoverBottom;
if (iLastCoverLeft != iCoverLeft) {
console.log("iCoverLeft: " + iCoverLeft);
iLastCoverLeft = iCoverLeft;
oWebControl.JS_SetWndCover("left", iCoverLeft);
}
if (iLastCoverTop != iCoverTop) {
console.log("iCoverTop: " + iCoverTop);
iLastCoverTop = iCoverTop;
oWebControl.JS_SetWndCover("top", iCoverTop);
}
if (iLastCoverRight != iCoverRight) {
console.log("iCoverRight: " + iCoverRight);
iLastCoverRight = iCoverRight;
oWebControl.JS_SetWndCover("right", iCoverRight);
}
if (iLastCoverBottom != iCoverBottom) {
console.log("iCoverBottom: " + iCoverBottom);
iLastCoverBottom = iCoverBottom;
oWebControl.JS_SetWndCover("bottom", iCoverBottom);
}
}
//隐藏插件窗口
export function hidePluginWindow() {
// console.log(123)
// console.log('hidePluginWindow')
oWebControl.JS_HideWnd()
// oWebControl.JS_RequestInterface({
// funcName: "hideWnd"
// }).then(function(data){
// console.log('hidePluginWindow',data)
// })
}
//显示插件窗口
export function showPluginWindow() {
// console.log(112)
// console.log('showPluginWindow')
oWebControl.JS_ShowWnd()
// oWebControl.JS_RequestInterface({
// funcName: "showWnd"
// }).then(function(data){
// console.log('showPluginWindow',data)
// })
}
export function setOffset(l, t) {
WebControl.JS_SetDocOffset({
left: l,
top: t
})
console.log(l, t, "===============================")
}
export function setWidthAndHeight(width, height) {
oWebControl.JS_Resize(width, height);
}

View File

@ -0,0 +1,419 @@
<template>
<div class="maxBox">
<div id="playWnds" class="playWnds"></div>
</div>
</template>
<script>
export default {
props: ["devList","isReplayNum","startTime","endTime","showVideo"],
data() {
return {
videoType:"",
locationValue:1,
//
initCount: 0,
//
initparam: {
appKey: "",
secret: "",
apiIp: "",
apiPort: 443,
layout: "2x2" //
},
pointCode: "",//
pubKey: "",
oWebControl: null,
WebControl: null,
width:'',
height:""
};
},
// props: ["videoPlatformId", "indexCode"],
created() {
if(this.devList.length > 0){
this.initparam.appKey = this.devList[0].appId
this.initparam.secret = this.devList[0].appSecret
this.initparam.apiIp = this.devList[0].account
this.initparam.apiPort = this.devList[0].password
this.pointCode = this.devList[0].serialNumber
}
console.log('当前时间默认', this.endTime)
console.log('当前时间', this.startTime)
// console.log('',this.initparam)
//
this.WebControl = WebControl;
},
// value
watch: {
devList: function(newVal, oldVal) {
console.log('新的值',newVal)
this.pointCode = newVal[0].serialNumber;
if(newVal.length > 0){
this.startPlayback();
}
},
isReplayNum: function(newVal, oldVal) {
console.log('新的值',newVal)
if(newVal > 0) {
this.startPlayback();
} else {
this.stopAllPlayback();
}
},
//
showVideo: function(newVal, oldVal) {
console.log('新的值',newVal)
if(newVal) {
this.show();
} else {
this.hide();
}
},
},
mounted() {
// this.init();
//
this.initPlugin();
console.log('====')
var ratio = this.getRatio()
console.log('======比例',this.getRatio())
let w1 = document.getElementById('playWnds').offsetWidth
let h1 = document.getElementById('playWnds').offsetHeight
// this.width = w1 * ratio
// this.height = h1 * ratio
this.width = w1
this.height = h1
console.log('宽高',this.width,this.height)
// resize使DIV
$(window).resize(() => {
if (this.oWebControl != null) {
this.oWebControl.JS_Resize(this.width, this.height);
this.setWndCover();
}
});
// scroll使
$(window).scroll(() => {
if (this.oWebControl != null) {
this.oWebControl.JS_Resize(this.width, this.height);
this.setWndCover();
}
})
},
beforeDestroy() {
this.closeWindow();//
},
methods: {
get(){
this.oWebControl.JS_HideWnd();
},
hide() {
this.oWebControl.JS_HideWnd();
},
show() {
this.oWebControl.JS_ShowWnd();
},
// this.oWebControl.JS_ShowWnd();
// WebControl
initPlugin() {
this.oWebControl = new WebControl({
szPluginContainer: "playWnds", // id
iServicePortStart: 15900, // 使
iServicePortEnd: 15909,
szClassId: "23BF3B0A-2C56-4D97-9C03-0CB103AA8F11", // IE10使ActiveXclsid
cbConnectSuccess: () => {
// WebControl
this.oWebControl
.JS_StartService("window", {
// WebControl
dllPath: "./VideoPluginConnect.dll" // "./VideoPluginConnect.dll"
})
.then(
() => {
console.log('=========初始化成功'),
//
this.oWebControl.JS_SetWindowControlCallback({
//
cbIntegrationCallBack: this.cbIntegrationCallBack() //
});
this.oWebControl.JS_CreateWnd("playWnds",this.width, this.height).then(() => {
//JS_CreateWnd
this.init(); //
});
},
function() {
//
}
);
},
cbConnectError: () => {
// WebControl
this.oWebControl = null;
this.WebControl.JS_WakeUp("VideoWebPlugin://"); // errorwakeup
this.initCount++;
if (this.initCount < 3) {
setTimeout(() => {
this.initPlugin(); //
}, 3000);
} else {
console.log("插件启动失败,请检查插件是否安装!");
}
},
cbConnectClose: bNormalClose => {
// bNormalClose = false
// JS_DisconnectbNormalClose = true
this.oWebControl = null;
}
});
},
//
setCallbacks() {
this.oWebControl.JS_SetWindowControlCallback({
cbIntegrationCallBack: this.cbIntegrationCallBack //
});
},
//
cbIntegrationCallBack(oData) {
//oDataweb
// console.log(JSON.stringify(oData.responseMsg)); //webjson
},
//
init() {
this.getPubKey(() => {
////////////////////////////////// ////////////////////////////////////
var appkey = this.initparam.appKey; //appkey
var secret = this.setEncrypt(this.initparam.secret); //secret
var ip = this.initparam.apiIp; //IP
var playMode = 1; //0-1-
var port = this.initparam.apiPort; //HTTPS443
port = parseInt(port);
var snapDir = "D:\\SnapDir"; //
var videoDir = "D:\\VideoDir"; //
var layout = this.initparam.layout; //playMode
var enableHTTPS = 1; //HTTPS1
var encryptedFields = "secret"; //secret
var showToolbar = 1; //0-0-
var showSmart = 1; //线0-0-
var buttonIDs =
"0,16,256,257,258,259,260,512,513,514,515,516,517,768,769"; //
////////////////////////////////// ////////////////////////////////////
this.oWebControl
.JS_RequestInterface({
//
funcName: "init", //
argument: JSON.stringify({
appkey: appkey, //APIappkey
secret: secret, //APIsecret
ip: ip, //APIIP
playMode: playMode, //
port: port, //
snapDir: snapDir, //
videoDir: videoDir, //
layout: layout, //
enableHTTPS: enableHTTPS, //HTTPS
encryptedFields: encryptedFields, //
showToolbar: showToolbar, //
showSmart: showSmart, //
buttonIDs: buttonIDs //
})
})
.then(oData => {
this.oWebControl.JS_Resize(this.width, this.height); // resizefirefoxDIV
console.log('=====第二步')
// this.startpreview(); //
this.startPlayback(); //
console.log('appkey',this.initparam.appKey)
console.log('appkey',this.initparam.apiIp)
});
});
},
//
getPubKey(callback) {
this.oWebControl
.JS_RequestInterface({
//
funcName: "getRSAPubKey", //
argument: JSON.stringify({
keyLength: 1024 // 10242048
})
})
.then(oData => {
if (oData.responseMsg.data) {
// code-1data
this.pubKey = oData.responseMsg.data; // RSA
callback();
}
});
},
//
getRatio() {
let bodyWidth = document.body.clientWidth
// console.log(window.screen.width)
let bodyHeight = document.body.clientHeight
let scaleWidthNum = bodyWidth / 1920
let scaleHeightNum = bodyHeight / 1080
// let scaleWidthNum = bodyWidth
// let scaleHeightNum = bodyHeight
let ratio;
if (scaleWidthNum > scaleHeightNum) {
ratio = scaleHeightNum
} else {
ratio = scaleWidthNum
}
return ratio;
},
//RSA
setEncrypt(value) {
var encrypt = new JSEncrypt();
encrypt.setPublicKey(this.pubKey);
return encrypt.encrypt(value);
},
// JS_CuttingPartWindow
setWndCover() {
var iWidth = $(window).width();
var iHeight = $(window).height();
var oDivRect = $("#playWnds")
.get(0)
.getBoundingClientRect();
var iCoverLeft = oDivRect.left < 0 ? Math.abs(oDivRect.left) : 0;
var iCoverTop = oDivRect.top < 0 ? Math.abs(oDivRect.top) : 0;
var iCoverRight = oDivRect.right - iWidth > 0 ? Math.round(oDivRect.right - iWidth) : 0;
var iCoverBottom = oDivRect.bottom - iHeight > 0 ? Math.round(oDivRect.bottom - iHeight) : 0;
iCoverLeft = iCoverLeft > this.width ? this.width : iCoverLeft;
iCoverTop = iCoverTop > this.height ? this.height : iCoverTop;
iCoverRight = iCoverRight > this.width ? this.width : iCoverRight;
iCoverBottom = iCoverBottom > this.height ? this.height : iCoverBottom;
this.oWebControl.JS_RepairPartWindow(0, 0, this.width, this.height); // 1
if (iCoverLeft != 0) {
this.oWebControl.JS_CuttingPartWindow(0, 0, iCoverLeft, this.height);
}
if (iCoverTop != 0) {
this.oWebControl.JS_CuttingPartWindow(0, 0, this.width, iCoverTop); //
}
if (iCoverRight != 0) {
this.oWebControl.JS_CuttingPartWindow(
this.width - iCoverRight,
0,
iCoverRight,
this.height
);
}
if (iCoverBottom != 0) {
this.oWebControl.JS_CuttingPartWindow(
0,
this.height - iCoverBottom,
this.width,
iCoverBottom
);
}
},
//
startPlayback(){
console.log('点击查看',this.locationValue)
console.log('编号',this.pointCode)
console.log('开始时间', this.startTime )
console.log('开始时间', new Date(this.startTime).getTime() / 1000 )
console.log('开始时间', new Date().getTime() / 1000 )
var cameraIndexCode = this.pointCode; //
var startTimeStamp = new Date(this.startTime).getTime(); //
var endTimeStamp = new Date(this.endTime).getTime(); //
var recordLocation = +this.locationValue; //0-1-
var transMode = 1; //0-UDP1-TCP
var gpuMode = 0; //GPU0-1-
var wndId = -1; //2x2
console.log('====参数',cameraIndexCode,startTimeStamp,endTimeStamp,recordLocation)
this.oWebControl.JS_RequestInterface({
funcName: "startPlayback",
argument: JSON.stringify({
cameraIndexCode: cameraIndexCode, //
startTimeStamp: Math.floor(startTimeStamp / 1000).toString(), //
endTimeStamp: Math.floor(endTimeStamp / 1000).toString(), //
recordLocation: recordLocation, //0-1-
transMode: transMode, //0-UDP1-TCP
gpuMode: gpuMode, //GPU0-1-
wndId:wndId //
})
}).then((res)=>{
// console.log('====')
console.log('请求结果',res)
})
},
//
stopAllPlayback() {
this.oWebControl.JS_RequestInterface({
funcName: "stopAllPlayback"
})
},
//
dateFormat(oDate, fmt) {
var o = {
"M+": oDate.getMonth() + 1, //
"d+": oDate.getDate(), //
"h+": oDate.getHours(), //
"m+": oDate.getMinutes(), //
"s+": oDate.getSeconds(), //
"q+": Math.floor((oDate.getMonth() + 3) / 3), //
"S": oDate.getMilliseconds()//
};
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, (oDate.getFullYear() + "").substr(4 - RegExp.$1.length));
}
for (var k in o) {
if (new RegExp("(" + k + ")").test(fmt)) {
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
}
}
return fmt;
},
//
closeWindow() {
if (this.oWebControl != null) {
this.oWebControl.JS_HideWnd(); //
this.oWebControl.JS_Disconnect().then(
() => {
//
},
() => {
//
}
);
}
}
}
};
</script>
<style lang="less" scoped>
.maxBox{
// width: calc(100% - 300px);
height: calc(100% - 100px);
width: 100%;
// height: 100%;
.playWnds{
margin-top: 20px;
width: 100%;
height: 100%;
}
}
</style>

View File

@ -0,0 +1,277 @@
<template>
<div class="fullHeight videoOverview">
<closePage></closePage>
<div class="header">
<span>视频回放中心</span>
</div>
<div class="videoContent">
<div class="videoListBox fullHeight">
<div class="pageTitle">视频列表</div>
<div class="videoBox" v-if="dataType == 1">
<vue-scroll>
<ul v-if="devList.length > 0">
<li
@click.stop="changeVideo(item)"
v-for="(item, index) in devList"
:key="index"
>
<img
v-if="item.deviceType == 2"
src="@/assets/images/icon-video2-white.png"
/>
<img v-else src="@/assets/images/icon-video-white.png" />
{{ item.videoName }}
</li>
</ul>
<div class="placeholderBox" v-else>
<img src="@/assets/images/noData2-dark.png" alt="" srcset="" />
</div>
</vue-scroll>
</div>
<div class="videoBox" v-else>
<vue-scroll>
<el-collapse v-model="activeNames" style="padding: 0 20px">
<el-collapse-item
:title="item.name"
:name="index"
v-for="(item, index) in devList"
:key="index"
>
<ul v-if="item.list.length > 0">
<li
@click.stop="changeVideo(data)"
v-for="(data, index2) in item.list"
:key="index2"
>
<img
v-if="data.deviceType == 2"
src="@/assets/images/icon-video2-white.png"
/>
<img v-else src="@/assets/images/icon-video-white.png" />
{{ data.videoName }}
</li>
</ul>
</el-collapse-item>
</el-collapse>
</vue-scroll>
</div>
<div class="timeBox">
<div class="time-select">
<span>回放开始时间</span>
<el-date-picker
v-model="selectDate.startTime"
size="small"
type="datetime"
placeholder="选择日期时间"
format="yyyy-MM-dd HH:mm:ss"
value-format="yyyy-MM-dd HH:mm:ss"
style="width: 68%;"
:clearable="false"
@focus="showVideo = false"
@blur="showVideo = true"
></el-date-picker>
</div>
<div class="time-select">
<span>回放结束时间</span>
<el-date-picker
v-model="selectDate.endTime"
size="small"
type="datetime"
placeholder="选择日期时间"
format="yyyy-MM-dd HH:mm:ss"
value-format="yyyy-MM-dd HH:mm:ss"
style="width: 68%;"
:clearable="false"
@focus="showVideo = false"
@blur="showVideo = true"
></el-date-picker>
</div>
<div class="btn-option">
<div class="start-play" @click="replayVideo">回放</div>
<div class="stop-play" @click="isReplayNum = 0">停止全部回放</div>
</div>
</div>
</div>
<playBack class="playVideoBox" :showVideo="showVideo" :devList="selectList" :isReplayNum="isReplayNum" :startTime="selectDate.startTime" :endTime="selectDate.endTime" v-if="selectList.length > 0"></playBack>
<div class="noVideoContent" v-else></div>
</div>
</div>
</template>
<script>
import {
selectProjectVideoListApi,
selectUserVideoListApi,
} from "@/assets/js/api/equipmentCenter/cameraList";
import playBack from "./components/playBack/playBack.vue";
import closePage from "@/components/closePage";
import { dateFormat } from "@/util/nowDate/index"
export default {
components: { playBack, closePage },
data() {
return {
devList: [],
selectList: [],
dataType: 1,
activeNames: [0],
screens: {},
pluginType: "",
selectDate: {
startTime: "",
endTime: "",
},
isReplayNum: 1,
showVideo: true
};
},
mounted() {
// console.dir(window.parent)
// console.log(window.parent.document.getElementById("myFrame"), 12312313)
// if (this.$store.state.userInfo.accountType != 6) {
// this.loadData()
// } else {
// this.loadData2()
// }
//
this.selectDate.startTime = dateFormat(new Date(), "yyyy-MM-dd 00:00:00");
this.selectDate.endTime = dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss");
this.loadData();
},
methods: {
//
replayVideo(){
this.isReplayNum = this.isReplayNum + 1;
},
changeVideo(item) {
console.log("点击了列表----");
console.log(item, "xxxxxxxxxx");
this.selectList = [item];
console.log("右边的值", this.selectList);
},
loadData() {
selectProjectVideoListApi({
projectSn: this.$store.state.projectSn,
}).then((res) => {
var DATA = res.result.videoList;
this.devList = DATA;
console.log("视频的列表", res.result);
this.dataType = res.result.type;
});
},
loadData2() {
selectUserVideoListApi({
projectSn: this.$store.state.projectSn,
userId: this.$store.state.userInfo.userId,
}).then((res) => {
var DATA = res.result.videoList;
this.devList = DATA;
this.dataType = res.result.type;
});
},
},
};
</script>
<style lang="less" scoped>
@import "./style.less";
.videoListBox {
float: left;
width: 300px;
color: white;
background-color: #01112d;
}
.pageTitle {
margin: 12px 0;
background-color: #01112d;
&::before {
background-color: #00fafa;
}
}
.videoBox {
background-color: #030919;
height: calc(100% - 240px);
margin: 0 10px 0 10px;
position: relative;
li {
padding: 10px 25px;
font-size: 15px;
cursor: pointer;
display: flex;
align-items: center;
img {
margin-right: 8px;
}
&:hover {
background-color: #003e4b;
}
}
/deep/.el-collapse-item__header,
/deep/.el-collapse-item__wrap {
background-color: transparent;
color: white;
}
/deep/.el-collapse-item__content {
color: white;
padding-bottom: 0;
}
}
.timeBox {
margin: 10px 10px 0 10px;
background: rgba(31, 59, 64, 0.71);
padding: 10px 0px;
.time-select {
display: flex;
align-items: center;
margin-left: 5px;
margin-bottom: 10px;
span {
color: white;
font-size: 12px;
}
}
.btn-option {
margin-top: 20px;
margin-bottom: 20px;
display: flex;
align-items: center;
justify-content: center;
.start-play {
padding: 6px 8px;
background: url("./../../../assets/images/overview/startPlay.png")
no-repeat;
background-size: 100%;
margin-right: 20px;
cursor: pointer;
}
.stop-play {
padding: 6px 8px;
background: url("./../../../assets/images/overview/stopPlay.png")
no-repeat;
background-size: 100%;
cursor: pointer;
}
}
}
.noVideoContent{
width: calc(100% - 302px);
height: calc(100% - 24px);
background-color: #030303;
border: 1px solid rgba(255, 255, 255, 0.3);
border-color: #CDBE23;
float: left;
position: relative;
}
/deep/.playVideoBox {
background-color: #030303;
float: left;
width: calc(100% - 300px);
height: calc(100% - 22px)
}
// element
/deep/.el-date-editor .el-input__inner {
background: rgba(5, 177, 194, 0.15);
border-radius: 2px 2px 2px 2px;
border: 1px solid #00fdff;
color: white;
}
</style>

View File

@ -0,0 +1,22 @@
.videoOverview{
background-color: #0D1534;
}
.header{
background: url('../../../assets/images/overview3/headerBG2.png') center;
background-size: contain;
height: 70px;
width: 100%;
text-align: center;
line-height: 70px;
span{
font-family: Alibaba PuHuiTi, Alibaba PuHuiTi;
font-weight: 800;
font-size: 26px;
color: #0EF6F8;
}
}
.videoContent{
height: calc(100% - 70px);
background-color: #01112d;
overflow: hidden;
}

View File

@ -1,7 +1,9 @@
<template>
<div class="fullHeight videoOverview">
<closePage></closePage>
<div class="header"></div>
<div class="header">
<span>视频管理中心</span>
</div>
<div class="videoContent">
<div class="videoListBox fullHeight">
<div class="pageTitle">视频列表</div>

View File

@ -2,9 +2,18 @@
background-color: #0D1534;
}
.header{
background: url('../../../assets/images/overview3/headerBG.png') center;
background: url('../../../assets/images/overview3/headerBG2.png') center;
background-size: contain;
height: 70px;
width: 100%;
text-align: center;
line-height: 70px;
span{
font-family: Alibaba PuHuiTi, Alibaba PuHuiTi;
font-weight: 800;
font-size: 26px;
color: #0EF6F8;
}
}
.videoContent{
height: calc(100% - 70px);