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

(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, "&amp;")
.replace(/</g, "&lt;")
.replace(/>/g, "&gt;");
}
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, "&amp;")
.replace(/</g, "&lt;")
.replace(/>/g, "&gt;");
} 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 {
}