vue??狄曨lweb插件使用

一、安裝bin目錄下的VideoWebPlugin.exe插件

二、在vue項目的index.html文件中引入jsencrypt.min.js,web-control_1.2.5.min.js

三、頁面使用
創(chuàng)建容器

<div class="player_bg" id="playWnd" > </div>

創(chuàng)建實例,并配置相應(yīng)數(shù)據(jù)

    // 創(chuàng)建插件
    initPlugin () {
      let that = this;
      that.oWebControl = new WebControl({
        szPluginContainer: "playWnd",                       // 指定容器id
        iServicePortStart: 15900,                           // 指定起止端口號,建議使用該值
        iServicePortEnd: 15900,
        szClassId:"23BF3B0A-2C56-4D97-9C03-0CB103AA8F11",   // 用于IE10使用ActiveX的clsid
        cbConnectSuccess: function () {
          // 創(chuàng)建WebControl實例成功
          that.oWebControl.JS_StartService("window", {         // WebControl實例創(chuàng)建成功后需要啟動服務(wù)
            dllPath: "./VideoPluginConnect.dll"         // 值"./VideoPluginConnect.dll"寫死
          }).then(function () {
            that.oWebControl.JS_SetWindowControlCallback({   // 設(shè)置消息回調(diào)
              cbIntegrationCallBack: that.cbIntegrationCallBack
            });// 啟動插件服務(wù)成功
            that.oWebControl.JS_CreateWnd("playWnd", that.boxWidth, that.boxHeight).then(function () { //JS_CreateWnd創(chuàng)建視頻播放窗口,寬高可設(shè)定,boxWidth, boxHeight容器
              that.init();  // 創(chuàng)建播放實例成功后初始化
            });
          }, function () { // 啟動插件服務(wù)失敗
          });
        },
        cbConnectError: function () { // 創(chuàng)建WebControl實例失敗
          that.oWebControl = null;
          $("#playWnd").html("插件未啟動,正在嘗試啟動,請稍候...");
          WebControl.JS_WakeUp("VideoWebPlugin://"); // 程序未啟動時執(zhí)行error函數(shù),采用wakeup來啟動程序
          that.initCount ++;
          if (that.initCount < 3) {
            setTimeout(function () {
              that.initPlugin();
            }, 3000)
          } else {
            $("#playWnd").html("插件啟動失敗,請檢查插件是否安裝!");
          }
        },
        cbConnectClose: function (bNormalClose) {
          // 異常斷開:bNormalClose = false
          // JS_Disconnect正常斷開:bNormalClose = true
          that.oWebControl = null;
          $("#playWnd").html("插件未啟動,正在嘗試啟動,請稍候...");
          WebControl.JS_WakeUp("VideoWebPlugin://");
          that.initCount ++;
          if (that.initCount < 3) {
            setTimeout(function () {
              that.initPlugin();
            }, 3000)
          } else {
            $("#playWnd").html("插件啟動失敗,請檢查插件是否安裝!");
          }
        }
      });
    },

    // 消息回調(diào)
    cbIntegrationCallBack(oData) {
      let response = oData.responseMsg;
      // response.type=1  選中窗口消息  type=2 播放消息
    },

    // 初始化
    init(){
      let that = this;
      that.getPubKey(function () {
        ////////////////////////////////// 請自行修改以下變量值   ////////////////////////////////////
        let appkey = "28631222";                           //綜合安防管理平臺提供的appkey,必填
        let secret = that.setEncrypt("vRfUmiilCd4EpLmtZKoT");   //綜合安防管理平臺提供的secret,必填
        let ip = "112.48.8.98";                           //綜合安防管理平臺IP地址,必填
        let playMode = 0;                                  //初始播放模式:0-預(yù)覽(實時流),1-回放(視頻)
        let port = 10443;                                    //綜合安防管理平臺端口,若啟用HTTPS協(xié)議,默認(rèn)443
        let snapDir = "D:\\SnapDir";                       //抓圖存儲路徑
        let videoDir = "D:\\VideoDir";                     //緊急錄像或錄像剪輯存儲路徑
        let layout = "4x1";                                //playMode指定模式的布局
        let enableHTTPS = 1;                               //是否啟用HTTPS協(xié)議與綜合安防管理平臺交互,這里總是填1
        let encryptedFields = 'secret';                    //加密字段,默認(rèn)加密領(lǐng)域為secret
        let showToolbar = 1;                               //是否顯示工具欄,0-不顯示,非0-顯示
        let showSmart = 1;                                 //是否顯示智能信息(如配置移動偵測后畫面上的線框),0-不顯示,非0-顯示
        let buttonIDs = "0,16,256,257,258,259,260,513,514,515,516,517,768";  //自定義工具條按鈕
        that.oWebControl.JS_RequestInterface({
          funcName: "init",
          argument: JSON.stringify({
            appkey: appkey,                            //API網(wǎng)關(guān)提供的appkey
            secret: secret,                            //API網(wǎng)關(guān)提供的secret
            ip: ip,                                    //API網(wǎng)關(guān)IP地址
            playMode: playMode,                        //播放模式(決定顯示預(yù)覽還是回放界面)
            port: port,                                //端口
            snapDir: snapDir,                          //抓圖存儲路徑
            videoDir: videoDir,                        //緊急錄像或錄像剪輯存儲路徑
            layout: layout,                            //布局
            enableHTTPS: enableHTTPS,                  //是否啟用HTTPS協(xié)議
            encryptedFields: encryptedFields,          //加密字段
            showToolbar: showToolbar,                  //是否顯示工具欄
            showSmart: showSmart,                      //是否顯示智能信息
            buttonIDs: buttonIDs                       //自定義工具條按鈕
          })
        }).then(function (oData) {
          that.oWebControl.JS_Resize(that.boxWidth, that.boxHeight);  // 初始化后resize一次,規(guī)避firefox下首次顯示窗口后插件窗口未與DIV窗口重合問題
        });
      });
    },

    // 獲取公鑰
    getPubKey(callback) {
      this.oWebControl.JS_RequestInterface({
          funcName: 'getRSAPubKey',
          argument: JSON.stringify({
            keyLength: 1024,
          }),
        }).then((oData) => {
          if (oData.responseMsg.data) {
            this.pubKey = oData.responseMsg.data
            callback()
          }
        })
    },

    // RSA加密
    setEncrypt (value) {
      let that = this;
      let encrypt = new JSEncrypt();
      encrypt.setPublicKey(that.pubKey);
      return encrypt.encrypt(value);
    },

播放

// 監(jiān)控
that.oWebControl.JS_RequestInterface({
   funcName: "startPreview",
      argument: JSON.stringify({
         cameraIndexCode:code,            //監(jiān)控點編號
         streamMode: 0,                   //主子碼流標(biāo)識:0-主碼流,1-子碼流
         transMode: 1,                    //傳輸協(xié)議:0-UDP,1-TCP
         gpuMode: 0,                      //是否啟用GPU硬解,0-不啟用,1-啟用
         wndId:-1                         //播放窗口序號(在2x2以上布局下可指定播放窗口)
      })
   }).then((oData) => {
      if (oData.responseMsg.code===1){
        console.log('success')
       }
})

// 視頻回放
that.oWebControl.JS_RequestInterface({
   funcName: "startPlayback",
   argument: JSON.stringify({
   cameraIndexCode: code,                   //監(jiān)控點編號
   startTimeStamp: new Date(that.leftTime+' 00:00:00').getTime()/1000,  //錄像查詢開始時間戳,單位:秒
   endTimeStamp:  new Date(that.leftTime+' 23:59:59').getTime()/1000,      //錄像結(jié)束開始時間戳,單位:秒
   recordLocation: 1,            //錄像存儲類型:0-中心存儲,1-設(shè)備存儲
   transMode: 1,              //傳輸協(xié)議:0-UDP,1-TCP
   gpuMode: 0,    //是否啟用GPU硬解,0-不啟用,1-啟用
   wndId:-1  // -1 或未指定-空閑窗口預(yù)覽(不管成功與失敗,預(yù)覽后會自動跳到下一個空閑窗口) 0-選中窗口預(yù)覽(預(yù)覽后不會自動跳到下一個空閑窗口) 大于 0為由 wndId 指定的窗口上播放
  })
}).then((oData) => {
   console.log(oData)
})

頁面關(guān)閉時要記得銷毀插件,否則實時流一直播放

  // 銷毀
  destroyed() {
    if (this.oWebControl) {
      this.oWebControl.JS_HideWnd();   // 先讓窗口隱藏,規(guī)避插件窗口滯后于瀏覽器消失問題
      this.oWebControl.JS_Disconnect().then(function(){}, function() {});
    }
  }

注意要設(shè)置是自適應(yīng),否則瀏覽器縮放,播放器不會跟著縮放

$(window).resize(function() { // 窗口自適應(yīng)
  if (that.oWebControl) {
     that.oWebControl.JS_Resize($('#playWnd').width(), $('#playWnd').height());
   }
 });

運行結(jié)果


監(jiān)控分屏效果圖.jpg

視頻回放效果圖.jpg
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容