flx:提交大华icc
This commit is contained in:
parent
9a0a523f9c
commit
4d71b4d969
@ -53,7 +53,8 @@ VITE_API_URL = 'http://192.168.34.221:8111' #雄哥本地
|
|||||||
# 大连金笔
|
# 大连金笔
|
||||||
# VITE_API_URL = 'http://101.43.164.214:11126'
|
# VITE_API_URL = 'http://101.43.164.214:11126'
|
||||||
# 测试
|
# 测试
|
||||||
VITE_API_URL = 'http://jxj.zhgdyun.com:9500'
|
# VITE_API_URL = 'http://jxj.zhgdyun.com:9500'
|
||||||
|
VITE_API_URL = 'http://192.168.34.221:19112'
|
||||||
# 上传
|
# 上传
|
||||||
VITE_ULD_API_URL = 'http://192.168.34.155:8012/onlinePreview?url='
|
VITE_ULD_API_URL = 'http://192.168.34.155:8012/onlinePreview?url='
|
||||||
|
|
||||||
|
|||||||
265
src/views/sevenLargeScreen/videoManagement/dhPlayer.vue
Normal file
265
src/views/sevenLargeScreen/videoManagement/dhPlayer.vue
Normal file
@ -0,0 +1,265 @@
|
|||||||
|
<template>
|
||||||
|
<div
|
||||||
|
id="dhplayer-dom"
|
||||||
|
:style="{ width: width, height: height, border: '1px solid #000' }"
|
||||||
|
>
|
||||||
|
<!-- <div class="shield-class" style="width: 100px; height: 100px;">测试遮挡</div> -->
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script setup>
|
||||||
|
import { ref, reactive, onMounted, watch } from "vue";
|
||||||
|
import { ElMessage, ElMessageBox } from "element-plus";
|
||||||
|
import "./videoPlayer";
|
||||||
|
import dayjs from "dayjs";
|
||||||
|
const props = defineProps({
|
||||||
|
width: {
|
||||||
|
type: String,
|
||||||
|
default: "100%",
|
||||||
|
},
|
||||||
|
height: {
|
||||||
|
type: String,
|
||||||
|
default: "100%",
|
||||||
|
},
|
||||||
|
devList: {
|
||||||
|
type: Array,
|
||||||
|
default: () => [],
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const emit = defineEmits([
|
||||||
|
"createSuccess",
|
||||||
|
"createError",
|
||||||
|
"realSuccess",
|
||||||
|
"realError",
|
||||||
|
// 可按需添加更多事件
|
||||||
|
]);
|
||||||
|
|
||||||
|
let myVideoPlayer = ref(null);
|
||||||
|
let myVideoPlayer1 = ref(null);
|
||||||
|
|
||||||
|
const pluginLoginInfo = ref({
|
||||||
|
host: "124.160.33.135",
|
||||||
|
port: "4077",
|
||||||
|
username: "TEST",
|
||||||
|
password: "OGR28u6_cc",
|
||||||
|
});
|
||||||
|
const windowType = ref(0);
|
||||||
|
const division = ref(1);
|
||||||
|
const snumType = ref(0);
|
||||||
|
|
||||||
|
// 初始化并登录插件
|
||||||
|
function initDHPlayer() {
|
||||||
|
myVideoPlayer.value = new VideoPlayer({
|
||||||
|
videoId: "dhplayer-dom", // 唯一标识,必填,不能重复
|
||||||
|
windowType: windowType.value, // 播放器类型,必传, 0 - 实时预览,3 - 录像回放,7- 录像回放(支持倒放)
|
||||||
|
usePluginLogin: true, // 采用登录 (请默认传true,插件内部自动拉流)
|
||||||
|
pluginLoginInfo: pluginLoginInfo.value,
|
||||||
|
division: division.value, // 默认展示的窗口数量, 必传
|
||||||
|
draggable: false, // 窗口拖拽 【暂不支持】
|
||||||
|
showBar: true, // 底部操作栏, 选传,【true - 显示, false - 隐藏】
|
||||||
|
shieldClass: ["shield-class", "select"], // 如果DOM元素被插件挡住了,把DOM元素的类名传入。
|
||||||
|
coverShieldClass: [], // 如果插件要在dom内滚动,需要把DOM元素的类名传入,请查看案例-遮挡
|
||||||
|
parentIframeShieldClass: [], // 有 iframe 时,top层 的 dom 元素被插件挡住了,把DOM元素的类名传入。
|
||||||
|
// 创建播放器成功回调
|
||||||
|
createSuccess: (versionInfo) => {
|
||||||
|
myVideoPlayer.value.changeDivision(9);
|
||||||
|
emit("createSuccess", versionInfo);
|
||||||
|
handleRealClick();
|
||||||
|
},
|
||||||
|
// 创建播放器失败回调
|
||||||
|
createError: (err) => {
|
||||||
|
console.log("创建失败!!!" + JSON.stringify(err));
|
||||||
|
emit("createError", err);
|
||||||
|
},
|
||||||
|
// 插件公共回调
|
||||||
|
dhPlayerMessage: (info, err) => {},
|
||||||
|
// 实时预览成功回调
|
||||||
|
realSuccess: (info) => {
|
||||||
|
emit("realSuccess", info);
|
||||||
|
},
|
||||||
|
// 实时预览失败回调
|
||||||
|
realError: (info, err) => {
|
||||||
|
emit("realError", info, err);
|
||||||
|
},
|
||||||
|
// ... 其他回调函数按需添加 emit 触发事件
|
||||||
|
// 抓图成功回调
|
||||||
|
snapshotSuccess: ({ base64Url, path }, info) => {
|
||||||
|
const byteCharacters = atob(
|
||||||
|
base64Url.replace(/^data:image\/(png|jpeg|jpg);base64,/, "")
|
||||||
|
);
|
||||||
|
const byteNumbers = new Array(byteCharacters.length);
|
||||||
|
for (let i = 0; i < byteCharacters.length; i++) {
|
||||||
|
byteNumbers[i] = byteCharacters.charCodeAt(i);
|
||||||
|
}
|
||||||
|
const byteArray = new Uint8Array(byteNumbers);
|
||||||
|
const blob = new Blob([byteArray], {
|
||||||
|
type: undefined,
|
||||||
|
});
|
||||||
|
const aLink = document.createElement("a");
|
||||||
|
aLink.download = "图片名称.jpg";
|
||||||
|
aLink.href = URL.createObjectURL(blob);
|
||||||
|
aLink.click();
|
||||||
|
},
|
||||||
|
// 本地录像下载成功回调
|
||||||
|
videoDownloadSuccess: (path, info) => {
|
||||||
|
hideDHPlayer();
|
||||||
|
ElMessageBox.alert("本地录像地址:" + path, "", {
|
||||||
|
confirmButtonText: "确定",
|
||||||
|
callback: (action) => {
|
||||||
|
console.log("确定");
|
||||||
|
showDHPlayer();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// 鼠标单击窗口回调
|
||||||
|
clickWindow: (snum) => {
|
||||||
|
snumType.value = snum;
|
||||||
|
},
|
||||||
|
// 关闭视频窗口回调
|
||||||
|
closeWindowSuccess: ({ isAll, snum, channelList }) => {
|
||||||
|
console.log("关闭窗口回调", isAll, snum, channelList);
|
||||||
|
snumType.value = snum;
|
||||||
|
dataVideoList.value = channelList.map(item => {
|
||||||
|
return {
|
||||||
|
serialNumber: item.channelId,
|
||||||
|
videoName: item.channelName,
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// ... 其他回调函数保持不变
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 播放实时预览
|
||||||
|
const handleRealClick = () => {
|
||||||
|
console.log("开始播放实时预览", windowType.value);
|
||||||
|
if (windowType.value == "0") {
|
||||||
|
startReal();
|
||||||
|
} else {
|
||||||
|
startPlayback();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// ... 其他函数按需修改,移除直接的 DOM 操作
|
||||||
|
const dataVideoList = ref([]);
|
||||||
|
// 实时预览
|
||||||
|
function startReal() {
|
||||||
|
if (!myVideoPlayer.value) {
|
||||||
|
console.log("不能播放,请先初始化插件!!!!!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
console.log("开始播放实时预览");
|
||||||
|
const resultList = props.devList.map((item) => {
|
||||||
|
return {
|
||||||
|
channelId: item.serialNumber,
|
||||||
|
channelName: item.videoName,
|
||||||
|
snum: snumType.value,
|
||||||
|
streamType: 1,
|
||||||
|
deviceType: 5,
|
||||||
|
cameraType: "1",
|
||||||
|
capability: "00000000000000000000000000000001",
|
||||||
|
};
|
||||||
|
});
|
||||||
|
snumType.value += 1;
|
||||||
|
myVideoPlayer.value.startReal(resultList);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 录像回放
|
||||||
|
function startPlayback() {
|
||||||
|
if (myVideoPlayer.value && date) {
|
||||||
|
const resultList = props.devList.map((item) => {
|
||||||
|
return {
|
||||||
|
channelId: item.serialNumber,
|
||||||
|
channelName: item.videoName,
|
||||||
|
startTime: dayjs().format("YYYY-MM-DD") + " 00:00:00",
|
||||||
|
endTime: dayjs().format("YYYY-MM-DD") + " 23:59:59",
|
||||||
|
recordSource: 3,
|
||||||
|
streamType: 0,
|
||||||
|
snum: snumType.value,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
snumType.value += 1;
|
||||||
|
myVideoPlayer.value.startPlayback(resultList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 控制插件的显示,两种方式均试用
|
||||||
|
function showDHPlayer() {
|
||||||
|
console.log("显示");
|
||||||
|
if (myVideoPlayer.value) {
|
||||||
|
// 1.
|
||||||
|
myVideoPlayer.value._update({
|
||||||
|
visible: true,
|
||||||
|
});
|
||||||
|
// 2.
|
||||||
|
// myVideoPlayer.value.show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 控制插件的隐藏,两种方式均试用
|
||||||
|
function hideDHPlayer() {
|
||||||
|
console.log("隐藏");
|
||||||
|
if (myVideoPlayer.value) {
|
||||||
|
// 1.
|
||||||
|
myVideoPlayer.value._update({
|
||||||
|
visible: false,
|
||||||
|
});
|
||||||
|
// 2.
|
||||||
|
// myVideoPlayer.value.hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
watch(
|
||||||
|
() => props.devList,
|
||||||
|
(newVal) => {
|
||||||
|
console.log(
|
||||||
|
"设备列表变化",
|
||||||
|
newVal[0].serialNumber,
|
||||||
|
dataVideoList.value[0].serialNumber
|
||||||
|
);
|
||||||
|
if (newVal && newVal.length > 0) {
|
||||||
|
const findIndex = dataVideoList.value.findIndex(
|
||||||
|
(item) => item.serialNumber == newVal[0].serialNumber
|
||||||
|
);
|
||||||
|
console.log("设备列表变化", findIndex);
|
||||||
|
if (findIndex > -1) return ElMessage.warning("设备已存在,无需重复添加");
|
||||||
|
dataVideoList.value.push(newVal[0]);
|
||||||
|
handleRealClick();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ deep: true }
|
||||||
|
);
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
console.log("开始初始化插件", props.devList);
|
||||||
|
if (props.devList.length > 0) {
|
||||||
|
pluginLoginInfo.value.host = props.devList[0].account;
|
||||||
|
pluginLoginInfo.value.port = props.devList[0].password;
|
||||||
|
pluginLoginInfo.value.username = props.devList[0].appId;
|
||||||
|
pluginLoginInfo.value.password = props.devList[0].appSecret;
|
||||||
|
dataVideoList.value = props.devList;
|
||||||
|
}
|
||||||
|
initDHPlayer();
|
||||||
|
});
|
||||||
|
// 开启规则线
|
||||||
|
const openivsRuleOutline = () => {
|
||||||
|
if (myVideoPlayer.value) {
|
||||||
|
myVideoPlayer.value.isEnableIvs({
|
||||||
|
snum: snumType.value,
|
||||||
|
isEnableIVS: true,
|
||||||
|
ivsType: 1,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
// 开启规则线
|
||||||
|
const closeivsRuleOutline = () => {
|
||||||
|
if (myVideoPlayer.value) {
|
||||||
|
myVideoPlayer.value.isEnableIvs({
|
||||||
|
snum: snumType.value,
|
||||||
|
isEnableIVS: false,
|
||||||
|
ivsType: 1,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style lang="less" scoped>
|
||||||
|
</style>
|
||||||
@ -133,6 +133,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<ysyPlayer ref="ysy"></ysyPlayer>
|
<ysyPlayer ref="ysy"></ysyPlayer>
|
||||||
</div>
|
</div>
|
||||||
|
<DHPlayer :devList="dhVideoList" v-else-if="videoType === 4" ref="dhplayer"></DHPlayer>
|
||||||
<!-- 播放海康 -->
|
<!-- 播放海康 -->
|
||||||
<div ref="playWndBox" style="width: 100%; height: 100%">
|
<div ref="playWndBox" style="width: 100%; height: 100%">
|
||||||
<div id="playWnd" class="playWnd" style="width: 100%; height: 100%"></div>
|
<div id="playWnd" class="playWnd" style="width: 100%; height: 100%"></div>
|
||||||
@ -151,6 +152,8 @@
|
|||||||
import Card from "@/components/card.vue";
|
import Card from "@/components/card.vue";
|
||||||
// import ysyPlayAndPlayback from "@/components/ysyPlayAndPlayback.vue";
|
// import ysyPlayAndPlayback from "@/components/ysyPlayAndPlayback.vue";
|
||||||
import ysyPlayer from "./ysy-player.vue";
|
import ysyPlayer from "./ysy-player.vue";
|
||||||
|
import DHPlayer from "./dhPlayer.vue";
|
||||||
|
|
||||||
import { Fold, Expand, Search } from "@element-plus/icons-vue";
|
import { Fold, Expand, Search } from "@element-plus/icons-vue";
|
||||||
import { ref, onMounted, onBeforeUnmount, computed, Ref, onBeforeMount, watch } from "vue";
|
import { ref, onMounted, onBeforeUnmount, computed, Ref, onBeforeMount, watch } from "vue";
|
||||||
import { ElMessage } from "element-plus";
|
import { ElMessage } from "element-plus";
|
||||||
@ -223,6 +226,7 @@ let pubKey = ref("");
|
|||||||
let initCount = ref(0);
|
let initCount = ref(0);
|
||||||
let oWebControl: any = null;
|
let oWebControl: any = null;
|
||||||
let cameraIndexCode = ref<Array<string>>([]);
|
let cameraIndexCode = ref<Array<string>>([]);
|
||||||
|
const dhVideoList = ref([] as any);
|
||||||
// let objData = ref({
|
// let objData = ref({
|
||||||
// appkey: "23914849", //海康提供的appkey
|
// appkey: "23914849", //海康提供的appkey
|
||||||
// ip: "221.12.137.200", //海康提供的ip
|
// ip: "221.12.137.200", //海康提供的ip
|
||||||
@ -327,7 +331,10 @@ const checkVideo = async (item: any) => {
|
|||||||
if (item.serialNumber) {
|
if (item.serialNumber) {
|
||||||
ysyParams.value = item;
|
ysyParams.value = item;
|
||||||
cameraIndexCode.value = item.serialNumber;
|
cameraIndexCode.value = item.serialNumber;
|
||||||
if (videoType.value !== 1) {
|
dhVideoList.value = [item];
|
||||||
|
|
||||||
|
|
||||||
|
if (videoType.value !== 1 && videoType.value !== 4) {
|
||||||
previewVideo(cameraIndexCode.value);
|
previewVideo(cameraIndexCode.value);
|
||||||
}
|
}
|
||||||
if (videoType.value === 1) {
|
if (videoType.value === 1) {
|
||||||
@ -395,6 +402,8 @@ const handleVideoConfig = (videoData: any) => {
|
|||||||
oWebControl.JS_Disconnect();
|
oWebControl.JS_Disconnect();
|
||||||
}
|
}
|
||||||
// emitter.emit("selectMonitor", videoData);
|
// emitter.emit("selectMonitor", videoData);
|
||||||
|
} else if (videoData.videoType === 4) {
|
||||||
|
dhVideoList.value = [videoData];
|
||||||
} else {
|
} else {
|
||||||
initPlugin();
|
initPlugin();
|
||||||
}
|
}
|
||||||
|
|||||||
2713
src/views/sevenLargeScreen/videoManagement/videoPlayer.js
Normal file
2713
src/views/sevenLargeScreen/videoManagement/videoPlayer.js
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user