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; } }