vue-cli3.0接入海威视频实例

<template>
  <div class="container">
    <myheader title="智慧监控平台" />
    <div class="mycontent">
      <i class="change iconfont" @click="myswitch">&#xe613;</i>
      <!-- <span :style="[isCollapse ? {'right':'28%'} : {'right':'20px'}]">{
   
   { obj.title }}</span> -->
      <!-- <img :style="[isCollapse ? {'width':'75%'} : {'width':'100%'}]" :src="obj.pic" alt /> -->
      <!-- <img :style="[isCollapse ? {'width':'75%'} : {'width':'100%'}]" /> -->
      <div id="playSingle"  class="playSingle" style="left: 109px; top: 133px;" :style="{'width':(flag ? '100px' : '0px')}"></div>
      <!-- <div id="startPlayback" class="startPlayback" style="left: 109px; top: 133px;"></div> -->
      <!-- <div id="playSingle" class="playSingle" style="left: 109px; top: 133px;"></div> -->

      <template v-if="isCollapse&&!isWho">
        <hiddenDanger @mychange="mychange" />
      </template>
      <template v-else-if="isCollapse&&isWho">
        <history @hischange="hischange" @mysearch="mysearch" />
      </template>
    </div>
  </div>
</template>

<script>
import history from "./components/history";
import hiddenDanger from "./components/hidden-danger";
export default {
  data() {
    return {
      str: "playSingle",
      flag: true,
      // 视频监控视频的数据--start
      initCount: 0,
      pubKey: "",
      oWebControl: null,
      playMode:0,
      bIE: !!window.ActiveXObject || "ActiveXObject" in window,
      // 视频监控视频的数据--end
      obj: {},
      isWho: true,
      drawer: false,
      isCollapse: false
    };
  },
  mounted() {
    this.obj = this.$route.params.obj;
    // this.str = "playSingle"
    // 监听resize事件,使插件窗口尺寸跟随DIV窗口变化
    $(window).resize(function() {
      if (this.oWebControl != null) {
        this.oWebControl.JS_Resize(1100, 600);
        this.setWndCover();
      }
    });

    // 监听滚动条scroll事件,使插件窗口跟随浏览器滚动而移动
    $(window).scroll(function() {
      if (this.oWebControl != null) {
        this.oWebControl.JS_Resize(1100, 600);
        this.setWndCover();
      }
    });
    this.initPlugin();
    // this.init();
  },
  destroyed() {
    if (this.oWebControl != null) {
      this.oWebControl.JS_HideWnd(); // 先让窗口隐藏,规避可能的插件窗口滞后于浏览器消失问题
      this.oWebControl.JS_Disconnect().then(
        function() {
          // 断开与插件服务连接成功
        },
        function() {
          // 断开与插件服务连接失败
        }
      );
    }
  },
  methods: {
    // 格式化时间
    dateFormat(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;
    },
    // 显示回调信息
    showCBInfo(szInfo, type) {
      const _this = this;
      if (type === "error") {
        szInfo =
          "<div style='color: red;'>" +
          _this.dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss") +
          " " +
          szInfo +
          "</div>";
      } else {
        szInfo =
          "<div>" +
          _this.dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss") +
          " " +
          szInfo +
          "</div>";
      }
      $("#cbInfo").html(szInfo + $("#cbInfo").html());
    },
    // 创建播放实例
    initPlugin() {
      const _this = this;
      _this.oWebControl = new WebControl({
        szPluginContainer: "playSingle", // 指定容器id
        iServicePortStart: 15900, // 指定起止端口号,建议使用该值
        iServicePortEnd: 15909,
        szClassId: "23BF3B0A-2C56-4D97-9C03-0CB103AA8F11", // 用于IE10使用ActiveX的clsid
        cbConnectSuccess: function() {
          _this.initCount = 0;
          // _this.flag = false;
          _this.setCallbacks();
          // 创建WebControl实例成功
          _this.oWebControl
            .JS_StartService("window", {
              // WebControl实例创建成功后需要启动服务
              dllPath: "./VideoPluginConnect.dll" // 值"./VideoPluginConnect.dll"写死
            })
            .then(
              function() {
                // 启动插件服务成功
                _this.oWebControl.JS_SetWindowControlCallback({
                  // 设置消息回调
                  cbIntegrationCallBack: _this.cbIntegrationCallBack
                });

                _this.oWebControl
                  .JS_CreateWnd(_this.str, 1000, 600)
                  .then(function() {
                    //JS_CreateWnd创建视频播放窗口,宽高可设定
                    _this.init(); // 创建播放实例成功后初始化
                  });
              },
              function() {
                // 启动插件服务失败
              }
            );
        },
        cbConnectError: function() {
          // 创建WebControl实例失败
          _this.oWebControl = null;
          // $("#playSingle").html("插件未启动,正在尝试启动,请稍候...");
          WebControl.JS_WakeUp("VideoWebPlugin://"); // 程序未启动时执行error函数,采用wakeup来启动程序
          _this.initCount++;
          if (_this.initCount < 3) {
            setTimeout(function() {
              _this.initPlugin();
            }, 3000);
          } else {
            // $("#playSingle").html("插件启动失败,请检查插件是否安装!");
          }
        },
        cbConnectClose: function(bNormalClose) {
          // console.log(bNormalClose);
          // 异常断开:bNormalClose = false
          // JS_Disconnect正常断开:bNormalClose = true
          // console.log("cbConnectClose");
          _this.oWebControl = null;
        }
      });
      // console.log(_this.oWebControl, "initPlugin");
    },
    // 设置窗口控制回调
    setCallbacks() {
      const _this = this;
      _this.oWebControl.JS_SetWindowControlCallback({
        cbIntegrationCallBack: _this.cbIntegrationCallBack
      });
    },
    // 推送消息
    cbIntegrationCallBack(oData) {
      this.showCBInfo(JSON.stringify(oData.responseMsg));
    },
    //初始化
    init() {  
      const _this = this;
      _this.getPubKey(function() {
        // 请自行修改以下变量值	
        var appkey = "27000290"; //综合安防管理平台提供的appkey,必填
        var secret = _this.setEncrypt("V7jtt2jf9yz3UxU65jDX"); //综合安防管理平台提供的secret,必填
        var ip = "10.39.62.3"; //综合安防管理平台IP地址,必填
        // var playMode = _this.playMode; //初始播放模式:0-预览,1-回放
        var port = 443; //综合安防管理平台端口,若启用HTTPS协议,默认443
        var snapDir = "D:\\SnapDir"; //抓图存储路径
        var videoDir = "D:\\VideoDir"; //紧急录像或录像剪辑存储路径
        var layout = "1x1"; //playMode指定模式的布局
        var enableHTTPS = 1; //是否启用HTTPS协议与综合安防管理平台交互,这里总是填1
        var encryptedFields = "secret"; //加密字段,默认加密领域为secret
        var showToolbar = 1; //是否显示工具栏,0-不显示,非0-显示
        var showSmart = 1; //是否显示智能信息(如配置移动侦测后画面上的线框),0-不显示,非0-显示
        var buttonIDs =
          "0,16,256,257,258,259,260,512,513,514,515,516,517,768,769"; //自定义工具条按钮
        // 请自行修改以上变量值	
        // console.log(_this.playMode,"playMode")
        _this.oWebControl
          .JS_RequestInterface({
            funcName: "init",
            argument: JSON.stringify({
              appkey: appkey, //API网关提供的appkey
              secret: secret, //API网关提供的secret
              ip: ip, //API网关IP地址
              playMode:_this.playMode, //播放模式(决定显示预览还是回放界面)
              port: port, //端口
              snapDir: snapDir, //抓图存储路径
              videoDir: videoDir, //紧急录像或录像剪辑存储路径
              layout: layout, //布局
              enableHTTPS: enableHTTPS, //是否启用HTTPS协议
              encryptedFields: encryptedFields, //加密字段
              showToolbar: showToolbar, //是否显示工具栏
              showSmart: showSmart, //是否显示智能信息
              buttonIDs: buttonIDs //自定义工具条按钮
            })
          })
          .then(function(oData) {
             // 初始化后resize一次,规避firefox下首次显示窗口后插件窗口未与DIV窗口重合问题
            if(_this.flag) {
              _this.oWebControl.JS_Resize(1400, 520);
              _this.mywatch()
            }else {
              _this.oWebControl.JS_Resize(1100, 520);
              _this.myback()
            }
          });
      });
    },
    //获取公钥
    getPubKey(callback) {
      const _this = this;
      _this.oWebControl
        .JS_RequestInterface({
          funcName: "getRSAPubKey",
          argument: JSON.stringify({
            keyLength: 1024
          })
        })
        .then(function(oData) {
          if (oData.responseMsg.data) {
            _this.pubKey = oData.responseMsg.data;
            callback();
          }
        });
    },
    //RSA加密
    setEncrypt(value) {
      var encrypt = new JSEncrypt();
      encrypt.setPublicKey(this.pubKey);
      return encrypt.encrypt(value);
    },
    // 设置窗口裁剪,当因滚动条滚动导致窗口需要被遮住的情况下需要JS_CuttingPartWindow部分窗口
    setWndCover() {
      var iWidth = $(window).width();
      var iHeight = $(window).height();
      var oDivRect = $("#" + _this.str)
        .get(0)
        .getBoundingClientRect();

      var iCoverLeft = oDivRect.left < 0 ? Math.abs(oDivRect.left) : 0;
      var iCoverTop = oDivRect.top < 0 ? Math.abs(oDivRect.top) : 0;
      var iCoverRight =
        oDivRect.right - iWidth > 0 ? Math.round(oDivRect.right - iWidth) : 0;
      var iCoverBottom =
        oDivRect.bottom - iHeight > 0
          ? Math.round(oDivRect.bottom - iHeight)
          : 0;

      iCoverLeft = iCoverLeft > 1000 ? 1000 : iCoverLeft;
      iCoverTop = iCoverTop > 600 ? 600 : iCoverTop;
      iCoverRight = iCoverRight > 1000 ? 1000 : iCoverRight;
      iCoverBottom = iCoverBottom > 600 ? 600 : iCoverBottom;

      this.oWebControl.JS_RepairPartWindow(0, 0, 1001, 600); // 多1个像素点防止还原后边界缺失一个像素条
      if (iCoverLeft != 0) {
        this.oWebControl.JS_CuttingPartWindow(0, 0, iCoverLeft, 600);
      }
      if (iCoverTop != 0) {
        this.oWebControl.JS_CuttingPartWindow(0, 0, 1001, iCoverTop); // 多剪掉一个像素条,防止出现剪掉一部分窗口后出现一个像素条
      }
      if (iCoverRight != 0) {
        this.oWebControl.JS_CuttingPartWindow(
          1000 - iCoverRight,
          0,
          iCoverRight,
          600
        );
      }
      if (iCoverBottom != 0) {
        this.oWebControl.JS_CuttingPartWindow(
          0,
          600 - iCoverBottom,
          1000,
          iCoverBottom
        );
      }
    },
    // 预览
    mywatch() {
      const _this = this;
      // var cameraIndexCode = $("#cameraIndexCode").val(); //获取输入的监控点编号值,必填
      var streamMode = 0; //主子码流标识:0-主码流,1-子码流
      var transMode = 1; //传输协议:0-UDP,1-TCP
      var gpuMode = 0; //是否启用GPU硬解,0-不启用,1-启用
      var wndId = -1; //播放窗口序号(在2x2以上布局下可指定播放窗口)

      // cameraIndexCode = cameraIndexCode.replace(/(^\s*)/g, "");
      // cameraIndexCode = cameraIndexCode.replace(/(\s*$)/g, "");

      this.oWebControl.JS_RequestInterface({
        funcName: "startPreview",
        argument: JSON.stringify({
          // _this
          // cameraIndexCode: "3f18ac9101b54d509cd6f483a3a6ff9b", //监控点编号
          cameraIndexCode: _this.obj.cameraIndexCode,
          streamMode: streamMode, //主子码流标识
          transMode: transMode, //传输协议
          gpuMode: gpuMode, //是否开启GPU硬解
          wndId: -1 //可指定播放窗口
        })
      });
      
    },
    // 回放
    myback() {
      const _this = this;
      var cameraIndexCode = this.obj.cameraIndexCode; //获取输入的监控点编号值,必填
      var startTimeStamp = new Date(
        $(".starttime")
          .val()
          .replace("-", "/")
          .replace("-", "/")
      ).getTime(); //回放开始时间戳,必填
      var endTimeStamp = new Date(
        $(".endtime")
          .val()
          .replace("-", "/")
          .replace("-", "/")
      ).getTime(); //回放结束时间戳,必填
      var recordLocation = 1; //录像存储位置:0-中心存储,1-设备存储
      var transMode = 0; //传输协议:0-UDP,1-TCP
      var gpuMode = 0; //是否启用GPU硬解,0-不启用,1-启用
      // var wndId = this.obj.winid; //播放窗口序号(在2x2以上布局下可指定播放窗口)
      // demo_window_simple_playback.html:298 1593360000000 1593446399000
      this.oWebControl.JS_RequestInterface({
        funcName: "startPlayback",
        argument: JSON.stringify({
          cameraIndexCode: _this.obj.cameraIndexCode, //监控点编号
          startTimeStamp: Math.floor(startTimeStamp / 1000).toString(), //录像查询开始时间戳,单位:秒
          endTimeStamp: Math.floor(endTimeStamp / 1000).toString(), //录像结束开始时间戳,单位:秒
          recordLocation: recordLocation, //录像存储类型:0-中心存储,1-设备存储
          transMode: transMode, //传输协议:0-UDP,1-TCP
          gpuMode: gpuMode, //是否启用GPU硬解,0-不启用,1-启用
          wndId: -1 //可指定播放窗口
        })
      });
      // this.oWebControl.JS_Resize(1000, 520);
    },
    // 点击切换
    mychange() {
      // this.isWho = !this.isWho;
    },
    hischange() {
      this.isWho = !this.isWho;
    },
    // 点击查询对应的事件
    mysearch() {
      const _this = this
      this.flag = false;
      this.playMode = 1
      this.oWebControl.JS_DestroyWnd().then(() => {
        console.log("deatory")
      })
      setTimeout(() => {
        // this.oWebControl.JS_ShowWnd()
        this.initPlugin()
      },2000)
      
    },
    myswitch() {
      this.drawer = !this.drawer;
      this.isCollapse = !this.isCollapse;
      if (!this.isCollapse) {
        this.oWebControl.JS_Resize(1400, 520);
      } else {
        this.oWebControl.JS_Resize(1100, 520);
      }
    }
  },
  components: {
    history,
    hiddenDanger
  }
};
</script>
<style lang="scss">
.mycontent {
  .el-drawer.ltr,
  .el-drawer.rtl,
  .el-drawer__container {
    top: 6px !important;
  }
  .el-input__icon {
    display: none;
  }
  .el-input--prefix .el-input__inner {
    padding-left: 10px;
  }
}
</style>
<style lang="scss" scoped>
.playSingle,
.startPlayback {
  // z-index: 1000000;
  margin: 30px 200px 0 30px;
  width: 1000px;
  height: 520px;
  opacity: 0;
  border: 1px solid red;
}
.mycontent {
  width: 96%;
  height: 75vh;
  @extend %row;
  margin: 60px auto;
  margin-bottom: 0px;
  position: relative;
  .change {
    top: -30px;
    right: 0px;
    color: #fff;
    font-size: 20px;
    position: absolute;
    font-weight: 600;
    cursor: pointer;
  }
  span {
    top: 20px;
    right: 20px;
    color: #fff;
    font-size: 16px;
    position: absolute;
    font-weight: 400;
  }
  img {
    width: 100%;
    height: 75vh;
  }
}
</style>

猜你喜欢

转载自blog.csdn.net/qq_41687299/article/details/107024900