Vue 海康监控多屏幕展示 WebVideoCtrl 3.3.0
qq_38785028 2024-07-01 10:33:02 阅读 84
将WebVideoCtrl.js 和jquery 引入index.html 中
封装一个WebVideo.js
import $ from "jquery";
const WebVideo = {
g_iWndIndex: 0, //可以不用设置这个变量,有窗口参数的接口中,不用传值,开发包会默认使用当前选择窗口
g_oLocalConfig: null, //本地配置
ERROR_CODE_UNKNOWN: 1000, //未知错误
ERROR_CODE_NETWORKERROR: 1001, //网络错误
ERROR_CODE_PARAMERROR: 1002,
//登录模块
ERROR_CODE_LOGIN_NOLOGIN: 2000, // 未登录
ERROR_CODE_LOGIN_REPEATLOGIN: 2001, //设备已登录,重复登录
ERROR_CODE_LOGIN_NOSUPPORT: 2002, //当前设备不支持Digest登录
//预览播放
ERROR_CODE_PLAY_PLUGININITFAIL: 3000, //插件初始化失败
ERROR_CODE_PLAY_NOREPEATPLAY: 3001, //当前窗口已经在预览
ERROR_CODE_PLAY_PLAYBACKABNORMAL: 3002, //回放异常
ERROR_CODE_PLAY_PLAYBACKSTOP: 3003, //回放停止
ERROR_CODE_PLAY_NOFREESPACE: 3004, //录像过程中,硬盘容量不足
// 对讲
ERROR_CODE_TALK_FAIL: 5000, //语音对讲失败
version: 'V3.3.0build20230322',
init: function (options) {
let that = this;
return new Promise((resolve, reject) => {
WebVideoCtrl.I_InitPlugin({
bWndFull: true, //是否支持单窗口双击全屏,默认支持 true:支持 false:不支持
iWndowType: options.iWndowType,
cbInitPluginComplete: function () {
console.log(options.domId);
WebVideoCtrl.I_InsertOBJECTPlugin(options.domId).then(() => {
// 检查插件是否最新
WebVideoCtrl.I_CheckPluginVersion().then((bFlag) => {
if (bFlag) {
console.log("检测到新的插件版本,双击开发包目录里的HCWebSDKPlugin.exe升级!");
}
});
}, () => {
console.log("插件初始化失败,请确认是否已安装插件;如果未安装,请双击开发包目录里的HCWebSDKPlugin.exe安装!");
});
resolve();
console.log('初始化成功')
}
})
})
},
// 停止预览
I_StopAllPlay(){
WebVideoCtrl.I_StopAllPlay();
},
clickLogout(ip) {
return new Promise((resolve,reject) => {
var szDeviceIdentify = ip;
if (null == szDeviceIdentify) {
return;
}
WebVideoCtrl.I_Logout(szDeviceIdentify).then(() => {
console.log(szDeviceIdentify + " " + "退出成功!");
resolve();
}, () => {
console.log(szDeviceIdentify + " " + "退出失败!");
});
})
},
I_DestroyPlugin:function(){
WebVideoCtrl.I_DestroyPlugin()
},
clickLogin: function (options) {
return new Promise((resolve, reject) => {
var szIP = options.ip,
szPort = options.port,
szUsername = options.username,
szPassword = options.password;
if ("" == szIP || "" == szPort) {
return;
}
var szDeviceIdentify = szIP + "_" + szPort;
WebVideoCtrl.I_Login(szIP, 1, szPort, szUsername, szPassword, {
timeout: 3000,
success: function (xmlDoc) {
console.log(szDeviceIdentify + " 登录成功!")
resolve();
WebVideo.ip = szDeviceIdentify;
},
error: function (oError) {
if (WebVideo.ERROR_CODE_LOGIN_REPEATLOGIN === oError.errorCode) {
console.log(szDeviceIdentify + " 已登录过!")
} else {
console.log(szDeviceIdentify + " 登录失败!")
// showOPInfo(szDeviceIdentify + " 登录失败!", oError.errorCode, oError.errorMsg);
}
}
});
})
},
clickStopRealPlay() {
var oWndInfo = WebVideoCtrl.I_GetWindowStatus(0),
szInfo = "";
console.log(oWndInfo,'这是什么')
return
if (oWndInfo != null) {
WebVideoCtrl.I_Stop({
success: function() {
szInfo = "停止预览成功!";
console.log(oWndInfo.szDeviceIdentify + " " + szInfo);
},
error: function(oError) {
console.log(szDeviceIdentify + " 停止预览失败!", oError.errorCode, oError.errorMsg);
}
});
}
},
clickStartRealPlay: function (iStreamType,iChannelID,iWndIndex) {
return new Promise((resolve, reject) => {
var oWndInfo = WebVideoCtrl.I_GetWindowStatus(WebVideo.g_iWndIndex),
szDeviceIdentify = WebVideo.ip,
iRtspPort = parseInt($("#rtspport").val(), 10),
iChannelID = parseInt($("#channels").val(), 10),
szInfo = "";
if ("undefined" === typeof iStreamType) {
iStreamType = 1;
}
if (null == szDeviceIdentify) {
return;
}
var startRealPlay = function () {
WebVideoCtrl.I_StartRealPlay(szDeviceIdentify, {
iStreamType:iStreamType,
iChannelID: WebVideo.iChannelID ? WebVideo.iChannelID : 1,
iWndIndex:iWndIndex ? iWndIndex : '',
success: function () {
szInfo = "开始预览成功!";
console.log(szDeviceIdentify + " " + szInfo);
resolve()
},
error: function (oError) {
console.log(szDeviceIdentify + " 开始预览失败!", oError.errorCode, oError.errorMsg);
}
});
};
if (oWndInfo != null) { // 已经在播放了,先停止
WebVideoCtrl.I_Stop({
success: function () {
startRealPlay();
}
});
} else {
startRealPlay();
}
})
}
}
export default WebVideo
页面中使用
<template>
<div>
<div :id="'divPlugin' + index" v-for="(item,index) in list" :key="index" class="plugin" style="width: 600px;height: 400px;float: left"></div>
</div>
</template>
<script>
import WebVideo from "../assets/WebVideo";
export default {
data() {
return {
list:[
{
ip:'',
port:8888,
username:'',
password:''
},
{
ip:'',
port:8999,
username:'',
password:''
}
]
}
},
created() {
this.initLogin();
},
methods: {
VideoPlayers(domId,options){
return new Promise((resolve,reject) => {
WebVideo.init({
domId:domId
}).then(() => {
setTimeout(() => {
WebVideo.clickLogin(options).then(res => {
WebVideo.clickStartRealPlay();
resolve();
})
},1000)
})
})
},
async initLogin(){
for(var i = 0; i < this.list.length; i++){
await this.VideoPlayers('divPlugin' + i,this.list[i])
}
},
}
}
</script>
<style>
</style>
单个屏幕多个ip
<template>
<div>
<!-- <div :id="'divPlugin' + index" v-for="(item,index) in list" :key="index" class="plugin" style="width: 600px;height: 400px;float: left"></div>-->
<div id="divPlugin" class="plugin" style="width: 600px;height: 400px;"></div>
<button @click="refreshCom">停止预览</button>
<button @click="initLogin">登录</button>
<div @click-="unLogin()">退出11</div>
<div style="height: 1000px"></div>
</div>
</template>
<script>
import WebVideo from "../assets/WebVideo";
export default {
data() {
return {
list: []
}
},
created() {
// this.initPlugin();
this.initLogin();
},
methods: {
refreshCom() {
this.unLogin()
WebVideo.I_DestroyPlugin();
},
async unLogin() {
for (var i = 0; i < this.list.length; i++) {
await WebVideo.clickLogout(this.list[i].ip + '_' + this.list[i].port).then(res => {
console.log('退出成功')
});
}
},
VideoPlayers(domId,options){
return new Promise((resolve,reject) => {
WebVideo.init({
domId:domId
}).then(() => {
setTimeout(() => {
WebVideo.clickLogin(options).then(res => {
WebVideo.clickStartRealPlay();
resolve();
})
},1000)
})
})
},
clickStopRealPlay() {
WebVideo.clickStopRealPlay();
},
async initPlugin() {
for(var i = 0; i < this.list.length;i++){
await this.VideoPlayers('divPlugin' + i,this.list[i])
}
},
initLogin() {
let that = this;
WebVideo.init({
domId: 'divPlugin',
iWndowType:2
}).then(() => {
setTimeout(() => {
for (var i = 0; i < that.list.length; i++) {
let index = i;
WebVideo.clickLogin(that.list[i]).then(() => {
WebVideo.clickStartRealPlay(1, 1, index)
})
}
}, 1000)
})
// for(var i = 0; i < this.list.length; i++){
// await this.VideoPlayers('divPlugin' + i, this.list[i])
// }
// setTimeout(() => {
// this.unLogin();
// },1000)
},
}
}
</script>
<style>
.clear {
clear: both;
}
</style>
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。