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