var noOcxMessage = "控件未安装或控件版本过低,请更新";
|
$(function () {
|
$("#divOcx").height($(document.body).height() - 2);
|
|
var ocx = $("#RealTimePlayOcx")[0];
|
ocx.addEventListener("FireRecordParam", fireRecordParamHandler); // 紧急录像
|
ocx.addEventListener("FireCatchPicParam", fireCatchPicParamHandler); // 抓图
|
ocx.addEventListener("FireStartRealPlay", fireStartRealPlayHandler); // 开始预览
|
ocx.addEventListener("FireStopRealPlay", fireStopRealPlayHandler); // 结束预览
|
ocx.addEventListener("FirePTZCtrl", firePTZCtrlHandler);
|
ocx.addEventListener("FireStartOnTv", fireStartOnTvHandler);
|
ocx.addEventListener("FireSetVedioParam", fireSetVedioParamHandler);//视频参数调节
|
// ocx.attachEvent("FireTrunToPlayback", fireTrunToPlaybackHandler);
|
// ocx.attachEvent("FireCatchPicException",
|
// fireCatchPicExceptionHandler);
|
// ocx.attachEvent("FireStopOnTv", fireStopOnTvHandler);
|
// ocx.attachEvent("FireStartInstantPlay",
|
// fireStartInstantPlayHandler);
|
// ocx.attachEvent("FireStopInstantPlay",
|
// fireStopInstantPlayHandler);
|
// ocx.attachEvent("FireStop3DLarge", fireStop3DLargeHandler);
|
|
try {
|
playOCXObj = document.getElementById(OCX_ID_PREVIEW);
|
// window.onbeforeunload = function() {
|
// playOCXObj.Destroy();
|
// };
|
setOcxMode();
|
function setTimeout(fun, delay) {
|
if (typeof fun == 'function') {
|
var argu = Array.prototype.slice.call(arguments, 2);
|
var f = (function() {
|
fun.apply(null, argu);
|
});
|
return window.setTimeout(f, delay);
|
}
|
return window.setTimeout(fun, delay);
|
}
|
function setOcxMode() {
|
var flag = playOCXObj.SetOcxMode(0);
|
if (flag == -1) {
|
setTimeout(setOcxMode, 1000);
|
} else {
|
setWndNum(wndNum);
|
initPreviewCtrlLocalParam();
|
if (previewType == 1) {
|
setPreviewType(previewType);
|
previewGraphicHandler(cameraIds);
|
} else if (previewType == 0) {
|
previewHandler(cameraId);
|
} else if (previewType == 2) {
|
setPreviewType(previewType);
|
previewGraphicHandler(cameraId);
|
}
|
|
}
|
}
|
|
} catch (e) {
|
alert(noOcxMessage);
|
}
|
});
|
|
var previewCtrl;
|
var playOCXObj;
|
var playOk;
|
var wndInfoMap = new cms.framework.map();
|
var selectWndNum = 0;
|
|
var cameraIdArr = [];//下标表示窗口号,值表示cameraId,用来记录哪个窗口播放了哪个camera
|
for (var i = 0; i < 25; i++) {
|
cameraIdArr.push(-1);
|
}
|
|
function setPreviewType(type) {
|
previewType = type;
|
}
|
|
function fireStartRealPlayHandler(lWindowId) {
|
OperateLogUtil.save4PlayCtrl(AuthCode4VAS.AUTH_CODE_PREVIEW_REALTIME, "开始预览成功", {
|
act: "实时预览",
|
cameraIndexCode: cameraIdArr[lWindowId]
|
});
|
}
|
function fireStopRealPlayHandler(lWindowId) {
|
OperateLogUtil.save4PlayCtrl(AuthCode4VAS.AUTH_CODE_PREVIEW_REALTIME, "停止预览成功", {
|
act: "实时预览",
|
cameraIndexCode: cameraIdArr[lWindowId]
|
});
|
}
|
|
function firePTZCtrlHandler(lWindowId, lCtrlId, lSpeed) {
|
var logTxt;
|
if(200 == lCtrlId){//云台锁定
|
logTxt = "云台锁定,锁定时长:" + lSpeed + "分钟";
|
}else if (201 == lCtrlId){//云台解锁
|
logTxt = "云台解锁";
|
}else { //其他云台控制操作
|
logTxt = getPtzCtrlLogTxt(lCtrlId, lSpeed);
|
}
|
|
OperateLogUtil.save4PlayCtrl(AuthCode4VAS.PREVIEW_PTZCONTROL, logTxt, {
|
act: "云台控制",
|
cameraIndexCode: cameraIdArr[lWindowId]
|
});
|
}
|
|
/**
|
* 开始上墙的时候设置上墙xml
|
*/
|
function fireStartOnTvHandler() {
|
var previewTvwallXml = getPreviewTvwallXml();
|
playOCXObj.SetTvwallInfo(previewTvwallXml);
|
}
|
|
/**
|
* 录像事件
|
* @param xmlParameter
|
* @param lWindowId
|
*/
|
function fireRecordParamHandler(xmlParameter) {
|
var xmlDoc = common.util.toXmlDoc(xmlParameter);
|
var relTypeEle = xmlDoc.getElementsByTagName("Message/CaseRecord/RelType");
|
if (!relTypeEle) {
|
return;
|
}
|
var fileNameEle = xmlDoc
|
.getElementsByTagName("Message/CaseRecord/FileName");
|
if (!fileNameEle) {
|
return;
|
}
|
var filePath = fileNameEle[0].childNodes[0].nodeValue;
|
// 这里将反斜杠进行替换,否则kms无法识别导致上传失败
|
filePath = filePath.replace(/\\/g, '/');
|
var fileName = filePath.substring(filePath.lastIndexOf("/") + 1,
|
filePath.length);
|
var fileSizeEle = xmlDoc.getElementsByTagName("Message/CaseRecord/FileSize");
|
if (!fileSizeEle) {
|
return;
|
}
|
var year = new Date().getFullYear();
|
var caremaName = fileName.substring(0,fileName.indexOf("_" + year));//暂时用字符串截取来获取cameraname
|
var logTxt = "紧急录像";
|
// 记录操作日志
|
OperateLogUtil.save(AuthCode4VAS.AUTH_CODE_PREVIEW_REALTIME, logTxt, {
|
act : "紧急录像",
|
object : caremaName
|
});
|
addVideoPictureFileCookie(xmlParameter);
|
}
|
|
//function fireStartRecordHandler(wndIndex) {
|
// previewObj.afterStartRecord(wndIndex, "startRecord");
|
//}
|
//
|
//function fireStopRecordHandler(wndIndex) {
|
// previewObj.afterStopRecord(wndIndex, "stopRecord");
|
//}
|
/**
|
* 抓图事件
|
*
|
* @param xmlParameter
|
* @param lWindowId
|
*/
|
function fireCatchPicParamHandler(xmlParameter) {
|
var xmlDoc = common.util.toXmlDoc(xmlParameter);
|
var relTypeEle = xmlDoc.getElementsByTagName("Message/CaseRecord/RelType");
|
if (!relTypeEle) {
|
return;
|
}
|
var fileNameEle = xmlDoc
|
.getElementsByTagName("Message/CaseRecord/FileName");
|
if (!fileNameEle) {
|
return;
|
}
|
var filePath = fileNameEle[0].childNodes[0].nodeValue;
|
// 这里将反斜杠进行替换,否则kms无法识别导致上传失败
|
filePath = filePath.replace(/\\/g, '/');
|
var fileName = filePath.substring(filePath.lastIndexOf("/") + 1,
|
filePath.length);
|
var fileSizeEle = xmlDoc.getElementsByTagName("Message/CaseRecord/FileSize");
|
if (!fileSizeEle) {
|
return;
|
}
|
var year = new Date().getFullYear();
|
var caremaName = fileName.substring(0,fileName.indexOf("_" + year));//暂时用字符串截取来获取cameraname
|
var logTxt = "抓取" + fileName + "图片";
|
// 记录操作日志
|
OperateLogUtil.save(AuthCode4VAS.AUTH_CODE_PREVIEW_REALTIME, logTxt, {
|
act : "图片抓取",
|
object : caremaName
|
});
|
addVideoPictureFileCookie(xmlParameter);
|
}
|
|
function initPreviewCtrlLocalParam() {
|
var obj;
|
if ("null" == params || "" == params) {
|
obj = {
|
imageStyle: "jpeg",
|
imageSavePath: "C:\\CTBT\\snapshot\\",
|
recordPkgSize: 128,
|
recordSavePath: "C:\\CTBT\\record\\"
|
};
|
} else {
|
var arr = params.split(",");
|
obj = {
|
imageStyle: arr[0],
|
imageSavePath: arr[1].replace(/@/g, "\\"),
|
recordPkgSize: arr[2],
|
recordSavePath: arr[3].replace(/@/g, "\\")
|
};
|
}
|
|
if ("null" == obj || !obj || !obj.imageStyle || !obj.imageSavePath || !obj.recordSavePath || !obj.recordPkgSize) {
|
obj.imageStyle = "jpeg";
|
obj.imageSavePath = "C:\\CTBT\\snapshot\\";
|
obj.clipPkgSize = 128;
|
obj.clipSavePath = "C:\\CTBT\\record\\";
|
}
|
obj.imageSavePath += "preview\\";
|
|
var recordPkgSize = 1;
|
if (obj.recordPkgSize == "64") {
|
recordPkgSize = 1;
|
} else if (obj.recordPkgSize == "128") {
|
recordPkgSize = 2;
|
} else if (obj.recordPkgSize == "512") {
|
recordPkgSize = 3;
|
} else if (obj.recordPkgSize == "1024") {
|
recordPkgSize = 4;
|
}
|
|
|
try {
|
playOCXObj.SetCapturParam(obj.imageSavePath, obj.imageStyle == "jpeg" ? 0 : 1);
|
playOCXObj.SetRecordParam(obj.recordSavePath, recordPkgSize);
|
} catch (e) {
|
alert(noOcxMessage);
|
}
|
}
|
function previewGraphicHandler(preCameraIds) {
|
$.ajax({
|
type: "POST",
|
url: videoUrl + "vas/web/preview!getCameraInfosForPreview.action",
|
data: {
|
cameraIndexCodes: preCameraIds
|
},
|
datatype: "json",
|
success: function (response) {
|
previewByGraphicSuccess(response);
|
},
|
error: function () {
|
}
|
});
|
}
|
function previewByGraphicSuccess(response) {
|
var result = response;
|
var retObjArray = [];
|
try {
|
retObjArray = eval('(' + result + ')');
|
} catch (e) {
|
return;
|
}
|
for (var index = 0; index < retObjArray.length; index++) {
|
retObj = retObjArray[index];
|
if (!retObj.result) {
|
continue;
|
} else {
|
switch (parseInt(previewType)) {
|
case 1 :
|
wndInfoMap.add({
|
winNum : index
|
}, retObj);
|
startPlay(retObj, index);
|
break;
|
case 2 :
|
|
var hasCamera = false;
|
for (var j = 0, len = wndInfoMap.count(); j < len; j++) {
|
var cameraInfo = wndInfoMap.getByIndex(j);
|
if (cameraInfo.cameraId == retObj.cameraId) {
|
hasCamera = true;
|
var winNum = wndInfoMap.getKeyByIndex(j).winNum;
|
playOCXObj.IsWndPreview(winNum) == -1 && startPlay(retObj, winNum);
|
playOCXObj.SelWindow(winNum);
|
break;
|
}
|
}
|
if (hasCamera == false) {
|
setWndNum(1);
|
destroy();
|
wndInfoMap.add({
|
winNum : 0
|
}, retObj);
|
startPlay(retObj, 0);
|
}
|
break;
|
default :
|
break;
|
}
|
}
|
}
|
}
|
function previewHandler(cameraId,playWndNum,curWndNum) {
|
$.ajax({
|
type: "POST",
|
url: videoUrl + "vas/web/preview!getCameraInfoForPreview.action",
|
data: {
|
cameraIndexCode: cameraId
|
},
|
datatype: "json",
|
success: function (response) {
|
previewSuccess(response,playWndNum,curWndNum);
|
},
|
error: function () {
|
}
|
});
|
}
|
function previewSuccess(response,playWndNum,curWndNum) {
|
var result = response;
|
var retObjArray = [];
|
try {
|
retObjArray = eval('(' + result + ')');
|
} catch (e) {
|
return;
|
}
|
retObj = retObjArray[0];
|
if (null == retObj) {
|
alert("获取到的预览参数对象为空, 请联系管理员");
|
return;
|
}
|
if(!retObj.result){
|
alert(retObj.reason);
|
// parent.Ext.getCmp("previewWin").hide();
|
return;
|
}
|
if(playWndNum>=0&&curWndNum>0){
|
setWndNum(curWndNum);
|
playOCXObj.SelWindow(playWndNum);
|
startPlay(retObj, playWndNum);
|
}else{
|
setWndNum(1);
|
startPlay(retObj, 0);
|
}
|
}
|
function startPlay(cameraInfo, wndIndex) {
|
cameraIdArr[wndIndex] = cameraInfo.cameraIndexCode;
|
var xmlDoc = createXmlDoc(cameraInfo.previewXml);
|
var priPtz = cameraInfo.ptzPri;
|
var priRecord = cameraInfo.localRecordPri;
|
|
if (priPtz) {
|
setPtzRight();
|
} else {
|
clearPtzRight();
|
}
|
|
if (priRecord) {
|
setRecordRight();
|
} else {
|
clearRecordRight();
|
}
|
// 修改预览报文PreviewType字段,地图为1(无转到回放功能)
|
var previewType = xmlDoc.getElementsByTagName("PreviewType")[0].childNodes[0];
|
previewType.deleteData(0, previewType.nodeValue.length);
|
previewType.appendData("1");
|
|
playOk = playOCXObj.StartTask_Preview_InWnd(xmlDoc.xml, wndIndex);
|
if (playOk == -1) {
|
setTimeout(startPlay, 200, cameraInfo, wndIndex);
|
}
|
// else{
|
// this.playOCXObj.SelWindow(wndIndex);
|
// }
|
|
}
|
function createXmlDoc(previewXml) {
|
try { // Internet Explorer
|
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
|
xmlDoc.async = "false";
|
xmlDoc.loadXML(previewXml);
|
} catch (e) {
|
try { // Firefox, Mozilla, Opera, etc.
|
parser = new DOMParser();
|
xmlDoc = parser.parseFromString(previewXml, "text/xml");
|
} catch (e) {
|
alert("设置预览参数失败");
|
}
|
}
|
return xmlDoc;
|
}
|
function clearPtzRight() {
|
playOCXObj.SetPreviewRight(0, 0, 0);
|
}
|
function setPtzRight() {
|
playOCXObj.SetPreviewRight(0, 0, 1);
|
}
|
function setRecordRight() {
|
playOCXObj.SetPreviewRight(0, 1, 1);
|
}
|
function clearRecordRight() {
|
playOCXObj.SetPreviewRight(0, 1, 0);
|
}
|
function setWndNum(num) {
|
var winNum;
|
if (0 == num) {
|
winNum = 1;
|
} else if (0 < num && num <= 1) {
|
winNum = 1;
|
} else if (1 < num && num <= 4) {
|
winNum = 4;
|
} else if (4 < num && num <= 6) {
|
winNum = 6;
|
} else if (6 < num && num <= 8) {
|
winNum = 8;
|
} else if (8 < num && num <= 9) {
|
winNum = 9;
|
} else if (9 < num && num <= 10) {
|
winNum = 10;
|
} else if (10 < num && num <= 13) {
|
winNum = 13;
|
} else if (13 < num && num <= 14) {
|
winNum = 14;
|
} else if (14 < num && num <= 16) {
|
winNum = 16;
|
} else if (16 < num && num <= 17) {
|
winNum = 17;
|
} else if (17 < num && num <= 22) {
|
winNum = 22;
|
} else if (22 < num && num <= 25) {
|
winNum = 25;
|
} else if (num > 25) {
|
winNum = 25;
|
}
|
playOCXObj.setWndNum(winNum)
|
|
}
|
|
function addOperationLog(cameraId, mainType, minorType, logTxt) {
|
// var url = "preview!addOperationLog.action?cameraId=" + encodeURI(cameraId) + "&mainType=" + encodeURI(mainType) + "&minorType="
|
// + encodeURI(minorType) + "&logTxt=" + encodeURI(logTxt);
|
// Ext.Ajax.request({
|
// url : url,
|
// success : function(response) {
|
// var ret = Ext.decode(response.responseText);
|
// if (ret == parseInt(CMS_FAILURE)) {
|
// alert("添加操作日志失败");
|
// }
|
// },
|
// failure : function(response) {
|
//
|
// }
|
// });
|
}
|
|
/* 相关事件处理,主要是写操作日志 */
|
function startPlayEvent(lWindowId){
|
var cameraId = cameraIdArr[lWindowId];
|
var mainType = 30001;
|
var minorType = 10001;
|
var logTxt = '开始预览成功';
|
|
addOperationLog(cameraId, mainType, minorType, logTxt);
|
}
|
|
function stopPlayEvent(lWindowId){
|
var cameraId = cameraIdArr[lWindowId];
|
cameraIdArr[lWindowId] = -1;
|
var mainType = 30001;
|
var minorType = 10001;
|
var logTxt = '停止预览成功';
|
|
addOperationLog(cameraId, mainType, minorType, logTxt);
|
}
|
|
function swapWindow(lFrom, lTo){
|
var tmpCameraId = cameraIdArr[lFrom];
|
cameraIdArr[lFrom] = cameraIdArr[lTo];
|
cameraIdArr[lTo] = tmpCameraId;
|
}
|
|
function startRecordEvent(lWindowId){
|
var cameraId = cameraIdArr[lWindowId];
|
var mainType = 30001;
|
var minorType = 10003;
|
var logTxt = '开始本地录像';
|
|
addOperationLog(cameraId, mainType, minorType, logTxt);
|
}
|
|
function stopRecordEvent(lWindowId){
|
var cameraId = cameraIdArr[lWindowId];
|
var mainType = 30001;
|
var minorType = 10003;
|
var logTxt = '停止本地录像';
|
|
addOperationLog(cameraId, mainType, minorType, logTxt);
|
}
|
|
function ptzCtrlEvent(lWindowId, lCtrlId, lSpeed){
|
var cameraId = cameraIdArr[lWindowId];
|
var logTxt;
|
if(200 == lCtrlId){//云台锁定
|
logTxt = "云台锁定,锁定时长:" + lSpeed + "分钟";
|
}else if(201 == lCtrlId){//云台解锁
|
logTxt = "云台解锁";
|
}else{//其他云台控制操作
|
logTxt = getPtzCtrlLogTxt(lCtrlId, lSpeed);
|
}
|
if (cameraId != -1 && logTxt != "") {
|
addOperationLog(cameraId, 30001, 10004, logTxt);
|
}
|
}
|
|
function getPtzCtrlLogTxt(lCtrlId, lSpeed) {
|
var logTxt = "";
|
if (lCtrlId == 21) {
|
logTxt = "向上移动";
|
} else if (lCtrlId == 22) {
|
logTxt = "向下移动";
|
} else if (lCtrlId == 23) {
|
logTxt = "向左移动";
|
} else if (lCtrlId == 24) {
|
logTxt = "向右移动";
|
} else if (lCtrlId == 25) {
|
logTxt = "向左上移动";
|
} else if (lCtrlId == 26) {
|
logTxt = "向右上移动";
|
} else if (lCtrlId == 27) {
|
logTxt = "向左下移动";
|
} else if (lCtrlId == 28) {
|
logTxt = "向右下移动";
|
} else if (lCtrlId == 11) {
|
logTxt = "焦距变大";
|
} else if (lCtrlId == 12) {
|
logTxt = "焦距变小";
|
} else if (lCtrlId == 13) {
|
logTxt = "焦点变近";
|
} else if (lCtrlId == 14) {
|
logTxt = "焦点变远";
|
} else if (lCtrlId == 15) {
|
logTxt = "光圈变大";
|
} else if (lCtrlId == 16) {
|
logTxt = "光圈变小";
|
} else if (lCtrlId == 29) {
|
logTxt = "开始自动巡航";
|
} else if (lCtrlId == -29) {
|
logTxt = "结束自动巡航";
|
} else if (lCtrlId == 2) {
|
logTxt = "打开灯光";
|
} else if (lCtrlId == -2) {
|
logTxt = "关闭灯光";
|
} else if (lCtrlId == 3) {
|
logTxt = "打开雨刷";
|
} else if (lCtrlId == -3) {
|
logTxt = "关闭雨刷";
|
}
|
return logTxt;
|
}
|
|
function startTalkEvent(lWindowId){
|
var cameraId = cameraIdArr[lWindowId];
|
var mainType = 10001;
|
var minorType = 10013;
|
var logTxt = '对讲开始';
|
|
addOperationLog(cameraId, mainType, minorType, logTxt);
|
}
|
|
function stopTalkEvent(lWindowId){
|
var cameraId = cameraIdArr[lWindowId];
|
var mainType = 10001;
|
var minorType = 10013;
|
var logTxt = '对讲结束';
|
|
addOperationLog(cameraId, mainType, minorType, logTxt);
|
}
|
|
/**
|
* 开始上墙事件处理函数
|
* added by chenliangyf1, 2013-11-29
|
*
|
* @param cameraId
|
* @param result
|
*/
|
function startOnTvEventHandler(cameraId, result) {
|
var msg = result == 0 ? "开始预览上墙" : "开始预览上墙失败";
|
addOperationLog(cameraId, 30001, 10022, msg);
|
}
|
|
/**
|
* 结束上墙事件处理函数
|
* added by chenliangyf1, 2013-11-29
|
*
|
* @param cameraId
|
* @param result
|
*/
|
function stopOnTvEventHandler(cameraId, result) {
|
var msg = result == 0 ? "停止预览上墙" : "停止预览上墙失败";
|
addOperationLog(cameraId, 30001, 10022, msg);
|
}
|
|
/**
|
* 清理, 在关闭回放页面控件时需调用
|
*/
|
function destroy() {
|
try{
|
playOCXObj.StopAllPreview(); // 停止预览
|
playOCXObj.Destroy();
|
wndInfoMap.removeAll(); // 清理预览参数
|
}catch(e){}
|
}
|
|
function fireSetVedioParamHandler(xmlParameter){
|
var xmlDoc = common.util.toXmlDoc(xmlParameter);
|
var isOKEle = xmlDoc.getElementsByTagName("message/CaseRecord/IsOk");
|
if (!isOKEle){
|
return;
|
}
|
var isOk = isOKEle[0].childNodes[0].nodeValue;
|
if (1 == isOk) {
|
var xmlDoc = common.util.toXmlDoc(xmlParameter);
|
var bright = xmlDoc.getElementsByTagName("message/CaseRecord/Bright")[0].childNodes[0].nodeValue;
|
var contrast = xmlDoc.getElementsByTagName("message/CaseRecord/Contrast")[0].childNodes[0].nodeValue;
|
var saturation = xmlDoc.getElementsByTagName("message/CaseRecord/Saturation")[0].childNodes[0].nodeValue;
|
var chroma = xmlDoc.getElementsByTagName("message/CaseRecord/Chroma")[0].childNodes[0].nodeValue;
|
var logTxt = "设置视频参数(亮度:"+ bright + ",对比度:" + contrast + ",饱和度:" + saturation + ",色度:" + chroma + ")";
|
var caremaName = xmlDoc.getElementsByTagName("message/CaseRecord/CameraName")[0].childNodes[0].nodeValue;
|
OperateLogUtil.save(AuthCode4VAS.AUTH_CODE_PREVIEW, logTxt, {
|
act : "视频参数调节",
|
object : caremaName
|
});
|
} else {
|
return;
|
}
|
|
}
|