CZT
2023-09-04 fae4bd828a6b81b95f53e285fcb4749fbd80c7bf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
var layer;
var time;
 
//声明公用变量
var initCount = 0;
var pubKey = '';
var playMode = 0;                                  //初始播放模式:0-预览,1-回放
var snapDir = "D:\\SnapDir";                       //抓图存储路径
var videoDir = "D:\\VideoDir";                     //紧急录像或录像剪辑存储路径
var layout = "1x1";                                //playMode指定模式的布局
var enableHTTPS = 1;                               //是否启用HTTPS协议与综合安防管理平台交互,这里总是填1
var encryptedFields = 'secret';                       //加密字段,默认加密领域为secret
var showToolbar = 0;                               //是否显示工具栏,0-不显示,非0-显示
var showSmart = 1;                                 //是否显示智能信息(如配置移动侦测后画面上的线框),0-不显示,非0-显示
var buttonIDs = "0,16,256,257,258,259,260,512,513,514,515,516,517,768,769";  //自定义工具条按钮
var windowWidth = null;
var windowHeight = null;
$(function () {
    layui.use(['layer'], function () {
        layer = layui.layer;
    });
 
    windowWidth = document.body.offsetWidth;
    windowHeight = document.body.offsetHeight;
    console.log(windowWidth + "-" + windowHeight);
    time = setTimeout(function() {
        startPlay();
    }, 1500);
});
 
//页面加载时创建播放实例初始化
$(window).load(function () {
    initPlugin();
});
 
// 监听resize事件,使插件窗口尺寸跟随DIV窗口变化
$(window).resize(function () {
    if (oWebControl != null) {
        oWebControl.JS_Resize(windowWidth, windowHeight);
        setWndCover();
    }
});
 
// 监听滚动条scroll事件,使插件窗口跟随浏览器滚动而移动
$(window).scroll(function () {
    if (oWebControl != null) {
        oWebControl.JS_Resize(windowWidth, windowHeight);
        setWndCover();
    }
});
 
// 创建播放实例
function initPlugin () {
    oWebControl = new WebControl({
        szPluginContainer: "playWnd",                       // 指定容器id
        iServicePortStart: 15900,                           // 指定起止端口号,建议使用该值
        iServicePortEnd: 15909,
        szClassId:"23BF3B0A-2C56-4D97-9C03-0CB103AA8F11",   // 用于IE10使用ActiveX的clsid
        cbConnectSuccess: function () {                     // 创建WebControl实例成功
            oWebControl.JS_StartService("window", {         // WebControl实例创建成功后需要启动服务
                dllPath: "./VideoPluginConnect.dll"         // 值"./VideoPluginConnect.dll"写死
            }).then(function () {                           // 启动插件服务成功
                oWebControl.JS_CreateWnd("playWnd", windowWidth, windowHeight).then(function () { //JS_CreateWnd创建视频播放窗口,宽高可设定
                    init();  // 创建播放实例成功后初始化
                });
            }, function () { // 启动插件服务失败
            });
        },
        cbConnectError: function () { // 创建WebControl实例失败
            oWebControl = null;
            $("#playWnd").html("插件未启动,正在尝试启动,请稍候...");
            WebControl.JS_WakeUp("VideoWebPlugin://"); // 程序未启动时执行error函数,采用wakeup来启动程序
            initCount ++;
            if (initCount < 3) {
                setTimeout(function () {
                    initPlugin();
                }, 3000)
            } else {
                $("#playWnd").html("插件启动失败,请检查插件是否安装!");
            }
        },
        cbConnectClose: function (bNormalClose) {
            // 异常断开:bNormalClose = false
            // JS_Disconnect正常断开:bNormalClose = true
            console.log("cbConnectClose");
            oWebControl = null;
        }
    });
}
 
//初始化
function init() {
    getPubKey(function () {
 
        ////////////////////////////////// 请自行修改以下变量值    ////////////////////////////////////
        // var appkey = "23519780";                           //综合安防管理平台提供的appkey,必填
        // var secret = setEncrypt("cYyFJAdjm9jNvZBTrcmH");   //综合安防管理平台提供的secret,必填
        // var ip = "221.8.37.106";                           //综合安防管理平台IP地址,必填
        // var playMode = 0;                                  //初始播放模式:0-预览,1-回放
        // var port = 1443;                                    //综合安防管理平台端口,若启用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 = 0;                               //是否显示工具栏,0-不显示,非0-显示
        // var showSmart = 1;                                 //是否显示智能信息(如配置移动侦测后画面上的线框),0-不显示,非0-显示
        // var buttonIDs = "0,16,256,257,258,259,260,512,513,514,515,516,517,768,769";  //自定义工具条按钮
        ////////////////////////////////// 请自行修改以上变量值    ////////////////////////////////////
 
        oWebControl.JS_RequestInterface({
            funcName: "init",
            argument: JSON.stringify({
                appkey: appkey,                            //API网关提供的appkey
                secret: setEncrypt(secret),                            //API网关提供的secret
                ip: ip,                                    //API网关IP地址
                playMode: playMode,                        //播放模式(决定显示预览还是回放界面)
                port: port,                                //端口
                snapDir: snapDir,                          //抓图存储路径
                videoDir: videoDir,                        //紧急录像或录像剪辑存储路径
                layout: layout,                            //布局
                enableHTTPS: enableHTTPS,                  //是否启用HTTPS协议
                encryptedFields: encryptedFields,          //加密字段
                showToolbar: showToolbar,                  //是否显示工具栏
                showSmart: showSmart,                      //是否显示智能信息
                buttonIDs: buttonIDs                       //自定义工具条按钮
            })
        }).then(function (oData) {
            oWebControl.JS_Resize(windowWidth, windowHeight);  // 初始化后resize一次,规避firefox下首次显示窗口后插件窗口未与DIV窗口重合问题
        });
    });
}
 
//获取公钥
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()
        }
    })
}
 
//RSA加密
function setEncrypt (value) {
    var encrypt = new JSEncrypt();
    encrypt.setPublicKey(pubKey);
    return encrypt.encrypt(value);
}
 
// 设置窗口裁剪,当因滚动条滚动导致窗口需要被遮住的情况下需要JS_CuttingPartWindow部分窗口
function setWndCover() {
    var iWidth = $(window).width();
    var iHeight = $(window).height();
    var oDivRect = $("#playWnd").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;
 
    oWebControl.JS_RepairPartWindow(0, 0, 1001, 600);    // 多1个像素点防止还原后边界缺失一个像素条
    if (iCoverLeft != 0) {
        oWebControl.JS_CuttingPartWindow(0, 0, iCoverLeft, 600);
    }
    if (iCoverTop != 0) {
        oWebControl.JS_CuttingPartWindow(0, 0, 1001, iCoverTop);    // 多剪掉一个像素条,防止出现剪掉一部分窗口后出现一个像素条
    }
    if (iCoverRight != 0) {
        oWebControl.JS_CuttingPartWindow(1000 - iCoverRight, 0, iCoverRight, 600);
    }
    if (iCoverBottom != 0) {
        oWebControl.JS_CuttingPartWindow(0, 600 - iCoverBottom, 1000, iCoverBottom);
    }
}
 
//开始预览
function startPlay(){
    var cameraIndexCode  = sn;     //获取输入的监控点编号值,必填
    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, "");
 
    oWebControl.JS_RequestInterface({
        funcName: "startPreview",
        argument: JSON.stringify({
            cameraIndexCode:cameraIndexCode,                //监控点编号
            streamMode: streamMode,                         //主子码流标识
            transMode: transMode,                           //传输协议
            gpuMode: gpuMode,                               //是否开启GPU硬解
            wndId:wndId                                     //可指定播放窗口
        })
    });
    clearTimeout(time);
}
 
//停止全部预览
function stopPlay(){
    oWebControl.JS_RequestInterface({
        funcName: "stopAllPreview"
    });
}
 
// 标签关闭
$(window).unload(function () {
    if (oWebControl != null){
        oWebControl.JS_HideWnd();   // 先让窗口隐藏,规避可能的插件窗口滞后于浏览器消失问题
        oWebControl.JS_Disconnect().then(function(){  // 断开与插件服务连接成功
            },
            function() {  // 断开与插件服务连接失败
            });
    }
});