678 lines
24 KiB
JavaScript
678 lines
24 KiB
JavaScript
|
|
// 已登录设备、设备端口、RTSP端口
|
|||
|
|
let ip = null, deviceport = null, rtspport = null;
|
|||
|
|
// 码流类型(1.主码流 2.子码流 3.第三码流 4.转码码流)
|
|||
|
|
let streamtype = 2;
|
|||
|
|
// 数字通道为false、零通道为true
|
|||
|
|
let bZero = 'false';
|
|||
|
|
// 回放码流类型 1.主码流 2.子码流
|
|||
|
|
let record_streamtype = 1;
|
|||
|
|
let oSel = [
|
|||
|
|
{ title: '球机', parentId: '-1', id: '0' }], deviceStatusList = [];
|
|||
|
|
// 初始化插件
|
|||
|
|
|
|||
|
|
// 全局保存当前选中窗口
|
|||
|
|
var g_iWndIndex = 0; //可以不用设置这个变量,有窗口参数的接口中,不用传值,开发包会默认使用当前选择窗口
|
|||
|
|
var g_oLocalConfig = null; //本地配置
|
|||
|
|
|
|||
|
|
//错误码
|
|||
|
|
//通用错误
|
|||
|
|
var ERROR_CODE_UNKNOWN = 1000; //未知错误
|
|||
|
|
var ERROR_CODE_NETWORKERROR = 1001; //网络错误
|
|||
|
|
var ERROR_CODE_PARAMERROR = 1002; //缺少插件元素
|
|||
|
|
|
|||
|
|
//登录模块
|
|||
|
|
var ERROR_CODE_LOGIN_NOLOGIN = 2000; // 未登录
|
|||
|
|
var ERROR_CODE_LOGIN_REPEATLOGIN = 2001; //设备已登录,重复登录
|
|||
|
|
var ERROR_CODE_LOGIN_NOSUPPORT = 2002; //当前设备不支持Digest登录
|
|||
|
|
|
|||
|
|
//预览播放
|
|||
|
|
var ERROR_CODE_PLAY_PLUGININITFAIL = 3000; //插件初始化失败
|
|||
|
|
var ERROR_CODE_PLAY_NOREPEATPLAY = 3001; //当前窗口已经在预览
|
|||
|
|
var ERROR_CODE_PLAY_PLAYBACKABNORMAL = 3002; //回放异常
|
|||
|
|
var ERROR_CODE_PLAY_PLAYBACKSTOP = 3003; //回放停止
|
|||
|
|
var ERROR_CODE_PLAY_NOFREESPACE = 3004; //录像过程中,硬盘容量不足
|
|||
|
|
|
|||
|
|
//对讲
|
|||
|
|
var ERROR_CODE_TALK_FAIL = 5000; //语音对讲失败
|
|||
|
|
|
|||
|
|
var version = "V3.3.0build20230322"
|
|||
|
|
$(function () {
|
|||
|
|
// 初始化插件参数及插入插件
|
|||
|
|
WebVideoCtrl.I_InitPlugin({
|
|||
|
|
bWndFull: true, //是否支持单窗口双击全屏,默认支持 true:支持 false:不支持
|
|||
|
|
iWndowType: 1,
|
|||
|
|
// aIframe: ["test"],
|
|||
|
|
cbSelWnd: function (xmlDoc) {
|
|||
|
|
g_iWndIndex = parseInt($(xmlDoc).find("SelectWnd").eq(0).text(), 10);
|
|||
|
|
var szInfo = "当前选择的窗口编号:" + g_iWndIndex;
|
|||
|
|
showCBInfo(szInfo);
|
|||
|
|
},
|
|||
|
|
cbDoubleClickWnd: function (iWndIndex, bFullScreen) {
|
|||
|
|
var szInfo = "当前放大的窗口编号:" + iWndIndex;
|
|||
|
|
if (!bFullScreen) {
|
|||
|
|
szInfo = "当前还原的窗口编号:" + iWndIndex;
|
|||
|
|
}
|
|||
|
|
showCBInfo(szInfo);
|
|||
|
|
},
|
|||
|
|
cbEvent: function (iEventType, iParam1, iParam2) {
|
|||
|
|
if (2 == iEventType) {// 回放正常结束
|
|||
|
|
showCBInfo("窗口" + iParam1 + "回放结束!");
|
|||
|
|
} else if (-1 == iEventType) {
|
|||
|
|
showCBInfo("设备" + iParam1 + "网络错误!");
|
|||
|
|
} else if (3001 == iEventType) {
|
|||
|
|
clickStopRecord(g_szRecordType, iParam1);
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
cbInitPluginComplete: function () {
|
|||
|
|
WebVideoCtrl.I_InsertOBJECTPlugin("divPlugin").then(() => {
|
|||
|
|
// 检查插件是否最新
|
|||
|
|
WebVideoCtrl.I_CheckPluginVersion().then((bFlag) => {
|
|||
|
|
if (bFlag) {
|
|||
|
|
alert("检测到新的插件版本,双击开发包目录里的HCWebSDKPluginsUserSetup.exe升级!");
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}, () => {
|
|||
|
|
alert("插件初始化失败,请确认是否已安装插件;如果未安装,请双击开发包目录里的HCWebSDKPluginsUserSetup.exe安装!");
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
// 窗口事件绑定
|
|||
|
|
$(window).bind({
|
|||
|
|
resize: function () {
|
|||
|
|
//WebVideoCtrl.I_Resize($("body").width(), $("body").height());
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
//初始化日期时间
|
|||
|
|
var szCurTime = dateFormat(new Date(), "yyyy-MM-dd");
|
|||
|
|
$("#starttime").val(szCurTime + " 00:00:00");
|
|||
|
|
$("#endtime").val(szCurTime + " 23:59:59");
|
|||
|
|
$("#downloadstarttime").val(szCurTime + " 00:00:00");
|
|||
|
|
$("#downloadendtime").val(szCurTime + " 23:59:59");
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// 格式化时间
|
|||
|
|
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;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 显示回调信息
|
|||
|
|
function showCBInfo(szInfo) {
|
|||
|
|
szInfo = "<div>" + dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss") + " " + szInfo + "</div>";
|
|||
|
|
$("#cbinfo").html(szInfo + $("#cbinfo").html());
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 窗口分割数
|
|||
|
|
function changeWndNum(iType) {
|
|||
|
|
iType = parseInt(iType, 10);
|
|||
|
|
WebVideoCtrl.I_ChangeWndNum(iType);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 登录
|
|||
|
|
function clickLogin(szProtoType) {
|
|||
|
|
var szIP = login_config.loginip,
|
|||
|
|
szPort = login_config.port,
|
|||
|
|
szUsername = login_config.username,
|
|||
|
|
szPassword = login_config.password;
|
|||
|
|
|
|||
|
|
if ("" == szIP || "" == szPort) {
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
var szDeviceIdentify = szIP + "_" + szPort;
|
|||
|
|
let loadingMsg = parent.layer.msg("设备初始化中,请稍后...", { icon: 16, scrollbar: false, time: 0, offset: 't' });
|
|||
|
|
WebVideoCtrl.I_Login(szIP, szProtoType, szPort, szUsername, szPassword, {
|
|||
|
|
timeout: 3000,
|
|||
|
|
success: function (xmlDoc) {
|
|||
|
|
/* showOPInfo(szDeviceIdentify + " 登录成功!");
|
|||
|
|
$("#ip").prepend("<option value='" + szDeviceIdentify + "'>" + szDeviceIdentify + "</option>"); */
|
|||
|
|
console.log(szDeviceIdentify + " 登录成功!");
|
|||
|
|
setTimeout(function () {
|
|||
|
|
// $("#ip").val(szDeviceIdentify);
|
|||
|
|
ip = szDeviceIdentify;
|
|||
|
|
setTimeout(function () {
|
|||
|
|
getChannelInfo();
|
|||
|
|
setTimeout(() => {
|
|||
|
|
setTreeData(loadingMsg);
|
|||
|
|
}, 1000);
|
|||
|
|
}, 1000);
|
|||
|
|
getDevicePort();
|
|||
|
|
}, 10);
|
|||
|
|
},
|
|||
|
|
error: function (oError) {
|
|||
|
|
if (ERROR_CODE_LOGIN_REPEATLOGIN === status) {
|
|||
|
|
// showOPInfo(szDeviceIdentify + " 已登录过!");
|
|||
|
|
console.log(szDeviceIdentify + " 已登录过!");
|
|||
|
|
} else {
|
|||
|
|
if (oError.errorCode === 401) {
|
|||
|
|
// showOPInfo(szDeviceIdentify + " 登录失败,已自动切换认证方式!");
|
|||
|
|
console.log(szDeviceIdentify + " 登录失败,已自动切换认证方式!");
|
|||
|
|
} else {
|
|||
|
|
// showOPInfo(szDeviceIdentify + " 登录失败!", oError.errorCode, oError.errorMsg);
|
|||
|
|
console.log(szDeviceIdentify + " 登录失败!", oError.errorCode, oError.errorMsg);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 获取通道
|
|||
|
|
function getChannelInfo() {
|
|||
|
|
var szDeviceIdentify = ip;
|
|||
|
|
// oSel = $("#channels").empty();
|
|||
|
|
// oSel = null;
|
|||
|
|
|
|||
|
|
if (null == szDeviceIdentify) {
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 模拟通道
|
|||
|
|
WebVideoCtrl.I_GetAnalogChannelInfo(szDeviceIdentify, {
|
|||
|
|
success: function (xmlDoc) {
|
|||
|
|
var oChannels = $(xmlDoc).find("VideoInputChannel");
|
|||
|
|
|
|||
|
|
$.each(oChannels, function (i) {
|
|||
|
|
var id = $(this).find("id").eq(0).text(),
|
|||
|
|
name = $(this).find("name").eq(0).text();
|
|||
|
|
if ("" == name) {
|
|||
|
|
name = "Camera " + (i < 9 ? "0" + (i + 1) : (i + 1));
|
|||
|
|
}
|
|||
|
|
// oSel.append("<option value='" + id + "' bZero='false'>" + name + "</option>");
|
|||
|
|
// oSel += "<option value='" + id + "' bZero='false'>" + name + "</option>";
|
|||
|
|
oSel.push({ id: id, bZero: 'false', name: name, parentId: '0' })
|
|||
|
|
});
|
|||
|
|
console.log(szDeviceIdentify + " 获取模拟通道成功!");
|
|||
|
|
},
|
|||
|
|
error: function (oError) {
|
|||
|
|
console.log(szDeviceIdentify + " 获取模拟通道失败!", oError.errorCode, oError.errorMsg);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
// 数字通道
|
|||
|
|
WebVideoCtrl.I_GetDigitalChannelInfo(szDeviceIdentify, {
|
|||
|
|
success: function (xmlDoc) {
|
|||
|
|
var oChannels = $(xmlDoc).find("InputProxyChannelStatus");
|
|||
|
|
|
|||
|
|
$.each(oChannels, function (i) {
|
|||
|
|
var id = $(this).find("id").eq(0).text(),
|
|||
|
|
name = $(this).find("name").eq(0).text(),
|
|||
|
|
online = $(this).find("online").eq(0).text();
|
|||
|
|
if ("false" == online) {// 过滤禁用的数字通道
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
if ("" == name) {
|
|||
|
|
name = "IPCamera " + (i < 9 ? "0" + (i + 1) : (i + 1));
|
|||
|
|
}
|
|||
|
|
// oSel.append("<option value='" + id + "' bZero='false'>" + name + "</option>");
|
|||
|
|
// oSel += "<option value='" + id + "' bZero='false'>" + name + "</option>";
|
|||
|
|
oSel.push({ id: id, bZero: 'false', name: name, parentId: '0' })
|
|||
|
|
});
|
|||
|
|
console.log(szDeviceIdentify + " 获取数字通道成功!");
|
|||
|
|
},
|
|||
|
|
error: function (oError) {
|
|||
|
|
console.log(szDeviceIdentify + " 获取数字通道失败!", oError.errorCode, oError.errorMsg);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
// 零通道
|
|||
|
|
/* WebVideoCtrl.I_GetZeroChannelInfo(szDeviceIdentify, {
|
|||
|
|
success: function (xmlDoc) {
|
|||
|
|
var oChannels = $(xmlDoc).find("ZeroVideoChannel");
|
|||
|
|
|
|||
|
|
$.each(oChannels, function (i) {
|
|||
|
|
var id = $(this).find("id").eq(0).text(),
|
|||
|
|
name = $(this).find("name").eq(0).text();
|
|||
|
|
if ("" == name) {
|
|||
|
|
name = "Zero Channel " + (i < 9 ? "0" + (i + 1) : (i + 1));
|
|||
|
|
}
|
|||
|
|
if ("true" == $(this).find("enabled").eq(0).text()) {// 过滤禁用的零通道
|
|||
|
|
// oSel.append("<option value='" + id + "' bZero='true'>" + name + "</option>");
|
|||
|
|
// oSel += "<option value='" + id + "' bZero='true'>" + name + "</option>";
|
|||
|
|
oSel.push({ id: id, bZero: 'true', name: name, parentId: '0' })
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
console.log(szDeviceIdentify + " 获取零通道成功!");
|
|||
|
|
},
|
|||
|
|
error: function (oError) {
|
|||
|
|
console.log(szDeviceIdentify + " 获取零通道失败!", oError.errorCode, oError.errorMsg);
|
|||
|
|
}
|
|||
|
|
}); */
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 获取端口
|
|||
|
|
function getDevicePort() {
|
|||
|
|
var szDeviceIdentify = ip;
|
|||
|
|
|
|||
|
|
if (null == szDeviceIdentify) {
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
var oPort = WebVideoCtrl.I_GetDevicePort(szDeviceIdentify).then((oPort) => {
|
|||
|
|
/* $("#deviceport").val(oPort.iDevicePort);
|
|||
|
|
$("#rtspport").val(oPort.iRtspPort); */
|
|||
|
|
deviceport = oPort.iDevicePort;
|
|||
|
|
rtspport = oPort.iRtspPort;
|
|||
|
|
console.log(szDeviceIdentify + " 获取端口成功!");
|
|||
|
|
}, (oError) => {
|
|||
|
|
var szInfo = "获取端口失败!";
|
|||
|
|
console.log(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg);
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 获取数字通道
|
|||
|
|
async function clickGetDigitalChannelInfo() {
|
|||
|
|
var szDeviceIdentify = ip,
|
|||
|
|
iAnalogChannelNum = 0;
|
|||
|
|
|
|||
|
|
// $("#digitalchannellist").empty();
|
|||
|
|
|
|||
|
|
if (null == szDeviceIdentify) {
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 模拟通道
|
|||
|
|
try {
|
|||
|
|
var oAnalogChannelInfo = await WebVideoCtrl.I_GetAnalogChannelInfo(szDeviceIdentify, {});
|
|||
|
|
iAnalogChannelNum = $(oAnalogChannelInfo).find("VideoInputChannel").length;
|
|||
|
|
} finally {
|
|||
|
|
// 数字通道
|
|||
|
|
WebVideoCtrl.I_GetDigitalChannelInfo(szDeviceIdentify, {
|
|||
|
|
success: function (xmlDoc) {
|
|||
|
|
var oChannels = $(xmlDoc).find("InputProxyChannelStatus");
|
|||
|
|
|
|||
|
|
$.each(oChannels, function () {
|
|||
|
|
var id = parseInt($(this).find("id").eq(0).text(), 10),
|
|||
|
|
ipAddress = $(this).find("ipAddress").eq(0).text(),
|
|||
|
|
srcInputPort = $(this).find("srcInputPort").eq(0).text(),
|
|||
|
|
managePortNo = $(this).find("managePortNo").eq(0).text(),
|
|||
|
|
online = $(this).find("online").eq(0).text(),
|
|||
|
|
proxyProtocol = $(this).find("proxyProtocol").eq(0).text();
|
|||
|
|
deviceStatusList.push({ id: id, online: online === 'true' ? '1' : '0' });
|
|||
|
|
});
|
|||
|
|
console.log(szDeviceIdentify + " 获取数字通道成功!");
|
|||
|
|
},
|
|||
|
|
error: function (oError) {
|
|||
|
|
console.log(szDeviceIdentify + " 没有数字通道!", oError.errorCode, oError.errorMsg);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 开始预览
|
|||
|
|
function clickStartRealPlay(iStreamType, iChannelID, bZero) {
|
|||
|
|
var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
|
|||
|
|
szDeviceIdentify = ip,
|
|||
|
|
iRtspPort = parseInt(rtspport, 10),
|
|||
|
|
iChannelID = iChannelID,
|
|||
|
|
bZeroChannel = bZero == "true" ? true : false,
|
|||
|
|
// bZeroChannel = $("#channels option").eq($("#channels").get(0).selectedIndex).attr("bZero") == "true" ? true : false,
|
|||
|
|
szInfo = "";
|
|||
|
|
|
|||
|
|
iStreamType = streamtype;
|
|||
|
|
if (null == szDeviceIdentify) {
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
var startRealPlay = function () {
|
|||
|
|
WebVideoCtrl.I_StartRealPlay(szDeviceIdentify, {
|
|||
|
|
iStreamType: iStreamType,
|
|||
|
|
iChannelID: iChannelID,
|
|||
|
|
bZeroChannel: bZeroChannel,
|
|||
|
|
iPort: iRtspPort,
|
|||
|
|
success: function () {
|
|||
|
|
szInfo = "开始预览成功!";
|
|||
|
|
console.log(szDeviceIdentify + " " + szInfo);
|
|||
|
|
parent.layer.msg('开始预览成功!', { icon: 1, offset: 't' });
|
|||
|
|
},
|
|||
|
|
error: function (oError) {
|
|||
|
|
console.log(szDeviceIdentify + " 开始预览失败!", oError.errorCode, oError.errorMsg);
|
|||
|
|
parent.layer.msg('开始预览失败!', { icon: 2, offset: 't' });
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
if (oWndInfo != null) {// 已经在播放了,先停止
|
|||
|
|
WebVideoCtrl.I_Stop({
|
|||
|
|
success: function () {
|
|||
|
|
startRealPlay();
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
} else {
|
|||
|
|
startRealPlay();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 停止预览
|
|||
|
|
function clickStopRealPlay() {
|
|||
|
|
var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
|
|||
|
|
szInfo = "";
|
|||
|
|
|
|||
|
|
if (oWndInfo != null) {
|
|||
|
|
WebVideoCtrl.I_Stop({
|
|||
|
|
success: function () {
|
|||
|
|
szInfo = "停止预览成功!";
|
|||
|
|
console.log(oWndInfo.szDeviceIdentify + " " + szInfo);
|
|||
|
|
},
|
|||
|
|
error: function (oError) {
|
|||
|
|
console.log(szDeviceIdentify + " 停止预览失败!", oError.errorCode, oError.errorMsg);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// PTZ控制 9为自动,1,2,3,4,5,6,7,8为方向PTZ
|
|||
|
|
var g_bPTZAuto = false;
|
|||
|
|
function mouseDownPTZControl(iPTZIndex) {
|
|||
|
|
var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
|
|||
|
|
bZeroChannel = false,
|
|||
|
|
iPTZSpeed = 4;
|
|||
|
|
|
|||
|
|
if (bZeroChannel) {// 零通道不支持云台
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (oWndInfo != null) {
|
|||
|
|
if (9 == iPTZIndex && g_bPTZAuto) {
|
|||
|
|
iPTZSpeed = 0;// 自动开启后,速度置为0可以关闭自动
|
|||
|
|
} else {
|
|||
|
|
g_bPTZAuto = false;// 点击其他方向,自动肯定会被关闭
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
WebVideoCtrl.I_PTZControl(iPTZIndex, false, {
|
|||
|
|
iPTZSpeed: iPTZSpeed,
|
|||
|
|
success: function (xmlDoc) {
|
|||
|
|
if (9 == iPTZIndex && g_bPTZAuto) {
|
|||
|
|
console.log(oWndInfo.szDeviceIdentify + " 停止云台成功!");
|
|||
|
|
} else {
|
|||
|
|
console.log(oWndInfo.szDeviceIdentify + " 开启云台成功!");
|
|||
|
|
}
|
|||
|
|
if (9 == iPTZIndex) {
|
|||
|
|
g_bPTZAuto = !g_bPTZAuto;
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
error: function (oError) {
|
|||
|
|
console.log(oWndInfo.szDeviceIdentify + " 开启云台失败!", oError.errorCode, oError.errorMsg);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 方向PTZ停止
|
|||
|
|
function mouseUpPTZControl() {
|
|||
|
|
var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex);
|
|||
|
|
|
|||
|
|
if (oWndInfo != null) {
|
|||
|
|
WebVideoCtrl.I_PTZControl(1, true, {
|
|||
|
|
success: function (xmlDoc) {
|
|||
|
|
console.log(oWndInfo.szDeviceIdentify + " 停止云台成功!");
|
|||
|
|
},
|
|||
|
|
error: function (oError) {
|
|||
|
|
console.log(oWndInfo.szDeviceIdentify + " 停止云台失败!", oError.errorCode, oError.errorMsg);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
function PTZZoomIn() {
|
|||
|
|
var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex);
|
|||
|
|
|
|||
|
|
if (oWndInfo != null) {
|
|||
|
|
WebVideoCtrl.I_PTZControl(10, false, {
|
|||
|
|
iWndIndex: g_iWndIndex,
|
|||
|
|
success: function (xmlDoc) {
|
|||
|
|
console.log(oWndInfo.szDeviceIdentify + " 调焦+成功!");
|
|||
|
|
},
|
|||
|
|
error: function (oError) {
|
|||
|
|
console.log(oWndInfo.szDeviceIdentify + " 调焦+失败!", oError.errorCode, oError.errorMsg);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function PTZZoomout() {
|
|||
|
|
var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex);
|
|||
|
|
|
|||
|
|
if (oWndInfo != null) {
|
|||
|
|
WebVideoCtrl.I_PTZControl(11, false, {
|
|||
|
|
iWndIndex: g_iWndIndex,
|
|||
|
|
success: function (xmlDoc) {
|
|||
|
|
console.log(oWndInfo.szDeviceIdentify + " 调焦-成功!");
|
|||
|
|
},
|
|||
|
|
error: function (oError) {
|
|||
|
|
console.log(oWndInfo.szDeviceIdentify + " 调焦-失败!", oError.errorCode, oError.errorMsg);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function PTZZoomStop() {
|
|||
|
|
var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex);
|
|||
|
|
|
|||
|
|
if (oWndInfo != null) {
|
|||
|
|
WebVideoCtrl.I_PTZControl(11, true, {
|
|||
|
|
iWndIndex: g_iWndIndex,
|
|||
|
|
success: function (xmlDoc) {
|
|||
|
|
console.log(oWndInfo.szDeviceIdentify + " 调焦停止成功!");
|
|||
|
|
},
|
|||
|
|
error: function (oError) {
|
|||
|
|
console.log(oWndInfo.szDeviceIdentify + " 调焦停止失败!", oError.errorCode, oError.errorMsg);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function PTZFocusIn() {
|
|||
|
|
var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex);
|
|||
|
|
|
|||
|
|
if (oWndInfo != null) {
|
|||
|
|
WebVideoCtrl.I_PTZControl(12, false, {
|
|||
|
|
iWndIndex: g_iWndIndex,
|
|||
|
|
success: function (xmlDoc) {
|
|||
|
|
console.log(oWndInfo.szDeviceIdentify + " 聚焦+成功!");
|
|||
|
|
},
|
|||
|
|
error: function (oError) {
|
|||
|
|
console.log(oWndInfo.szDeviceIdentify + " 聚焦+失败!", oError.errorCode, oError.errorMsg);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function PTZFoucusOut() {
|
|||
|
|
var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex);
|
|||
|
|
|
|||
|
|
if (oWndInfo != null) {
|
|||
|
|
WebVideoCtrl.I_PTZControl(13, false, {
|
|||
|
|
iWndIndex: g_iWndIndex,
|
|||
|
|
success: function (xmlDoc) {
|
|||
|
|
console.log(oWndInfo.szDeviceIdentify + " 聚焦-成功!");
|
|||
|
|
},
|
|||
|
|
error: function (oError) {
|
|||
|
|
console.log(oWndInfo.szDeviceIdentify + " 聚焦-失败!", oError.errorCode, oError.errorMsg);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function PTZFoucusStop() {
|
|||
|
|
var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex);
|
|||
|
|
|
|||
|
|
if (oWndInfo != null) {
|
|||
|
|
WebVideoCtrl.I_PTZControl(12, true, {
|
|||
|
|
iWndIndex: g_iWndIndex,
|
|||
|
|
success: function (xmlDoc) {
|
|||
|
|
console.log(oWndInfo.szDeviceIdentify + " 聚焦停止成功!");
|
|||
|
|
},
|
|||
|
|
error: function (oError) {
|
|||
|
|
console.log(oWndInfo.szDeviceIdentify + " 聚焦停止失败!", oError.errorCode, oError.errorMsg);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function PTZIrisIn() {
|
|||
|
|
var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex);
|
|||
|
|
|
|||
|
|
if (oWndInfo != null) {
|
|||
|
|
WebVideoCtrl.I_PTZControl(14, false, {
|
|||
|
|
iWndIndex: g_iWndIndex,
|
|||
|
|
success: function (xmlDoc) {
|
|||
|
|
console.log(oWndInfo.szDeviceIdentify + " 光圈+成功!");
|
|||
|
|
},
|
|||
|
|
error: function (oError) {
|
|||
|
|
console.log(oWndInfo.szDeviceIdentify + " 光圈+失败!", oError.errorCode, oError.errorMsg);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function PTZIrisOut() {
|
|||
|
|
var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex);
|
|||
|
|
|
|||
|
|
if (oWndInfo != null) {
|
|||
|
|
WebVideoCtrl.I_PTZControl(15, false, {
|
|||
|
|
iWndIndex: g_iWndIndex,
|
|||
|
|
success: function (xmlDoc) {
|
|||
|
|
console.log(oWndInfo.szDeviceIdentify + " 光圈-成功!");
|
|||
|
|
},
|
|||
|
|
error: function (oError) {
|
|||
|
|
console.log(oWndInfo.szDeviceIdentify + " 光圈-失败!", oError.errorCode, oError.errorMsg);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function PTZIrisStop() {
|
|||
|
|
var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex);
|
|||
|
|
|
|||
|
|
if (oWndInfo != null) {
|
|||
|
|
WebVideoCtrl.I_PTZControl(14, true, {
|
|||
|
|
iWndIndex: g_iWndIndex,
|
|||
|
|
success: function (xmlDoc) {
|
|||
|
|
console.log(oWndInfo.szDeviceIdentify + " 光圈停止成功!");
|
|||
|
|
},
|
|||
|
|
error: function (oError) {
|
|||
|
|
console.log(oWndInfo.szDeviceIdentify + " 光圈停止失败!", oError.errorCode, oError.errorMsg);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 关闭全部视频播放
|
|||
|
|
function stopAllPlay() {
|
|||
|
|
WebVideoCtrl.I_StopAllPlay().then(() => {
|
|||
|
|
console.log('关闭全部视频播放成功!')
|
|||
|
|
}).catch(() => {
|
|||
|
|
console.log('失败!')
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 退出
|
|||
|
|
function clickLogout() {
|
|||
|
|
var szDeviceIdentify = ip;
|
|||
|
|
if (null == szDeviceIdentify) {
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
WebVideoCtrl.I_Logout(szDeviceIdentify).then(() => {
|
|||
|
|
$("#ip option:contains(" + szDeviceIdentify + ")").remove();
|
|||
|
|
console.log(szDeviceIdentify + " " + "退出成功!");
|
|||
|
|
}, () => {
|
|||
|
|
console.log(szDeviceIdentify + " " + "退出失败!");
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function destroyPlugin() {
|
|||
|
|
WebVideoCtrl.I_DestroyPlugin().then(() => {
|
|||
|
|
document.querySelectorAll('a').forEach(link => {
|
|||
|
|
link.removeAttribute('onclick'); // 移除内联事件
|
|||
|
|
link.removeAttribute('href');
|
|||
|
|
link.setAttribute('aria-disabled', 'true'); // 辅助技术可识别
|
|||
|
|
link.style.cursor = 'default'; // 移除手型光标
|
|||
|
|
// 创建一个无事件的新节点替换
|
|||
|
|
const newLink = link.cloneNode(false);
|
|||
|
|
newLink.textContent = link.textContent;
|
|||
|
|
link.parentNode.replaceChild(newLink, link);
|
|||
|
|
});
|
|||
|
|
// 销毁后不能再预览了
|
|||
|
|
console.log('销毁成功!')
|
|||
|
|
}).catch(() => {
|
|||
|
|
console.log('销毁失败!')
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function showPlugin() {
|
|||
|
|
WebVideoCtrl.I_ShowPlugin().then(() => {
|
|||
|
|
console.log('展示成功!')
|
|||
|
|
}).catch(() => {
|
|||
|
|
console.log('展示失败!')
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
function hidPlugin() {
|
|||
|
|
WebVideoCtrl.I_HidPlugin().then(() => {
|
|||
|
|
console.log('隐藏成功!')
|
|||
|
|
}).catch(() => {
|
|||
|
|
console.log('隐藏失败!')
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 添加球机树数据
|
|||
|
|
function setTreeData(loadingMsg) {
|
|||
|
|
// 查询设备状态
|
|||
|
|
clickGetDigitalChannelInfo();
|
|||
|
|
setTimeout(() => {
|
|||
|
|
let data = oSel;
|
|||
|
|
data.forEach(itemA => {
|
|||
|
|
const matchingItemB = deviceStatusList.find(itemB => parseInt(itemB.id) === parseInt(itemA.id));
|
|||
|
|
if (matchingItemB) {
|
|||
|
|
itemA.online = matchingItemB.online;
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
let totalNum = 0, onlineNum = 0, offLineNum = 0;
|
|||
|
|
$.each(data, function (index, item) {
|
|||
|
|
if (item.id !== '0') {
|
|||
|
|
totalNum++;
|
|||
|
|
let titleName = item.name;
|
|||
|
|
if (item.name.length > 20) {
|
|||
|
|
titleName = item.name.substr(0, 20) + '...';
|
|||
|
|
}
|
|||
|
|
if (item.online === '1') {
|
|||
|
|
onlineNum++;
|
|||
|
|
item.title = '<img src="../../img/video/ball_online.png"><span data-mtpis="' + item.name + '" online=' + item.online + ' id=' + item.id + ' bZero=' + item.bZero + '>' + titleName + '</span>'
|
|||
|
|
} else {
|
|||
|
|
offLineNum++;
|
|||
|
|
item.title = '<img src="../../img/video/ball_offline.png"><span data-mtpis="' + item.name + '" online=' + item.online + ' id=' + item.id + ' bZero=' + item.bZero + '>' + titleName + '</span>'
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
videoTree = dtree.render({
|
|||
|
|
elem: "#video-tree",
|
|||
|
|
width: "96%", // 指定树的宽度
|
|||
|
|
data: data,
|
|||
|
|
dataFormat: "list",
|
|||
|
|
skin: "laySimple",
|
|||
|
|
line: false, // 显示树线
|
|||
|
|
});
|
|||
|
|
// 设备在线情况
|
|||
|
|
$('.device-status').eq(0).html('全部(' + totalNum + ')')
|
|||
|
|
$('.device-status').eq(1).html('在线(' + onlineNum + ')')
|
|||
|
|
$('.device-status').eq(2).html('离线(' + offLineNum + ')')
|
|||
|
|
parent.layer.close(loadingMsg);
|
|||
|
|
}, 1000);
|
|||
|
|
}
|