Newer
Older
Nanping_sponge_SJJC / src / components / cockpitvideo / FXPagevideo.vue
@liyingjing liyingjing on 25 Oct 2023 8 KB 数据检测
<template>
  <div id="HomePage_video"
       :style="{width: props.width+'px', height: props.height+'px'}">
    <div id="playWnd"
         class="videobox2"></div>
  </div>
</template>

<script setup>
const { proxy } = getCurrentInstance();

const props = defineProps({
  width: {
    type: String,
    default: '',
  },
  height: {
    type: String,
    default: '',
  },
  pointfeature: {
    type: Object,
    default: {},
  }
});


const allData = reactive({
  oWebControl: null,
  plugKey: '',
  showVideos: {
    // cameraIndexCode: "13bdc8934e5c420a97ed6c47a3d92f81", //监控点编号
    cameraIndexCode: '', //监控点编号
    streamMode: 0, //主子码流标识:0-主码流,1-子码流
    transMode: 1, //传输协议:0-UDP,1-TCP
    gpuMode: 0, //是否启用GPU硬解,0-不启用,1-启用
    wndId: 1, //播放窗口序号
  },

  //显示的画面信息
  siteVal: 'root000000', //选中的站点
  layoutVal: '-1', //选中的布局
  siteList: [],
  layoutList: [],
  width: 400,
  height: 288,
  left: '',
  top: '',
  powerCameraStr: '',
  // 内网、公网 4个配置
  appkey: '',
  secret: '',
  ip: '',
  port: '',
  constindex: 1,
  layout: '1x1',
  isShow: true,
  Count: 0,
  isshowItem: false,
  number1: 0,
})


// 调用新的点击事件的方法进行视频监控的展示
function clearVideo () {
  if (allData.oWebControl != null) {
    allData.oWebControl.JS_HideWnd()
    allData.oWebControl.JS_Disconnect()
    allData.oWebControl.JS_DestroyWnd()
  }
}

function newcheckeed (item) {
  console.log('传递到视频插件里面的item', item);
  // if (allData.oWebControl != null) {
  //   allData.oWebControl.JS_HideWnd()
  //   allData.oWebControl.JS_Disconnect()
  //   allData.oWebControl.JS_DestroyWnd()
  // }

  if (item.indexCode) {
    var video = {
      cameraIndexCode: item.indexCode, //监控点编号
      streamMode: 0, //主子码流标识:0-主码流,1-子码流
      transMode: 1, //传输协议:0-UDP,1-TCP
      gpuMode: 0, //是否启用GPU硬解,0-不启用,1-启用
      wndId: -1, //播放窗口序号
    }
    allData.showVideos = video

    initPlugin()
    // this.getClickAction();
    console.log('点击了节点', item.indexCode)
  } else {
    // this.$message({
    //   message: '此处没有返回视频数据,请确认是否安装并联系后台处理',
    //   type: 'warning',
    // })
  }
}

/* 创建插件实例 */
function initPlugin () {
  const dll = { dllPath: './VideoPluginConnect.dll' }
  allData.oWebControl = new WebControl({
    szPluginContainer: 'playWnd', // 指定容器id
    iServicePortStart: 15900,
    iServicePortEnd: 15909,
    szClassId: '23BF3B0A-2C56-4D97-9C03-0CB103AA8F11', // 用于IE10使用ActiveX的clsid

    cbConnectSuccess: () => {
      allData.oWebControl.JS_StartService('window', dll).then(() => {
        // 设置视频 web 插件消息回调
        allData.oWebControl.JS_SetWindowControlCallback({
          // cbIntegrationCallBack: msg => { }
        })
        //启动插件服务成功
        allData.oWebControl
          .JS_CreateWnd('playWnd', props.width, props.height)
          .then(() => {
            //JS_CreateWnd创建视频播放窗口,宽高可设定
            initVideo(allData.oWebControl) // 创建播放实例成功后初始化
            console.log('启动插件成功!')
          })
      })
    },
    //插件服务启动失败,弹框提示
    cbConnectError: () => {
      allData.oWebControl = null

      allData.Count++
      if (allData.Count < 2) {
        WebControl.JS_WakeUp('VideoWebPlugin://')

        setTimeout(() => {
          initPlugin()
        }, 8000)
      } else {
        // this.open();
      }
      console.log('创建插件失败')
    },
  })
}
/* 获取公钥 */
function initVideo () {
  const params = {
    funcName: 'getRSAPubKey',
    argument: JSON.stringify({ keyLength: 1024 }),
  }

  allData.oWebControl.JS_RequestInterface(params).then((res) => {
    if (res.responseMsg.data) {
      console.log(res);
      allData.plugKey = res.responseMsg.data
      getVideoConfig(allData.oWebControl)
    }
  })
}
/* 视频插件配置  插件初始化*/

function getVideoConfig (oWebControl) {
  allData.powerCameraStr = sessionStorage.getItem('powerCamera')
  // console.log(allData.powerCameraStr, "this.powerCameraStr");

  const { offsetWidth, offsetHeight } = document.getElementById('playWnd')
  const configObj = {
    funcName: 'init',
    argument: JSON.stringify({
      appkey: allData.appkey, //API网关提供的appkey
      secret: setEncrypt(allData.secret), //API网关提供的secret
      ip: allData.ip, //API网关IP地址z
      playMode: 0, //播放模式(决定显示预览还是回放界面)
      port: allData.port, //端口
      snapDir: 'C:\\SnapDir', //抓图存储路径
      videoDir: 'C:\\VideoDir', //紧急录像或录像剪辑存储路径
      layout: allData.layout, //布局
      enableHTTPS: 1, //是否启用HTTPS协议
      encryptedFields: 'secret', //加密字段
      showToolbar: 1, //是否显示工具栏
      showSmart: 1, //是否显示智能信息
      // buttonIDs: "0,16,256,257,258,259,260,512,515,516,517,768,769" //自定义工具条按钮  旧的
      buttonIDs: '0,16,256,257,258,259,260,512,513,514,515,516,517,768,769', //自定义工具条按钮 新的
      // buttonIDs: this.powerCameraStr === null ? "0" : this.powerCameraStr //自定义工具条按钮powerCameraStr
    }),
  }
  allData.oWebControl.JS_RequestInterface(configObj).then(() => {
    allData.oWebControl.JS_Resize(props.width, props.height)
    getClickAction()
  })
}
/* 视频流RSA加密 */
function setEncrypt (value) {
  const encrypt = new JSEncrypt()
  encrypt.setPublicKey(allData.plugKey)
  return encrypt.encrypt(value)
}
/* 视频预览 */
function getClickAction () {
  allData.oWebControl.JS_RequestInterface({
    funcName: 'startPreview',
    argument: JSON.stringify(allData.showVideos),
  })
}
/* 显示视频实例 */
function getShowStruction () {
  if (allData.oWebControl == null) {
    initPlugin()
  } else {
    allData.oWebControl.JS_ShowWnd()
  }
}


function windowScroll () {
  allData.oWebControl.JS_Resize(props.width, props.height)
}
function windowResize () {
  allData.oWebControl && allData.oWebControl.JS_Resize(props.width, props.height)

  // var div = document.getElementById('playWnd')
  // this.width = div.offsetWidth // 返回元素的总宽度
  // this.height = div.offsetHeight // 返回元素的总高度
  // if (allData.oWebControl) {
  //   allData.oWebControl.JS_Resize(this.width, this.height)
  // }
}

onMounted(() => {
  console.log('videos', props.pointfeature);

  allData.appkey = '22954112' //
  allData.secret = '0gaeJIfkqG9sZsvsVbwj' //
  allData.ip = '59.207.208.2' //
  allData.port = 1443 //

  // this.getCameraSta()
  // this.gethkviewqueryAll()
  var div = document.getElementById('playWnd')
  props.width = div.offsetWidth // 返回元素的总宽度
  props.height = div.offsetHeight // 返回元素的总高度
  // 设置top left
  const bodyW = $(window).width()
  const bodyH = $(window).height()
  allData.left = bodyW / 2 - props.width / 2
  allData.top = bodyH / 2 - props.height / 2


  if (props.pointfeature.indexCode) {
    allData.showVideos = {
      cameraIndexCode: props.pointfeature.indexCode, //监控点编号
      streamMode: 0, //主子码流标识:0-主码流,1-子码流
      transMode: 1, //传输协议:0-UDP,1-TCP
      gpuMode: 0, //是否启用GPU硬解,0-不启用,1-启用
      wndId: -1, //播放窗口序号
    }
    initPlugin()
  } else {
    proxy.$modal.msgWarning("无视频资源");
  }

  // 监听resize事件,使插件窗口尺寸跟随DIV窗口变化
  window.addEventListener('resize', windowResize())

  // 监听滚动条scroll事件,使插件窗口跟随浏览器滚动而移动
  // window.addEventListener('scroll', windowScroll())
})

onBeforeUnmount(() => {
  if (allData.oWebControl != null) {
    // allData.oWebControl.JS_HideWnd()
    allData.oWebControl.JS_Disconnect()
    allData.oWebControl.JS_DestroyWnd()
    allData.oWebControl = null
  }
})


</script>

<style scoped>
#HomePage_video {
  width: 640px;
  height: 570px;
  /* position: relative; */
}
#HomePage_video img {
  display: none !important;
  width: 0px !important;
  height: 0px !important;
}

.videobox2 {
  /* position: absolute;
  top: 0;
  right: 0; */
  width: 100%;
  height: calc(100% - 10px);
  border: 1px solid #333;
  box-sizing: border-box;
  background-color: rgba(0, 0, 0, 0.35);
  border-radius: 2px;
  /* overflow: hidden; */
}

.videobox2 img {
  display: none !important;
  width: 0px !important;
  height: 0px !important;
}
</style>