vue 对接海康威视web视频监控,配合iframe使用

作者 : admin 本文共4724个字,预计阅读时间需要12分钟 发布时间: 2024-06-9 共3人阅读

一、下载视频web插件v1.5.2版本

下载地址:海康开放平台

bin目录下,打开bin文件安装

vue 对接海康威视web视频监控,配合iframe使用插图

二、在vue项目的public目录新建文件夹,放入插件js文件

vue 对接海康威视web视频监控,配合iframe使用插图(1)

三、引入海康插件,创建div

vue 对接海康威视web视频监控,配合iframe使用插图(2)

四、创建WebControl实例

 // 插件对象实例,初始化为null,需要创建多个插件窗口时,需要定义多个插件对象实例变量,各个变量唯一标志对应的插件实例

​    var oWebControl = null;

​    var bIE = !!window.ActiveXObject || "ActiveXObject" in window; // 是否为IE浏览器

​    var pubKey = ""; // demo中未使用加密,可根据需求参照开发指南自行使用加密功能

​    var initCount = 0; // 异常重启计数

 initPlugin();
        // 创建插件实例,并启动本地服务建立websocket连接,创建插件窗口
        function initPlugin() {
            oWebControl = new WebControl({
                szPluginContainer: "playWnd",
                iServicePortStart: 15900,
                iServicePortEnd: 15900,
                szClassId: "23BF3B0A-2C56-4D97-9C03-0CB103AA8F11", // 用于IE10使用ActiveX的clsid
                cbConnectSuccess() {
                    console.log('创建WebControl实例成功');
                    oWebControl.JS_StartService('window', {
                        // WebControl实例创建成功后需要启动服务
                        dllPath: './VideoPluginConnect.dll', // 值"./VideoPluginConnect.dll"写死
                    })
                        .then(
                            () => {
                                // // 启动插件服务成功
                                oWebControl.JS_SetWindowControlCallback({
                                    // 设置消息回调
                                    cbIntegrationCallBack: cbIntegrationCallBack,
                                });
                                oWebControl.JS_CreateWnd("playWnd").then(() => {
                                    //JS_CreateWnd创建视频播放窗口,宽高可设定

                                    oWebControl.JS_SetDocOffset({
                                        left: 250,
                                        top: 125,
                                    }); // 更新插件窗口位置

                                    oWebControl.JS_Resize(640 * 1, 360 * 1);

                                    initBtnClicked(); // 创建播放实例成功后初始化
                                });
                            },
                            () => {
                                // 启动插件服务失败
                            }
                        )
                        .catch((err) => {
                            console.log(err);
                        });
                },
                cbConnectError: function () {
                    console.log("cbConnectError");
                    oWebControl = null;
                    $("#playWnd").html("插件未启动,正在尝试启动,请稍候...");
                    WebControl.JS_WakeUp("VideoWebPlugin://");
                    initCount++;
                    if (initCount < 3) {
                        setTimeout(function () {
                            initPlugin();
                        }, 3000);
                    } else {
                        $("#playWnd").html("插件启动失败,请检查插件是否安装!");
                    }
                },
                cbConnectClose: function (bNormalClose) {
                    // 异常断开:bNormalClose = false
                    // JS_Disconnect正常断开:bNormalClose = true
                    if (true == bNormalClose) {
                        console.log("cbConnectClose normal");
                    } else {
                        console.log("cbConnectClose exception");
                    }

                    oWebControl = null;
                    $("#playWnd").html("插件未启动,正在尝试启动,请稍候...");
                    WebControl.JS_WakeUp("VideoWebPlugin://");
                    initCount++;
                    if (initCount < 3) {
                        setTimeout(function () {
                            initPlugin();
                        }, 3000);
                    } else {
                        $("#playWnd").html("插件启动失败,请检查插件是否安装!");
                    }
                },
            });

五、初始化

 // 获取公钥

​    function getPubKey(callback) {

​      oWebControl

​        .JS_RequestInterface({

​          funcName: "getRSAPubKey",

​          argument: JSON.stringify({

​            keyLength: 1024,

​          }),

​        })

​        .then(function (oData) {

​          console.log(oData);

​          if (oData.responseMsg.data) {

​            pubKey = oData.responseMsg.data;

​            callback();

​          }

​        });

​    }


​    // 设置窗口控制回调

​    function setCallbacks() {

​      oWebControl.JS_SetWindowControlCallback({

​        cbIntegrationCallBack: cbIntegrationCallBack,

​      });

​    }


​    // 推送消息

​    function cbIntegrationCallBack(oData) {

​      showCBInfo(JSON.stringify(oData.responseMsg));

​    }


​    // RSA加密

​    function setEncrypt(value) {

​      var encrypt = new JSEncrypt();

​      encrypt.setPublicKey(pubKey);

​      return encrypt.encrypt(value);

​    }


​    // 显示接口返回的消息及插件回调信息

​    function showCBInfo(szInfo, type) {

​      if (type === "error") {

​        szInfo =

​          "" +

​          dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss") +

​          " " +

​          szInfo +

​          "";

​      } else {

​        szInfo =

​          "" +

​          dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss") +

​          " " +

​          szInfo +

​          "";

​      }

​      $("#cbInfo").html(szInfo + $("#cbInfo").html());

​    }

  // 初始化
​     function requestInterface(value) {

​      oWebControl.JS_RequestInterface(JSON.parse(value)).then(function (oData) {

​        // console.log(oData)

​        showCBInfo(JSON.stringify(oData ? oData.responseMsg : ""));

​      });

​    }

  function initBtnClicked() {
       var appkey = "XXXXX"; //综合安防管理平台提供的appkey,必填
                var secret = _that.setEncrypt("XXXXXXXXXX"); //综合安防管理平台提供的secret,必填
                var ip = "XXXXXXXX"; //综合安防管理平台IP地址,必填
                var playMode = 0; //初始播放模式:0-预览,1-回放
                var port = 443; //综合安防管理平台端口,若启用HTTPS协议,默认443
                var snapDir = ""; //抓图存储路径
                var videoDir = ""; //紧急录像或录像剪辑存储路径
                var layout = _that.layout; //playMode指定模式的布局
                var enableHTTPS = 1; //是否启用HTTPS协议与综合安防管理平台交互,这里总是填1
                var encryptedFields = "secret"; //加密字段,默认加密领域为secret
                var showToolbar = 0; //是否显示工具栏,0-不显示,非0-显示
                var showSmart = 0; //是否显示智能信息(如配置移动侦测后画面上的线框),0-不显示,非0-显示
                var buttonIDs = ""; //自定义工具条按钮
            var params = {
                "argument":
                {
                       appkey: appkey, //API网关提供的appkey
                        secret: secret, //API网关提供的secret
                        ip: ip, //API网关IP地址
                        playMode: playMode, //播放模式(决定显示预览还是回放界面)
                        port: port, //端口
                        snapDir: snapDir, //抓图存储路径
                        videoDir: videoDir, //紧急录像或录像剪辑存储路径
                        layout: layout, //布局
                        enablehttp: enableHTTPS, //是否启用HTTPS协议
                        encryptedFields: encryptedFields, //加密字段
                        showToolbar: showToolbar, //是否显示工具栏
                        showSmart: showSmart, //是否显示智能信息
                        buttonIDs: buttonIDs, //自定义工具条按钮
                },
                "funcName": "init"
            }
            var param = JSON.stringify(params);

            //删除字符串中的回车换行
            param = param.replace(/(\s*)/g, "");

            // 执行初始化
            requestInterface(param);
            playFn()
        }

六、视频预览

 function playFn() {
       var cameraIndexCode = Code; //获取输入的监控点编号值,必填
            var streamMode = this.streamMode; //主子码流标识: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, "");

​      var params = {

​        "argument": {

​          cameraIndexCode: cameraIndexCode, //监控点编号
                    streamMode: streamMode, //主子码流标识
                    transMode: transMode, //传输协议
                    gpuMode: gpuMode, //是否开启GPU硬解
                    wndId: wndId, //可指定播放窗口

​        },

​        "funcName": "startPreview"

​      }

​      // console.log(code);

​      var param = JSON.stringify(params);

​      //删除字符串中的回车换行

​      param = param.replace(/(\s*)/g, "");

​      // 执行预览

​      requestInterface(param);

​    }

七、完整代码

play.html页面,放在public目录下





    
    
    
    Document


    html,
    body {
        padding: 0;
        margin: 0;
    }




    
    
    
    
    
    


vue文件

 

本站无任何商业行为
个人在线分享 » vue 对接海康威视web视频监控,配合iframe使用
E-->