一、安裝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