You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
5126 lines
161 KiB
5126 lines
161 KiB
(function () {
|
|
if (window.WebVideoCtrl) {
|
|
return;
|
|
}
|
|
var WebVideoCtrl = (function () {
|
|
var m_szWidth = "100%";
|
|
var m_szHeight = "100%";
|
|
var m_options = {
|
|
szversion: "V3.3.0 build20230314",
|
|
szContainerID: "",
|
|
szColorProperty: "",
|
|
szBasePath: "",
|
|
iWndowType: 1,
|
|
bWndFull: true,
|
|
iPackageType: 2,
|
|
bDebugMode: true,
|
|
cbSelWnd: null,
|
|
cbDoubleClickWnd: null,
|
|
cbEvent: null,
|
|
cbInitPluginComplete: null,
|
|
};
|
|
var m_pluginOBJECT = null;
|
|
var m_iSelWnd = 0;
|
|
var m_bFullScreen = false;
|
|
var m_deviceSet = [];
|
|
var m_wndSet = [];
|
|
var m_ISAPIProtocol = null;
|
|
var m_utilsInc = null;
|
|
var m_webVideoCtrl = this;
|
|
var m_oLocalCfg = null;
|
|
var PROTOCOL_DEVICE_ISAPI = 1;
|
|
var ERROR_CODE_UNKNOWN = 1e3;
|
|
var ERROR_CODE_NETWORKERROR = 1001;
|
|
var ERROR_CODE_PARAMERROR = 1002;
|
|
var ERROR_CODE_LOGIN_NOLOGIN = 2e3;
|
|
var ERROR_CODE_LOGIN_REPEATLOGIN = 2001;
|
|
var ERROR_CODE_LOGIN_NOSUPPORT = 2002;
|
|
var ERROR_CODE_PLAY_PLUGININITFAIL = 3e3;
|
|
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 = 5e3;
|
|
var HTTP_STATUS_OK_200 = 200;
|
|
var HTTP_STATUS_ERROR_403 = 403;
|
|
var PLAY_STATUS_STOP = 0;
|
|
var PLAY_STATUS_REALPLAY = 1;
|
|
var PLAY_STATUS_PLAYBACK = 2;
|
|
var PLAY_STATUS_PAUSE = 3;
|
|
var PLAY_STATUS_FRAME = 4;
|
|
var PLAY_STATUS_REVERSE_PLAYBACK = 5;
|
|
var PLAY_STATUS_REVERSE_PAUSE = 6;
|
|
var PROTOCOLTYPE_PLAY_TCP = 0;
|
|
var PROTOCOLTYPE_PLAY_UDP = 1;
|
|
var DEVICE_TYPE_IPCAMERA = "IPCamera";
|
|
var DEVICE_TYPE_IPDOME = "IPDome";
|
|
var DEVICE_TYPE_IPZOOM = "IPZoom";
|
|
var DEVICE_TYPE_GATEWAY = "Gateway";
|
|
var m_szVersion =
|
|
"<?xml version='1.0' encoding='utf-8'?><FileVersion>" +
|
|
"<Platform name='win32'>" +
|
|
"<localServiceControl>1.0.0.40</localServiceControl>";
|
|
"</Platform>" + "</FileVersion>";
|
|
var _onGetSelectWndInfo = function (iWnd) {
|
|
m_iSelWnd = iWnd;
|
|
if (m_options.cbSelWnd) {
|
|
var arrXml = [];
|
|
arrXml.push("<RealPlayInfo>");
|
|
arrXml.push("<SelectWnd>" + m_iSelWnd + "</SelectWnd>");
|
|
arrXml.push("</RealPlayInfo>");
|
|
m_options.cbSelWnd(m_utilsInc.loadXML(arrXml.join("")));
|
|
}
|
|
};
|
|
var _onMouseEvent = function (oData) {
|
|
if (m_options.cbDoubleClickWnd && 2 === oData.eventType) {
|
|
if (m_options.bWndFull) {
|
|
var iIndex = m_webVideoCtrl.findWndIndexByIndex(oData.wndIndex);
|
|
if (iIndex != -1) {
|
|
m_bFullScreen = !m_bFullScreen;
|
|
}
|
|
}
|
|
m_options.cbDoubleClickWnd(oData.wndIndex, m_bFullScreen);
|
|
}
|
|
};
|
|
var _onPluginEventHandler = function (iWndIndex, iErrorCode, oError) {
|
|
var iNewError = ERROR_CODE_UNKNOWN;
|
|
if (0 === iErrorCode) {
|
|
iNewError = ERROR_CODE_PLAY_PLAYBACKABNORMAL;
|
|
} else if (2 === iErrorCode) {
|
|
iNewError = ERROR_CODE_PLAY_PLAYBACKSTOP;
|
|
} else if (3 === iErrorCode) {
|
|
iNewError = ERROR_CODE_TALK_FAIL;
|
|
} else if (21 === iErrorCode) {
|
|
iNewError = ERROR_CODE_PLAY_NOFREESPACE;
|
|
}
|
|
if (
|
|
ERROR_CODE_PLAY_PLAYBACKABNORMAL == iNewError ||
|
|
ERROR_CODE_PLAY_PLAYBACKSTOP == iNewError
|
|
) {
|
|
m_webVideoCtrl.I_Stop(iWndIndex);
|
|
} else if (ERROR_CODE_PLAY_NOFREESPACE == iNewError) {
|
|
m_webVideoCtrl.I_StopRecord(iWndIndex);
|
|
} else if (ERROR_CODE_TALK_FAIL == iNewError) {
|
|
m_webVideoCtrl.I_StopVoiceTalk();
|
|
} else {
|
|
}
|
|
if (m_options.cbEvent) {
|
|
m_options.cbEvent(iNewError, iWndIndex, oError);
|
|
}
|
|
};
|
|
var _onKeyBoardEvent = function (iKeyCode) {
|
|
if (100 === parseInt(iKeyCode, 10)) {
|
|
m_bFullScreen = false;
|
|
if (m_options.cbDoubleClickWnd) {
|
|
m_options.cbDoubleClickWnd(m_iSelWnd, m_bFullScreen);
|
|
}
|
|
}
|
|
};
|
|
var _onZoomInfoCallback = function (oPoints) {
|
|
var iIndex = m_webVideoCtrl.findWndIndexByIndex(m_iSelWnd);
|
|
if (iIndex != -1) {
|
|
var oWndInfo = m_wndSet[iIndex];
|
|
iIndex = m_webVideoCtrl.findDeviceIndexByIP(oWndInfo.szDeviceIdentify);
|
|
if (iIndex != -1) {
|
|
var oDeviceInfo = m_deviceSet[iIndex];
|
|
oDeviceInfo.oProtocolInc.set3DZoom(
|
|
oDeviceInfo,
|
|
oWndInfo,
|
|
oPoints,
|
|
{}
|
|
);
|
|
}
|
|
}
|
|
};
|
|
var _oNoLoginError = {
|
|
errorCode: ERROR_CODE_LOGIN_NOLOGIN,
|
|
errorMsg: "The device is not login.",
|
|
};
|
|
var _oUnKnownError = {
|
|
errorCode: ERROR_CODE_UNKNOWN,
|
|
errorMsg: "Unknown error.",
|
|
};
|
|
var _oParamsError = {
|
|
errorCode: ERROR_CODE_PARAMERROR,
|
|
errorMsg: "Params error.",
|
|
};
|
|
var _printString = function () {
|
|
if (m_options.bDebugMode) {
|
|
var printString = m_utilsInc.formatString(arguments);
|
|
console.log(printString);
|
|
}
|
|
};
|
|
var _initLocalCfg = function () {
|
|
let oPromise = new Promise(function (resolve, reject) {
|
|
m_pluginOBJECT.JS_GetLocalConfig().then(
|
|
(oLocalCofing) => {
|
|
m_oLocalCfg = oLocalCofing;
|
|
resolve();
|
|
},
|
|
() => {
|
|
reject();
|
|
}
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
var _initDeviceInfo = function (oDeviceInfo) {
|
|
let oPromise = new Promise(function (resolve, reject) {
|
|
let oP1 = oDeviceInfo.oProtocolInc.getDeviceInfo(oDeviceInfo, {});
|
|
let oP2 = oDeviceInfo.oProtocolInc.getAnalogChannelInfo(
|
|
oDeviceInfo,
|
|
{}
|
|
);
|
|
let oP3 = oDeviceInfo.oProtocolInc.getAudioInfo(oDeviceInfo, {});
|
|
let oP4 = _getPort(oDeviceInfo);
|
|
let oP5 = oDeviceInfo.oProtocolInc.getDeviceMinusLocalTime(oDeviceInfo);
|
|
Promise.all([oP1, oP2, oP3, oP4, oP5]).then(
|
|
() => {
|
|
resolve();
|
|
},
|
|
() => {
|
|
resolve();
|
|
}
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
var _initPlugin = function (szContainerID) {
|
|
let oPromise = new Promise(function (resolve, reject) {
|
|
if (!m_utilsInc.isUndefined(szContainerID)) {
|
|
m_options.szContainerID = szContainerID;
|
|
}
|
|
if (document.getElementById(m_options.szContainerID) == null) {
|
|
reject(_oParamsError);
|
|
return;
|
|
}
|
|
var oParam = {
|
|
szId: szContainerID,
|
|
iType: 1,
|
|
iWidth: m_szWidth,
|
|
iHeight: m_szHeight,
|
|
iMaxSplit: 4,
|
|
iCurrentSplit: m_options.iWndowType,
|
|
iServicePortStart: 34686,
|
|
iServicePortEnd: 34690,
|
|
oSessionInfo: {
|
|
sessionID:
|
|
"11c12b3257f037bb50052db3ac5e342572c3d963622baca122755c482ce8823a",
|
|
user: "admin",
|
|
challenge: "275816f02ec2dca22b6a6ae87c7cb7e3",
|
|
iterations: 100,
|
|
random: "34765058",
|
|
},
|
|
iPluginType: 2,
|
|
onConnectSuccess: () => {
|
|
var oElem = $("#" + szContainerID);
|
|
m_pluginOBJECT.JS_Resize(oElem.width(), oElem.height());
|
|
if (2 !== m_pluginOBJECT.iPluginMode) {
|
|
reject({
|
|
errorCode: ERROR_CODE_PLAY_PLUGININITFAIL,
|
|
errorMsg: "Plugin init failed.",
|
|
});
|
|
return;
|
|
}
|
|
var iWndFull = m_options.bWndFull ? 1 : 0;
|
|
m_pluginOBJECT.JS_SetFullScreenCapability(iWndFull);
|
|
m_pluginOBJECT.JS_SetPackageType(m_options.iPackageType);
|
|
_initPluginEvent();
|
|
_initLocalCfg().then(() => {
|
|
resolve();
|
|
});
|
|
},
|
|
onConnectError: () => {
|
|
reject({
|
|
errorCode: ERROR_CODE_PLAY_PLUGININITFAIL,
|
|
errorMsg: "Plugin init failed.",
|
|
});
|
|
},
|
|
szBasePath: m_utilsInc.getDirName(),
|
|
};
|
|
m_pluginOBJECT = new JSVideoPlugin(oParam);
|
|
});
|
|
return oPromise;
|
|
};
|
|
var _initPluginEvent = function () {
|
|
m_pluginOBJECT.JS_SetWindowControlCallback({
|
|
onGetSelectWndInfo: (iwnd) => {
|
|
_onGetSelectWndInfo(iwnd);
|
|
},
|
|
onPluginEventHandler: (iWndIndex, iEventType, iParam2) => {
|
|
_onPluginEventHandler(iWndIndex, iEventType, iParam2);
|
|
},
|
|
KeyBoardEvent: (szXml) => {
|
|
_onKeyBoardEvent(szXml);
|
|
},
|
|
onMouseEvent: function (oData) {
|
|
_onMouseEvent(oData);
|
|
},
|
|
});
|
|
};
|
|
var _getPort = function (oDeviceInfo) {
|
|
let oPromise = new Promise(async (resolve, reject) => {
|
|
var oPort = null;
|
|
let bPPPoE = await _getPPPoEEnable(oDeviceInfo);
|
|
if (bPPPoE) {
|
|
oPort = await _getInternalPort(oDeviceInfo);
|
|
} else {
|
|
var ipset = await _getDeviceIPAddr(oDeviceInfo);
|
|
var bSame = false;
|
|
for (var i = 0; i < ipset.length; i++) {
|
|
if (
|
|
ipset[i].ipv4 == oDeviceInfo.szIP ||
|
|
ipset[i].ipv6 == oDeviceInfo.szIP
|
|
) {
|
|
bSame = true;
|
|
break;
|
|
}
|
|
}
|
|
if (bSame) {
|
|
oPort = await _getInternalPort(oDeviceInfo);
|
|
} else {
|
|
oPort = await _getExternalPort(oDeviceInfo);
|
|
if (-1 == oPort.iRtspPort && -1 == oPort.iDevicePort) {
|
|
oPort = await _getInternalPort(oDeviceInfo);
|
|
}
|
|
}
|
|
}
|
|
oDeviceInfo.iRtspPort = oPort.iRtspPort;
|
|
oDeviceInfo.iHttpPort = oPort.iHttpPort;
|
|
resolve(oPort);
|
|
});
|
|
return oPromise;
|
|
};
|
|
var _getInternalPort = function (oDeviceInfo) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
var iRtspPort = -1,
|
|
iHttpPort = -1,
|
|
iDevicePort = -1;
|
|
oDeviceInfo.oProtocolInc.getPortInfo(oDeviceInfo, {
|
|
async: false,
|
|
success: function (xmlDoc) {
|
|
var nodeList = NS.$XML(xmlDoc).find("AdminAccessProtocol", true);
|
|
iRtspPort = 554;
|
|
for (var i = 0, iLen = nodeList.length; i < iLen; i++) {
|
|
if (
|
|
NS.$XML(nodeList)
|
|
.eq(i)
|
|
.find("protocol")
|
|
.eq(0)
|
|
.text()
|
|
.toLowerCase() === "rtsp"
|
|
) {
|
|
iRtspPort = parseInt(
|
|
NS.$XML(nodeList).eq(i).find("portNo").eq(0).text(),
|
|
10
|
|
);
|
|
}
|
|
if (
|
|
NS.$XML(nodeList)
|
|
.eq(i)
|
|
.find("protocol")
|
|
.eq(0)
|
|
.text()
|
|
.toLowerCase() === "http"
|
|
) {
|
|
iHttpPort = parseInt(
|
|
NS.$XML(nodeList).eq(i).find("portNo").eq(0).text(),
|
|
10
|
|
);
|
|
}
|
|
if (
|
|
NS.$XML(nodeList)
|
|
.eq(i)
|
|
.find("protocol")
|
|
.eq(0)
|
|
.text()
|
|
.toLowerCase() === "dev_manage"
|
|
) {
|
|
iDevicePort = parseInt(
|
|
NS.$XML(nodeList).eq(i).find("portNo").eq(0).text(),
|
|
10
|
|
);
|
|
}
|
|
}
|
|
resolve({
|
|
iRtspPort: iRtspPort,
|
|
iHttpPort: iHttpPort,
|
|
iDevicePort: iDevicePort,
|
|
});
|
|
},
|
|
error: function () {
|
|
resolve({ iRtspPort: -1, iHttpPort: -1, iDevicePort: -1 });
|
|
},
|
|
});
|
|
});
|
|
return oPromise;
|
|
};
|
|
var _getExternalPort = function (oDeviceInfo) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
var iRtspPort = -1,
|
|
iHttpPort = -1,
|
|
iDevicePort = -1;
|
|
oDeviceInfo.oProtocolInc.getUPnPPortStatus(oDeviceInfo, {
|
|
async: false,
|
|
success: function (xmlDoc) {
|
|
var nodeList = NS.$XML(xmlDoc).find("portStatus", true);
|
|
for (var i = 0, iLen = nodeList.length; i < iLen; i++) {
|
|
if (
|
|
NS.$XML(nodeList)
|
|
.eq(i)
|
|
.find("internalPort")
|
|
.eq(0)
|
|
.text()
|
|
.toLowerCase() == "rtsp"
|
|
) {
|
|
iRtspPort = parseInt(
|
|
NS.$XML(nodeList).eq(i).find("externalPort").eq(0).text(),
|
|
10
|
|
);
|
|
}
|
|
if (
|
|
NS.$XML(nodeList)
|
|
.eq(i)
|
|
.find("internalPort")
|
|
.eq(0)
|
|
.text()
|
|
.toLowerCase() == "http"
|
|
) {
|
|
iHttpPort = parseInt(
|
|
NS.$XML(nodeList).eq(i).find("externalPort").eq(0).text(),
|
|
10
|
|
);
|
|
}
|
|
if (
|
|
NS.$XML(nodeList)
|
|
.eq(i)
|
|
.find("internalPort")
|
|
.eq(0)
|
|
.text()
|
|
.toLowerCase() == "admin"
|
|
) {
|
|
iDevicePort = parseInt(
|
|
NS.$XML(nodeList).eq(i).find("externalPort").eq(0).text(),
|
|
10
|
|
);
|
|
}
|
|
}
|
|
resolve({
|
|
iRtspPort: iRtspPort,
|
|
iHttpPort: iHttpPort,
|
|
iDevicePort: iDevicePort,
|
|
});
|
|
},
|
|
error: function () {
|
|
resolve({ iRtspPort: -1, iHttpPort: -1, iDevicePort: -1 });
|
|
},
|
|
});
|
|
});
|
|
return oPromise;
|
|
};
|
|
var _getDeviceIPAddr = function (oDeviceInfo) {
|
|
let oPromise = new Promise(function (resolve) {
|
|
var arrIP = [];
|
|
oDeviceInfo.oProtocolInc.getNetworkBond(oDeviceInfo, {
|
|
async: false,
|
|
success: function (xmlDoc) {
|
|
if (NS.$XML(xmlDoc).find("enabled").eq(0).text() == "true") {
|
|
arrIP.push({
|
|
ipv4: NS.$XML(xmlDoc).find("ipAddress").eq(0).text(),
|
|
ipv6: NS.$XML(xmlDoc).find("ipv6Address").eq(0).text(),
|
|
});
|
|
resolve(arrIP);
|
|
} else {
|
|
oDeviceInfo.oProtocolInc.getNetworkInterface(oDeviceInfo, {
|
|
async: false,
|
|
success: function (xmlDoc) {
|
|
var nodeList = NS.$XML(xmlDoc).find("NetworkInterface", true);
|
|
for (var i = 0, iLen = nodeList.length; i < iLen; i++) {
|
|
arrIP.push({
|
|
ipv4: NS.$XML(xmlDoc).find("ipAddress").eq(0).text(),
|
|
ipv6: NS.$XML(xmlDoc).find("ipv6Address").eq(0).text(),
|
|
});
|
|
break;
|
|
}
|
|
resolve(arrIP);
|
|
},
|
|
error: function () {
|
|
resolve(arrIP);
|
|
},
|
|
});
|
|
}
|
|
},
|
|
error: function () {
|
|
oDeviceInfo.oProtocolInc.getNetworkInterface(oDeviceInfo, {
|
|
async: false,
|
|
success: function (xmlDoc) {
|
|
var nodeList = NS.$XML(xmlDoc).find("NetworkInterface", true);
|
|
for (var i = 0, iLen = nodeList.length; i < iLen; i++) {
|
|
arrIP.push({
|
|
ipv4: NS.$XML(xmlDoc).find("ipAddress").eq(0).text(),
|
|
ipv6: NS.$XML(xmlDoc).find("ipv6Address").eq(0).text(),
|
|
});
|
|
break;
|
|
}
|
|
resolve(arrIP);
|
|
},
|
|
error: function () {
|
|
resolve(arrIP);
|
|
},
|
|
});
|
|
},
|
|
});
|
|
});
|
|
return oPromise;
|
|
};
|
|
var _getPPPoEEnable = function (oDeviceInfo) {
|
|
let oPromise = new Promise(function (resolve) {
|
|
var bEnabled = false;
|
|
oDeviceInfo.oProtocolInc.getPPPoEStatus(oDeviceInfo, {
|
|
success: function (xmlDoc) {
|
|
if (NS.$XML(xmlDoc).find("ipAddress", true).length > 0) {
|
|
bEnabled = true;
|
|
} else if (NS.$XML(xmlDoc).find("ipv6Address", true).length > 0) {
|
|
bEnabled = true;
|
|
} else {
|
|
bEnabled = false;
|
|
}
|
|
resolve(bEnabled);
|
|
},
|
|
error: function () {
|
|
bEnabled = false;
|
|
resolve(bEnabled);
|
|
},
|
|
});
|
|
});
|
|
return oPromise;
|
|
};
|
|
var _generateTransCodeXml = function (oTransCodeParam) {
|
|
var oDefaultParam = {
|
|
TransFrameRate: "",
|
|
TransResolution: "",
|
|
TransBitrate: "",
|
|
};
|
|
m_utilsInc.extend(oDefaultParam, oTransCodeParam);
|
|
if (
|
|
oDefaultParam.TransFrameRate == "" ||
|
|
oDefaultParam.TransResolution == "" ||
|
|
oDefaultParam.TransBitrate == ""
|
|
) {
|
|
return "";
|
|
}
|
|
var ArraySet = [];
|
|
ArraySet.push("<?xml version='1.0' encoding='UTF-8'?>");
|
|
ArraySet.push("<CompressionInfo>");
|
|
ArraySet.push(
|
|
"<TransFrameRate>" + oDefaultParam.TransFrameRate + "</TransFrameRate>"
|
|
);
|
|
ArraySet.push(
|
|
"<TransResolution>" +
|
|
oDefaultParam.TransResolution +
|
|
"</TransResolution>"
|
|
);
|
|
ArraySet.push(
|
|
"<TransBitrate>" + oDefaultParam.TransBitrate + "</TransBitrate>"
|
|
);
|
|
ArraySet.push("</CompressionInfo>");
|
|
return ArraySet.join("");
|
|
};
|
|
var _setDeviceInfo = function (
|
|
cgiInstance,
|
|
oDeviceInfo,
|
|
szIP,
|
|
iProtocol,
|
|
iPort,
|
|
szUserName,
|
|
szPassword
|
|
) {
|
|
oDeviceInfo.szIP = szIP;
|
|
if (iProtocol == 2) {
|
|
oDeviceInfo.szHttpProtocol = "https://";
|
|
oDeviceInfo.iHttpsPort = iPort;
|
|
} else {
|
|
oDeviceInfo.szHttpProtocol = "http://";
|
|
oDeviceInfo.iHttpPort = iPort;
|
|
}
|
|
oDeviceInfo.iCGIPort = iPort;
|
|
oDeviceInfo.szDeviceIdentify = szIP + "_" + iPort;
|
|
oDeviceInfo.iDeviceProtocol = PROTOCOL_DEVICE_ISAPI;
|
|
oDeviceInfo.oProtocolInc = cgiInstance;
|
|
oDeviceInfo.szAuth = m_utilsInc.Base64.encode(
|
|
":" + szUserName + ":" + szPassword
|
|
);
|
|
};
|
|
var _doLogin = function (
|
|
cgiInstance,
|
|
oDeviceInfo,
|
|
szIP,
|
|
iProtocol,
|
|
iPort,
|
|
szUserName,
|
|
szPassword,
|
|
options
|
|
) {
|
|
var newOptions = { success: null, error: null };
|
|
m_utilsInc.extend(newOptions, options);
|
|
m_utilsInc.extend(newOptions, {
|
|
success: function (xmlDoc) {
|
|
_setDeviceInfo(
|
|
cgiInstance,
|
|
oDeviceInfo,
|
|
szIP,
|
|
iProtocol,
|
|
iPort,
|
|
szUserName,
|
|
szPassword
|
|
);
|
|
m_deviceSet.push(oDeviceInfo);
|
|
_initDeviceInfo(oDeviceInfo).then(() => {
|
|
if (options.success) {
|
|
options.success(xmlDoc);
|
|
}
|
|
});
|
|
},
|
|
error: function (oError) {
|
|
if (options.error) {
|
|
options.error(oError);
|
|
}
|
|
},
|
|
});
|
|
return cgiInstance.digestLogin(
|
|
szIP,
|
|
iProtocol,
|
|
iPort,
|
|
szUserName,
|
|
szPassword,
|
|
newOptions
|
|
);
|
|
};
|
|
this.I_SupportNoPlugin = function () {
|
|
return false;
|
|
};
|
|
this.I_Resize = function (iWidth, iHeight) {
|
|
return m_pluginOBJECT.JS_Resize(iWidth, iHeight);
|
|
};
|
|
this.I_InitPlugin = function (options) {
|
|
m_utilsInc.extend(m_options, options);
|
|
var szDirName = m_utilsInc.getDirName();
|
|
if (szDirName) {
|
|
if ("object" === typeof exports && typeof module !== "undefined") {
|
|
} else if ("function" === typeof define && define.amd) {
|
|
require([szDirName + "/jsVideoPlugin-1.0.0.min.js"], function (o) {
|
|
window.JSVideoPlugin = o.JSVideoPlugin;
|
|
if (options.cbInitPluginComplete) {
|
|
options.cbInitPluginComplete();
|
|
}
|
|
});
|
|
} else {
|
|
m_utilsInc.loadScript(
|
|
szDirName + "/jsVideoPlugin-1.0.0.min.js",
|
|
function () {
|
|
if (options.cbInitPluginComplete) {
|
|
options.cbInitPluginComplete();
|
|
}
|
|
}
|
|
);
|
|
}
|
|
}
|
|
window.addEventListener("resize", function () {
|
|
if (m_pluginOBJECT !== null) {
|
|
var oElem = $("#" + m_options.szContainerID);
|
|
m_pluginOBJECT.JS_Resize(oElem.width(), oElem.height());
|
|
}
|
|
});
|
|
window.addEventListener("unload", function () {});
|
|
};
|
|
this.I_InsertOBJECTPlugin = function (szContainerID) {
|
|
return _initPlugin(szContainerID);
|
|
};
|
|
this.I_WriteOBJECT_XHTML = function () {
|
|
return 0;
|
|
};
|
|
this.I_OpenFileDlg = async function (iType) {
|
|
let oPromise = new Promise(function (resolve, reject) {
|
|
m_pluginOBJECT.JS_OpenFileBrowser(iType, "").then(
|
|
(szFilePath) => {
|
|
resolve(szFilePath);
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_GetLocalCfg = function () {
|
|
let oPromise = new Promise(function (resolve, reject) {
|
|
m_pluginOBJECT.JS_GetLocalConfig().then(
|
|
(oLocalCofing) => {
|
|
resolve(oLocalCofing);
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_SetLocalCfg = function (oLocalCofing) {
|
|
let oPromise = new Promise(function (resolve, reject) {
|
|
m_pluginOBJECT.JS_SetLocalConfig(oLocalCofing).then(
|
|
() => {
|
|
resolve();
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_Login = function (
|
|
szIP,
|
|
iProtocol,
|
|
iPort,
|
|
szUserName,
|
|
szPassword,
|
|
options
|
|
) {
|
|
let oPromise = new Promise(function (resolve, reject) {
|
|
var szDeviceIdentify = szIP + "_" + iPort;
|
|
var iIndex = this.findDeviceIndexByIP(szDeviceIdentify);
|
|
if (iIndex != -1) {
|
|
if (options.error) {
|
|
options.error({
|
|
errorCode: ERROR_CODE_LOGIN_REPEATLOGIN,
|
|
errorMsg: "The device is already login.",
|
|
});
|
|
}
|
|
reject({
|
|
errorCode: ERROR_CODE_LOGIN_REPEATLOGIN,
|
|
errorMsg: "The device is already login.",
|
|
});
|
|
return;
|
|
}
|
|
var cgiInstance = m_ISAPIProtocol;
|
|
var oDeviceInfo = new deviceInfoClass();
|
|
_doLogin(
|
|
cgiInstance,
|
|
oDeviceInfo,
|
|
szIP,
|
|
iProtocol,
|
|
iPort,
|
|
szUserName,
|
|
szPassword,
|
|
options
|
|
).then(
|
|
() => {
|
|
resolve();
|
|
},
|
|
(oError) => {
|
|
reject(oError);
|
|
}
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_Logout = function (szDeviceIdentify) {
|
|
let oPromise = new Promise(function (resolve, reject) {
|
|
var iIndex = this.findDeviceIndexByIP(szDeviceIdentify);
|
|
if (iIndex != -1) {
|
|
m_deviceSet.splice(iIndex, 1);
|
|
resolve();
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_GetAudioInfo = function (szDeviceIdentify, options) {
|
|
let oPromise = new Promise(function (resolve, reject) {
|
|
var iIndex = this.findDeviceIndexByIP(szDeviceIdentify);
|
|
if (iIndex != -1) {
|
|
var oDeviceInfo = m_deviceSet[iIndex];
|
|
oDeviceInfo.oProtocolInc.getAudioInfo(oDeviceInfo, options).then(
|
|
(oData) => {
|
|
resolve(oData);
|
|
},
|
|
(oError) => {
|
|
reject(oError);
|
|
}
|
|
);
|
|
} else {
|
|
reject(_oNoLoginError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_GetDeviceInfo = function (szDeviceIdentify, options) {
|
|
let oPromise = new Promise(function (resolve, reject) {
|
|
var iIndex = this.findDeviceIndexByIP(szDeviceIdentify);
|
|
if (iIndex != -1) {
|
|
var oDeviceInfo = m_deviceSet[iIndex];
|
|
oDeviceInfo.oProtocolInc.getDeviceInfo(oDeviceInfo, options).then(
|
|
(oData) => {
|
|
resolve(oData);
|
|
},
|
|
(oError) => {
|
|
reject(oError);
|
|
}
|
|
);
|
|
} else {
|
|
reject(_oNoLoginError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_GetAnalogChannelInfo = function (szDeviceIdentify, options) {
|
|
let oPromise = new Promise(function (resolve, reject) {
|
|
var iIndex = this.findDeviceIndexByIP(szDeviceIdentify);
|
|
if (iIndex != -1) {
|
|
var oDeviceInfo = m_deviceSet[iIndex];
|
|
oDeviceInfo.oProtocolInc
|
|
.getAnalogChannelInfo(oDeviceInfo, options)
|
|
.then(
|
|
(oData) => {
|
|
resolve(oData);
|
|
},
|
|
(oError) => {
|
|
reject(oError);
|
|
}
|
|
);
|
|
} else {
|
|
reject(_oNoLoginError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_GetDigitalChannelInfo = function (szDeviceIdentify, options) {
|
|
let oPromise = new Promise(function (resolve, reject) {
|
|
var iIndex = this.findDeviceIndexByIP(szDeviceIdentify);
|
|
if (iIndex != -1) {
|
|
var oDeviceInfo = m_deviceSet[iIndex];
|
|
oDeviceInfo.oProtocolInc
|
|
.getDigitalChannelInfo(oDeviceInfo, options)
|
|
.then(
|
|
(oData) => {
|
|
resolve(oData);
|
|
},
|
|
(oError) => {
|
|
reject(oError);
|
|
}
|
|
);
|
|
} else {
|
|
reject(_oNoLoginError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_GetZeroChannelInfo = function (szDeviceIdentify, options) {
|
|
let oPromise = new Promise(function (resolve, reject) {
|
|
var iIndex = this.findDeviceIndexByIP(szDeviceIdentify);
|
|
if (iIndex != -1) {
|
|
var oDeviceInfo = m_deviceSet[iIndex];
|
|
oDeviceInfo.oProtocolInc
|
|
.getZeroChannelInfo(oDeviceInfo, options)
|
|
.then(
|
|
(oData) => {
|
|
resolve(oData);
|
|
},
|
|
(oError) => {
|
|
reject(oError);
|
|
}
|
|
);
|
|
} else {
|
|
reject(_oNoLoginError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_StartRealPlay = function (szDeviceIdentify, options) {
|
|
let oPromise = new Promise(function (resolve, reject) {
|
|
var iIndex = this.findDeviceIndexByIP(szDeviceIdentify);
|
|
var newOptions = {
|
|
iWndIndex: m_iSelWnd,
|
|
iStreamType: 1,
|
|
iChannelID: 1,
|
|
bZeroChannel: false,
|
|
};
|
|
m_utilsInc.extend(newOptions, options);
|
|
if (iIndex != -1) {
|
|
var oDeviceInfo = m_deviceSet[iIndex];
|
|
var iWndIndex = this.findWndIndexByIndex(newOptions.iWndIndex);
|
|
if (-1 == iWndIndex) {
|
|
oDeviceInfo.oProtocolInc
|
|
.startRealPlay(oDeviceInfo, newOptions)
|
|
.then(
|
|
function () {
|
|
if (options.success) {
|
|
options.success();
|
|
}
|
|
resolve();
|
|
},
|
|
function () {
|
|
if (options.error) {
|
|
options.error(_oUnKnownError);
|
|
}
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
} else {
|
|
reject({
|
|
errorCode: ERROR_CODE_PLAY_NOREPEATPLAY,
|
|
errorMsg: "The window is already playing.",
|
|
});
|
|
}
|
|
} else {
|
|
if (options.error) {
|
|
options.error(_oNoLoginError);
|
|
}
|
|
reject(_oNoLoginError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_StartPlay = function (szDeviceIdentify, options) {
|
|
let oPromise = new Promise(async function (resolve, reject) {
|
|
var iIndex = this.findDeviceIndexByIP(szDeviceIdentify);
|
|
var newOptions = { iWndIndex: m_iSelWnd };
|
|
m_utilsInc.extend(newOptions, options);
|
|
var oDeviceInfo = m_deviceSet[iIndex];
|
|
iIndex = this.findWndIndexByIndex(newOptions.iWndIndex);
|
|
if (-1 == iIndex) {
|
|
oDeviceInfo.oProtocolInc.startPlay(oDeviceInfo, newOptions).then(
|
|
function () {
|
|
if (options.success) {
|
|
options.success();
|
|
}
|
|
resolve();
|
|
},
|
|
function () {
|
|
if (options.error) {
|
|
options.error(_oUnKnownError);
|
|
}
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
} else {
|
|
reject({
|
|
errorCode: ERROR_CODE_PLAY_NOREPEATPLAY,
|
|
errorMsg: "The window is already playing.",
|
|
});
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_SetSecretKey = function (szSecretKey) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
m_pluginOBJECT.JS_SetSecretKey(0, szSecretKey, 1).then(
|
|
() => {
|
|
resolve();
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_GetEncryptString = function (szSecretKey) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
m_pluginOBJECT.JS_GetEncryptString(3, szSecretKey).then(
|
|
(szEncode) => {
|
|
resolve(szEncode);
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_Stop = function (options) {
|
|
let oPromise = new Promise(async function (resolve, reject) {
|
|
var newOptions = { iWndIndex: m_iSelWnd };
|
|
if (m_utilsInc.isObject(options)) {
|
|
m_utilsInc.extend(newOptions, options);
|
|
} else {
|
|
if (!m_utilsInc.isUndefined(options)) {
|
|
newOptions.iWndIndex = options;
|
|
}
|
|
}
|
|
var iIndex = this.findWndIndexByIndex(newOptions.iWndIndex);
|
|
if (iIndex != -1) {
|
|
var wndInfo = m_wndSet[iIndex];
|
|
if (wndInfo.bRecord) {
|
|
m_pluginOBJECT.JS_StopSave(wndInfo.iIndex);
|
|
}
|
|
if (wndInfo.bSound) {
|
|
m_pluginOBJECT.JS_CloseSound();
|
|
}
|
|
if (wndInfo.bEZoom) {
|
|
m_pluginOBJECT.JS_DisableZoom(wndInfo.iIndex);
|
|
}
|
|
m_pluginOBJECT.JS_Stop(newOptions.iWndIndex).then(
|
|
() => {
|
|
m_wndSet.splice(iIndex, 1);
|
|
if (newOptions.success) {
|
|
newOptions.success();
|
|
}
|
|
resolve();
|
|
},
|
|
() => {
|
|
if (newOptions.error) {
|
|
newOptions.error(_oUnKnownError);
|
|
}
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
} else {
|
|
resolve();
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_StopAllPlay = function () {
|
|
let oPromise = new Promise(async function (resolve, reject) {
|
|
m_pluginOBJECT.JS_StopRealPlayAll().then(
|
|
() => {
|
|
m_wndSet.length = 0;
|
|
resolve();
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_OpenSound = function (iWndIndex) {
|
|
iWndIndex = m_utilsInc.isUndefined(iWndIndex) ? m_iSelWnd : iWndIndex;
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
var iIndex = this.findWndIndexByIndex(iWndIndex);
|
|
if (iIndex != -1) {
|
|
var wndInfo = m_wndSet[iIndex];
|
|
if (!wndInfo.bSound) {
|
|
m_pluginOBJECT.JS_OpenSound(iWndIndex).then(
|
|
() => {
|
|
wndInfo.bSound = true;
|
|
resolve();
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
} else {
|
|
reject(_oUnKnownError);
|
|
}
|
|
} else {
|
|
reject(_oUnKnownError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_CloseSound = function (iWndIndex) {
|
|
iWndIndex = m_utilsInc.isUndefined(iWndIndex) ? m_iSelWnd : iWndIndex;
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
var iIndex = this.findWndIndexByIndex(iWndIndex);
|
|
if (iIndex != -1) {
|
|
var wndInfo = m_wndSet[iIndex];
|
|
if (wndInfo.bSound) {
|
|
m_pluginOBJECT.JS_CloseSound().then(
|
|
() => {
|
|
wndInfo.bSound = false;
|
|
resolve();
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
} else {
|
|
reject(_oUnKnownError);
|
|
}
|
|
} else {
|
|
reject(_oUnKnownError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_SetVolume = function (iVolume, iWndIndex) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
var iRet = -1;
|
|
iVolume = parseInt(iVolume, 10);
|
|
if (isNaN(iVolume)) {
|
|
reject(_oParamsError);
|
|
return;
|
|
}
|
|
if (iVolume < 0 || iVolume > 100) {
|
|
reject(_oParamsError);
|
|
return;
|
|
}
|
|
iWndIndex = m_utilsInc.isUndefined(iWndIndex) ? m_iSelWnd : iWndIndex;
|
|
var iIndex = this.findWndIndexByIndex(iWndIndex);
|
|
if (iIndex != -1) {
|
|
m_pluginOBJECT.JS_SetVolume(iWndIndex, iVolume).then(
|
|
() => {
|
|
resolve();
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
} else {
|
|
reject(_oUnKnownError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_CapturePic = function (szPicName, options) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
var newOptions = { iWndIndex: m_iSelWnd, bDateDir: true };
|
|
if (m_utilsInc.isObject(options)) {
|
|
m_utilsInc.extend(newOptions, options);
|
|
} else {
|
|
if (!m_utilsInc.isUndefined(options)) {
|
|
newOptions.iWndIndex = options;
|
|
}
|
|
}
|
|
var iIndex = this.findWndIndexByIndex(newOptions.iWndIndex);
|
|
if (iIndex != -1) {
|
|
if (".jpg" === szPicName.slice(-4).toLowerCase()) {
|
|
szPicName = szPicName.slice(0, -4);
|
|
} else if (".jpeg" === szPicName.slice(-5).toLowerCase()) {
|
|
szPicName = szPicName.slice(0, -5);
|
|
}
|
|
m_pluginOBJECT
|
|
.JS_CapturePicture(
|
|
newOptions.iWndIndex,
|
|
szPicName,
|
|
newOptions.bDateDir
|
|
)
|
|
.then(
|
|
() => {
|
|
resolve();
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
} else {
|
|
reject(_oUnKnownError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_CapturePicData = function (options) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
var newOptions = { iWndIndex: m_iSelWnd, bDateDir: true };
|
|
if (m_utilsInc.isObject(options)) {
|
|
m_utilsInc.extend(newOptions, options);
|
|
} else {
|
|
if (!m_utilsInc.isUndefined(options)) {
|
|
newOptions.iWndIndex = options;
|
|
}
|
|
}
|
|
var iIndex = this.findWndIndexByIndex(newOptions.iWndIndex);
|
|
if (iIndex != -1) {
|
|
m_pluginOBJECT.JS_GetCaptureData(newOptions.iWndIndex).then(
|
|
function (data) {
|
|
resolve(data);
|
|
},
|
|
function (data) {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
} else {
|
|
reject(_oUnKnownError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_StartRecord = function (szFileName, options) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
var newOptions = { iWndIndex: m_iSelWnd, bDateDir: true };
|
|
if (m_utilsInc.isObject(options)) {
|
|
m_utilsInc.extend(newOptions, options);
|
|
} else {
|
|
if (!m_utilsInc.isUndefined(options)) {
|
|
newOptions.iWndIndex = options;
|
|
}
|
|
}
|
|
var iIndex = this.findWndIndexByIndex(newOptions.iWndIndex);
|
|
if (iIndex != -1) {
|
|
var wndInfo = m_wndSet[iIndex];
|
|
if (!wndInfo.bRecord) {
|
|
m_pluginOBJECT.JS_StartSave(newOptions.iWndIndex, szFileName).then(
|
|
function () {
|
|
wndInfo.bRecord = true;
|
|
if (newOptions.success) {
|
|
newOptions.success();
|
|
}
|
|
resolve();
|
|
},
|
|
function () {
|
|
if (newOptions.error) {
|
|
newOptions.error(_oUnKnownError);
|
|
}
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
} else {
|
|
if (newOptions.error) {
|
|
newOptions.error(_oUnKnownError);
|
|
}
|
|
reject(_oUnKnownError);
|
|
}
|
|
} else {
|
|
if (newOptions.error) {
|
|
newOptions.error(_oUnKnownError);
|
|
}
|
|
reject(_oUnKnownError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_StopRecord = function (options) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
var newOptions = { iWndIndex: m_iSelWnd };
|
|
if (m_utilsInc.isObject(options)) {
|
|
m_utilsInc.extend(newOptions, options);
|
|
} else {
|
|
if (!m_utilsInc.isUndefined(options)) {
|
|
newOptions.iWndIndex = options;
|
|
}
|
|
}
|
|
var iIndex = this.findWndIndexByIndex(newOptions.iWndIndex);
|
|
if (iIndex != -1) {
|
|
var wndInfo = m_wndSet[iIndex];
|
|
if (wndInfo.bRecord) {
|
|
m_pluginOBJECT.JS_StopSave(newOptions.iWndIndex).then(
|
|
function () {
|
|
wndInfo.bRecord = false;
|
|
if (newOptions.success) {
|
|
newOptions.success();
|
|
}
|
|
resolve();
|
|
},
|
|
function () {
|
|
if (newOptions.error) {
|
|
newOptions.error(_oUnKnownError);
|
|
}
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
} else {
|
|
if (newOptions.error) {
|
|
newOptions.error(_oUnKnownError);
|
|
}
|
|
reject(_oUnKnownError);
|
|
}
|
|
} else {
|
|
if (newOptions.error) {
|
|
newOptions.error(_oUnKnownError);
|
|
}
|
|
reject(_oUnKnownError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_StartVoiceTalk = function (szDeviceIdentify, iAudioChannel) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
if (isNaN(parseInt(iAudioChannel, 10))) {
|
|
reject(_oParamsError);
|
|
return;
|
|
}
|
|
var iIndex = this.findDeviceIndexByIP(szDeviceIdentify);
|
|
if (iIndex != -1) {
|
|
var oDeviceInfo = m_deviceSet[iIndex];
|
|
if (!oDeviceInfo.bVoiceTalk) {
|
|
oDeviceInfo.oProtocolInc
|
|
.startVoiceTalk(oDeviceInfo, iAudioChannel)
|
|
.then(
|
|
() => {
|
|
m_deviceSet[iIndex].bVoiceTalk = true;
|
|
resolve();
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
} else {
|
|
reject(_oUnKnownError);
|
|
}
|
|
} else {
|
|
reject(_oUnKnownError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_StopVoiceTalk = function () {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
m_pluginOBJECT.JS_StopTalk().then(
|
|
() => {
|
|
for (var i = 0, iLen = m_deviceSet.length; i < iLen; i++) {
|
|
if (m_deviceSet[i].bVoiceTalk) {
|
|
m_deviceSet[i].bVoiceTalk = false;
|
|
break;
|
|
}
|
|
}
|
|
resolve();
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_StartAudioPlay = function (szDeviceIdentify, options) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
var iIndex = this.findDeviceIndexByIP(szDeviceIdentify);
|
|
if (iIndex != -1) {
|
|
var oDeviceInfo = m_deviceSet[iIndex];
|
|
options.szAuth = oDeviceInfo.szAuth;
|
|
if (!oDeviceInfo.bVoiceTalk) {
|
|
oDeviceInfo.oProtocolInc.audioPlay(options).then(
|
|
() => {
|
|
m_deviceSet[iIndex].bVoiceTalk = true;
|
|
resolve();
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
} else {
|
|
reject(_oUnKnownError);
|
|
}
|
|
} else {
|
|
reject(_oUnKnownError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_StopAudioPlay = function () {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
m_pluginOBJECT.JS_StopAudioPlay().then(
|
|
() => {
|
|
for (var i = 0, iLen = m_deviceSet.length; i < iLen; i++) {
|
|
if (m_deviceSet[i].bVoiceTalk) {
|
|
m_deviceSet[i].bVoiceTalk = false;
|
|
break;
|
|
}
|
|
}
|
|
resolve();
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_PTZControl = function (iPTZIndex, bStop, options) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
var newOptions = {
|
|
iWndIndex: m_iSelWnd,
|
|
iPTZIndex: iPTZIndex,
|
|
iPTZSpeed: 4,
|
|
};
|
|
m_utilsInc.extend(newOptions, options);
|
|
var iIndex = this.findWndIndexByIndex(newOptions.iWndIndex);
|
|
if (iIndex != -1) {
|
|
var wndInfo = m_wndSet[iIndex];
|
|
iIndex = this.findDeviceIndexByIP(wndInfo.szIP);
|
|
if (iIndex != -1) {
|
|
var oDeviceInfo = m_deviceSet[iIndex];
|
|
if (9 == iPTZIndex) {
|
|
oDeviceInfo.oProtocolInc
|
|
.ptzAutoControl(oDeviceInfo, bStop, wndInfo, newOptions)
|
|
.then(
|
|
() => {
|
|
resolve();
|
|
},
|
|
(oError) => {
|
|
reject(oError);
|
|
}
|
|
);
|
|
} else {
|
|
oDeviceInfo.oProtocolInc
|
|
.ptzControl(oDeviceInfo, bStop, wndInfo, newOptions)
|
|
.then(
|
|
() => {
|
|
resolve();
|
|
},
|
|
(oError) => {
|
|
reject(oError);
|
|
}
|
|
);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_EnableEZoom = function (iWndIndex) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
iWndIndex = m_utilsInc.isUndefined(iWndIndex) ? m_iSelWnd : iWndIndex;
|
|
var iIndex = this.findWndIndexByIndex(iWndIndex);
|
|
if (iIndex != -1) {
|
|
var wndInfo = m_wndSet[iIndex];
|
|
if (!wndInfo.bEZoom) {
|
|
m_pluginOBJECT.JS_EnableZoom(iWndIndex).then(
|
|
() => {
|
|
wndInfo.bEZoom = true;
|
|
resolve();
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
}
|
|
} else {
|
|
reject(_oUnKnownError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_DisableEZoom = function (iWndIndex) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
iWndIndex = m_utilsInc.isUndefined(iWndIndex) ? m_iSelWnd : iWndIndex;
|
|
var iIndex = this.findWndIndexByIndex(iWndIndex);
|
|
if (iIndex != -1) {
|
|
var wndInfo = m_wndSet[iIndex];
|
|
if (wndInfo.bEZoom) {
|
|
m_pluginOBJECT.JS_DisableZoom(iWndIndex).then(
|
|
() => {
|
|
wndInfo.bEZoom = false;
|
|
resolve();
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
} else {
|
|
resolve();
|
|
}
|
|
} else {
|
|
reject(_oUnKnownError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_Enable3DZoom = function (iWndIndex) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
iWndIndex = m_utilsInc.isUndefined(iWndIndex) ? m_iSelWnd : iWndIndex;
|
|
var iIndex = this.findWndIndexByIndex(iWndIndex);
|
|
if (iIndex != -1) {
|
|
var wndInfo = m_wndSet[iIndex];
|
|
if (!wndInfo.b3DZoom) {
|
|
m_pluginOBJECT.JS_SetDrawCallback(
|
|
iWndIndex,
|
|
true,
|
|
"Rect",
|
|
false,
|
|
function (oRect) {
|
|
_onZoomInfoCallback(oRect.points);
|
|
}
|
|
);
|
|
wndInfo.b3DZoom = true;
|
|
resolve();
|
|
} else {
|
|
resolve();
|
|
}
|
|
} else {
|
|
reject(_oUnKnownError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_Disable3DZoom = function (iWndIndex) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
iWndIndex = m_utilsInc.isUndefined(iWndIndex) ? m_iSelWnd : iWndIndex;
|
|
var iIndex = this.findWndIndexByIndex(iWndIndex);
|
|
if (iIndex != -1) {
|
|
var wndInfo = m_wndSet[iIndex];
|
|
if (wndInfo.b3DZoom) {
|
|
m_pluginOBJECT.JS_SetDrawCallback(
|
|
iWndIndex,
|
|
false,
|
|
"Rect",
|
|
false,
|
|
function () {}
|
|
);
|
|
wndInfo.b3DZoom = false;
|
|
resolve();
|
|
} else {
|
|
resolve();
|
|
}
|
|
} else {
|
|
reject(_oUnKnownError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_FullScreen = function (bFull) {
|
|
let oPromise = new Promise(function (resolve, reject) {
|
|
m_pluginOBJECT.JS_FullScreenDisplay(bFull).then(
|
|
() => {
|
|
resolve();
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_SetPreset = function (iPresetID, options) {
|
|
let oPromise = new Promise(function (resolve, reject) {
|
|
var newOptions = { iWndIndex: m_iSelWnd, iPresetID: iPresetID };
|
|
m_utilsInc.extend(newOptions, options);
|
|
var iIndex = this.findWndIndexByIndex(newOptions.iWndIndex);
|
|
if (iIndex != -1) {
|
|
var wndInfo = m_wndSet[iIndex];
|
|
iIndex = this.findDeviceIndexByIP(wndInfo.szIP);
|
|
if (iIndex != -1) {
|
|
var oDeviceInfo = m_deviceSet[iIndex];
|
|
oDeviceInfo.oProtocolInc
|
|
.setPreset(oDeviceInfo, wndInfo, newOptions)
|
|
.then(
|
|
() => {
|
|
resolve();
|
|
},
|
|
(oError) => {
|
|
reject(oError);
|
|
}
|
|
);
|
|
} else {
|
|
reject(_oUnKnownError);
|
|
}
|
|
} else {
|
|
reject(_oUnKnownError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_GoPreset = function (iPresetID, options) {
|
|
let oPromise = new Promise(async function (resolve, reject) {
|
|
var newOptions = { iWndIndex: m_iSelWnd, iPresetID: iPresetID };
|
|
m_utilsInc.extend(newOptions, options);
|
|
var iIndex = this.findWndIndexByIndex(newOptions.iWndIndex);
|
|
if (iIndex != -1) {
|
|
var wndInfo = m_wndSet[iIndex];
|
|
iIndex = this.findDeviceIndexByIP(wndInfo.szIP);
|
|
if (iIndex != -1) {
|
|
var oDeviceInfo = m_deviceSet[iIndex];
|
|
oDeviceInfo.oProtocolInc
|
|
.goPreset(oDeviceInfo, wndInfo, newOptions)
|
|
.then(
|
|
() => {
|
|
resolve();
|
|
},
|
|
(oError) => {
|
|
reject(oError);
|
|
}
|
|
);
|
|
} else {
|
|
reject(_oUnKnownError);
|
|
}
|
|
} else {
|
|
reject(_oUnKnownError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_RecordSearch = function (
|
|
szDeviceIdentify,
|
|
iChannelID,
|
|
szStartTime,
|
|
szEndTime,
|
|
options
|
|
) {
|
|
let oPromise = new Promise(async function (resolve, reject) {
|
|
var iIndex = this.findDeviceIndexByIP(szDeviceIdentify);
|
|
if (iIndex != -1) {
|
|
var oDeviceInfo = m_deviceSet[iIndex];
|
|
if (
|
|
oDeviceInfo.szDeviceType === DEVICE_TYPE_IPCAMERA ||
|
|
oDeviceInfo.szDeviceType === DEVICE_TYPE_IPDOME ||
|
|
oDeviceInfo.szDeviceType === DEVICE_TYPE_IPZOOM
|
|
) {
|
|
szStartTime = m_utilsInc.convertToUTCTime(szStartTime);
|
|
szEndTime = m_utilsInc.convertToUTCTime(szEndTime);
|
|
}
|
|
var newOptions = {
|
|
iChannelID: iChannelID,
|
|
szStartTime: szStartTime,
|
|
szEndTime: szEndTime,
|
|
iSearchPos: 0,
|
|
iStreamType: 1,
|
|
};
|
|
m_utilsInc.extend(newOptions, options);
|
|
newOptions.success = null;
|
|
oDeviceInfo.oProtocolInc.recordSearch(oDeviceInfo, newOptions).then(
|
|
(oData) => {
|
|
if (
|
|
oDeviceInfo.szDeviceType === DEVICE_TYPE_IPCAMERA ||
|
|
oDeviceInfo.szDeviceType === DEVICE_TYPE_IPDOME ||
|
|
oDeviceInfo.szDeviceType === DEVICE_TYPE_IPZOOM
|
|
) {
|
|
var szRecordStartTime = "";
|
|
var szRecordEndTime = "";
|
|
for (
|
|
var i = 0, nLen = $(oData).find("searchMatchItem").length;
|
|
i < nLen;
|
|
i++
|
|
) {
|
|
szRecordStartTime = $(oData).find("startTime").eq(i).text();
|
|
szRecordEndTime = $(oData).find("endTime").eq(i).text();
|
|
szRecordStartTime = m_utilsInc.convertToLocalTime(
|
|
szRecordStartTime,
|
|
oDeviceInfo.iDeviceMinusLocalTime
|
|
);
|
|
szRecordEndTime = m_utilsInc.convertToLocalTime(
|
|
szRecordEndTime,
|
|
oDeviceInfo.iDeviceMinusLocalTime
|
|
);
|
|
$(oData).find("startTime").eq(i).text(szRecordStartTime);
|
|
$(oData).find("endTime").eq(i).text(szRecordEndTime);
|
|
}
|
|
}
|
|
if (options.success) {
|
|
options.success(oData);
|
|
}
|
|
resolve(oData);
|
|
},
|
|
(oError) => {
|
|
reject(oError);
|
|
}
|
|
);
|
|
} else {
|
|
reject(_oNoLoginError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_StartPlayback = function (szDeviceIdentify, options) {
|
|
let oPromise = new Promise(function (resolve, reject) {
|
|
var iIndex = this.findDeviceIndexByIP(szDeviceIdentify),
|
|
cgi = "",
|
|
urlProtocol = "",
|
|
iChannelID = 1,
|
|
iStream = 0;
|
|
var szCurTime = m_utilsInc.dateFormat(new Date(), "yyyy-MM-dd");
|
|
var newOptions = {
|
|
iWndIndex: m_iSelWnd,
|
|
iStreamType: 1,
|
|
iChannelID: 1,
|
|
szStartTime: szCurTime + " 00:00:00",
|
|
szEndTime: szCurTime + " 23:59:59",
|
|
};
|
|
m_utilsInc.extend(newOptions, options);
|
|
if (iIndex != -1) {
|
|
var oDeviceInfo = m_deviceSet[iIndex];
|
|
cgi = oDeviceInfo.oProtocolInc.CGI.startPlayback;
|
|
urlProtocol = "rtsp://";
|
|
iStream = newOptions.iStreamType;
|
|
iChannelID = newOptions.iChannelID * 100 + iStream;
|
|
m_utilsInc.extend(newOptions, {
|
|
urlProtocol: urlProtocol,
|
|
cgi: cgi,
|
|
iChannelID: iChannelID,
|
|
});
|
|
iIndex = this.findWndIndexByIndex(newOptions.iWndIndex);
|
|
if (-1 == iIndex) {
|
|
if (
|
|
oDeviceInfo.szDeviceType === DEVICE_TYPE_IPCAMERA ||
|
|
oDeviceInfo.szDeviceType === DEVICE_TYPE_IPDOME ||
|
|
oDeviceInfo.szDeviceType === DEVICE_TYPE_IPZOOM
|
|
) {
|
|
newOptions.szStartTime = m_utilsInc.convertToUTCTime(
|
|
newOptions.szStartTime
|
|
);
|
|
newOptions.szEndTime = m_utilsInc.convertToUTCTime(
|
|
newOptions.szEndTime
|
|
);
|
|
}
|
|
newOptions.szStartTime =
|
|
newOptions.szStartTime.replace(/[-:]/g, "").replace(" ", "T") +
|
|
"Z";
|
|
newOptions.szEndTime =
|
|
newOptions.szEndTime.replace(/[-:]/g, "").replace(" ", "T") + "Z";
|
|
oDeviceInfo.oProtocolInc
|
|
.startPlayback(oDeviceInfo, newOptions)
|
|
.then(
|
|
function () {
|
|
if (options.success) {
|
|
options.success();
|
|
}
|
|
resolve();
|
|
},
|
|
function () {
|
|
if (options.error) {
|
|
options.error(_oUnKnownError);
|
|
}
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
}
|
|
} else {
|
|
if (options.error) {
|
|
options.error(_oNoLoginError);
|
|
}
|
|
reject(_oNoLoginError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_ReversePlayback = function (szDeviceIdentify, options) {
|
|
let oPromise = new Promise(function (resolve, reject) {
|
|
var iIndex = this.findDeviceIndexByIP(szDeviceIdentify),
|
|
iRet = -1,
|
|
cgi = "",
|
|
urlProtocol = "",
|
|
iPort = -1,
|
|
iChannelID = -1,
|
|
iStream = 0;
|
|
var szCurTime = m_utilsInc.dateFormat(new Date(), "yyyy-MM-dd");
|
|
var newOptions = {
|
|
iWndIndex: m_iSelWnd,
|
|
iStreamType: 1,
|
|
iChannelID: 1,
|
|
szStartTime: szCurTime + " 00:00:00",
|
|
szEndTime: szCurTime + " 23:59:59",
|
|
};
|
|
m_utilsInc.extend(newOptions, options);
|
|
if (iIndex != -1) {
|
|
var oDeviceInfo = m_deviceSet[iIndex];
|
|
var iProtocolType = parseInt(m_oLocalCfg.protocolType, 10);
|
|
cgi = oDeviceInfo.oProtocolInc.CGI.startPlayback;
|
|
urlProtocol = "rtsp://";
|
|
iStream = newOptions.iStreamType;
|
|
iChannelID = newOptions.iChannelID * 100 + iStream;
|
|
m_utilsInc.extend(newOptions, {
|
|
urlProtocol: urlProtocol,
|
|
cgi: cgi,
|
|
iChannelID: iChannelID,
|
|
});
|
|
iIndex = this.findWndIndexByIndex(newOptions.iWndIndex);
|
|
if (-1 == iIndex) {
|
|
newOptions.szStartTime =
|
|
newOptions.szStartTime.replace(/[-:]/g, "").replace(" ", "T") +
|
|
"Z";
|
|
newOptions.szEndTime =
|
|
newOptions.szEndTime.replace(/[-:]/g, "").replace(" ", "T") + "Z";
|
|
oDeviceInfo.oProtocolInc
|
|
.reversePlayback(oDeviceInfo, newOptions)
|
|
.then(
|
|
function () {
|
|
if (options.success) {
|
|
options.success();
|
|
}
|
|
resolve();
|
|
},
|
|
function () {
|
|
if (options.error) {
|
|
options.error(_oUnKnownError);
|
|
}
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
}
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_Frame = function (options) {
|
|
let oPromise = new Promise(async function (resolve, reject) {
|
|
var newOptions = { iWndIndex: m_iSelWnd };
|
|
if (m_utilsInc.isObject(options)) {
|
|
m_utilsInc.extend(newOptions, options);
|
|
} else {
|
|
if (!m_utilsInc.isUndefined(options)) {
|
|
newOptions.iWndIndex = options;
|
|
}
|
|
}
|
|
var iIndex = this.findWndIndexByIndex(newOptions.iWndIndex);
|
|
if (iIndex != -1) {
|
|
var wndInfo = m_wndSet[iIndex],
|
|
iPlayStatus = wndInfo.iPlayStatus;
|
|
if (
|
|
iPlayStatus == PLAY_STATUS_PLAYBACK ||
|
|
iPlayStatus == PLAY_STATUS_FRAME
|
|
) {
|
|
m_pluginOBJECT.JS_FrameForward(newOptions.iWndIndex).then(
|
|
function () {
|
|
wndInfo.iPlayStatus = PLAY_STATUS_FRAME;
|
|
if (newOptions.success) {
|
|
newOptions.success();
|
|
}
|
|
resolve();
|
|
},
|
|
function () {
|
|
if (newOptions.error) {
|
|
newOptions.error(_oUnKnownError);
|
|
}
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
} else {
|
|
if (newOptions.error) {
|
|
newOptions.error(_oUnKnownError);
|
|
}
|
|
reject(_oUnKnownError);
|
|
}
|
|
} else {
|
|
if (newOptions.error) {
|
|
newOptions.error(_oUnKnownError);
|
|
}
|
|
reject(_oUnKnownError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_Pause = function (options) {
|
|
let oPromise = new Promise(async function (resolve, reject) {
|
|
var newOptions = { iWndIndex: m_iSelWnd };
|
|
if (m_utilsInc.isObject(options)) {
|
|
m_utilsInc.extend(newOptions, options);
|
|
} else {
|
|
if (!m_utilsInc.isUndefined(options)) {
|
|
newOptions.iWndIndex = options;
|
|
}
|
|
}
|
|
var iIndex = this.findWndIndexByIndex(newOptions.iWndIndex);
|
|
if (iIndex != -1) {
|
|
var wndInfo = m_wndSet[iIndex],
|
|
iPlayStatus = wndInfo.iPlayStatus,
|
|
iNextStatus = -1;
|
|
if (iPlayStatus == PLAY_STATUS_PLAYBACK) {
|
|
iNextStatus = PLAY_STATUS_PAUSE;
|
|
} else if (iPlayStatus == PLAY_STATUS_REVERSE_PLAYBACK) {
|
|
iNextStatus = PLAY_STATUS_REVERSE_PAUSE;
|
|
} else {
|
|
if (newOptions.error) {
|
|
newOptions.error(_oUnKnownError);
|
|
}
|
|
reject(_oUnKnownError);
|
|
return;
|
|
}
|
|
m_pluginOBJECT.JS_Pause(newOptions.iWndIndex).then(
|
|
function () {
|
|
wndInfo.iPlayStatus = iNextStatus;
|
|
if (newOptions.success) {
|
|
newOptions.success();
|
|
}
|
|
resolve();
|
|
},
|
|
function () {
|
|
if (newOptions.error) {
|
|
newOptions.error(_oUnKnownError);
|
|
}
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
} else {
|
|
if (newOptions.error) {
|
|
newOptions.error(_oUnKnownError);
|
|
}
|
|
reject(_oUnKnownError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_Resume = function (options) {
|
|
let oPromise = new Promise(async function (resolve, reject) {
|
|
var newOptions = { iWndIndex: m_iSelWnd };
|
|
if (m_utilsInc.isObject(options)) {
|
|
m_utilsInc.extend(newOptions, options);
|
|
} else {
|
|
if (!m_utilsInc.isUndefined(options)) {
|
|
newOptions.iWndIndex = options;
|
|
}
|
|
}
|
|
var iIndex = this.findWndIndexByIndex(newOptions.iWndIndex);
|
|
if (iIndex != -1) {
|
|
var wndInfo = m_wndSet[iIndex],
|
|
iPlayStatus = wndInfo.iPlayStatus,
|
|
iNextStatus = -1;
|
|
if (
|
|
iPlayStatus == PLAY_STATUS_PAUSE ||
|
|
iPlayStatus == PLAY_STATUS_FRAME
|
|
) {
|
|
iNextStatus = PLAY_STATUS_PLAYBACK;
|
|
} else if (iPlayStatus == PLAY_STATUS_REVERSE_PAUSE) {
|
|
iNextStatus = PLAY_STATUS_REVERSE_PLAYBACK;
|
|
} else {
|
|
if (newOptions.error) {
|
|
newOptions.error(_oUnKnownError);
|
|
}
|
|
reject(_oUnKnownError);
|
|
return;
|
|
}
|
|
m_pluginOBJECT.JS_Resume(newOptions.iWndIndex).then(
|
|
function () {
|
|
wndInfo.iPlayStatus = iNextStatus;
|
|
if (newOptions.success) {
|
|
newOptions.success();
|
|
}
|
|
resolve();
|
|
},
|
|
function () {
|
|
if (newOptions.error) {
|
|
newOptions.error(_oUnKnownError);
|
|
}
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
} else {
|
|
if (newOptions.error) {
|
|
newOptions.error(_oUnKnownError);
|
|
}
|
|
reject(_oUnKnownError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_PlaySlow = function (options) {
|
|
let oPromise = new Promise(async function (resolve, reject) {
|
|
var newOptions = { iWndIndex: m_iSelWnd };
|
|
if (m_utilsInc.isObject(options)) {
|
|
m_utilsInc.extend(newOptions, options);
|
|
} else {
|
|
if (!m_utilsInc.isUndefined(options)) {
|
|
newOptions.iWndIndex = options;
|
|
}
|
|
}
|
|
var iIndex = this.findWndIndexByIndex(newOptions.iWndIndex);
|
|
if (iIndex != -1) {
|
|
var wndInfo = m_wndSet[iIndex];
|
|
if (wndInfo.iPlayStatus == PLAY_STATUS_PLAYBACK) {
|
|
m_pluginOBJECT.JS_Slow(newOptions.iWndIndex).then(
|
|
function () {
|
|
if (newOptions.success) {
|
|
newOptions.success();
|
|
}
|
|
resolve();
|
|
},
|
|
function () {
|
|
if (newOptions.error) {
|
|
newOptions.error(_oUnKnownError);
|
|
}
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
} else {
|
|
if (newOptions.error) {
|
|
newOptions.error(_oUnKnownError);
|
|
}
|
|
reject(_oUnKnownError);
|
|
}
|
|
} else {
|
|
if (newOptions.error) {
|
|
newOptions.error(_oUnKnownError);
|
|
}
|
|
reject(_oUnKnownError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_PlayFast = function (options) {
|
|
let oPromise = new Promise(async function (resolve, reject) {
|
|
var newOptions = { iWndIndex: m_iSelWnd };
|
|
if (m_utilsInc.isObject(options)) {
|
|
m_utilsInc.extend(newOptions, options);
|
|
} else {
|
|
if (!m_utilsInc.isUndefined(options)) {
|
|
newOptions.iWndIndex = options;
|
|
}
|
|
}
|
|
var iIndex = this.findWndIndexByIndex(newOptions.iWndIndex);
|
|
if (iIndex != -1) {
|
|
var wndInfo = m_wndSet[iIndex];
|
|
if (wndInfo.iPlayStatus == PLAY_STATUS_PLAYBACK) {
|
|
m_pluginOBJECT.JS_Fast(newOptions.iWndIndex).then(
|
|
function () {
|
|
if (newOptions.success) {
|
|
newOptions.success();
|
|
}
|
|
resolve();
|
|
},
|
|
function () {
|
|
if (newOptions.error) {
|
|
newOptions.error(_oUnKnownError);
|
|
}
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
} else {
|
|
if (newOptions.error) {
|
|
newOptions.error(_oUnKnownError);
|
|
}
|
|
reject(_oUnKnownError);
|
|
}
|
|
} else {
|
|
if (newOptions.error) {
|
|
newOptions.error(_oUnKnownError);
|
|
}
|
|
reject(_oUnKnownError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_GetOSDTime = function (options) {
|
|
let oPromise = new Promise(async function (resolve, reject) {
|
|
var newOptions = { iWndIndex: m_iSelWnd };
|
|
if (m_utilsInc.isObject(options)) {
|
|
m_utilsInc.extend(newOptions, options);
|
|
} else {
|
|
if (!m_utilsInc.isUndefined(options)) {
|
|
newOptions.iWndIndex = options;
|
|
}
|
|
}
|
|
var iIndex = this.findWndIndexByIndex(newOptions.iWndIndex);
|
|
if (iIndex != -1) {
|
|
m_pluginOBJECT.JS_GetOSDTime(newOptions.iWndIndex).then(
|
|
function (iTime) {
|
|
if (newOptions.success) {
|
|
var szOSDTime = m_utilsInc.dateFormat(
|
|
new Date(iTime * 1e3),
|
|
"yyyy-MM-dd hh:mm:ss"
|
|
);
|
|
newOptions.success(szOSDTime);
|
|
}
|
|
resolve(szOSDTime);
|
|
},
|
|
function () {
|
|
if (newOptions.error) {
|
|
newOptions.error(_oUnKnownError);
|
|
}
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
} else {
|
|
if (newOptions.error) {
|
|
newOptions.error(_oUnKnownError);
|
|
}
|
|
reject(_oUnKnownError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_StartDownloadRecord = function (
|
|
szDeviceIdentify,
|
|
szPlaybackURI,
|
|
szFileName,
|
|
options
|
|
) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
var iIndex = this.findDeviceIndexByIP(szDeviceIdentify);
|
|
if (iIndex != -1) {
|
|
var oDeviceInfo = m_deviceSet[iIndex];
|
|
var newOptions = {
|
|
szPlaybackURI: szPlaybackURI,
|
|
szFileName: szFileName + ".mp4",
|
|
bDateDir: true,
|
|
};
|
|
if (!m_utilsInc.isUndefined(options)) {
|
|
m_utilsInc.extend(newOptions, options);
|
|
}
|
|
oDeviceInfo.oProtocolInc
|
|
.startDownloadRecord(oDeviceInfo, newOptions)
|
|
.then(
|
|
(iDownloadID) => {
|
|
resolve(iDownloadID);
|
|
},
|
|
(oError) => {
|
|
reject(oError);
|
|
}
|
|
);
|
|
} else {
|
|
reject(_oNoLoginError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_StartDownloadRecordByTime = function (
|
|
szDeviceIdentify,
|
|
szPlaybackURI,
|
|
szFileName,
|
|
szStartTime,
|
|
szEndTime,
|
|
options
|
|
) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
var iIndex = this.findDeviceIndexByIP(szDeviceIdentify);
|
|
if (iIndex != -1) {
|
|
var oDeviceInfo = m_deviceSet[iIndex];
|
|
szPlaybackURI =
|
|
szPlaybackURI.split("?")[0] +
|
|
"?starttime=" +
|
|
szStartTime.replace(" ", "T") +
|
|
"Z&endtime=" +
|
|
szEndTime.replace(" ", "T") +
|
|
"Z";
|
|
var newOptions = {
|
|
szPlaybackURI: szPlaybackURI,
|
|
szFileName: szFileName + ".mp4",
|
|
bDateDir: true,
|
|
};
|
|
if (!m_utilsInc.isUndefined(options)) {
|
|
m_utilsInc.extend(newOptions, options);
|
|
}
|
|
oDeviceInfo.oProtocolInc
|
|
.startDownloadRecord(oDeviceInfo, newOptions)
|
|
.then(
|
|
(iDownloadID) => {
|
|
resolve(iDownloadID);
|
|
},
|
|
(oError) => {
|
|
reject(oError);
|
|
}
|
|
);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_GetDownloadStatus = function (iDownloadID) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
m_pluginOBJECT.JS_GetDownloadStatus(iDownloadID).then(
|
|
(data) => {
|
|
resolve(data);
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_GetDownloadProgress = function (iDownloadID) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
m_pluginOBJECT.JS_GetDownloadProgress(iDownloadID).then(
|
|
(data) => {
|
|
resolve(data);
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_StopDownloadRecord = function (iDownloadID) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
m_pluginOBJECT.JS_StopAsyncDownload(iDownloadID).then(
|
|
() => {
|
|
resolve();
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_ExportDeviceConfig = function (szDeviceIdentify) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
var iIndex = this.findDeviceIndexByIP(szDeviceIdentify);
|
|
if (iIndex != -1) {
|
|
var oDeviceInfo = m_deviceSet[iIndex];
|
|
oDeviceInfo.oProtocolInc.exportDeviceConfig(oDeviceInfo).then(
|
|
() => {
|
|
resolve();
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
} else {
|
|
reject(_oNoLoginError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_ImportDeviceConfig = function (szDeviceIdentify, szFileName) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
var iIndex = this.findDeviceIndexByIP(szDeviceIdentify);
|
|
if (iIndex != -1) {
|
|
var oDeviceInfo = m_deviceSet[iIndex];
|
|
var newOptions = { szFileName: szFileName };
|
|
oDeviceInfo.oProtocolInc
|
|
.importDeviceConfig(oDeviceInfo, newOptions)
|
|
.then(
|
|
() => {
|
|
resolve();
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
} else {
|
|
reject(_oNoLoginError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_RestoreDefault = function (szDeviceIdentify, szMode, options) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
var newOptions = { success: null, error: null };
|
|
m_utilsInc.extend(newOptions, options);
|
|
var iIndex = this.findDeviceIndexByIP(szDeviceIdentify);
|
|
if (iIndex != -1) {
|
|
var oDeviceInfo = m_deviceSet[iIndex];
|
|
oDeviceInfo.oProtocolInc
|
|
.restore(oDeviceInfo, szMode, newOptions)
|
|
.then(
|
|
() => {
|
|
resolve();
|
|
},
|
|
(oError) => {
|
|
reject(oError);
|
|
}
|
|
);
|
|
} else {
|
|
reject(_oNoLoginError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_Restart = function (szDeviceIdentify, options) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
var newOptions = { success: null, error: null };
|
|
m_utilsInc.extend(newOptions, options);
|
|
var iIndex = this.findDeviceIndexByIP(szDeviceIdentify);
|
|
if (iIndex != -1) {
|
|
var oDeviceInfo = m_deviceSet[iIndex];
|
|
oDeviceInfo.oProtocolInc.restart(oDeviceInfo, newOptions).then(
|
|
() => {
|
|
resolve();
|
|
},
|
|
(oError) => {
|
|
reject(oError);
|
|
}
|
|
);
|
|
} else {
|
|
reject(_oNoLoginError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_Reconnect = function (szDeviceIdentify, options) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
var newOptions = { success: null, error: null };
|
|
m_utilsInc.extend(newOptions, options);
|
|
var iIndex = this.findDeviceIndexByIP(szDeviceIdentify);
|
|
if (iIndex != -1) {
|
|
var oDeviceInfo = m_deviceSet[iIndex];
|
|
oDeviceInfo.oProtocolInc
|
|
.login(
|
|
oDeviceInfo.szIP,
|
|
oDeviceInfo.iCGIPort,
|
|
oDeviceInfo.szAuth,
|
|
newOptions
|
|
)
|
|
.then(
|
|
() => {
|
|
resolve();
|
|
},
|
|
(oError) => {
|
|
reject(oError);
|
|
}
|
|
);
|
|
} else {
|
|
reject(_oNoLoginError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_StartUpgrade = function (szDeviceIdentify, szFileName) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
var iIndex = this.findDeviceIndexByIP(szDeviceIdentify);
|
|
if (iIndex != -1) {
|
|
var oDeviceInfo = m_deviceSet[iIndex];
|
|
oDeviceInfo.oProtocolInc.startUpgrade(oDeviceInfo, szFileName).then(
|
|
() => {
|
|
resolve();
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
} else {
|
|
reject(_oNoLoginError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_UpgradeStatus = function (szDeviceIdentify) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
this.I_SendHTTPRequest(
|
|
szDeviceIdentify,
|
|
m_ISAPIProtocol.CGI.startUpgrade.status,
|
|
{}
|
|
).then(
|
|
(data) => {
|
|
var bUpgrading = $(data).find("upgrading").eq(0).text() === "true";
|
|
resolve(bUpgrading);
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_UpgradeProgress = function (szDeviceIdentify) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
this.I_SendHTTPRequest(
|
|
szDeviceIdentify,
|
|
m_ISAPIProtocol.CGI.startUpgrade.status,
|
|
{}
|
|
).then(
|
|
(data) => {
|
|
var iPercent = parseInt($(data).find("percent").eq(0).text(), 10);
|
|
resolve(iPercent);
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_StopUpgrade = function () {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
m_pluginOBJECT.JS_StopUpgrade().then(
|
|
() => {
|
|
resolve();
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_CheckPluginInstall = function () {
|
|
return true;
|
|
};
|
|
this.I_CheckPluginVersion = function () {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
m_pluginOBJECT.JS_CheckUpdate(m_szVersion).then(
|
|
(bFlag) => {
|
|
resolve(bFlag);
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_SendHTTPRequest = function (szDeviceIdentify, szURI, options) {
|
|
let oPromise = new Promise(async function (resolve, reject) {
|
|
var httpClient = new HttpPluginClient();
|
|
var szURL = "";
|
|
var szAuth = "";
|
|
var iIndex = this.findDeviceIndexByIP(szDeviceIdentify);
|
|
if (iIndex >= 0) {
|
|
if ("%" === szURI.substr(0, 1)) {
|
|
szURI = szURI.substr(8);
|
|
}
|
|
var oDeviceInfo = m_deviceSet[iIndex];
|
|
szURL =
|
|
oDeviceInfo.szHttpProtocol +
|
|
oDeviceInfo.szIP +
|
|
":" +
|
|
oDeviceInfo.iCGIPort +
|
|
"/" +
|
|
szURI;
|
|
szAuth = oDeviceInfo.szAuth;
|
|
}
|
|
var newOptions = {
|
|
type: "GET",
|
|
url: szURL,
|
|
auth: szAuth,
|
|
success: null,
|
|
error: null,
|
|
};
|
|
m_utilsInc.extend(newOptions, options);
|
|
httpClient.submitRequest(newOptions).then(
|
|
function (oRes) {
|
|
if (200 === oRes.httpStatusCode) {
|
|
let oData;
|
|
if (0 === oRes.httpResponse.indexOf("<?xml")) {
|
|
oData = m_utilsInc.loadXML(oRes.httpResponse);
|
|
} else {
|
|
oData = JSON.parse(oRes.httpResponse);
|
|
}
|
|
options.success && options.success(oData);
|
|
resolve(oData);
|
|
} else if (200 !== oRes.httpStatusCode) {
|
|
let oData = m_utilsInc.loadXML(oRes.httpResponse);
|
|
if (!oData) {
|
|
oData = JSON.parse(oRes.httpResponse);
|
|
}
|
|
options.error &&
|
|
options.error({
|
|
errorCode: oRes.httpStatusCode,
|
|
errorMsg: oData,
|
|
});
|
|
reject({ errorCode: oRes.httpStatusCode, errorMsg: oData });
|
|
}
|
|
},
|
|
function (errorCode) {
|
|
if (options.error) {
|
|
options.error({ errorCode: errorCode, errorMsg: "" });
|
|
}
|
|
reject({ errorCode: errorCode, errorMsg: "" });
|
|
}
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_ChangeWndNum = function (iWndType) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
m_pluginOBJECT.JS_ArrangeWindow(iWndType).then(
|
|
() => {
|
|
resolve();
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_GetLastError = function () {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
m_pluginOBJECT.JS_GetLastError().then(
|
|
(data) => {
|
|
resolve(data);
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_GetWindowStatus = function (iWndIndex) {
|
|
if (m_utilsInc.isUndefined(iWndIndex)) {
|
|
var wndSet = [];
|
|
m_utilsInc.extend(wndSet, m_wndSet);
|
|
return wndSet;
|
|
} else {
|
|
var i = this.findWndIndexByIndex(iWndIndex);
|
|
if (i != -1) {
|
|
var wndSet = {};
|
|
m_utilsInc.extend(wndSet, m_wndSet[i]);
|
|
return wndSet;
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
};
|
|
this.I_GetIPInfoByMode = function (iMode, szAddress, iPort, szDeviceInfo) {
|
|
return;
|
|
};
|
|
this.I_SetPlayModeType = function (iMode) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
m_pluginOBJECT.JS_SetPlayMode(iMode).then(
|
|
() => {
|
|
resolve();
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_SetSnapDrawMode = function (iWndIndex, iMode) {
|
|
let bType = false;
|
|
if (iMode !== -1) {
|
|
bType = true;
|
|
}
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
m_pluginOBJECT.JS_SetDrawStatus(bType, iMode).then(
|
|
() => {
|
|
resolve();
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_SetSnapPolygonInfo = function (iWndIndex, szInfo) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
var aP = [];
|
|
var oData = m_utilsInc.formatPolygonXmlToJson(szInfo);
|
|
if (oData.aAddRect.length > 0) {
|
|
aP.push(
|
|
m_pluginOBJECT.JS_SetDrawShapeInfo("Rect", oData.aAddRect[0])
|
|
);
|
|
}
|
|
if (oData.aAddPolygon.length > 0) {
|
|
aP.push(
|
|
m_pluginOBJECT.JS_SetDrawShapeInfo("Polygon", oData.aAddPolygon[0])
|
|
);
|
|
}
|
|
if (oData.aRect.length > 0) {
|
|
aP.push(m_pluginOBJECT.JS_SetRectInfo(oData.aRect));
|
|
}
|
|
if (oData.aPolygon.length > 0) {
|
|
aP.push(m_pluginOBJECT.JS_SetPolygonInfo(oData.aPolygon));
|
|
}
|
|
Promise.all(aP).then(
|
|
() => {
|
|
resolve();
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_GetSnapPolygonInfo = function (iWndIndex) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
var aP = [];
|
|
aP.push(m_pluginOBJECT.JS_GetPolygonInfo());
|
|
aP.push(m_pluginOBJECT.JS_GetRectInfo());
|
|
Promise.all(aP).then(
|
|
(aData) => {
|
|
var szXmlData = m_utilsInc.formatPolygonJsonToXml(aData);
|
|
resolve(szXmlData);
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_ClearSnapInfo = function (iWndIndex, aShapes) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
if (aShapes) {
|
|
var aPolygon = [];
|
|
var aRect = [];
|
|
aShapes.forEach((item) => {
|
|
if (1 === item.polygonType) {
|
|
aPolygon.push(item.id);
|
|
} else {
|
|
aRect.push(item.id);
|
|
}
|
|
var aP = [];
|
|
if (aPolygon.length) {
|
|
aP.push(m_pluginOBJECT.JS_ClearShapeByType("Polygon", aPolygon));
|
|
}
|
|
if (aRect.length) {
|
|
aP.push(m_pluginOBJECT.JS_ClearShapeByType("Rect", aRect));
|
|
}
|
|
Promise.all(aP).then(
|
|
() => {
|
|
resolve();
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
});
|
|
} else {
|
|
m_pluginOBJECT.JS_ClearShapeByType("AllWindows").then(
|
|
() => {
|
|
resolve();
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_DeviceCapturePic = function (
|
|
szDeviceIdentify,
|
|
iChannelID,
|
|
szPicName,
|
|
options
|
|
) {
|
|
return false;
|
|
var iIndex = this.findDeviceIndexByIP(szDeviceIdentify);
|
|
var iRet = -1;
|
|
if (iIndex != -1) {
|
|
var oDeviceInfo = m_deviceSet[iIndex];
|
|
var newOptions = { bDateDir: true };
|
|
m_utilsInc.extend(newOptions, options);
|
|
if (
|
|
!m_utilsInc.isUndefined(newOptions.iResolutionWidth) &&
|
|
!m_utilsInc.isInt(newOptions.iResolutionWidth)
|
|
) {
|
|
return iRet;
|
|
}
|
|
if (
|
|
!m_utilsInc.isUndefined(newOptions.iResolutionHeight) &&
|
|
!m_utilsInc.isInt(newOptions.iResolutionHeight)
|
|
) {
|
|
return iRet;
|
|
}
|
|
iRet = oDeviceInfo.oProtocolInc.deviceCapturePic(
|
|
oDeviceInfo,
|
|
iChannelID,
|
|
szPicName,
|
|
newOptions
|
|
);
|
|
}
|
|
return iRet;
|
|
};
|
|
this.I_SetPackageType = function (iPackageType) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
m_pluginOBJECT.JS_SetPackageType(iPackageType).then(
|
|
() => {
|
|
resolve();
|
|
},
|
|
() => {
|
|
reject(_oUnKnownError);
|
|
}
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_GetDevicePort = function (szDeviceIdentify) {
|
|
let oPromise = new Promise(async (resolve, reject) => {
|
|
var iIndex = this.findDeviceIndexByIP(szDeviceIdentify);
|
|
var oPort = null;
|
|
if (iIndex != -1) {
|
|
var oDeviceInfo = m_deviceSet[iIndex];
|
|
try {
|
|
oPort = await _getPort(oDeviceInfo);
|
|
resolve(oPort);
|
|
} catch (err) {
|
|
reject({ errorCode: ERROR_CODE_NETWORKERROR, errorMsg: "" });
|
|
}
|
|
} else {
|
|
reject(_oNoLoginError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.I_GetTextOverlay = function (szUrl, szDeviceIdentify, options) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
var iIndex = this.findDeviceIndexByIP(szDeviceIdentify);
|
|
if (iIndex != -1) {
|
|
var oDeviceInfo = m_deviceSet[iIndex];
|
|
var wndInfo = m_wndSet[iIndex];
|
|
var newOptions = {
|
|
type: "GET",
|
|
success: options.success,
|
|
error: options.error,
|
|
};
|
|
this.I_SendHTTPRequest(
|
|
oDeviceInfo.szIP + "_" + oDeviceInfo.iCGIPort,
|
|
szUrl,
|
|
newOptions
|
|
).then(
|
|
(oData) => {
|
|
resolve(oData);
|
|
},
|
|
(oError) => {
|
|
reject(oError);
|
|
}
|
|
);
|
|
} else {
|
|
reject(_oNoLoginError);
|
|
}
|
|
});
|
|
return oPromise;
|
|
};
|
|
this.findDeviceIndexByIP = function (szDeviceIdentify) {
|
|
if (szDeviceIdentify.indexOf("_") > -1) {
|
|
for (var i = 0, iLen = m_deviceSet.length; i < iLen; i++) {
|
|
if (m_deviceSet[i].szDeviceIdentify == szDeviceIdentify) {
|
|
return i;
|
|
}
|
|
}
|
|
} else {
|
|
for (var i = 0, iLen = m_deviceSet.length; i < iLen; i++) {
|
|
if (m_deviceSet[i].szIP == szDeviceIdentify) {
|
|
return i;
|
|
}
|
|
}
|
|
}
|
|
return -1;
|
|
};
|
|
this.findWndIndexByIndex = function (iWndIndex) {
|
|
for (var i = 0, iLen = m_wndSet.length; i < iLen; i++) {
|
|
if (m_wndSet[i].iIndex == iWndIndex) {
|
|
return i;
|
|
}
|
|
}
|
|
return -1;
|
|
};
|
|
function deviceInfoClass() {
|
|
this.szIP = "";
|
|
this.szHostName = "";
|
|
this.szAuth = "";
|
|
this.szHttpProtocol = "http://";
|
|
this.iCGIPort = 80;
|
|
this.szDeviceIdentify = "";
|
|
this.iDevicePort = -1;
|
|
this.iHttpPort = -1;
|
|
this.iHttpsPort = -1;
|
|
this.iRtspPort = -1;
|
|
this.iAudioType = 1;
|
|
this.m_iAudioBitRate = -1;
|
|
this.m_iAudioSamplingRate = -1;
|
|
this.iDeviceProtocol = PROTOCOL_DEVICE_ISAPI;
|
|
this.oProtocolInc = null;
|
|
this.iAnalogChannelNum = 0;
|
|
this.szDeviceType = "";
|
|
this.bVoiceTalk = false;
|
|
this.iDeviceMinusLocalTime = 0;
|
|
}
|
|
var wndInfoClass = function () {
|
|
this.iIndex = 0;
|
|
this.szIP = "";
|
|
this.iCGIPort = 80;
|
|
this.szDeviceIdentify = "";
|
|
this.iChannelID = "";
|
|
this.iPlayStatus = PLAY_STATUS_STOP;
|
|
this.bSound = false;
|
|
this.bRecord = false;
|
|
this.bPTZAuto = false;
|
|
this.bEZoom = false;
|
|
this.b3DZoom = false;
|
|
};
|
|
var HttpPluginClient = function () {
|
|
this.options = {
|
|
type: "GET",
|
|
url: "",
|
|
auth: "",
|
|
timeout: 3e4,
|
|
data: "",
|
|
async: true,
|
|
success: null,
|
|
error: null,
|
|
};
|
|
this.m_szHttpHead = "";
|
|
this.m_szHttpContent = "";
|
|
this.m_szHttpData = "";
|
|
};
|
|
HttpPluginClient.prototype.submitRequest = function (options) {
|
|
options.method = this.getHttpMethod(options.type);
|
|
options.content = options.data;
|
|
delete options.type;
|
|
delete options.data;
|
|
return m_pluginOBJECT.JS_SubmitHttpRequest(options);
|
|
};
|
|
HttpPluginClient.prototype.getHttpMethod = function (szMethod) {
|
|
var oMethod = { GET: 1, POST: 2, PUT: 5, DELETE: 6 },
|
|
iMethod = oMethod[szMethod];
|
|
return iMethod ? iMethod : -1;
|
|
};
|
|
var ISAPIProtocol = function () {};
|
|
ISAPIProtocol.prototype.CGI = {
|
|
login: "%s%s:%s/ISAPI/Security/userCheck?format=json",
|
|
getAudioInfo: "%s%s:%s/ISAPI/System/TwoWayAudio/channels",
|
|
getDeviceInfo: "%s%s:%s/ISAPI/System/deviceInfo",
|
|
getAnalogChannelInfo: "%s%s:%s/ISAPI/System/Video/inputs/channels",
|
|
getDigitalChannel: "%s%s:%s/ISAPI/ContentMgmt/InputProxy/channels",
|
|
getDigitalChannelInfo:
|
|
"%s%s:%s/ISAPI/ContentMgmt/InputProxy/channels/status",
|
|
getZeroChannelInfo: "%s%s:%s/ISAPI/ContentMgmt/ZeroVideo/channels",
|
|
getStreamChannels: {
|
|
analog: "%s%s:%s/ISAPI/Streaming/channels",
|
|
digital: "%s%s:%s/ISAPI/ContentMgmt/StreamingProxy/channels",
|
|
},
|
|
startRealPlay: {
|
|
channels: "video://%s:%s/%s",
|
|
zeroChannels:
|
|
"%s%s:%s/PSIA/Custom/SelfExt/ContentMgmt/ZeroStreaming/channels/%s",
|
|
},
|
|
startVoiceTalk: {
|
|
open: "%s%s:%s/ISAPI/System/TwoWayAudio/channels/%s/open",
|
|
close: "%s%s:%s/ISAPI/System/TwoWayAudio/channels/%s/close",
|
|
audioData: "%s%s:%s/ISAPI/System/TwoWayAudio/channels/%s/audioData",
|
|
},
|
|
ptzControl: {
|
|
analog: "%s%s:%s/ISAPI/PTZCtrl/channels/%s/continuous",
|
|
digital:
|
|
"%s%s:%s/ISAPI/ContentMgmt/PTZCtrlProxy/channels/%s/continuous",
|
|
},
|
|
ptzAutoControl: {
|
|
analog: "%s%s:%s/ISAPI/PTZCtrl/channels/%s/autoPan",
|
|
digital: "%s%s:%s/ISAPI/ContentMgmt/PTZCtrlProxy/channels/%s/autoPan",
|
|
},
|
|
setPreset: {
|
|
analog: "%s%s:%s/ISAPI/PTZCtrl/channels/%s/presets/%s",
|
|
digital:
|
|
"%s%s:%s/ISAPI/ContentMgmt/PTZCtrlProxy/channels/%s/presets/%s",
|
|
},
|
|
goPreset: {
|
|
analog: "%s%s:%s/ISAPI/PTZCtrl/channels/%s/presets/%s/goto",
|
|
digital:
|
|
"%s%s:%s/ISAPI/ContentMgmt/PTZCtrlProxy/channels/%s/presets/%s/goto",
|
|
},
|
|
ptzFocus: {
|
|
analog: "%s%s:%s/ISAPI/System/Video/inputs/channels/%s/focus",
|
|
digital: "%s%s:%s/ISAPI/ContentMgmt/ImageProxy/channels/%s/focus",
|
|
},
|
|
ptzIris: {
|
|
analog: "%s%s:%s/ISAPI/System/Video/inputs/channels/%s/iris",
|
|
digital: "%s%s:%s/ISAPI/ContentMgmt/ImageProxy/channels/%s/iris",
|
|
},
|
|
getNetworkBond: "%s%s:%s/ISAPI/System/Network/Bond",
|
|
getNetworkInterface: "%s%s:%s/ISAPI/System/Network/interfaces",
|
|
getUPnPPortStatus: "%s%s:%s/ISAPI/System/Network/UPnP/ports/status",
|
|
getPPPoEStatus: "%s%s:%s/ISAPI/System/Network/PPPoE/1/status",
|
|
getPortInfo: "%s%s:%s/ISAPI/Security/adminAccesses",
|
|
recordSearch: "%s%s:%s/ISAPI/ContentMgmt/search",
|
|
startPlayback: "video://%s:%s/%s",
|
|
startWsPlayback: "%s%s:%s/%s",
|
|
startShttpPlayback: "%s%s:%s/SDK/playback/%s",
|
|
startShttpReversePlayback: "%s%s:%s/SDK/playback/%s/reversePlay",
|
|
startTransCodePlayback: "%s%s:%s/SDK/playback/%s/transcoding",
|
|
startDownloadRecord: "%s%s:%s/ISAPI/ContentMgmt/download",
|
|
downloaddeviceConfig: "%s%s:%s/ISAPI/System/configurationData",
|
|
uploaddeviceConfig: "%s%s:%s/ISAPI/System/configurationData",
|
|
restart: "%s%s:%s/ISAPI/System/reboot",
|
|
restore: "%s%s:%s/ISAPI/System/factoryReset?mode=%s",
|
|
startUpgrade: {
|
|
upgrade: "%s%s:%s/ISAPI/System/updateFirmware",
|
|
status: "%s%s:%s/ISAPI/System/upgradeStatus",
|
|
},
|
|
set3DZoom: {
|
|
analog: "%s%s:%s/ISAPI/PTZCtrl/channels/%s/position3D",
|
|
digital:
|
|
"%s%s:%s/ISAPI/ContentMgmt/PTZCtrlProxy/channels/%s/position3D",
|
|
},
|
|
getSecurityVersion: "%s%s:%s/ISAPI/Security/capabilities?username=admin",
|
|
SDKCapabilities: "%s%s:%s/SDK/capabilities",
|
|
deviceCapture: {
|
|
channels: "%s%s:%s/ISAPI/Streaming/channels/%s/picture",
|
|
},
|
|
overlayInfo: {
|
|
analog: "%s%s:%s/ISAPI/System/Video/inputs/channels/%s/overlays/",
|
|
digital:
|
|
"%s%s:%s/ISAPI/ContentMgmt/InputProxy/channels/%s/video/overlays",
|
|
},
|
|
sessionCap:
|
|
"%s%s:%s/ISAPI/Security/sessionLogin/capabilities?username=%s",
|
|
sessionLogin: "%s%s:%s/ISAPI/Security/sessionLogin",
|
|
sessionHeartbeat: "%s%s:%s/ISAPI/Security/sessionHeartbeat",
|
|
sessionLogout: "%s%s:%s/ISAPI/Security/sessionLogout",
|
|
systemCapabilities: "%s%s:%s/ISAPI/System/capabilities",
|
|
time: "ISAPI/System/time",
|
|
};
|
|
ISAPIProtocol.prototype.login = function (szIP, iPort, szAuth, options) {
|
|
return m_webVideoCtrl.I_SendHTTPRequest(
|
|
oDeviceInfo.szDeviceIdentify,
|
|
this.CGI.login,
|
|
options
|
|
);
|
|
};
|
|
ISAPIProtocol.prototype.getAudioInfo = function (oDeviceInfo, options) {
|
|
let oPromise = new Promise(function (resolve, reject) {
|
|
var newOptions = {};
|
|
m_utilsInc.extend(newOptions, options);
|
|
m_utilsInc.extend(newOptions, {
|
|
success: function (oData) {
|
|
var oNodeList = NS.$XML(oData).find("audioCompressionType", true);
|
|
if (oNodeList.length > 0) {
|
|
var szAudioCompressionType = NS.$XML(oNodeList).eq(0).text(),
|
|
iAudioType = 0;
|
|
if ("G.711ulaw" == szAudioCompressionType) {
|
|
iAudioType = 1;
|
|
} else if ("G.711alaw" == szAudioCompressionType) {
|
|
iAudioType = 2;
|
|
} else if ("G.726" == szAudioCompressionType) {
|
|
iAudioType = 3;
|
|
} else if (
|
|
"MP2L2" == szAudioCompressionType ||
|
|
"MPEL2" == szAudioCompressionType
|
|
) {
|
|
iAudioType = 4;
|
|
} else if ("G.722.1" == szAudioCompressionType) {
|
|
iAudioType = 0;
|
|
} else if ("AAC" == szAudioCompressionType) {
|
|
iAudioType = 5;
|
|
} else if ("PCM" == szAudioCompressionType) {
|
|
iAudioType = 6;
|
|
} else if ("MP3" == szAudioCompressionType) {
|
|
iAudioType = 7;
|
|
}
|
|
oDeviceInfo.iAudioType = iAudioType;
|
|
}
|
|
if (NS.$XML(oData).find("audioBitRate").eq(0).text() !== "") {
|
|
oDeviceInfo.m_iAudioBitRate =
|
|
parseInt(NS.$XML(oData).find("audioBitRate").eq(0).text(), 10) *
|
|
1e3;
|
|
} else {
|
|
oDeviceInfo.m_iAudioBitRate = 0;
|
|
}
|
|
if (NS.$XML(oData).find("audioSamplingRate").eq(0).text() !== "") {
|
|
oDeviceInfo.m_iAudioSamplingRate =
|
|
parseInt(
|
|
NS.$XML(oData).find("audioSamplingRate").eq(0).text(),
|
|
10
|
|
) * 1e3;
|
|
} else {
|
|
oDeviceInfo.m_iAudioSamplingRate = 0;
|
|
}
|
|
if (NS.$XML(oData).find("channelNum").eq(0).text() !== "") {
|
|
oDeviceInfo.m_iSoundChan = parseInt(
|
|
NS.$XML(oData).find("channelNum").eq(0).text(),
|
|
10
|
|
);
|
|
} else {
|
|
oDeviceInfo.m_iSoundChan = 1;
|
|
}
|
|
if (
|
|
NS.$XML(oData).find("deviceCastChannelNum").eq(0).text() !== ""
|
|
) {
|
|
oDeviceInfo.m_iDeviceAudioSoundChan = parseInt(
|
|
NS.$XML(oData).find("deviceCastChannelNum").eq(0).text(),
|
|
10
|
|
);
|
|
} else {
|
|
oDeviceInfo.m_iDeviceAudioSoundChan = 1;
|
|
}
|
|
if (options.success) {
|
|
options.success(oData);
|
|
}
|
|
resolve(oData);
|
|
},
|
|
error: function (oError) {
|
|
if (options.error) {
|
|
options.error(oError);
|
|
}
|
|
reject(oError);
|
|
},
|
|
});
|
|
m_webVideoCtrl.I_SendHTTPRequest(
|
|
oDeviceInfo.szDeviceIdentify,
|
|
m_ISAPIProtocol.CGI.getAudioInfo,
|
|
newOptions
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
ISAPIProtocol.prototype.getDeviceInfo = function (oDeviceInfo, options) {
|
|
let oPromise = new Promise(function (resolve, reject) {
|
|
var newOptions = {};
|
|
m_utilsInc.extend(newOptions, options);
|
|
m_utilsInc.extend(newOptions, {
|
|
success: function (xmlDoc) {
|
|
var oData;
|
|
oDeviceInfo.szDeviceType = NS.$XML(xmlDoc)
|
|
.find("deviceType")
|
|
.eq(0)
|
|
.text();
|
|
var arrXml = [];
|
|
arrXml.push("<DeviceInfo>");
|
|
arrXml.push(
|
|
"<deviceName>" +
|
|
m_utilsInc.escape(
|
|
NS.$XML(xmlDoc).find("deviceName").eq(0).text()
|
|
) +
|
|
"</deviceName>"
|
|
);
|
|
arrXml.push(
|
|
"<deviceID>" +
|
|
NS.$XML(xmlDoc).find("deviceID").eq(0).text() +
|
|
"</deviceID>"
|
|
);
|
|
arrXml.push(
|
|
"<deviceType>" +
|
|
NS.$XML(xmlDoc).find("deviceType").eq(0).text() +
|
|
"</deviceType>"
|
|
);
|
|
arrXml.push(
|
|
"<model>" +
|
|
NS.$XML(xmlDoc).find("model").eq(0).text() +
|
|
"</model>"
|
|
);
|
|
arrXml.push(
|
|
"<serialNumber>" +
|
|
NS.$XML(xmlDoc).find("serialNumber").eq(0).text() +
|
|
"</serialNumber>"
|
|
);
|
|
arrXml.push(
|
|
"<macAddress>" +
|
|
NS.$XML(xmlDoc).find("macAddress").eq(0).text() +
|
|
"</macAddress>"
|
|
);
|
|
arrXml.push(
|
|
"<firmwareVersion>" +
|
|
NS.$XML(xmlDoc).find("firmwareVersion").eq(0).text() +
|
|
"</firmwareVersion>"
|
|
);
|
|
arrXml.push(
|
|
"<firmwareReleasedDate>" +
|
|
NS.$XML(xmlDoc).find("firmwareReleasedDate").eq(0).text() +
|
|
"</firmwareReleasedDate>"
|
|
);
|
|
arrXml.push(
|
|
"<encoderVersion>" +
|
|
NS.$XML(xmlDoc).find("encoderVersion").eq(0).text() +
|
|
"</encoderVersion>"
|
|
);
|
|
arrXml.push(
|
|
"<encoderReleasedDate>" +
|
|
NS.$XML(xmlDoc).find("encoderReleasedDate").eq(0).text() +
|
|
"</encoderReleasedDate>"
|
|
);
|
|
arrXml.push("</DeviceInfo>");
|
|
oData = m_utilsInc.loadXML(arrXml.join(""));
|
|
if (options.success) {
|
|
options.success(oData);
|
|
}
|
|
resolve(oData);
|
|
},
|
|
error: function (oError) {
|
|
if (options.error) {
|
|
options.error(oError);
|
|
}
|
|
reject(oError);
|
|
},
|
|
});
|
|
m_webVideoCtrl.I_SendHTTPRequest(
|
|
oDeviceInfo.szDeviceIdentify,
|
|
m_ISAPIProtocol.CGI.getDeviceInfo,
|
|
newOptions
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
ISAPIProtocol.prototype.getDeviceMinusLocalTime = function (oDeviceInfo) {
|
|
let oPromise = new Promise(function (resolve, reject) {
|
|
var newOptions = {
|
|
success: (xmlDoc) => {
|
|
var szDeviceTime = $(xmlDoc)
|
|
.find("localTime")
|
|
.eq(0)
|
|
.text()
|
|
.substring(0, 19);
|
|
var arDTms = szDeviceTime.match(
|
|
/(\d+)-(\d+)-(\d+)(\D+)(\d+):(\d+):(\d+)/
|
|
);
|
|
if (arDTms.length !== 8) {
|
|
return;
|
|
}
|
|
var dtDeviceDate = new Date(
|
|
arDTms[1],
|
|
arDTms[2] - 1,
|
|
arDTms[3],
|
|
arDTms[5],
|
|
arDTms[6],
|
|
arDTms[7]
|
|
);
|
|
var szTimeZone = $(xmlDoc).find("timeZone").eq(0).text();
|
|
var iDSTTime = 0;
|
|
var iDSTPos = szTimeZone.indexOf("DST");
|
|
if (iDSTPos != -1) {
|
|
var dtDSTStart = new Date(dtDeviceDate.getTime());
|
|
dtDSTStart.setMinutes(0);
|
|
dtDSTStart.setSeconds(0);
|
|
var dtDSTStop = new Date(dtDeviceDate.getTime());
|
|
dtDSTStop.setMinutes(0);
|
|
dtDSTStop.setSeconds(0);
|
|
var szDSTStartTime = szTimeZone.split(",")[1];
|
|
var szDSTStopTime = szTimeZone.split(",")[2];
|
|
var iDSTStartMonth = parseInt(
|
|
szDSTStartTime.split(".")[0].replace("M", ""),
|
|
10
|
|
);
|
|
dtDSTStart.setMonth(iDSTStartMonth - 1);
|
|
var iDSTStartWeek = parseInt(szDSTStartTime.split(".")[1], 10);
|
|
var iDSTStartDay = parseInt(
|
|
szDSTStartTime.split(".")[2].split("/")[0]
|
|
);
|
|
var iDSTStartTime = parseInt(
|
|
szDSTStartTime.split(".")[2].split("/")[1].split(":")[0],
|
|
10
|
|
);
|
|
dtDSTStart.setHours(iDSTStartTime);
|
|
var iTime = 0;
|
|
var iDate = 0;
|
|
for (var i = 1; i <= 31; i++) {
|
|
dtDSTStart.setDate(i);
|
|
if (dtDSTStart.getMonth() !== iDSTStartMonth - 1) {
|
|
break;
|
|
}
|
|
if (dtDSTStart.getDay() == iDSTStartDay) {
|
|
iTime++;
|
|
iDate = i;
|
|
if (iTime == iDSTStartWeek) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
dtDSTStart.setDate(iDate);
|
|
dtDSTStart.setMonth(iDSTStartMonth - 1);
|
|
var iDSTStopMonth = parseInt(
|
|
szDSTStopTime.split(".")[0].replace("M", ""),
|
|
10
|
|
);
|
|
dtDSTStop.setMonth(iDSTStopMonth - 1);
|
|
var iDSTStopWeek = parseInt(szDSTStopTime.split(".")[1], 10);
|
|
var iDSTStopDay = parseInt(
|
|
szDSTStopTime.split(".")[2].split("/")[0]
|
|
);
|
|
var iDSTStopTime = parseInt(
|
|
szDSTStopTime.split(".")[2].split("/")[1].split(":")[0],
|
|
10
|
|
);
|
|
dtDSTStop.setHours(iDSTStopTime);
|
|
iTime = 0;
|
|
iDate = 0;
|
|
for (var i = 1; i <= 31; i++) {
|
|
dtDSTStop.setDate(i);
|
|
if (dtDSTStop.getMonth() !== iDSTStopMonth - 1) {
|
|
break;
|
|
}
|
|
if (dtDSTStop.getDay() == iDSTStopDay) {
|
|
iTime++;
|
|
iDate = i;
|
|
if (iTime == iDSTStopWeek) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
dtDSTStop.setDate(iDate);
|
|
dtDSTStop.setMonth(iDSTStopMonth - 1);
|
|
if (dtDSTStart.getTime() < dtDSTStop.getTime()) {
|
|
if (
|
|
dtDeviceDate.getTime() >= dtDSTStart.getTime() &&
|
|
dtDeviceDate.getTime() <= dtDSTStop.getTime()
|
|
) {
|
|
var szDSTTime = szTimeZone.substring(
|
|
iDSTPos + 3,
|
|
iDSTPos + 11
|
|
);
|
|
iDSTTime =
|
|
parseInt(szDSTTime.split(":")[0], 10) * 60 +
|
|
parseInt(szDSTTime.split(":")[1], 10);
|
|
}
|
|
} else {
|
|
if (
|
|
dtDeviceDate.getTime() >= dtDSTStart.getTime() ||
|
|
dtDeviceDate.getTime() <= dtDSTStop.getTime()
|
|
) {
|
|
var szDSTTime = szTimeZone.substring(
|
|
iDSTPos + 3,
|
|
iDSTPos + 11
|
|
);
|
|
iDSTTime =
|
|
parseInt(szDSTTime.split(":")[0], 10) * 60 +
|
|
parseInt(szDSTTime.split(":")[1], 10);
|
|
}
|
|
}
|
|
}
|
|
var arDTZms = szTimeZone.match(/\D+([+-])(\d+):(\d+):(\d+)/);
|
|
if (arDTZms.length == 5) {
|
|
var dtNow = new Date();
|
|
var iLocalOffsetMin = dtNow.getTimezoneOffset();
|
|
var iDeviceOffsetMin =
|
|
parseInt(arDTZms[2]) * 60 + parseInt(arDTZms[3]);
|
|
iDeviceOffsetMin =
|
|
arDTZms[1] === "+" ? iDeviceOffsetMin : -iDeviceOffsetMin;
|
|
iDeviceMinusLocalTime =
|
|
(iLocalOffsetMin - iDeviceOffsetMin + iDSTTime) * 60 * 1e3;
|
|
}
|
|
oDeviceInfo.iDeviceMinusLocalTime = iDeviceMinusLocalTime;
|
|
resolve(iDeviceMinusLocalTime);
|
|
},
|
|
error: () => {
|
|
reject();
|
|
},
|
|
};
|
|
m_webVideoCtrl.I_SendHTTPRequest(
|
|
oDeviceInfo.szDeviceIdentify,
|
|
m_ISAPIProtocol.CGI.time,
|
|
newOptions
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
ISAPIProtocol.prototype.getAnalogChannelInfo = function (
|
|
oDeviceInfo,
|
|
options
|
|
) {
|
|
let oPromise = new Promise(function (resolve, reject) {
|
|
var newOptions = {};
|
|
m_utilsInc.extend(newOptions, options);
|
|
m_utilsInc.extend(newOptions, {
|
|
success: function (xmlData) {
|
|
var arrXml = [];
|
|
arrXml.push("<VideoInputChannelList>");
|
|
var nodeList = NS.$XML(xmlData).find("VideoInputChannel", true);
|
|
oDeviceInfo.iAnalogChannelNum = nodeList.length;
|
|
for (var i = 0, iLen = nodeList.length; i < iLen; i++) {
|
|
var node = nodeList[i];
|
|
arrXml.push("<VideoInputChannel>");
|
|
arrXml.push(
|
|
"<id>" + NS.$XML(node).find("id").eq(0).text() + "</id>"
|
|
);
|
|
arrXml.push(
|
|
"<inputPort>" +
|
|
NS.$XML(node).find("inputPort").eq(0).text() +
|
|
"</inputPort>"
|
|
);
|
|
arrXml.push(
|
|
"<name>" +
|
|
m_utilsInc.escape(NS.$XML(node).find("name").eq(0).text()) +
|
|
"</name>"
|
|
);
|
|
arrXml.push(
|
|
"<videoFormat>" +
|
|
NS.$XML(node).find("videoFormat").eq(0).text() +
|
|
"</videoFormat>"
|
|
);
|
|
arrXml.push("</VideoInputChannel>");
|
|
}
|
|
arrXml.push("</VideoInputChannelList>");
|
|
var xmlDoc = m_utilsInc.loadXML(arrXml.join(""));
|
|
if (options.success) {
|
|
options.success(xmlDoc);
|
|
}
|
|
resolve(xmlDoc);
|
|
},
|
|
error: function (oError) {
|
|
if (options.error) {
|
|
options.error(oError);
|
|
}
|
|
reject(oError);
|
|
},
|
|
});
|
|
m_webVideoCtrl.I_SendHTTPRequest(
|
|
oDeviceInfo.szDeviceIdentify,
|
|
m_ISAPIProtocol.CGI.getAnalogChannelInfo,
|
|
newOptions
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
ISAPIProtocol.prototype.getDigitalChannel = function (
|
|
oDeviceInfo,
|
|
options
|
|
) {
|
|
let oPromise = new Promise(function (resolve, reject) {
|
|
var newOptions = {};
|
|
m_utilsInc.extend(newOptions, options);
|
|
m_utilsInc.extend(newOptions, {
|
|
success: function (xmlData) {
|
|
var arrXml = [];
|
|
arrXml.push("<InputProxyChannelList>");
|
|
var nodeList = NS.$XML(xmlData).find("InputProxyChannel", true);
|
|
for (var i = 0, iLen = nodeList.length; i < iLen; i++) {
|
|
var node = nodeList[i];
|
|
arrXml.push("<InputProxyChannel>");
|
|
arrXml.push(
|
|
"<id>" + NS.$XML(node).find("id").eq(0).text() + "</id>"
|
|
);
|
|
arrXml.push(
|
|
"<name>" +
|
|
m_utilsInc.escape(NS.$XML(node).find("name").eq(0).text()) +
|
|
"</name>"
|
|
);
|
|
arrXml.push("</InputProxyChannel>");
|
|
}
|
|
arrXml.push("</InputProxyChannelList>");
|
|
var xmlDoc = m_utilsInc.loadXML(arrXml.join(""));
|
|
if (options.success) {
|
|
options.success(xmlDoc);
|
|
}
|
|
resolve(xmlDoc);
|
|
},
|
|
error: function (oError) {
|
|
if (options.error) {
|
|
options.error(oError);
|
|
}
|
|
reject(oError);
|
|
},
|
|
});
|
|
m_webVideoCtrl.I_SendHTTPRequest(
|
|
oDeviceInfo.szDeviceIdentify,
|
|
m_ISAPIProtocol.CGI.getDigitalChannel,
|
|
newOptions
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
ISAPIProtocol.prototype.getDigitalChannelInfo = function (
|
|
oDeviceInfo,
|
|
options
|
|
) {
|
|
let oPromise = new Promise(async (resolve, reject) => {
|
|
var oDigitalChannelXML = null,
|
|
oDigitalChannelName = {};
|
|
try {
|
|
oDigitalChannelXML = await m_ISAPIProtocol.getDigitalChannel(
|
|
oDeviceInfo,
|
|
{}
|
|
);
|
|
} catch (oError) {
|
|
reject(oError);
|
|
}
|
|
var nodeList = NS.$XML(oDigitalChannelXML).find(
|
|
"InputProxyChannel",
|
|
true
|
|
);
|
|
for (var i = 0, iLen = nodeList.length; i < iLen; i++) {
|
|
var node = nodeList[i],
|
|
szId = NS.$XML(node).find("id").eq(0).text(),
|
|
szName = NS.$XML(node).find("name").eq(0).text();
|
|
oDigitalChannelName[szId] = szName;
|
|
}
|
|
var newOptions = {};
|
|
m_utilsInc.extend(newOptions, options);
|
|
m_utilsInc.extend(newOptions, {
|
|
success: function (xmlData) {
|
|
var arrXml = [];
|
|
arrXml.push("<InputProxyChannelStatusList>");
|
|
var nodeList = NS.$XML(xmlData).find(
|
|
"InputProxyChannelStatus",
|
|
true
|
|
);
|
|
for (var i = 0, iLen = nodeList.length; i < iLen; i++) {
|
|
var node = nodeList[i],
|
|
szId = NS.$XML(node).find("id").eq(0).text();
|
|
arrXml.push("<InputProxyChannelStatus>");
|
|
arrXml.push("<id>" + szId + "</id>");
|
|
arrXml.push("<sourceInputPortDescriptor>");
|
|
arrXml.push(
|
|
"<proxyProtocol>" +
|
|
NS.$XML(node).find("proxyProtocol").eq(0).text() +
|
|
"</proxyProtocol>"
|
|
);
|
|
arrXml.push(
|
|
"<addressingFormatType>" +
|
|
NS.$XML(node).find("addressingFormatType").eq(0).text() +
|
|
"</addressingFormatType>"
|
|
);
|
|
arrXml.push(
|
|
"<ipAddress>" +
|
|
NS.$XML(node).find("ipAddress").eq(0).text() +
|
|
"</ipAddress>"
|
|
);
|
|
arrXml.push(
|
|
"<managePortNo>" +
|
|
NS.$XML(node).find("managePortNo").eq(0).text() +
|
|
"</managePortNo>"
|
|
);
|
|
arrXml.push(
|
|
"<srcInputPort>" +
|
|
NS.$XML(node).find("srcInputPort").eq(0).text() +
|
|
"</srcInputPort>"
|
|
);
|
|
arrXml.push(
|
|
"<userName>" +
|
|
m_utilsInc.escape(
|
|
NS.$XML(node).find("userName").eq(0).text()
|
|
) +
|
|
"</userName>"
|
|
);
|
|
arrXml.push(
|
|
"<streamType>" +
|
|
NS.$XML(node).find("streamType").eq(0).text() +
|
|
"</streamType>"
|
|
);
|
|
arrXml.push(
|
|
"<online>" +
|
|
NS.$XML(node).find("online").eq(0).text() +
|
|
"</online>"
|
|
);
|
|
arrXml.push(
|
|
"<name>" +
|
|
m_utilsInc.escape(oDigitalChannelName[szId]) +
|
|
"</name>"
|
|
);
|
|
arrXml.push("</sourceInputPortDescriptor>");
|
|
arrXml.push("</InputProxyChannelStatus>");
|
|
}
|
|
arrXml.push("</InputProxyChannelStatusList>");
|
|
var xmlDoc = m_utilsInc.loadXML(arrXml.join(""));
|
|
if (options.success) {
|
|
options.success(xmlDoc);
|
|
}
|
|
resolve(xmlDoc);
|
|
},
|
|
error: function (oError) {
|
|
if (options.error) {
|
|
options.error(oError);
|
|
}
|
|
reject(oError);
|
|
},
|
|
});
|
|
m_webVideoCtrl.I_SendHTTPRequest(
|
|
oDeviceInfo.szDeviceIdentify,
|
|
m_ISAPIProtocol.CGI.getDigitalChannelInfo,
|
|
newOptions
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
ISAPIProtocol.prototype.getZeroChannelInfo = function (
|
|
oDeviceInfo,
|
|
options
|
|
) {
|
|
return m_webVideoCtrl.I_SendHTTPRequest(
|
|
oDeviceInfo.szDeviceIdentify,
|
|
this.CGI.getZeroChannelInfo,
|
|
options
|
|
);
|
|
};
|
|
ISAPIProtocol.prototype.getStreamChannels = function (
|
|
oDeviceInfo,
|
|
options
|
|
) {
|
|
if (oDeviceInfo.iAnalogChannelNum != 0) {
|
|
var url = m_utilsInc.formatString(
|
|
this.CGI.getStreamChannels.analog,
|
|
oDeviceInfo.szHttpProtocol,
|
|
oDeviceInfo.szIP,
|
|
oDeviceInfo.iCGIPort
|
|
);
|
|
} else {
|
|
var url = m_utilsInc.formatString(
|
|
this.CGI.getStreamChannels.digital,
|
|
oDeviceInfo.szHttpProtocol,
|
|
oDeviceInfo.szIP,
|
|
oDeviceInfo.iCGIPort
|
|
);
|
|
}
|
|
let szURI;
|
|
if (oDeviceInfo.iAnalogChannelNum != 0) {
|
|
szURI = this.CGI.getStreamChannels.analog;
|
|
} else {
|
|
szURI = this.CGI.getStreamChannels.digital;
|
|
}
|
|
return m_webVideoCtrl.I_SendHTTPRequest(
|
|
oDeviceInfo.szDeviceIdentify,
|
|
szURI,
|
|
options
|
|
);
|
|
};
|
|
ISAPIProtocol.prototype.getPPPoEStatus = function (oDeviceInfo, options) {
|
|
return m_webVideoCtrl.I_SendHTTPRequest(
|
|
oDeviceInfo.szDeviceIdentify,
|
|
this.CGI.getPPPoEStatus,
|
|
options
|
|
);
|
|
};
|
|
ISAPIProtocol.prototype.getUPnPPortStatus = function (
|
|
oDeviceInfo,
|
|
options
|
|
) {
|
|
return m_webVideoCtrl.I_SendHTTPRequest(
|
|
oDeviceInfo.szDeviceIdentify,
|
|
this.CGI.getUPnPPortStatus,
|
|
options
|
|
);
|
|
};
|
|
ISAPIProtocol.prototype.getNetworkBond = function (oDeviceInfo, options) {
|
|
return m_webVideoCtrl.I_SendHTTPRequest(
|
|
oDeviceInfo.szDeviceIdentify,
|
|
this.CGI.getNetworkBond,
|
|
options
|
|
);
|
|
};
|
|
ISAPIProtocol.prototype.getNetworkInterface = function (
|
|
oDeviceInfo,
|
|
options
|
|
) {
|
|
return m_webVideoCtrl.I_SendHTTPRequest(
|
|
oDeviceInfo.szDeviceIdentify,
|
|
this.CGI.getNetworkInterface,
|
|
options
|
|
);
|
|
};
|
|
ISAPIProtocol.prototype.getPortInfo = function (oDeviceInfo, options) {
|
|
return m_webVideoCtrl.I_SendHTTPRequest(
|
|
oDeviceInfo.szDeviceIdentify,
|
|
this.CGI.getPortInfo,
|
|
options
|
|
);
|
|
};
|
|
ISAPIProtocol.prototype.startRealPlay = function (oDeviceInfo, options) {
|
|
let oPromise = new Promise(async function (resolve, reject) {
|
|
var iChannelID = options.iChannelID * 100 + options.iStreamType,
|
|
szUrl = "";
|
|
var szRtspIP = m_utilsInc.delPort(oDeviceInfo.szIP);
|
|
var iRtspPort = oDeviceInfo.iRtspPort;
|
|
if (options.iPort) {
|
|
iRtspPort = options.iPort;
|
|
}
|
|
if (options.bZeroChannel) {
|
|
szUrl = m_utilsInc.formatString(
|
|
oDeviceInfo.oProtocolInc.CGI.startRealPlay.zeroChannels,
|
|
szRtspIP,
|
|
iRtspPort,
|
|
iChannelID
|
|
);
|
|
} else {
|
|
szUrl = m_utilsInc.formatString(
|
|
oDeviceInfo.oProtocolInc.CGI.startRealPlay.channels,
|
|
szRtspIP,
|
|
iRtspPort,
|
|
iChannelID
|
|
);
|
|
}
|
|
var addToWndSet = function () {
|
|
var wndInfo = new wndInfoClass();
|
|
wndInfo.iIndex = options.iWndIndex;
|
|
wndInfo.szIP = oDeviceInfo.szIP;
|
|
wndInfo.iCGIPort = oDeviceInfo.iCGIPort;
|
|
wndInfo.szDeviceIdentify = oDeviceInfo.szDeviceIdentify;
|
|
wndInfo.iChannelID = options.iChannelID;
|
|
wndInfo.iPlayStatus = PLAY_STATUS_REALPLAY;
|
|
m_wndSet.push(wndInfo);
|
|
};
|
|
await m_pluginOBJECT.JS_SetSecretKey(0, m_oLocalCfg.secretKey, 1);
|
|
m_pluginOBJECT
|
|
.JS_Play(
|
|
szUrl,
|
|
{ auth: oDeviceInfo.szAuth, userInfo: oDeviceInfo.szAuth },
|
|
options.iWndIndex,
|
|
"",
|
|
"",
|
|
options.bFlag
|
|
)
|
|
.then(
|
|
() => {
|
|
addToWndSet();
|
|
resolve();
|
|
},
|
|
() => {
|
|
reject();
|
|
}
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
ISAPIProtocol.prototype.startPlay = function (oDeviceInfo, options) {
|
|
let oPromise = new Promise(async function (resolve, reject) {
|
|
var addToWndSet = function () {
|
|
var wndInfo = new wndInfoClass();
|
|
wndInfo.iIndex = options.iWndIndex;
|
|
wndInfo.szIP = oDeviceInfo.szIP;
|
|
wndInfo.szDeviceIdentify = oDeviceInfo.szDeviceIdentify;
|
|
wndInfo.iPlayStatus = PLAY_STATUS_PLAYBACK;
|
|
m_wndSet.push(wndInfo);
|
|
};
|
|
m_pluginOBJECT
|
|
.JS_Play(
|
|
options.szUrl,
|
|
{ auth: oDeviceInfo.szAuth, userInfo: oDeviceInfo.szAuth },
|
|
options.iWndIndex,
|
|
options.startTime,
|
|
options.endTime,
|
|
true
|
|
)
|
|
.then(
|
|
() => {
|
|
addToWndSet();
|
|
resolve();
|
|
},
|
|
() => {
|
|
reject();
|
|
}
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
ISAPIProtocol.prototype.startVoiceTalk = function (
|
|
oDeviceInfo,
|
|
iAudioChannel
|
|
) {
|
|
var szOpenUrl = m_utilsInc.formatString(
|
|
this.CGI.startVoiceTalk.open,
|
|
oDeviceInfo.szHttpProtocol,
|
|
oDeviceInfo.szIP,
|
|
oDeviceInfo.iCGIPort,
|
|
iAudioChannel
|
|
),
|
|
szCloseUrl = m_utilsInc.formatString(
|
|
this.CGI.startVoiceTalk.close,
|
|
oDeviceInfo.szHttpProtocol,
|
|
oDeviceInfo.szIP,
|
|
oDeviceInfo.iCGIPort,
|
|
iAudioChannel
|
|
),
|
|
szAudioDataUrl = m_utilsInc.formatString(
|
|
this.CGI.startVoiceTalk.audioData,
|
|
oDeviceInfo.szHttpProtocol,
|
|
oDeviceInfo.szIP,
|
|
oDeviceInfo.iCGIPort,
|
|
iAudioChannel
|
|
);
|
|
return m_pluginOBJECT.JS_StartTalk(
|
|
szOpenUrl,
|
|
szCloseUrl,
|
|
szAudioDataUrl,
|
|
oDeviceInfo.szAuth,
|
|
oDeviceInfo.iAudioType,
|
|
oDeviceInfo.m_iAudioBitRate,
|
|
oDeviceInfo.m_iAudioSamplingRate,
|
|
oDeviceInfo.m_iSoundChan,
|
|
oDeviceInfo.m_iDeviceAudioSoundChan
|
|
);
|
|
};
|
|
ISAPIProtocol.prototype.audioPlay = function (options) {
|
|
return m_pluginOBJECT.JS_AudioPlay(
|
|
options.szUrl,
|
|
options.szAuth,
|
|
-1,
|
|
-1,
|
|
true,
|
|
options.iAudioType
|
|
);
|
|
};
|
|
ISAPIProtocol.prototype.ptzAutoControl = function (
|
|
oDeviceInfo,
|
|
bStop,
|
|
oWndInfo,
|
|
options
|
|
) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
var iChannelID = oWndInfo.iChannelID,
|
|
szUrl = "",
|
|
szData = "";
|
|
options.iPTZSpeed =
|
|
options.iPTZSpeed < 7 ? options.iPTZSpeed * 15 : 100;
|
|
if (bStop) {
|
|
options.iPTZSpeed = 0;
|
|
}
|
|
if (iChannelID <= oDeviceInfo.iAnalogChannelNum) {
|
|
szUrl = m_utilsInc.formatString(
|
|
m_ISAPIProtocol.CGI.ptzAutoControl.analog,
|
|
oDeviceInfo.szHttpProtocol,
|
|
oDeviceInfo.szIP,
|
|
oDeviceInfo.iCGIPort,
|
|
oWndInfo.iChannelID
|
|
);
|
|
} else {
|
|
szUrl = m_utilsInc.formatString(
|
|
m_ISAPIProtocol.CGI.ptzAutoControl.digital,
|
|
oDeviceInfo.szHttpProtocol,
|
|
oDeviceInfo.szIP,
|
|
oDeviceInfo.iCGIPort,
|
|
oWndInfo.iChannelID
|
|
);
|
|
}
|
|
szData =
|
|
"<?xml version='1.0' encoding='UTF-8'?>" +
|
|
"<autoPanData>" +
|
|
"<autoPan>" +
|
|
options.iPTZSpeed +
|
|
"</autoPan>" +
|
|
"</autoPanData>";
|
|
var newOptions = {
|
|
type: "PUT",
|
|
url: szUrl,
|
|
data: szData,
|
|
success: null,
|
|
error: null,
|
|
};
|
|
var self = this;
|
|
m_utilsInc.extend(newOptions, options);
|
|
m_utilsInc.extend(newOptions, {
|
|
success: function () {
|
|
oWndInfo.bPTZAuto = !oWndInfo.bPTZAuto;
|
|
if (options.success) {
|
|
options.success();
|
|
}
|
|
resolve();
|
|
},
|
|
error: function (oError) {
|
|
if (options.error) {
|
|
options.error(oError);
|
|
}
|
|
reject(oError);
|
|
},
|
|
});
|
|
m_webVideoCtrl.I_SendHTTPRequest(
|
|
oDeviceInfo.szDeviceIdentify,
|
|
"",
|
|
newOptions
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
ISAPIProtocol.prototype.ptzControl = function (
|
|
oDeviceInfo,
|
|
bStop,
|
|
oWndInfo,
|
|
options
|
|
) {
|
|
var iChannelID = oWndInfo.iChannelID,
|
|
szUrl = "";
|
|
if (oWndInfo.bPTZAuto) {
|
|
this.ptzAutoControl(oDeviceInfo, true, oWndInfo, { iPTZSpeed: 0 });
|
|
}
|
|
if (bStop) {
|
|
options.iPTZSpeed = 0;
|
|
} else {
|
|
options.iPTZSpeed =
|
|
options.iPTZSpeed < 7 ? options.iPTZSpeed * 15 : 100;
|
|
}
|
|
var oDirection = [
|
|
{},
|
|
{ pan: 0, tilt: options.iPTZSpeed },
|
|
{ pan: 0, tilt: -options.iPTZSpeed },
|
|
{ pan: -options.iPTZSpeed, tilt: 0 },
|
|
{ pan: options.iPTZSpeed, tilt: 0 },
|
|
{ pan: -options.iPTZSpeed, tilt: options.iPTZSpeed },
|
|
{ pan: -options.iPTZSpeed, tilt: -options.iPTZSpeed },
|
|
{ pan: options.iPTZSpeed, tilt: options.iPTZSpeed },
|
|
{ pan: options.iPTZSpeed, tilt: -options.iPTZSpeed },
|
|
{},
|
|
{ speed: options.iPTZSpeed },
|
|
{ speed: -options.iPTZSpeed },
|
|
{ speed: options.iPTZSpeed },
|
|
{ speed: -options.iPTZSpeed },
|
|
{ speed: options.iPTZSpeed },
|
|
{ speed: -options.iPTZSpeed },
|
|
];
|
|
var szData = "";
|
|
var oCommond = {};
|
|
switch (options.iPTZIndex) {
|
|
case 1:
|
|
case 2:
|
|
case 3:
|
|
case 4:
|
|
case 5:
|
|
case 6:
|
|
case 7:
|
|
case 8:
|
|
oCommond = this.CGI.ptzControl;
|
|
szData =
|
|
"<?xml version='1.0' encoding='UTF-8'?>" +
|
|
"<PTZData>" +
|
|
"<pan>" +
|
|
oDirection[options.iPTZIndex].pan +
|
|
"</pan>" +
|
|
"<tilt>" +
|
|
oDirection[options.iPTZIndex].tilt +
|
|
"</tilt>" +
|
|
"</PTZData>";
|
|
break;
|
|
case 10:
|
|
case 11:
|
|
oCommond = this.CGI.ptzControl;
|
|
szData =
|
|
"<?xml version='1.0' encoding='UTF-8'?>" +
|
|
"<PTZData>" +
|
|
"<zoom>" +
|
|
oDirection[options.iPTZIndex].speed +
|
|
"</zoom>" +
|
|
"</PTZData>";
|
|
break;
|
|
case 12:
|
|
case 13:
|
|
oCommond = this.CGI.ptzFocus;
|
|
szData =
|
|
"<?xml version='1.0' encoding='UTF-8'?>" +
|
|
"<FocusData>" +
|
|
"<focus>" +
|
|
oDirection[options.iPTZIndex].speed +
|
|
"</focus>" +
|
|
"</FocusData>";
|
|
break;
|
|
case 14:
|
|
case 15:
|
|
oCommond = this.CGI.ptzIris;
|
|
szData =
|
|
"<?xml version='1.0' encoding='UTF-8'?>" +
|
|
"<IrisData>" +
|
|
"<iris>" +
|
|
oDirection[options.iPTZIndex].speed +
|
|
"</iris>" +
|
|
"</IrisData>";
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
if (iChannelID <= oDeviceInfo.iAnalogChannelNum) {
|
|
szUrl = m_utilsInc.formatString(
|
|
oCommond.analog,
|
|
oDeviceInfo.szHttpProtocol,
|
|
oDeviceInfo.szIP,
|
|
oDeviceInfo.iCGIPort,
|
|
oWndInfo.iChannelID
|
|
);
|
|
} else {
|
|
szUrl = m_utilsInc.formatString(
|
|
oCommond.digital,
|
|
oDeviceInfo.szHttpProtocol,
|
|
oDeviceInfo.szIP,
|
|
oDeviceInfo.iCGIPort,
|
|
oWndInfo.iChannelID
|
|
);
|
|
}
|
|
var newOptions = {
|
|
type: "PUT",
|
|
url: szUrl,
|
|
data: szData,
|
|
success: null,
|
|
error: null,
|
|
};
|
|
m_utilsInc.extend(newOptions, options);
|
|
return m_webVideoCtrl.I_SendHTTPRequest(
|
|
oDeviceInfo.szDeviceIdentify,
|
|
"",
|
|
newOptions
|
|
);
|
|
};
|
|
ISAPIProtocol.prototype.setPreset = function (
|
|
oDeviceInfo,
|
|
oWndInfo,
|
|
options
|
|
) {
|
|
var iChannelID = oWndInfo.iChannelID,
|
|
szUrl = "",
|
|
szData = "";
|
|
if (iChannelID <= oDeviceInfo.iAnalogChannelNum) {
|
|
szUrl = m_utilsInc.formatString(
|
|
this.CGI.setPreset.analog,
|
|
oDeviceInfo.szHttpProtocol,
|
|
oDeviceInfo.szIP,
|
|
oDeviceInfo.iCGIPort,
|
|
oWndInfo.iChannelID,
|
|
options.iPresetID
|
|
);
|
|
} else {
|
|
szUrl = m_utilsInc.formatString(
|
|
this.CGI.setPreset.digital,
|
|
oDeviceInfo.szHttpProtocol,
|
|
oDeviceInfo.szIP,
|
|
oDeviceInfo.iCGIPort,
|
|
oWndInfo.iChannelID,
|
|
options.iPresetID
|
|
);
|
|
}
|
|
szData = "<?xml version='1.0' encoding='UTF-8'?>";
|
|
szData += "<PTZPreset>";
|
|
szData += "<id>" + options.iPresetID + "</id>";
|
|
if (oDeviceInfo.szDeviceType != DEVICE_TYPE_IPDOME) {
|
|
szData +=
|
|
"<presetName>" + "Preset" + options.iPresetID + "</presetName>";
|
|
}
|
|
szData += "</PTZPreset>";
|
|
var newOptions = {
|
|
type: "PUT",
|
|
url: szUrl,
|
|
data: szData,
|
|
success: null,
|
|
error: null,
|
|
};
|
|
m_utilsInc.extend(newOptions, options);
|
|
return m_webVideoCtrl.I_SendHTTPRequest(
|
|
oDeviceInfo.szDeviceIdentify,
|
|
"",
|
|
newOptions
|
|
);
|
|
};
|
|
ISAPIProtocol.prototype.goPreset = function (
|
|
oDeviceInfo,
|
|
oWndInfo,
|
|
options
|
|
) {
|
|
var iChannelID = oWndInfo.iChannelID,
|
|
szUrl = "";
|
|
if (iChannelID <= oDeviceInfo.iAnalogChannelNum) {
|
|
szUrl = m_utilsInc.formatString(
|
|
this.CGI.goPreset.analog,
|
|
oDeviceInfo.szHttpProtocol,
|
|
oDeviceInfo.szIP,
|
|
oDeviceInfo.iCGIPort,
|
|
oWndInfo.iChannelID,
|
|
options.iPresetID
|
|
);
|
|
} else {
|
|
szUrl = m_utilsInc.formatString(
|
|
this.CGI.goPreset.digital,
|
|
oDeviceInfo.szHttpProtocol,
|
|
oDeviceInfo.szIP,
|
|
oDeviceInfo.iCGIPort,
|
|
oWndInfo.iChannelID,
|
|
options.iPresetID
|
|
);
|
|
}
|
|
var newOptions = { type: "PUT", url: szUrl, success: null, error: null };
|
|
m_utilsInc.extend(newOptions, options);
|
|
return m_webVideoCtrl.I_SendHTTPRequest(
|
|
oDeviceInfo.szDeviceIdentify,
|
|
"",
|
|
newOptions
|
|
);
|
|
};
|
|
ISAPIProtocol.prototype.recordSearch = function (oDeviceInfo, options) {
|
|
let oPromise = new Promise((resolve, reject) => {
|
|
var szUrl = "",
|
|
szData = "",
|
|
iChannelID = options.iChannelID,
|
|
iStreamType = options.iStreamType,
|
|
szStartTime = options.szStartTime.replace(" ", "T") + "Z",
|
|
szEndTime = options.szEndTime.replace(" ", "T") + "Z";
|
|
szUrl = m_utilsInc.formatString(
|
|
m_ISAPIProtocol.CGI.recordSearch,
|
|
oDeviceInfo.szHttpProtocol,
|
|
oDeviceInfo.szIP,
|
|
oDeviceInfo.iCGIPort
|
|
);
|
|
szData =
|
|
"<?xml version='1.0' encoding='UTF-8'?>" +
|
|
"<CMSearchDescription>" +
|
|
"<searchID>" +
|
|
new UUID() +
|
|
"</searchID>" +
|
|
"<trackList><trackID>" +
|
|
(iChannelID * 100 + iStreamType) +
|
|
"</trackID></trackList>" +
|
|
"<timeSpanList>" +
|
|
"<timeSpan>" +
|
|
"<startTime>" +
|
|
szStartTime +
|
|
"</startTime>" +
|
|
"<endTime>" +
|
|
szEndTime +
|
|
"</endTime>" +
|
|
"</timeSpan>" +
|
|
"</timeSpanList>" +
|
|
"<maxResults>50</maxResults>" +
|
|
"<searchResultPostion>" +
|
|
options.iSearchPos +
|
|
"</searchResultPostion>" +
|
|
"<metadataList>" +
|
|
"<metadataDescriptor>//metadata.ISAPI.org/VideoMotion</metadataDescriptor>" +
|
|
"</metadataList>" +
|
|
"</CMSearchDescription>";
|
|
var httpClient = new HttpPluginClient();
|
|
var newOptions = {
|
|
type: "POST",
|
|
url: szUrl,
|
|
data: szData,
|
|
success: null,
|
|
error: null,
|
|
};
|
|
m_utilsInc.extend(newOptions, options);
|
|
m_utilsInc.extend(newOptions, {
|
|
success: function (xmlDoc) {
|
|
var arrXml = [];
|
|
arrXml.push("<CMSearchResult>");
|
|
arrXml.push(
|
|
"<responseStatus>" +
|
|
NS.$XML(xmlDoc).find("responseStatus").eq(0).text() +
|
|
"</responseStatus>"
|
|
);
|
|
arrXml.push(
|
|
"<responseStatusStrg>" +
|
|
NS.$XML(xmlDoc).find("responseStatusStrg").eq(0).text() +
|
|
"</responseStatusStrg>"
|
|
);
|
|
arrXml.push(
|
|
"<numOfMatches>" +
|
|
NS.$XML(xmlDoc).find("numOfMatches").eq(0).text() +
|
|
"</numOfMatches>"
|
|
);
|
|
arrXml.push("<matchList>");
|
|
var nodeList = NS.$XML(xmlDoc).find("searchMatchItem", true);
|
|
for (var i = 0, iLen = nodeList.length; i < iLen; i++) {
|
|
var node = nodeList[i];
|
|
arrXml.push("<searchMatchItem>");
|
|
arrXml.push(
|
|
"<trackID>" +
|
|
NS.$XML(node).find("trackID").eq(0).text() +
|
|
"</trackID>"
|
|
);
|
|
arrXml.push(
|
|
"<startTime>" +
|
|
NS.$XML(node).find("startTime").eq(0).text() +
|
|
"</startTime>"
|
|
);
|
|
arrXml.push(
|
|
"<endTime>" +
|
|
NS.$XML(node).find("endTime").eq(0).text() +
|
|
"</endTime>"
|
|
);
|
|
arrXml.push(
|
|
"<playbackURI>" +
|
|
m_utilsInc.escape(
|
|
NS.$XML(node).find("playbackURI").eq(0).text()
|
|
) +
|
|
"</playbackURI>"
|
|
);
|
|
arrXml.push(
|
|
"<metadataDescriptor>" +
|
|
NS.$XML(node)
|
|
.find("metadataDescriptor")
|
|
.eq(0)
|
|
.text()
|
|
.split("/")[1] +
|
|
"</metadataDescriptor>"
|
|
);
|
|
arrXml.push("</searchMatchItem>");
|
|
}
|
|
arrXml.push("</matchList>");
|
|
arrXml.push("</CMSearchResult>");
|
|
xmlDoc = m_utilsInc.loadXML(arrXml.join(""));
|
|
if (options.success) {
|
|
options.success(xmlDoc);
|
|
}
|
|
resolve(xmlDoc);
|
|
},
|
|
error: function (oError) {
|
|
if (options.error) {
|
|
options.error(oError);
|
|
}
|
|
reject(oError);
|
|
},
|
|
});
|
|
m_webVideoCtrl.I_SendHTTPRequest(
|
|
oDeviceInfo.szDeviceIdentify,
|
|
"",
|
|
newOptions
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
ISAPIProtocol.prototype.startPlayback = function (oDeviceInfo, options) {
|
|
let oPromise = new Promise(async function (resolve, reject) {
|
|
var iWndIndex = options.iWndIndex,
|
|
szUrl = "",
|
|
szStartTime = options.szStartTime,
|
|
szEndTime = options.szEndTime;
|
|
var szRtspIP = m_utilsInc.delPort(oDeviceInfo.szIP);
|
|
var iRtspPort = oDeviceInfo.iRtspPort;
|
|
if (options.iPort) {
|
|
iRtspPort = options.iPort;
|
|
}
|
|
szUrl = m_utilsInc.formatString(
|
|
options.cgi,
|
|
szRtspIP,
|
|
iRtspPort,
|
|
options.iChannelID
|
|
);
|
|
if (!m_utilsInc.isUndefined(options.oTransCodeParam)) {
|
|
var szTransStreamXml = _generateTransCodeXml(options.oTransCodeParam);
|
|
if ("" == szTransStreamXml) {
|
|
return -1;
|
|
}
|
|
m_pluginOBJECT.JS_SetTrsPlayBackParam(iWndIndex, szTransStreamXml);
|
|
}
|
|
var addToWndSet = function () {
|
|
var wndInfo = new wndInfoClass();
|
|
wndInfo.iIndex = iWndIndex;
|
|
wndInfo.szIP = oDeviceInfo.szIP;
|
|
wndInfo.iCGIPort = oDeviceInfo.iCGIPort;
|
|
wndInfo.szDeviceIdentify = oDeviceInfo.szDeviceIdentify;
|
|
wndInfo.iChannelID = options.iChannelID;
|
|
wndInfo.iPlayStatus = PLAY_STATUS_PLAYBACK;
|
|
m_wndSet.push(wndInfo);
|
|
};
|
|
m_pluginOBJECT
|
|
.JS_Play(
|
|
szUrl,
|
|
{ auth: oDeviceInfo.szAuth, userInfo: oDeviceInfo.szAuth },
|
|
iWndIndex,
|
|
szStartTime,
|
|
szEndTime,
|
|
options.bFlag
|
|
)
|
|
.then(
|
|
() => {
|
|
addToWndSet();
|
|
resolve();
|
|
},
|
|
() => {
|
|
reject();
|
|
}
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
ISAPIProtocol.prototype.reversePlayback = function (oDeviceInfo, options) {
|
|
let oPromise = new Promise(function (resolve, reject) {
|
|
var iWndIndex = options.iWndIndex,
|
|
szStartTime = options.szStartTime,
|
|
szEndTime = options.szEndTime;
|
|
var szRtspIP = m_utilsInc.delPort(oDeviceInfo.szIP);
|
|
var iRtspPort = oDeviceInfo.iRtspPort;
|
|
if (options.iPort) {
|
|
iRtspPort = options.iPort;
|
|
}
|
|
var szUrl = m_utilsInc.formatString(
|
|
options.cgi,
|
|
szRtspIP,
|
|
iRtspPort,
|
|
options.iChannelID
|
|
);
|
|
m_pluginOBJECT
|
|
.JS_ReversePlay(
|
|
szUrl,
|
|
{ auth: oDeviceInfo.szAuth, userInfo: oDeviceInfo.szAuth },
|
|
iWndIndex,
|
|
szStartTime,
|
|
szEndTime
|
|
)
|
|
.then(
|
|
() => {
|
|
var wndInfo = new wndInfoClass();
|
|
wndInfo.iIndex = iWndIndex;
|
|
wndInfo.szIP = oDeviceInfo.szIP;
|
|
wndInfo.iCGIPort = oDeviceInfo.iCGIPort;
|
|
wndInfo.szDeviceIdentify = oDeviceInfo.szDeviceIdentify;
|
|
wndInfo.iChannelID = options.iChannelID;
|
|
wndInfo.iPlayStatus = PLAY_STATUS_REVERSE_PLAYBACK;
|
|
m_wndSet.push(wndInfo);
|
|
resolve();
|
|
},
|
|
() => {
|
|
reject();
|
|
}
|
|
);
|
|
});
|
|
return oPromise;
|
|
};
|
|
ISAPIProtocol.prototype.startDownloadRecord = function (
|
|
oDeviceInfo,
|
|
options
|
|
) {
|
|
var szUrl = m_utilsInc.formatString(
|
|
this.CGI.startDownloadRecord,
|
|
oDeviceInfo.szHttpProtocol,
|
|
oDeviceInfo.szIP,
|
|
oDeviceInfo.iCGIPort
|
|
);
|
|
var szDownXml =
|
|
"<?xml version='1.0' encoding='UTF-8'?>" +
|
|
"<downloadRequest>" +
|
|
"<playbackURI>" +
|
|
m_utilsInc.escape(options.szPlaybackURI) +
|
|
"</playbackURI>" +
|
|
"</downloadRequest>";
|
|
return m_pluginOBJECT.JS_StartAsyncDownload(
|
|
szUrl,
|
|
oDeviceInfo.szAuth,
|
|
options.szFileName,
|
|
szDownXml,
|
|
options.bDateDir
|
|
);
|
|
};
|
|
ISAPIProtocol.prototype.exportDeviceConfig = function (oDeviceInfo) {
|
|
var szUrl = m_utilsInc.formatString(
|
|
this.CGI.downloaddeviceConfig,
|
|
oDeviceInfo.szHttpProtocol,
|
|
oDeviceInfo.szIP,
|
|
oDeviceInfo.iCGIPort
|
|
);
|
|
return m_pluginOBJECT.JS_DownloadFile(szUrl, oDeviceInfo.szAuth, "", 0);
|
|
};
|
|
ISAPIProtocol.prototype.importDeviceConfig = function (
|
|
oDeviceInfo,
|
|
options
|
|
) {
|
|
var szUrl = m_utilsInc.formatString(
|
|
this.CGI.uploaddeviceConfig,
|
|
oDeviceInfo.szHttpProtocol,
|
|
oDeviceInfo.szIP,
|
|
oDeviceInfo.iCGIPort
|
|
);
|
|
return m_pluginOBJECT.JS_StartAsynUpload(
|
|
szUrl,
|
|
"",
|
|
oDeviceInfo.szAuth,
|
|
options.szFileName,
|
|
0
|
|
);
|
|
};
|
|
ISAPIProtocol.prototype.restart = function (oDeviceInfo, options) {
|
|
var newOptions = { type: "PUT", success: null, error: null };
|
|
return m_webVideoCtrl.I_SendHTTPRequest(
|
|
oDeviceInfo.szDeviceIdentify,
|
|
this.CGI.restart,
|
|
newOptions
|
|
);
|
|
};
|
|
ISAPIProtocol.prototype.restore = function (oDeviceInfo, szMode, options) {
|
|
var szUrl = m_utilsInc.formatString(
|
|
this.CGI.restore,
|
|
oDeviceInfo.szHttpProtocol,
|
|
oDeviceInfo.szIP,
|
|
oDeviceInfo.iCGIPort,
|
|
szMode
|
|
);
|
|
var newOptions = { type: "PUT", url: szUrl, success: null, error: null };
|
|
return m_webVideoCtrl.I_SendHTTPRequest(
|
|
oDeviceInfo.szDeviceIdentify,
|
|
"",
|
|
newOptions
|
|
);
|
|
};
|
|
ISAPIProtocol.prototype.startUpgrade = function (oDeviceInfo, szFileName) {
|
|
var szUpgradeURL = m_utilsInc.formatString(
|
|
this.CGI.startUpgrade.upgrade,
|
|
oDeviceInfo.szHttpProtocol,
|
|
oDeviceInfo.szIP,
|
|
oDeviceInfo.iCGIPort
|
|
),
|
|
szStatusURL = m_utilsInc.formatString(
|
|
this.CGI.startUpgrade.status,
|
|
oDeviceInfo.szHttpProtocol,
|
|
oDeviceInfo.szIP,
|
|
oDeviceInfo.iCGIPort
|
|
);
|
|
return m_pluginOBJECT.JS_StartUpgrade(
|
|
szUpgradeURL,
|
|
"",
|
|
oDeviceInfo.szAuth,
|
|
szFileName
|
|
);
|
|
};
|
|
ISAPIProtocol.prototype.set3DZoom = function (
|
|
oDeviceInfo,
|
|
oWndInfo,
|
|
oPoints,
|
|
options
|
|
) {
|
|
var iChannelID = oWndInfo.iChannelID,
|
|
szUrl = "";
|
|
if (iChannelID <= oDeviceInfo.iAnalogChannelNum) {
|
|
szUrl = m_utilsInc.formatString(
|
|
this.CGI.set3DZoom.analog,
|
|
oDeviceInfo.szHttpProtocol,
|
|
oDeviceInfo.szIP,
|
|
oDeviceInfo.iCGIPort,
|
|
oWndInfo.iChannelID
|
|
);
|
|
} else {
|
|
szUrl = m_utilsInc.formatString(
|
|
this.CGI.set3DZoom.digital,
|
|
oDeviceInfo.szHttpProtocol,
|
|
oDeviceInfo.szIP,
|
|
oDeviceInfo.iCGIPort,
|
|
oWndInfo.iChannelID
|
|
);
|
|
}
|
|
if (
|
|
oPoints[0][0] === 0 &&
|
|
oPoints[0][1] === 0 &&
|
|
!(oPoints[2][0] === 0 && oPoints[2][1] === 0)
|
|
) {
|
|
oPoints[0][0] = oPoints[2][0];
|
|
oPoints[0][1] = oPoints[2][1];
|
|
}
|
|
var szXml =
|
|
"<?xml version='1.0' encoding='UTF-8'?><Position3D><StartPoint>" +
|
|
"<positionX>" +
|
|
parseInt(oPoints[0][0] * 255, 10) +
|
|
"</positionX>" +
|
|
"<positionY>" +
|
|
(255 - parseInt(oPoints[0][1] * 255, 10)) +
|
|
"</positionY>" +
|
|
"</StartPoint><EndPoint><positionX>" +
|
|
parseInt(oPoints[2][0] * 255, 10) +
|
|
"</positionX>" +
|
|
"<positionY>" +
|
|
(255 - parseInt(oPoints[2][1] * 255, 10)) +
|
|
"</positionY></EndPoint></Position3D>";
|
|
var httpClient = new HttpPluginClient();
|
|
var newOptions = {
|
|
type: "PUT",
|
|
url: szUrl,
|
|
data: szXml,
|
|
success: null,
|
|
error: null,
|
|
};
|
|
m_utilsInc.extend(newOptions, options);
|
|
return m_webVideoCtrl.I_SendHTTPRequest(
|
|
oDeviceInfo.szDeviceIdentify,
|
|
"",
|
|
newOptions
|
|
);
|
|
};
|
|
ISAPIProtocol.prototype.getSDKCapa = function (oDeviceInfo, options) {
|
|
return m_webVideoCtrl.I_SendHTTPRequest(
|
|
oDeviceInfo.szDeviceIdentify,
|
|
this.CGI.SDKCapabilities,
|
|
options
|
|
);
|
|
};
|
|
ISAPIProtocol.prototype.deviceCapturePic = function (
|
|
oDeviceInfo,
|
|
iChannelID,
|
|
szPicName,
|
|
options
|
|
) {
|
|
var iChannelID = iChannelID * 100 + 1;
|
|
var iRet = -1;
|
|
var szUrl = m_utilsInc.formatString(
|
|
this.CGI.deviceCapture.channels,
|
|
oDeviceInfo.szHttpProtocol,
|
|
oDeviceInfo.szIP,
|
|
oDeviceInfo.iCGIPort,
|
|
iChannelID
|
|
);
|
|
var aQuery = [];
|
|
if (m_utilsInc.isInt(options.iResolutionWidth)) {
|
|
aQuery.push("videoResolutionWidth=" + options.iResolutionWidth);
|
|
}
|
|
if (m_utilsInc.isInt(options.iResolutionHeight)) {
|
|
aQuery.push("videoResolutionHeight=" + options.iResolutionHeight);
|
|
}
|
|
if (aQuery.length > 0) {
|
|
szUrl += "?" + aQuery.join("&");
|
|
}
|
|
var JDeviceCapturePic = function (szUrl, szFileName) {
|
|
var szFileFormat = ".jpg";
|
|
$("body").append(
|
|
'<a id="jsplugin_download_a" href="' +
|
|
szUrl +
|
|
'" download=' +
|
|
szFileName +
|
|
szFileFormat +
|
|
'><li id="jsplugin_download_li"></li></a>'
|
|
);
|
|
$("#jsplugin_download_li").trigger("click");
|
|
$("#jsplugin_download_a").remove();
|
|
return 0;
|
|
};
|
|
iRet = JDeviceCapturePic(szUrl, szPicName);
|
|
return iRet;
|
|
};
|
|
ISAPIProtocol.prototype.digestLogin = function (
|
|
szIP,
|
|
iProtocol,
|
|
iPort,
|
|
szUserName,
|
|
szPassword,
|
|
options
|
|
) {
|
|
var szHttpProtocol = "";
|
|
if (iProtocol == 2) {
|
|
szHttpProtocol = "https://";
|
|
} else {
|
|
szHttpProtocol = "http://";
|
|
}
|
|
var szUrl = m_utilsInc.formatString(
|
|
this.CGI.login,
|
|
szHttpProtocol,
|
|
szIP,
|
|
iPort
|
|
);
|
|
var newOptions = {
|
|
type: "GET",
|
|
url: szUrl,
|
|
auth: m_utilsInc.Base64.encode(":" + szUserName + ":" + szPassword),
|
|
success: null,
|
|
error: null,
|
|
};
|
|
var szDeviceIdentify = szIP + "_" + iPort;
|
|
m_utilsInc.extend(newOptions, options);
|
|
return m_webVideoCtrl.I_SendHTTPRequest(szDeviceIdentify, "", newOptions);
|
|
};
|
|
ISAPIProtocol.prototype.getSystemCapa = function (oDeviceInfo, options) {
|
|
return m_webVideoCtrl.I_SendHTTPRequest(
|
|
oDeviceInfo.szDeviceIdentify,
|
|
this.CGI.systemCapabilities,
|
|
options
|
|
);
|
|
};
|
|
(function (wvc) {
|
|
var XML = function (xd) {
|
|
this.elems = [];
|
|
this.length = 0;
|
|
this.length = this.elems.push(xd);
|
|
};
|
|
XML.prototype.find = function (szNodeName, bRet) {
|
|
var oXmlNode = this.elems[this.length - 1]
|
|
? this.elems[this.length - 1].getElementsByTagName(szNodeName)
|
|
: [];
|
|
this.length = this.elems.push(oXmlNode);
|
|
if (bRet) {
|
|
return oXmlNode;
|
|
} else {
|
|
return this;
|
|
}
|
|
};
|
|
XML.prototype.eq = function (i, bRet) {
|
|
var iLen = this.elems[this.length - 1].length,
|
|
oXmlNode = null;
|
|
if (iLen > 0 && i < iLen) {
|
|
oXmlNode = this.elems[this.length - 1][i];
|
|
}
|
|
this.length = this.elems.push(oXmlNode);
|
|
if (bRet) {
|
|
return oXmlNode;
|
|
} else {
|
|
return this;
|
|
}
|
|
};
|
|
XML.prototype.text = function (szText) {
|
|
if (this.elems[this.length - 1]) {
|
|
if (szText) {
|
|
if (window.DOMParser) {
|
|
this.elems[this.length - 1].textContent = szText;
|
|
} else {
|
|
this.elems[this.length - 1].text = szText;
|
|
}
|
|
} else {
|
|
if (window.DOMParser) {
|
|
return this.elems[this.length - 1].textContent;
|
|
} else {
|
|
return this.elems[this.length - 1].text;
|
|
}
|
|
}
|
|
} else {
|
|
return "";
|
|
}
|
|
};
|
|
XML.prototype.attr = function (szAttrName) {
|
|
if (this.elems[this.length - 1]) {
|
|
var oAttr =
|
|
this.elems[this.length - 1].attributes.getNamedItem(szAttrName);
|
|
if (oAttr) {
|
|
return oAttr.value;
|
|
} else {
|
|
return "";
|
|
}
|
|
}
|
|
};
|
|
wvc.$XML = function (xd) {
|
|
return new XML(xd);
|
|
};
|
|
})(this);
|
|
var Utils = function () {};
|
|
Utils.prototype.extend = function () {
|
|
var target = arguments[0] || {},
|
|
i = 1,
|
|
length = arguments.length,
|
|
options;
|
|
for (; i < length; i++) {
|
|
if ((options = arguments[i]) != null) {
|
|
for (var name in options) {
|
|
var src = target[name],
|
|
copy = options[name];
|
|
if (target === copy) {
|
|
continue;
|
|
}
|
|
if ("object" == typeof copy) {
|
|
target[name] = this.extend({}, copy);
|
|
} else if (copy !== undefined) {
|
|
target[name] = copy;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return target;
|
|
};
|
|
Utils.prototype.browser = function () {
|
|
var rchrome = /(chrome)[ \/]([\w.]+)/;
|
|
var rsafari = /(safari)[ \/]([\w.]+)/;
|
|
var ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/;
|
|
var rmsie = /(msie) ([\w.]+)/;
|
|
var rmsie2 = /(trident.*rv:)([\w.]+)/;
|
|
var rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/;
|
|
var ua = navigator.userAgent.toLowerCase();
|
|
var match = rchrome.exec(ua) ||
|
|
rsafari.exec(ua) ||
|
|
ropera.exec(ua) ||
|
|
rmsie.exec(ua) ||
|
|
rmsie2.exec(ua) ||
|
|
(ua.indexOf("compatible") < 0 && rmozilla.exec(ua)) || ["unknow", "0"];
|
|
if (match.length > 0 && match[1].indexOf("trident") > -1) {
|
|
match[1] = "msie";
|
|
}
|
|
var oBrowser = {};
|
|
oBrowser[match[1]] = true;
|
|
oBrowser.version = match[2];
|
|
return oBrowser;
|
|
};
|
|
Utils.prototype.loadXML = function (szXml) {
|
|
if (null == szXml || "" == szXml) {
|
|
return null;
|
|
}
|
|
var oXmlDoc = null;
|
|
if (window.DOMParser) {
|
|
var oParser = new DOMParser();
|
|
oXmlDoc = oParser.parseFromString(szXml, "text/xml");
|
|
} else {
|
|
oXmlDoc = new ActiveXObject("Microsoft.XMLDOM");
|
|
oXmlDoc.async = false;
|
|
oXmlDoc.loadXML(szXml);
|
|
}
|
|
return oXmlDoc;
|
|
};
|
|
Utils.prototype.toXMLStr = function (oXmlDoc) {
|
|
var szXmlDoc = "";
|
|
try {
|
|
var oSerializer = new XMLSerializer();
|
|
szXmlDoc = oSerializer.serializeToString(oXmlDoc);
|
|
} catch (e) {
|
|
try {
|
|
szXmlDoc = oXmlDoc.xml;
|
|
} catch (e) {
|
|
return "";
|
|
}
|
|
}
|
|
if (szXmlDoc.indexOf("<?xml") == -1) {
|
|
szXmlDoc = "<?xml version='1.0' encoding='utf-8'?>" + szXmlDoc;
|
|
}
|
|
return szXmlDoc;
|
|
};
|
|
Utils.prototype.escape = function (szStr) {
|
|
if (szStr) {
|
|
return szStr
|
|
.replace(/&/g, "&")
|
|
.replace(/</g, "<")
|
|
.replace(/>/g, ">");
|
|
}
|
|
return szStr;
|
|
};
|
|
Utils.prototype.dateFormat = function (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;
|
|
};
|
|
Utils.prototype.Base64 = {
|
|
_keyStr:
|
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
|
|
encode: function (input) {
|
|
var output = "";
|
|
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
|
|
var i = 0;
|
|
input = Utils.prototype.Base64._utf8_encode(input);
|
|
while (i < input.length) {
|
|
chr1 = input.charCodeAt(i++);
|
|
chr2 = input.charCodeAt(i++);
|
|
chr3 = input.charCodeAt(i++);
|
|
enc1 = chr1 >> 2;
|
|
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
|
|
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
|
|
enc4 = chr3 & 63;
|
|
if (isNaN(chr2)) {
|
|
enc3 = enc4 = 64;
|
|
} else if (isNaN(chr3)) {
|
|
enc4 = 64;
|
|
}
|
|
output =
|
|
output +
|
|
this._keyStr.charAt(enc1) +
|
|
this._keyStr.charAt(enc2) +
|
|
this._keyStr.charAt(enc3) +
|
|
this._keyStr.charAt(enc4);
|
|
}
|
|
return output;
|
|
},
|
|
decode: function (input) {
|
|
var output = "";
|
|
var chr1, chr2, chr3;
|
|
var enc1, enc2, enc3, enc4;
|
|
var i = 0;
|
|
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
|
|
while (i < input.length) {
|
|
enc1 = this._keyStr.indexOf(input.charAt(i++));
|
|
enc2 = this._keyStr.indexOf(input.charAt(i++));
|
|
enc3 = this._keyStr.indexOf(input.charAt(i++));
|
|
enc4 = this._keyStr.indexOf(input.charAt(i++));
|
|
chr1 = (enc1 << 2) | (enc2 >> 4);
|
|
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
|
|
chr3 = ((enc3 & 3) << 6) | enc4;
|
|
output = output + String.fromCharCode(chr1);
|
|
if (enc3 != 64) {
|
|
output = output + String.fromCharCode(chr2);
|
|
}
|
|
if (enc4 != 64) {
|
|
output = output + String.fromCharCode(chr3);
|
|
}
|
|
}
|
|
output = Utils.prototype.Base64._utf8_decode(output);
|
|
return output;
|
|
},
|
|
_utf8_encode: function (string) {
|
|
string = string.replace(/\r\n/g, "\n");
|
|
var utftext = "";
|
|
for (var n = 0; n < string.length; n++) {
|
|
var c = string.charCodeAt(n);
|
|
if (c < 128) {
|
|
utftext += String.fromCharCode(c);
|
|
} else if (c > 127 && c < 2048) {
|
|
utftext += String.fromCharCode((c >> 6) | 192);
|
|
utftext += String.fromCharCode((c & 63) | 128);
|
|
} else {
|
|
utftext += String.fromCharCode((c >> 12) | 224);
|
|
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
|
|
utftext += String.fromCharCode((c & 63) | 128);
|
|
}
|
|
}
|
|
return utftext;
|
|
},
|
|
_utf8_decode: function (utftext) {
|
|
var string = "";
|
|
var i = 0;
|
|
var c = (c1 = c2 = 0);
|
|
while (i < utftext.length) {
|
|
c = utftext.charCodeAt(i);
|
|
if (c < 128) {
|
|
string += String.fromCharCode(c);
|
|
i++;
|
|
} else if (c > 191 && c < 224) {
|
|
c2 = utftext.charCodeAt(i + 1);
|
|
string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
|
|
i += 2;
|
|
} else {
|
|
c2 = utftext.charCodeAt(i + 1);
|
|
c3 = utftext.charCodeAt(i + 2);
|
|
string += String.fromCharCode(
|
|
((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)
|
|
);
|
|
i += 3;
|
|
}
|
|
}
|
|
return string;
|
|
},
|
|
};
|
|
Utils.prototype.createEventScript = function (szFor, szEvent, szHtml) {
|
|
var oScript = document.createElement("script");
|
|
oScript.htmlFor = szFor;
|
|
oScript.event = szEvent;
|
|
oScript.innerHTML = szHtml;
|
|
document.body.parentNode.appendChild(oScript);
|
|
};
|
|
Utils.prototype.isInt = function (str) {
|
|
return /^\d+$/.test(str);
|
|
};
|
|
Utils.prototype.getDirName = function () {
|
|
var szDirName = "";
|
|
if (m_options.szBasePath !== "") {
|
|
szDirName = m_options.szBasePath;
|
|
} else {
|
|
var szDirNameRegex = /[^?#]*\//;
|
|
var oScript = document.getElementById("videonode");
|
|
if (oScript) {
|
|
szDirName = oScript.src.match(szDirNameRegex)[0];
|
|
} else {
|
|
var aScript = document.scripts;
|
|
for (var i = 0, iLen = aScript.length; i < iLen; i++) {
|
|
if (aScript[i].src.indexOf("webVideoCtrl.js") > -1) {
|
|
oScript = aScript[i];
|
|
break;
|
|
}
|
|
}
|
|
if (oScript) {
|
|
szDirName = oScript.src.match(szDirNameRegex)[0];
|
|
}
|
|
}
|
|
}
|
|
return szDirName;
|
|
};
|
|
Utils.prototype.loadScript = function (url, callback) {
|
|
var oScript = document.createElement("script");
|
|
oScript.type = "text/javascript";
|
|
oScript.onload = function () {
|
|
callback();
|
|
};
|
|
oScript.src = url;
|
|
document.getElementsByTagName("head")[0].appendChild(oScript);
|
|
};
|
|
Utils.prototype.cookie = function (key, value, options) {
|
|
if (
|
|
arguments.length > 1 &&
|
|
(value === null || typeof value !== "object")
|
|
) {
|
|
options = this.extend({}, options);
|
|
if (value === null) {
|
|
options.expires = -1;
|
|
}
|
|
if (typeof options.expires === "number") {
|
|
var days = options.expires,
|
|
t = (options.expires = new Date());
|
|
t.setDate(t.getDate() + days);
|
|
}
|
|
return (document.cookie = [
|
|
encodeURIComponent(key),
|
|
"=",
|
|
options.raw ? String(value) : encodeURIComponent(String(value)),
|
|
options.expires ? "; expires=" + options.expires.toUTCString() : "",
|
|
options.path ? "; path=" + options.path : "; path=/",
|
|
options.domain ? "; domain=" + options.domain : "",
|
|
options.secure ? "; secure" : "",
|
|
].join(""));
|
|
}
|
|
options = value || {};
|
|
var result,
|
|
decode = options.raw
|
|
? function (s) {
|
|
return s;
|
|
}
|
|
: decodeURIComponent;
|
|
return (result = new RegExp(
|
|
"(?:^|; )" + encodeURIComponent(key) + "=([^;]*)"
|
|
).exec(document.cookie))
|
|
? decode(result[1])
|
|
: null;
|
|
};
|
|
Utils.prototype.isUndefined = function (o) {
|
|
return typeof o === "undefined";
|
|
};
|
|
Utils.prototype.isObject = function (o) {
|
|
return Object.prototype.toString.call(o) === "[object Object]";
|
|
};
|
|
Utils.prototype.delPort = function (szIP) {
|
|
var iPos = szIP.indexOf(":");
|
|
if (iPos > -1) {
|
|
return szIP.substring(0, iPos);
|
|
} else {
|
|
return szIP;
|
|
}
|
|
};
|
|
Utils.prototype.formatString = function () {
|
|
var string = arguments[0];
|
|
for (var i = 1; i < arguments.length; i++) {
|
|
string = string.replace("%s", arguments[i]);
|
|
}
|
|
return string;
|
|
};
|
|
Utils.prototype.encodeString = function (str) {
|
|
if (str) {
|
|
return str
|
|
.replace(/&/g, "&")
|
|
.replace(/</g, "<")
|
|
.replace(/>/g, ">");
|
|
} else {
|
|
return "";
|
|
}
|
|
};
|
|
Utils.prototype.formatPolygonXmlToJson = function (szXml) {
|
|
var oXml = this.loadXML(szXml);
|
|
var aPolygonList = [];
|
|
var aPoints = [];
|
|
var aRect = [];
|
|
var aAddPolygon = [];
|
|
var aAddRect = [];
|
|
var oData;
|
|
function colorTransfer(szColor) {
|
|
var iValue = parseInt(szColor, 10);
|
|
var szValue = iValue.toString(16);
|
|
szValue = "0" + szValue;
|
|
return szValue.substring(szValue.length - 2);
|
|
}
|
|
$(oXml)
|
|
.find("SnapPolygon")
|
|
.each(function () {
|
|
var iEditType =
|
|
parseInt($(this).find("EditType, editType").text(), 10) || 0;
|
|
var isClose = $(this).find("isClosed").text() === "true";
|
|
var iPolygonType = parseInt($(this).find("polygonType").text(), 10);
|
|
var fShowSquare = parseFloat($(this).find("showSquare").text()) || 0;
|
|
var szTips =
|
|
$(this).find("tips").text() || $(this).find("Tips").text();
|
|
var iTipsPos = parseInt($(this).find("tipsPos").text(), 10) || 0;
|
|
var bShowWH = $(this).find("showWH").text() === "true";
|
|
var szColor =
|
|
"#" +
|
|
colorTransfer($(this).find("r").text()) +
|
|
colorTransfer($(this).find("g").text()) +
|
|
colorTransfer($(this).find("b").text());
|
|
var iMaxPoint = parseInt($(this).find("PointNumMax").text(), 10) - 1;
|
|
var iMinPoint = parseInt($(this).find("MinClosed").text(), 10) - 1;
|
|
var iId = parseInt($(this).find("id").text(), 10);
|
|
var iRedrawMode =
|
|
parseInt($(this).find("RedrawMode").text(), 10) || 0;
|
|
if ($(this).find("pointList").find("point").length === 0) {
|
|
if (iPolygonType === 1) {
|
|
aAddPolygon.push({
|
|
id: iId,
|
|
tips: szTips,
|
|
drawColor: szColor,
|
|
translucent: 0.1,
|
|
maxShapeSupport: 1,
|
|
maxPointSupport: iMaxPoint,
|
|
minPointSupport: iMinPoint,
|
|
showWH: bShowWH,
|
|
redrawMode: iRedrawMode,
|
|
});
|
|
} else if (iPolygonType === 0) {
|
|
aAddRect.push({
|
|
id: iId,
|
|
tips: szTips,
|
|
drawColor: szColor,
|
|
translucent: 0.1,
|
|
widthHeightRate: fShowSquare,
|
|
maxShapeSupport: 1,
|
|
type: 1,
|
|
redrawMode: iRedrawMode,
|
|
tipsPos: iTipsPos,
|
|
});
|
|
}
|
|
} else {
|
|
aPoints = [];
|
|
$(this)
|
|
.find("pointList")
|
|
.find("point")
|
|
.each(function () {
|
|
aPoints.push([
|
|
parseFloat($(this).find("x").text()),
|
|
parseFloat($(this).find("y").text()),
|
|
]);
|
|
});
|
|
oData = {
|
|
id: iId,
|
|
editType: iEditType,
|
|
points: aPoints,
|
|
closed: isClose,
|
|
tips: szTips,
|
|
drawColor: szColor,
|
|
maxPointSupport: iMaxPoint,
|
|
minPointSupport: iMinPoint,
|
|
translucent: 0.1,
|
|
redrawMode: iRedrawMode,
|
|
};
|
|
if (iPolygonType === 1) {
|
|
oData["showWH"] = bShowWH;
|
|
aPolygonList.push(oData);
|
|
} else if (iPolygonType === 0) {
|
|
oData["widthHeightRate"] = fShowSquare;
|
|
oData["type"] = 1;
|
|
oData.tipsPos = iTipsPos;
|
|
aRect.push(oData);
|
|
}
|
|
}
|
|
});
|
|
return {
|
|
aRect: aRect,
|
|
aPolygon: aPolygonList,
|
|
aAddRect: aAddRect,
|
|
aAddPolygon: aAddPolygon,
|
|
};
|
|
};
|
|
Utils.prototype.formatPolygonJsonToXml = function (aData) {
|
|
function colorRgb(szHex) {
|
|
var sColor = szHex.toLowerCase();
|
|
var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
|
|
if (sColor && reg.test(sColor)) {
|
|
var i;
|
|
if (sColor.length === 4) {
|
|
var sColorNew = "#";
|
|
for (i = 1; i < 4; i += 1) {
|
|
sColorNew += sColor
|
|
.slice(i, i + 1)
|
|
.concat(sColor.slice(i, i + 1));
|
|
}
|
|
sColor = sColorNew;
|
|
}
|
|
var aColorChange = [];
|
|
for (i = 1; i < 7; i += 2) {
|
|
aColorChange.push(parseInt("0x" + sColor.slice(i, i + 2), 16));
|
|
}
|
|
return aColorChange;
|
|
}
|
|
return [0, 0, 0];
|
|
}
|
|
var aPolygon = aData[0];
|
|
var aRect = aData[1];
|
|
var szXml = "<?xml version='1.0' encoding='utf-8'?><SnapPolygonList>";
|
|
var that = this;
|
|
$.each(aPolygon, function (index, oVal) {
|
|
var aColor = [0, 0, 0];
|
|
if (oVal.drawColor) {
|
|
aColor = colorRgb(oVal.drawColor);
|
|
} else {
|
|
aColor = colorRgb("#FF0000");
|
|
}
|
|
szXml += "<SnapPolygon>";
|
|
szXml += "<id>" + oVal.id + "</id>";
|
|
oVal.tips = that.encodeString(oVal.tips);
|
|
if (!oVal.tips) {
|
|
szXml += "<tips></tips>";
|
|
} else {
|
|
szXml += "<tips>" + oVal.tips + "</tips>";
|
|
}
|
|
szXml += "<isClosed>" + oVal.closed.toString() + "</isClosed>";
|
|
szXml +=
|
|
"<color><r>" +
|
|
aColor[0] +
|
|
"</r><g>" +
|
|
aColor[1] +
|
|
"</g><b>" +
|
|
aColor[2] +
|
|
"</b></color>";
|
|
szXml += "<polygonType>1</polygonType>";
|
|
szXml +=
|
|
"<PointNumMax>" +
|
|
(oVal.pointNumMax ? oVal.pointNumMax : 10) +
|
|
"</PointNumMax>";
|
|
szXml +=
|
|
"<MinClosed>" +
|
|
(oVal.minClosed ? oVal.minClosed : 4) +
|
|
"</MinClosed>";
|
|
szXml += "<pointList>";
|
|
$.each(oVal.points, function (i, aVal) {
|
|
szXml +=
|
|
"<point><x>" + aVal[0] + "</x><y>" + aVal[1] + "</y></point>";
|
|
});
|
|
szXml += "</pointList>";
|
|
szXml += "</SnapPolygon>";
|
|
});
|
|
$.each(aRect, function (index, oVal) {
|
|
var aColor = [0, 0, 0];
|
|
if (oVal.drawColor) {
|
|
aColor = colorRgb(oVal.drawColor);
|
|
} else {
|
|
aColor = colorRgb("#FF0000");
|
|
}
|
|
szXml += "<SnapPolygon>";
|
|
szXml += "<id>" + oVal.id + "</id>";
|
|
szXml +=
|
|
"<color><r>" +
|
|
aColor[0] +
|
|
"</r><g>" +
|
|
aColor[1] +
|
|
"</g><b>" +
|
|
aColor[2] +
|
|
"</b></color>";
|
|
szXml += "<polygonType>0</polygonType>";
|
|
oVal.tips = that.encodeString(oVal.tips);
|
|
if (!oVal.tips) {
|
|
szXml += "<tips></tips>";
|
|
} else {
|
|
szXml += "<tips>" + oVal.tips + "</tips>";
|
|
}
|
|
if (typeof oVal.closed !== "undefined" && oVal.closed !== null) {
|
|
szXml += "<isClosed>" + oVal.closed.toString() + "</isClosed>";
|
|
} else {
|
|
szXml += "<isClosed>true</isClosed>";
|
|
}
|
|
szXml += "<pointList>";
|
|
var aRectTmp = [];
|
|
if (oVal.points.length) {
|
|
var iMinX = 2;
|
|
var iMaxX = -1;
|
|
var iMinY = 2;
|
|
var iMaxY = -1;
|
|
$.each(oVal.points, function () {
|
|
if (iMinX > this[0]) {
|
|
iMinX = this[0];
|
|
}
|
|
if (iMinY > this[1]) {
|
|
iMinY = this[1];
|
|
}
|
|
if (iMaxX < this[0]) {
|
|
iMaxX = this[0];
|
|
}
|
|
if (iMaxY < this[1]) {
|
|
iMaxY = this[1];
|
|
}
|
|
});
|
|
aRectTmp.push([iMinX, iMinY]);
|
|
aRectTmp.push([iMaxX, iMinY]);
|
|
aRectTmp.push([iMaxX, iMaxY]);
|
|
aRectTmp.push([iMinX, iMaxY]);
|
|
}
|
|
$.each(aRectTmp, function (i, aVal) {
|
|
szXml +=
|
|
"<point><x>" + aVal[0] + "</x><y>" + aVal[1] + "</y></point>";
|
|
});
|
|
szXml += "</pointList>";
|
|
szXml += "</SnapPolygon>";
|
|
});
|
|
szXml += "</SnapPolygonList>";
|
|
return szXml;
|
|
};
|
|
Utils.prototype.convertToUTCTime = function (szLocalTime, szFormat) {
|
|
if (typeof szFormat == "undefined") {
|
|
szFormat = "yyyy-MM-dd hh:mm:ss";
|
|
}
|
|
szLocalTime = szLocalTime.replace("T", " ").replace("Z", "");
|
|
var _dLocalDate = new Date(Date.parse(szLocalTime.replace(/-/g, "/")));
|
|
_dLocalDate = this.utcDateFormat(_dLocalDate, szFormat);
|
|
_dLocalDate = _dLocalDate.replace(" ", "T");
|
|
return _dLocalDate;
|
|
};
|
|
Utils.prototype.utcDateFormat = function (oDate, fmt) {
|
|
var o = {
|
|
"M+": oDate.getUTCMonth() + 1,
|
|
"d+": oDate.getUTCDate(),
|
|
"h+": oDate.getUTCHours(),
|
|
"m+": oDate.getUTCMinutes(),
|
|
"s+": oDate.getUTCSeconds(),
|
|
"q+": Math.floor((oDate.getUTCMonth() + 3) / 3),
|
|
S: oDate.getUTCMilliseconds(),
|
|
};
|
|
if (/(y+)/.test(fmt)) {
|
|
fmt = fmt.replace(
|
|
RegExp.$1,
|
|
(oDate.getUTCFullYear() + "").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;
|
|
};
|
|
Utils.prototype.convertToLocalTime = function (szUTCTime, iDiffTime) {
|
|
szUTCTime = szUTCTime.replace("T", " ").replace("Z", "");
|
|
if (typeof iDiffTime == "undefined") {
|
|
iDiffTime = 0;
|
|
}
|
|
var szFormat = "yyyy-MM-dd hh:mm:ss";
|
|
var _aDate = szUTCTime.split(" ")[0].split("-");
|
|
var _iFullYear = parseInt(_aDate[0], 10);
|
|
var _iMonth = parseInt(_aDate[1], 10) - 1;
|
|
var _iDay = parseInt(_aDate[2], 10);
|
|
var _aTimes = szUTCTime.split(" ")[1].split(":");
|
|
var _iHour = parseInt(_aTimes[0], 10);
|
|
var _iMinute = parseInt(_aTimes[1], 10);
|
|
var _iSecond = parseInt(_aTimes[2], 10);
|
|
var _dLocalDate = new Date(
|
|
Date.UTC(_iFullYear, _iMonth, _iDay, _iHour, _iMinute, _iSecond)
|
|
);
|
|
_dLocalDate.setTime(_dLocalDate.getTime() + iDiffTime);
|
|
return this.dateFormat(_dLocalDate, szFormat).replace(" ", "T") + "Z";
|
|
};
|
|
function UUID() {
|
|
this.id = this.createUUID();
|
|
}
|
|
UUID.prototype.valueOf = function () {
|
|
return this.id;
|
|
};
|
|
UUID.prototype.toString = function () {
|
|
return this.id;
|
|
};
|
|
UUID.prototype.createUUID = function () {
|
|
var dg = new Date(1582, 10, 15, 0, 0, 0, 0);
|
|
var dc = new Date();
|
|
var t = dc.getTime() - dg.getTime();
|
|
var h = "-";
|
|
var tl = UUID.getIntegerBits(t, 0, 31);
|
|
var tm = UUID.getIntegerBits(t, 32, 47);
|
|
var thv = UUID.getIntegerBits(t, 48, 59) + "1";
|
|
var csar = UUID.getIntegerBits(UUID.rand(4095), 0, 7);
|
|
var csl = UUID.getIntegerBits(UUID.rand(4095), 0, 7);
|
|
var n =
|
|
UUID.getIntegerBits(UUID.rand(8191), 0, 7) +
|
|
UUID.getIntegerBits(UUID.rand(8191), 8, 15) +
|
|
UUID.getIntegerBits(UUID.rand(8191), 0, 7) +
|
|
UUID.getIntegerBits(UUID.rand(8191), 8, 15) +
|
|
UUID.getIntegerBits(UUID.rand(8191), 0, 15);
|
|
return tl + h + tm + h + thv + h + csar + csl + h + n;
|
|
};
|
|
UUID.getIntegerBits = function (val, start, end) {
|
|
var base16 = UUID.returnBase(val, 16);
|
|
var quadArray = new Array();
|
|
var quadString = "";
|
|
var i = 0;
|
|
for (i = 0; i < base16.length; i++) {
|
|
quadArray.push(base16.substring(i, i + 1));
|
|
}
|
|
for (i = Math.floor(start / 4); i <= Math.floor(end / 4); i++) {
|
|
if (!quadArray[i] || quadArray[i] == "") quadString += "0";
|
|
else quadString += quadArray[i];
|
|
}
|
|
return quadString;
|
|
};
|
|
UUID.returnBase = function (number, base) {
|
|
var convert = [
|
|
"0",
|
|
"1",
|
|
"2",
|
|
"3",
|
|
"4",
|
|
"5",
|
|
"6",
|
|
"7",
|
|
"8",
|
|
"9",
|
|
"A",
|
|
"B",
|
|
"C",
|
|
"D",
|
|
"E",
|
|
"F",
|
|
"G",
|
|
"H",
|
|
"I",
|
|
"J",
|
|
"K",
|
|
"L",
|
|
"M",
|
|
"N",
|
|
"O",
|
|
"P",
|
|
"Q",
|
|
"R",
|
|
"S",
|
|
"T",
|
|
"U",
|
|
"V",
|
|
"W",
|
|
"X",
|
|
"Y",
|
|
"Z",
|
|
];
|
|
if (number < base) var output = convert[number];
|
|
else {
|
|
var MSD = "" + Math.floor(number / base);
|
|
var LSD = number - MSD * base;
|
|
if (MSD >= base) var output = this.returnBase(MSD, base) + convert[LSD];
|
|
else var output = convert[MSD] + convert[LSD];
|
|
}
|
|
return output;
|
|
};
|
|
UUID.rand = function (max) {
|
|
return Math.floor(Math.random() * max);
|
|
};
|
|
m_ISAPIProtocol = new ISAPIProtocol();
|
|
m_utilsInc = new Utils();
|
|
return this;
|
|
})();
|
|
var NS = (window.WebVideoCtrl = WebVideoCtrl);
|
|
NS.version = "3.3.0";
|
|
})(this);
|
|
if ("object" === typeof exports && typeof module !== "undefined") {
|
|
} else if ("function" === typeof define && define.amd) {
|
|
define(function () {
|
|
return WebVideoCtrl;
|
|
});
|
|
} else if ("function" === typeof define && define.cmd) {
|
|
define(function (require, exports, module) {
|
|
module.exports = WebVideoCtrl;
|
|
});
|
|
} else {
|
|
}
|
|
|