526 lines
17 KiB
JavaScript
Raw Normal View History

2022-06-08 14:51:11 +08:00
import './jsencrypt.min.js'
// import {
// WebControl
// } from './jsWebControl-1.0.0.min.js'
2022-07-16 14:54:53 +08:00
var isChrome = navigator.userAgent.indexOf('Chrome') > -1 // 是否是谷歌
2022-06-08 14:51:11 +08:00
2022-07-16 14:54:53 +08:00
if (isChrome) {
2022-06-08 14:51:11 +08:00
// let WebControl = null
2022-07-16 14:54:53 +08:00
var aa = () => import('./jsWebControl-1.0.0.min.js')
aa().then(res => {
2022-06-08 14:51:11 +08:00
console.log(res)
WebControl = res.WebControl
})
}
2022-07-16 14:54:53 +08:00
console.log('谷歌' + isChrome)
2022-06-08 14:51:11 +08:00
var oWebControl = null;
var pubKey = '';
var initCount = 0;
2022-07-16 14:54:53 +08:00
var a, b, c, d, types, layouts;
2022-06-08 14:51:11 +08:00
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');
//
2022-07-16 14:54:53 +08:00
if (!oWebControl) {
2022-06-08 14:51:11 +08:00
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");
2022-07-16 14:54:53 +08:00
}, function () { });
2022-06-08 14:51:11 +08:00
}
} else {
if (oWebControl != null) {
oWebControl.JS_DestroyWnd().then(function () {
console.log("JS_DestroyWnd");
2022-07-16 14:54:53 +08:00
}, function () { });
2022-06-08 14:51:11 +08:00
oWebControl.JS_StopService("window").then(function () {
oWebControl.JS_Disconnect().then(function () {
console.log("JS_Disconnect");
2022-07-16 14:54:53 +08:00
}, function () { });
2022-06-08 14:51:11 +08:00
});
}
}
}
//预览视频
2025-12-09 09:02:59 +08:00
export function OpenVideo(cameraIndexCode, streamMode, winIndex = 0) {
2022-06-08 14:51:11 +08:00
var transMode = +'1'; //传输协议1、TCP 0、UDP
var gpuMode = +'0'; //是否启用GPU硬解1、启用 0、不启用
2025-09-04 11:51:12 +08:00
console.log(8855544, streamMode)
2022-06-08 14:51:11 +08:00
oWebControl.JS_RequestInterface({
funcName: "startPreview",
argument: JSON.stringify({
cameraIndexCode: cameraIndexCode,
2025-12-09 09:02:59 +08:00
streamMode: streamMode == 2 && (winIndex > 4) ? 0 : 1, // 码流类型 0 主码流 1 子码流 (2 主码流 1 子码流)
2022-06-08 14:51:11 +08:00
transMode: transMode,
gpuMode: gpuMode,
2025-09-04 11:51:12 +08:00
wndId: -1,
2022-06-08 14:51:11 +08:00
})
}).then(function (oData) {
console.log(oData.responseMsg.code === 336)
console.log(JSON.stringify(oData ? oData.responseMsg : ''));
2022-07-16 14:54:53 +08:00
2022-06-08 14:51:11 +08:00
// 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
2022-07-16 14:54:53 +08:00
2022-06-08 14:51:11 +08:00
let ratio;
2022-07-16 14:54:53 +08:00
if (scaleWidthNum > scaleHeightNum) {
2022-06-08 14:51:11 +08:00
ratio = scaleHeightNum
} else {
ratio = scaleWidthNum
}
return ratio;
}
// 初始化
2022-07-16 14:54:53 +08:00
export function InitObjPlugin(appkey, secret, ip, port, type, videoData, layout) {
2022-06-08 14:51:11 +08:00
console.log(videoData)
a = appkey
b = secret
c = ip
d = port
types = type
2022-07-16 14:54:53 +08:00
layouts = layout
2022-06-08 14:51:11 +08:00
//
oWebControl = new WebControl({
szPluginContainer: "playWnd", //指定容器id
2022-06-08 14:51:11 +08:00
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 {
2022-07-16 14:54:53 +08:00
// 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()
2022-06-08 14:51:11 +08:00
}
2022-07-16 14:54:53 +08:00
}
console.log(ratio)
width = width * ratio
height = height * ratio
// width = 500
// height = 500
// console.dir(document.getElementById('videoOverview'))
console.log(width, height)
2022-06-08 14:51:11 +08:00
// }
window.$timeId = null;
2022-07-16 14:54:53 +08:00
if (window.localStorage.getItem('isIframe')) {
if (window.localStorage.getItem('isIframe') == '1') {
2022-06-08 14:51:11 +08:00
// width = 796
// height = 672
2022-07-16 14:54:53 +08:00
width = width * 0.66
height = height * 0.98
2022-06-08 14:51:11 +08:00
}
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()
// }
2022-07-16 14:54:53 +08:00
width = width * ratio
height = height * ratio
2022-06-08 14:51:11 +08:00
clearTimeout(window.$timeId);
window.$timeId = setTimeout(() => {
var a = document.getElementById('videoBoxContainer') || document.querySelector('.videocBox')
2022-07-16 14:54:53 +08:00
if (a) {
2022-06-08 14:51:11 +08:00
width = a.offsetWidth
height = a.offsetHeight - 80
}
if (oWebControl != null) {
oWebControl.JS_Resize(width, height);
// setWndCover();
}
}, 10);
}
2022-07-16 14:54:53 +08:00
oWebControl.JS_CreateWnd("playWnd", width, height, {
2025-09-18 14:51:02 +08:00
bEmbed: false,
2022-06-08 14:51:11 +08:00
cbSetDocTitle: function (uuid) {
oWebControl._pendBg = false;
window.parent.postMessage({
2022-07-16 14:54:53 +08:00
action: 'updateTitle',
msg: '子页面通知父页面修改title',
info: uuid
2022-06-08 14:51:11 +08:00
}, '\*'); // '\*'表示跨域参数,请结合自身业务合理设置
}
}).then(function () {
console.log("JS_CreateWnd success");
// ;
2022-07-16 14:54:53 +08:00
2022-06-08 14:51:11 +08:00
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"
2022-06-08 14:51:11 +08:00
// 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;
}
});
}
//初始化
export function init(videoData) {
2025-09-04 11:51:12 +08:00
console.log(222222222222, videoData)
2022-06-08 14:51:11 +08:00
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) {
2022-07-16 14:54:53 +08:00
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;
}
2022-06-08 14:51:11 +08:00
oWebControl.JS_Resize(width, height);
// console.log('OpenVideo')
for (let i = 0; i < videoData.length; i++) {
if (i < 24 && videoData.length >= i) {
// setTimeout(()=>{
2025-09-04 11:51:12 +08:00
OpenVideo(videoData[i].serialNumber, videoData[i].defaultStreamType, i + 1)
2022-06-08 14:51:11 +08:00
// },1000)
2022-07-16 14:54:53 +08:00
2022-06-08 14:51:11 +08:00
}
}
// oWebControl.JS_Resize(1000, 600); // 初始化后resize一次规避firefox下首次显示窗口后插件窗口未与DIV窗口重合问题
});
});
}
//判断有没有初始化插件
2022-07-16 14:54:53 +08:00
export function isLoadPlugin(devList, layout) {
console.log('isLoadPlugin', oWebControl, devList)
if (oWebControl) {
2022-06-08 14:51:11 +08:00
devList.forEach(element => {
2022-07-16 14:54:53 +08:00
setTimeout(() => {
2025-09-04 11:51:12 +08:00
OpenVideo(element.serialNumber,element.defaultStreamType)
2022-07-16 14:54:53 +08:00
}, 500)
2022-06-08 14:51:11 +08:00
});
2022-07-16 14:54:53 +08:00
} else {
2024-05-04 21:55:04 +08:00
if(!devList[0]?.outip){
InitObjPlugin(
devList[0].appId,
devList[0].appSecret,
devList[0].account,
devList[0].port || devList[0].password,
2024-05-04 21:55:04 +08:00
false,
devList,
layout
);
}else{
InitObjPlugin(
devList[0].appId,
devList[0].appSecret,
devList[0].outip,
devList[0].outport,
false,
devList,
layout
);
}
2022-06-08 14:51:11 +08:00
}
}
// 推送消息
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();
// }
// }
2024-10-18 11:27:37 +08:00
// 监听滚动条 - 滚动摄像头列表会照成抖动(去除
// 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);
2022-06-08 14:51:11 +08:00
//窗口关闭时销毁插件
2022-07-16 14:54:53 +08:00
window.onunload = function () {
if (oWebControl != null) {
2022-06-08 14:51:11 +08:00
oWebControl.JS_HideWnd(); // 先让窗口隐藏,规避可能的插件窗口滞后于浏览器消失问题
2022-07-16 14:54:53 +08:00
oWebControl.JS_Disconnect().then(function () { }, function () { });
2022-06-08 14:51:11 +08:00
}
}
2022-07-16 14:54:53 +08:00
export function resizeFn(val) {
if (oWebControl) {
2022-06-08 14:51:11 +08:00
width = document.getElementById('videoOverview').offsetWidth
height = document.getElementById('videoOverview').offsetHeight - 0
2022-07-16 14:54:53 +08:00
if (val && val == 1) {
oWebControl.JS_Resize(width / 2 + 20, height - 215);
} else {
2022-06-08 14:51:11 +08:00
oWebControl.JS_Resize(width, height);
}
2022-07-16 14:54:53 +08:00
// setWndCover();
2022-06-08 14:51:11 +08:00
}
2022-07-16 14:54:53 +08:00
2022-06-08 14:51:11 +08:00
}
// 设置窗口遮挡
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);
}
}
//隐藏插件窗口
2022-07-16 14:54:53 +08:00
export function hidePluginWindow() {
2022-06-08 14:51:11 +08:00
// console.log(123)
// console.log('hidePluginWindow')
oWebControl.JS_HideWnd()
// oWebControl.JS_RequestInterface({
// funcName: "hideWnd"
// }).then(function(data){
// console.log('hidePluginWindow',data)
// })
}
//显示插件窗口
2022-07-16 14:54:53 +08:00
export function showPluginWindow() {
2022-06-08 14:51:11 +08:00
// console.log(112)
// console.log('showPluginWindow')
oWebControl.JS_ShowWnd()
// oWebControl.JS_RequestInterface({
// funcName: "showWnd"
// }).then(function(data){
// console.log('showPluginWindow',data)
// })
}
2022-07-16 14:54:53 +08:00
export function setOffset(l, t) {
WebControl.JS_SetDocOffset({
2022-06-08 14:51:11 +08:00
left: l,
top: t
})
2022-07-16 14:54:53 +08:00
console.log(l, t, "===============================")
2022-06-08 14:51:11 +08:00
}
2022-07-16 14:54:53 +08:00
export function setWidthAndHeight(width, height) {
oWebControl.JS_Resize(width, height);
}
// JS_CuttingPartWindow
export function cuttingPartWindow(iLeft, iTop, iWidth, iHeight) {
oWebControl.JS_CuttingPartWindow(iLeft, iTop, iWidth, iHeight)
}
// 关闭所有视频
export function closeAllVideo() {
oWebControl.JS_RequestInterface({
funcName: "stopAllPreview"
});
}
// 获取当前布局
export const getCurrentLayout = async () => {
const data = await oWebControl.JS_RequestInterface({
funcName: "getLayout"
});
return data;
2022-07-16 14:54:53 +08:00
}