Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
W
web-project
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
海康威视
web-project
Commits
bea56110
Commit
bea56110
authored
Sep 30, 2024
by
张伯涛
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
大屏视频播放宽高调整
parent
4c338d0f
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
752 additions
and
26 deletions
+752
-26
screenDisplay.vue
src/components/screenDisplay.vue
+47
-4
videoComponents.vue
src/components/videoComponents.vue
+31
-22
videoComponentsTwo.vue
src/components/videoComponentsTwo.vue
+674
-0
No files found.
src/components/screenDisplay.vue
View file @
bea56110
...
@@ -422,14 +422,14 @@ import AMapLoader from "@amap/amap-jsapi-loader";
...
@@ -422,14 +422,14 @@ import AMapLoader from "@amap/amap-jsapi-loader";
</div>
</div>
<div
v-show=
"mapLevel === 3"
>
<div
v-show=
"mapLevel === 3"
>
<div
class=
"thirdLeftLayer"
>
<div
class=
"thirdLeftLayer"
>
<div
class=
"thirdLeftLayer_one"
>
<div
class=
"thirdLeftLayer_one"
ref=
"myContainer"
>
<div
class=
"title_row"
>
<div
class=
"title_row"
>
<div
class=
"titleStyleTwoVideo"
><p>
换热站监控
</p></div>
<div
class=
"titleStyleTwoVideo"
><p>
换热站监控
</p></div>
<div
class=
"moreInfo"
@
click=
"PreviousVideo()"
>
上一个
</div>
<div
class=
"moreInfo"
@
click=
"PreviousVideo()"
>
上一个
</div>
<div
class=
"moreInfo"
@
click=
"nextVideo()"
>
下一个
</div>
<div
class=
"moreInfo"
@
click=
"nextVideo()"
>
下一个
</div>
<div
class=
"moreInfo"
@
click=
"moreVideo()"
>
更多》
</div
>
<!--
<div
class=
"moreInfo"
@
click=
"moreVideo()"
>
更多》
</div>
--
>
</div>
</div>
<video-components
:queryParams=
"queryParams"
:stopParams=
"stopParams"
/>
<video-components
:
divWidth=
"divWidth"
:divHeight=
"divHeight"
:
queryParams=
"queryParams"
:stopParams=
"stopParams"
/>
</div>
</div>
<div
class=
"thirdLeftLayer_one"
>
<div
class=
"thirdLeftLayer_one"
>
...
@@ -483,6 +483,13 @@ import AMapLoader from "@amap/amap-jsapi-loader";
...
@@ -483,6 +483,13 @@ import AMapLoader from "@amap/amap-jsapi-loader";
</vue3ScrollSeamless>
</vue3ScrollSeamless>
</div>
</div>
</div>
</div>
<div
class=
"videoInfo"
v-show=
"videoOpen"
>
<div
class=
"alarmInfo_header"
>
<div
class=
"alarmInfo_title"
>
换热站监控
</div>
<div
class=
"alarmInfo_close"
@
click=
"handleVideoClose"
>
X
</div>
</div>
<video-components-two
:queryParams=
"queryParamsAll"
:stopParams=
"stopParamsAll"
/>
</div>
<div
class=
"alarmInfo"
v-if=
"open"
>
<div
class=
"alarmInfo"
v-if=
"open"
>
<div
class=
"alarmInfo_header"
>
<div
class=
"alarmInfo_header"
>
<div
class=
"alarmInfo_title"
>
报警信息轮播
</div>
<div
class=
"alarmInfo_title"
>
报警信息轮播
</div>
...
@@ -520,6 +527,7 @@ import { ElLoading } from "element-plus";
...
@@ -520,6 +527,7 @@ import { ElLoading } from "element-plus";
import
{
ElMessage
}
from
"element-plus"
;
import
{
ElMessage
}
from
"element-plus"
;
const
m
=
detectZoom
();
const
m
=
detectZoom
();
import
videoComponents
from
'./videoComponents.vue'
import
videoComponents
from
'./videoComponents.vue'
import
videoComponentsTwo
from
'./videoComponentsTwo.vue'
import
{
vue3ScrollSeamless
}
from
"vue3-scroll-seamless"
;
import
{
vue3ScrollSeamless
}
from
"vue3-scroll-seamless"
;
import
{
import
{
postServicCenterList
,
postServicCenterList
,
...
@@ -548,6 +556,7 @@ import {defineComponent} from "vue";
...
@@ -548,6 +556,7 @@ import {defineComponent} from "vue";
export
default
defineComponent
({
export
default
defineComponent
({
components
:
{
components
:
{
videoComponents
,
videoComponents
,
videoComponentsTwo
,
vue3ScrollSeamless
vue3ScrollSeamless
},
},
watch
:
{
watch
:
{
...
@@ -572,7 +581,11 @@ export default defineComponent({
...
@@ -572,7 +581,11 @@ export default defineComponent({
return
{
return
{
videoNum
:
0
,
videoNum
:
0
,
queryParams
:
''
,
queryParams
:
''
,
divWidth
:
''
,
divHeight
:
''
,
queryParamsAll
:
''
,
stopParams
:
0
,
stopParams
:
0
,
stopParamsAll
:
0
,
showVideo
:
false
,
showVideo
:
false
,
VideoInfo
:
{
VideoInfo
:
{
selectOptions
:
[],
selectOptions
:
[],
...
@@ -581,6 +594,7 @@ export default defineComponent({
...
@@ -581,6 +594,7 @@ export default defineComponent({
playVideoList
:
[]
playVideoList
:
[]
},
},
open
:
false
,
open
:
false
,
videoOpen
:
false
,
items
:
[
'Item 1'
,
'Item 2'
,
'Item 3'
,
'Item 4'
],
items
:
[
'Item 1'
,
'Item 2'
,
'Item 3'
,
'Item 4'
],
currentIndex
:
0
,
currentIndex
:
0
,
heatSourceList
:
[],
// 热源趋势echarts展示
heatSourceList
:
[],
// 热源趋势echarts展示
...
@@ -2961,12 +2975,28 @@ export default defineComponent({
...
@@ -2961,12 +2975,28 @@ export default defineComponent({
})
})
const
videoList
=
[]
const
videoList
=
[]
videoList
.
push
(
this
.
VideoInfo
.
playVideoList
[
this
.
videoNum
])
videoList
.
push
(
this
.
VideoInfo
.
playVideoList
[
this
.
videoNum
])
this
.
getDivWidth
()
this
.
queryParams
=
JSON
.
stringify
(
videoList
)
this
.
queryParams
=
JSON
.
stringify
(
videoList
)
})
})
},
},
getDivWidth
()
{
const
container
=
this
.
$refs
.
myContainer
;
this
.
divWidth
=
container
.
offsetWidth
*
0.9
;
// 获取元素的宽度,包括元素的padding,不包括border、margin和滚动条
this
.
divHeight
=
container
.
offsetHeight
*
0.8
;
// 获取元素的宽度,包括元素的padding,不包括border、margin和滚动条
console
.
log
(
'width'
,
this
.
divWidth
);
console
.
log
(
'divHeight'
,
this
.
divHeight
);
},
// 更多视频
// 更多视频
moreVideo
()
{
moreVideo
()
{
this
.
videoOpen
=
true
this
.
stopParams
+=
1
console
.
log
(
'this.VideoInfo.playVideoList'
,
this
.
VideoInfo
.
playVideoList
)
this
.
queryParamsAll
=
JSON
.
stringify
(
this
.
VideoInfo
.
playVideoList
)
},
// 关闭更多视频弹窗
handleVideoClose
()
{
this
.
stopParamsAll
+=
1
this
.
videoOpen
=
false
},
},
// 下一个视频
// 下一个视频
nextVideo
()
{
nextVideo
()
{
...
@@ -3870,6 +3900,18 @@ export default defineComponent({
...
@@ -3870,6 +3900,18 @@ export default defineComponent({
left
:
30%
;
left
:
30%
;
top
:
17%
;
top
:
17%
;
}
}
.videoInfo
{
width
:
1300px
;
height
:
750px
;
border
:
rgba
(
129
,
210
,
230
,
0
.5
)
solid
1px
;
//padding: 0 0 0 10px;
background
:
linear-gradient
(
318deg
,
rgba
(
29
,
70
,
128
,
0
.8
)
0%
,
rgba
(
13
,
23
,
76
,
0
.8
)
100%
);
color
:
white
;
position
:
absolute
;
z-index
:
9
;
left
:
13%
;
top
:
10%
;
}
.alarmTable
{
.alarmTable
{
margin-bottom
:
20px
;
margin-bottom
:
20px
;
width
:
750px
;
width
:
750px
;
...
@@ -3988,6 +4030,7 @@ export default defineComponent({
...
@@ -3988,6 +4030,7 @@ export default defineComponent({
/*border: rgba(129, 210, 230, 0.5) solid 1px;*/
/*border: rgba(129, 210, 230, 0.5) solid 1px;*/
}
}
.thirdLeftLayer_one
{
.thirdLeftLayer_one
{
width
:
100%
;
margin-bottom
:
11px
;
margin-bottom
:
11px
;
height
:
32%
;
height
:
32%
;
border
:
rgba
(
129
,
210
,
230
,
0
.5
)
solid
1px
;
border
:
rgba
(
129
,
210
,
230
,
0
.5
)
solid
1px
;
...
...
src/components/videoComponents.vue
View file @
bea56110
...
@@ -97,6 +97,14 @@ const pProps = defineProps({
...
@@ -97,6 +97,14 @@ const pProps = defineProps({
type
:
String
,
type
:
String
,
required
:
true
,
required
:
true
,
},
},
divWidth
:
{
type
:
Number
,
required
:
true
,
},
divHeight
:
{
type
:
Number
,
required
:
true
,
},
stopParams
:
{
stopParams
:
{
type
:
String
,
type
:
String
,
required
:
true
,
required
:
true
,
...
@@ -106,8 +114,8 @@ const pProps = defineProps({
...
@@ -106,8 +114,8 @@ const pProps = defineProps({
//声明公用变量
//声明公用变量
var
initCount
=
0
;
var
initCount
=
0
;
var
pubKey
=
''
;
var
pubKey
=
''
;
var
playWnd_width
=
window
.
innerWidth
-
1570
;
var
playWnd_width
=
pProps
.
divWidth
;
var
playWnd_height
=
window
.
innerHeight
-
720
;
var
playWnd_height
=
pProps
.
divHeight
;
var
oWebControl
;
var
oWebControl
;
var
videoIp
=
"218.69.97.198"
;;
var
videoIp
=
"218.69.97.198"
;;
var
videoPort
=
1443
;
var
videoPort
=
1443
;
...
@@ -128,12 +136,12 @@ function down(){
...
@@ -128,12 +136,12 @@ function down(){
window
.
open
(
filepath
);
window
.
open
(
filepath
);
}
}
function
resetVideoWidth
(){
function
resetVideoWidth
(){
var
menuWidth
=
localStorage
.
getItem
(
"tabWidth"
);
//
var menuWidth=localStorage.getItem("tabWidth");
if
(
!
menuWidth
||
menuWidth
===
''
||
!
Number
(
menuWidth
)){
//
if(!menuWidth || menuWidth ==='' || !Number(menuWidth)){
playWnd_w
idth
=
window
.
innerWidth
-
1570
;
// pProps.divW
idth = window.innerWidth - 1570;
}
else
{
//
}else{
playWnd_w
idth
=
window
.
innerWidth
-
Number
(
menuWidth
);
// pProps.divW
idth = window.innerWidth - Number(menuWidth);
}
//
}
console
.
log
(
'playVW'
,
playWnd_width
);
console
.
log
(
'playVW'
,
playWnd_width
);
}
}
...
@@ -288,7 +296,7 @@ function initPlugin() {
...
@@ -288,7 +296,7 @@ function initPlugin() {
cbIntegrationCallBack
:
cbIntegrationCallBack
cbIntegrationCallBack
:
cbIntegrationCallBack
});
});
oWebControl
.
JS_CreateWnd
(
"playWnd"
,
p
layWnd_width
,
playWnd_h
eight
).
then
(
function
()
{
//JS_CreateWnd创建视频播放窗口,宽高可设定
oWebControl
.
JS_CreateWnd
(
"playWnd"
,
p
Props
.
divWidth
,
pProps
.
divH
eight
).
then
(
function
()
{
//JS_CreateWnd创建视频播放窗口,宽高可设定
init
();
// 创建播放实例成功后初始化
init
();
// 创建播放实例成功后初始化
});
});
},
function
()
{
// 启动插件服务失败
},
function
()
{
// 启动插件服务失败
...
@@ -400,7 +408,7 @@ function init() {
...
@@ -400,7 +408,7 @@ function init() {
buttonIDs
:
buttonIDs
//自定义工具条按钮
buttonIDs
:
buttonIDs
//自定义工具条按钮
})
})
}).
then
(
function
(
oData
)
{
}).
then
(
function
(
oData
)
{
oWebControl
.
JS_Resize
(
p
layWnd_width
,
playWnd_h
eight
);
// 初始化后resize一次,规避firefox下首次显示窗口后插件窗口未与DIV窗口重合问题
oWebControl
.
JS_Resize
(
p
Props
.
divWidth
,
pProps
.
divH
eight
);
// 初始化后resize一次,规避firefox下首次显示窗口后插件窗口未与DIV窗口重合问题
});
});
});
});
}
}
...
@@ -432,7 +440,7 @@ function setEncrypt(value) {
...
@@ -432,7 +440,7 @@ function setEncrypt(value) {
$
(
window
).
resize
(
function
()
{
$
(
window
).
resize
(
function
()
{
resetVideoWidth
();
resetVideoWidth
();
if
(
oWebControl
!=
null
)
{
if
(
oWebControl
!=
null
)
{
oWebControl
.
JS_Resize
(
p
layWnd_width
,
playWnd_h
eight
);
oWebControl
.
JS_Resize
(
p
Props
.
divWidth
,
pProps
.
divH
eight
);
setWndCover
();
setWndCover
();
}
}
});
});
...
@@ -440,7 +448,7 @@ $(window).resize(function () {
...
@@ -440,7 +448,7 @@ $(window).resize(function () {
function
resizeVideo
()
{
function
resizeVideo
()
{
resetVideoWidth
();
resetVideoWidth
();
if
(
oWebControl
!=
null
)
{
if
(
oWebControl
!=
null
)
{
oWebControl
.
JS_Resize
(
p
layWnd_width
,
playWnd_h
eight
);
oWebControl
.
JS_Resize
(
p
Props
.
divWidth
,
pProps
.
divH
eight
);
setWndCover
();
setWndCover
();
}
}
}
}
...
@@ -449,7 +457,7 @@ function resizeVideo() {
...
@@ -449,7 +457,7 @@ function resizeVideo() {
$
(
window
).
scroll
(
function
()
{
$
(
window
).
scroll
(
function
()
{
resetVideoWidth
();
resetVideoWidth
();
if
(
oWebControl
!=
null
)
{
if
(
oWebControl
!=
null
)
{
oWebControl
.
JS_Resize
(
p
layWnd_width
,
playWnd_h
eight
);
oWebControl
.
JS_Resize
(
p
Props
.
divWidth
,
pProps
.
divH
eight
);
setWndCover
();
setWndCover
();
}
}
});
});
...
@@ -465,23 +473,23 @@ function setWndCover() {
...
@@ -465,23 +473,23 @@ function setWndCover() {
var
iCoverRight
=
(
oDivRect
.
right
-
iWidth
>
0
)
?
Math
.
round
(
oDivRect
.
right
-
iWidth
)
:
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
;
var
iCoverBottom
=
(
oDivRect
.
bottom
-
iHeight
>
0
)
?
Math
.
round
(
oDivRect
.
bottom
-
iHeight
)
:
0
;
iCoverLeft
=
(
iCoverLeft
>
p
layWnd_width
)
?
playWnd_w
idth
:
iCoverLeft
;
iCoverLeft
=
(
iCoverLeft
>
p
Props
.
divWidth
)
?
pProps
.
divW
idth
:
iCoverLeft
;
iCoverTop
=
(
iCoverTop
>
p
layWnd_height
)
?
playWnd_h
eight
:
iCoverTop
;
iCoverTop
=
(
iCoverTop
>
p
Props
.
divHeight
)
?
pProps
.
divH
eight
:
iCoverTop
;
iCoverRight
=
(
iCoverRight
>
p
layWnd_width
)
?
playWnd_w
idth
:
iCoverRight
;
iCoverRight
=
(
iCoverRight
>
p
Props
.
divWidth
)
?
pProps
.
divW
idth
:
iCoverRight
;
iCoverBottom
=
(
iCoverBottom
>
p
layWnd_height
)
?
playWnd_h
eight
:
iCoverBottom
;
iCoverBottom
=
(
iCoverBottom
>
p
Props
.
divHeight
)
?
pProps
.
divH
eight
:
iCoverBottom
;
oWebControl
.
JS_RepairPartWindow
(
0
,
0
,
p
layWnd_width
+
1
,
playWnd_h
eight
);
// 多1个像素点防止还原后边界缺失一个像素条
oWebControl
.
JS_RepairPartWindow
(
0
,
0
,
p
Props
.
divWidth
+
1
,
pProps
.
divH
eight
);
// 多1个像素点防止还原后边界缺失一个像素条
if
(
iCoverLeft
!=
0
)
{
if
(
iCoverLeft
!=
0
)
{
oWebControl
.
JS_CuttingPartWindow
(
0
,
0
,
iCoverLeft
,
p
layWnd_h
eight
);
oWebControl
.
JS_CuttingPartWindow
(
0
,
0
,
iCoverLeft
,
p
Props
.
divH
eight
);
}
}
if
(
iCoverTop
!=
0
)
{
if
(
iCoverTop
!=
0
)
{
oWebControl
.
JS_CuttingPartWindow
(
0
,
0
,
p
layWnd_w
idth
+
1
,
iCoverTop
);
// 多剪掉一个像素条,防止出现剪掉一部分窗口后出现一个像素条
oWebControl
.
JS_CuttingPartWindow
(
0
,
0
,
p
Props
.
divW
idth
+
1
,
iCoverTop
);
// 多剪掉一个像素条,防止出现剪掉一部分窗口后出现一个像素条
}
}
if
(
iCoverRight
!=
0
)
{
if
(
iCoverRight
!=
0
)
{
oWebControl
.
JS_CuttingPartWindow
(
p
layWnd_width
-
iCoverRight
,
0
,
iCoverRight
,
playWnd_h
eight
);
oWebControl
.
JS_CuttingPartWindow
(
p
Props
.
divWidth
-
iCoverRight
,
0
,
iCoverRight
,
pProps
.
divH
eight
);
}
}
if
(
iCoverBottom
!=
0
)
{
if
(
iCoverBottom
!=
0
)
{
oWebControl
.
JS_CuttingPartWindow
(
0
,
p
layWnd_height
-
iCoverBottom
,
playWnd_w
idth
,
iCoverBottom
);
oWebControl
.
JS_CuttingPartWindow
(
0
,
p
Props
.
divHeight
-
iCoverBottom
,
pProps
.
divW
idth
,
iCoverBottom
);
}
}
}
}
...
@@ -640,6 +648,7 @@ watch(
...
@@ -640,6 +648,7 @@ watch(
const
params
=
JSON
.
parse
(
pProps
.
queryParams
)
const
params
=
JSON
.
parse
(
pProps
.
queryParams
)
// const params = ['31c0d567dd1944d5b4ea3eddf94f740b']
// const params = ['31c0d567dd1944d5b4ea3eddf94f740b']
console
.
log
(
'params'
,
params
)
console
.
log
(
'params'
,
params
)
console
.
log
(
'divWidth'
,
pProps
.
divWidth
)
getVideoFromVideoList
(
params
)
getVideoFromVideoList
(
params
)
}
}
)
)
...
...
src/components/videoComponentsTwo.vue
0 → 100644
View file @
bea56110
<
template
>
<!--
<el-card>
-->
<!--
<div
class=
"div-dropdown text-center"
>
-->
<!--
<el-row>
-->
<!--
<el-col
:span=
"7"
>
-->
<!--
<span>
换热站
:
</span>
-->
<!--
<el-cascader
:options=
"VideoInfo.selectOptions"
v-model=
"VideoInfo.value"
:props=
"props"
--
>
<!-- collapse-tags clearable :show-all-levels="false" filterable placeholder="请选择" style=""-->
<!-- :change="getVideoFromVideoList(VideoInfo.value)" @visible-change="visibleCascader" />-->
<!--
</el-col>
-->
<!--
<el-col
:span=
"10"
>
-->
<!--
</el-col>
-->
<!--
<el-col
:span=
"7"
>
-->
<!--
<el-row>
-->
<!--
<el-col
:span=
"6"
>
-->
<!--
</el-col>
-->
<!--
<el-col
:span=
"18"
>
-->
<!--
<el-button
id=
"startPlay"
class=
"el-button-button"
type=
"primary"
:span=
"6"
>
-->
<!-- 显示视频
</el-button>
-->
<!--
<el-button
id=
"stopPlay"
class=
"el-button-button"
type=
"primary"
:span=
"6"
--
>
<!-- @click="autoColBoxShow = !autoColBoxShow">隐藏视频
</el-button>
-->
<!--
<el-button
id=
"down"
class=
"el-button-button"
type=
"primary"
:span=
"6"
--
>
<!-- @click="down">下载插件
</el-button>
-->
<!--
</el-col>
-->
<!--
</el-row>
-->
<!--
</el-col>
-->
<!--
</el-row>
-->
<!--
</div>
-->
<!-- <!–
<div>
-->
<!-- 点击此处前往海康平台下载视频播放插件-->
<!--
</div>
–>
-->
<!--
</el-card>
-->
<div
class=
"videoPlayer"
id=
"playWnd"
>
</div>
</
template
>
<
style
lang=
"less"
scoped
>
.videoPlayer {
margin: 2% 0 0 2%;
// width: 1200px;
/*播放容器的宽和高设定*/
height: 80%;
// border: 1px solid black;
}
.el-button-button {
// margin-top: 5px;
width: 80px;
}
</
style
>
<
script
setup
>
// ../OutputFile/VideoWebPlugin.zip
import
{
ref
,
reactive
,
onMounted
,
onUnmounted
,
provide
,
computed
,
handleError
,
watch
}
from
'vue'
import
{
useRoute
}
from
'vue-router'
import
http
from
'../api/http'
import
store
from
"../store/index"
;
import
zhCn
from
'element-plus/dist/locale/zh-cn.mjs'
import
{
onBeforeRouteLeave
,
onBeforeRouteUpdate
}
from
'vue-router'
import
$
from
'jquery'
import
{
JSEncrypt
}
from
'jsencrypt'
import
{
WebControl
}
from
'../assets/script/video/web-control.esm.min.js'
import
{
onActivated
,
onDeactivated
}
from
'vue'
onActivated
(()
=>
{
if
(
route
.
query
.
id
){
VideoInfo
.
value
=
route
.
query
.
id
;
getVideoFromVideoList
(
route
.
query
.
id
);
}
// showPlay();
})
onDeactivated
(()
=>
{
hidePlay
();
})
const
route
=
useRoute
();
onBeforeRouteUpdate
((
to
,
from
)
=>
{
var
r
=
useRoute
();
console
.
log
(
'update'
)
console
.
log
(
r
.
query
.
id
);
if
(
r
.
query
.
id
){
VideoInfo
.
value
=
r
.
query
.
id
;
getVideoFromVideoList
(
r
.
query
.
id
);
}
})
//子组件接收父组件传递过来的值
const
pProps
=
defineProps
({
queryParams
:
{
type
:
String
,
required
:
true
,
},
stopParams
:
{
type
:
String
,
required
:
true
,
}
});
//声明公用变量
var
initCount
=
0
;
var
pubKey
=
''
;
// var playWnd_width = window.innerWidth - 800;
var
playWnd_width
=
500
;
var
playWnd_height
=
500
;
var
oWebControl
;
var
videoIp
=
"218.69.97.198"
;;
var
videoPort
=
1443
;
const
enterpriseId
=
ref
(
null
);
enterpriseId
.
value
=
store
.
getters
.
getEnterpriseId
();
var
VideoInfo
=
reactive
({
selectOptions
:
[],
value
:
[],
videoList
:
[],
playVideoList
:
[]
});
const
props
=
{
multiple
:
false
,
emitPath
:
false
}
initPage
();
function
down
(){
//下载插件
const
filepath
=
'/OutputFile/VideoWebPlugin.zip'
;
window
.
open
(
filepath
);
}
function
resetVideoWidth
(){
var
menuWidth
=
localStorage
.
getItem
(
"tabWidth"
);
if
(
!
menuWidth
||
menuWidth
===
''
||
!
Number
(
menuWidth
)){
playWnd_width
=
500
;
}
else
{
playWnd_width
=
window
.
innerWidth
-
Number
(
menuWidth
);
}
console
.
log
(
'playVW'
,
playWnd_width
);
}
//获取服务中心->供热站->换热站,三级列表
function
getStats
()
{
var
result
=
store
.
getters
.
getEnterprise
();
var
enterpriseId
=
store
.
getters
.
getEnterpriseId
();
console
.
log
(
result
)
if
(
result
)
{
//找到对应的企业,将供热站与换热站机组信息建立关系
for
(
var
i
=
0
;
i
<
result
.
length
;
i
++
)
{
if
(
result
[
i
].
enterpriseId
===
enterpriseId
)
{
//找到对应的企业,开始构建
//服务中心->供热站->换热站
if
(
result
[
i
].
enterpriseId
===
"9bca54bc-8f27-4849-8d7d-50c5099e1949"
)
{
result
[
i
].
serviceCenterList
.
forEach
(
service
=>
{
var
serv
=
{}
serv
.
value
=
service
.
serviceCenterId
;
serv
.
label
=
service
.
serviceCenterName
;
serv
.
children
=
[];
service
.
supplyList
.
forEach
(
supply
=>
{
var
s
=
{}
//构建换热站
s
.
value
=
supply
.
supplyId
;
s
.
label
=
supply
.
supplyName
;
s
.
children
=
[];
supply
.
stationList
.
forEach
(
station
=>
{
var
tmpStation
=
{
value
:
station
.
stationId
,
label
:
station
.
stationName
}
s
.
children
.
push
(
tmpStation
);
})
//增加供热站节点
s
.
children
.
push
({
value
:
s
.
value
,
label
:
s
.
label
})
if
(
s
.
children
.
length
>
0
)
{
//判断该供热站是否有换热站机组,若有则加入列表
serv
.
children
.
push
(
s
);
}
})
if
(
serv
.
children
.
length
>
0
)
{
VideoInfo
.
selectOptions
.
push
(
serv
)
}
})
}
else
{
result
[
i
].
supplyList
.
forEach
(
supply
=>
{
var
s
=
{}
//构建换热站
s
.
value
=
supply
.
supplyId
;
s
.
label
=
supply
.
supplyName
;
s
.
children
=
[];
supply
.
transferList
.
forEach
(
unit
=>
{
var
tmpUnit
=
{
value
:
unit
.
unitId
,
label
:
unit
.
unitName
}
s
.
children
.
push
(
tmpUnit
);
})
if
(
s
.
children
.
length
>
0
)
{
//判断该供热站是否有换热站机组,若有则加入列表
VideoInfo
.
selectOptions
.
push
(
s
);
}
})
}
}
}
}
}
//从数据库获得监控点信息
function
getVideoInfo
()
{
http
.
post
(
'/api/video/GetVideoTable'
).
then
((
result
)
=>
{
//若获得视频列表,则存入
if
(
result
.
data
.
count
>
0
)
{
VideoInfo
.
videoList
.
push
.
apply
(
VideoInfo
.
videoList
,
result
.
data
.
dataTable
);
}
})
}
//页面初始化
function
initPage
()
{
getVideoInfo
();
//视频信息
getStats
();
//下拉列表
console
.
log
(
'VideoInfo.selectOptions'
,
VideoInfo
.
selectOptions
)
if
(
route
.
query
.
id
){
//设置选择框
VideoInfo
.
value
=
route
.
query
.
id
;
//播放视频
getVideoFromVideoList
(
route
.
query
.
id
);
}
}
//从视频列表中找到当前被选中的换热站对应的所有视频id
function
getVideoFromVideoList
(
value
)
{
stopAllPreview
();
VideoInfo
.
playVideoList
.
length
=
0
;
VideoInfo
.
playVideoList
=
value
// VideoInfo.videoList.forEach(video => {
// if (video.stationId === Id) {
// var videoId = video.videoId.replaceAll('-', '');
// VideoInfo.playVideoList.push(videoId);
// }
// })
if
(
oWebControl
)
{
playVideoByVideoList
(
VideoInfo
.
playVideoList
)
}
}
// function visibleCascader(isshow) {
// if (!oWebControl) {
// return;
// }
// if (isshow) {
// hidePlay();
// } else {
// showPlay();
// }
// }
// $(document).ready(async function () {
// await initIp();//ip
// initPlugin();
// $('#startPlay').click(
// function () {
// if (oWebControl) {
// showPlay();
// } else {
// initPlugin();
// }
// }
// )
// $('#stopPlay').click(
// function () {
// hidePlay();
// }
// )
// })
onUnmounted
(()
=>
{
hidePlay
();
})
// 创建播放实例
function
initPlugin
()
{
oWebControl
=
new
WebControl
({
szPluginContainer
:
"playWnd"
,
// 指定容器id
iServicePortStart
:
15900
,
// 指定起止端口号,建议使用该值
iServicePortEnd
:
15900
,
szClassId
:
"23BF3B0A-2C56-4D97-9C03-0CB103AA8F11"
,
// 用于IE10使用ActiveX的clsid
cbConnectSuccess
:
function
()
{
// 创建WebControl实例成功
console
.
log
(
'创建成功'
)
oWebControl
.
JS_StartService
(
"window"
,
{
// WebControl实例创建成功后需要启动服务
dllPath
:
"./VideoPluginConnect.dll"
// 值"./VideoPluginConnect.dll"写死
}).
then
(
function
()
{
// 启动插件服务成功
oWebControl
.
JS_SetWindowControlCallback
({
// 设置消息回调
cbIntegrationCallBack
:
cbIntegrationCallBack
});
oWebControl
.
JS_CreateWnd
(
"playWnd"
,
playWnd_width
,
playWnd_height
).
then
(
function
()
{
//JS_CreateWnd创建视频播放窗口,宽高可设定
init
();
// 创建播放实例成功后初始化
});
},
function
()
{
// 启动插件服务失败
});
//playVideo()
setTimeout
(()
=>
playVideoByVideoList
(
VideoInfo
.
playVideoList
),
2000
)
},
cbConnectError
:
function
()
{
// 创建WebControl实例失败
console
.
log
(
'创建失败'
)
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
;
$
(
"#playWnd"
).
html
(
"插件未启动,正在尝试启动,请稍候..."
);
WebControl
.
JS_WakeUp
(
"VideoWebPlugin://"
);
initCount
++
;
if
(
initCount
<
3
)
{
setTimeout
(
function
()
{
initPlugin
();
},
3000
)
}
else
{
$
(
"#playWnd"
).
html
(
"插件启动失败,请检查插件是否安装!"
);
}
}
});
}
// 设置窗口控制回调
function
setCallbacks
()
{
oWebControl
.
JS_SetWindowControlCallback
({
cbIntegrationCallBack
:
cbIntegrationCallBack
});
}
// 推送消息
function
cbIntegrationCallBack
(
oData
)
{
}
//初始化ip
async
function
initIp
(){
var
res
;
try
{
res
=
await
fetch
(
'https://api.ipify.org?format=json'
);
const
data
=
await
res
.
json
();
var
serverIP
=
data
.
ip
;
if
(
serverIP
===
"111.160.132.74"
||
serverIP
===
"218.69.97.198"
){
videoIp
=
"192.168.1.130"
;
}
else
{
videoIp
=
"218.69.97.198"
;
}
}
catch
(
e
){
videoIp
=
"218.69.97.198"
;
}
videoPort
=
1443
;
}
//初始化插件
function
init
()
{
getPubKey
(
function
()
{
console
.
log
(
"ip:"
+
videoIp
);
////////////////////////////////// 请自行修改以下变量值 ////////////////////////////////////
var
appkey
=
"27337031"
;
//综合安防管理平台提供的appkey,必填
var
secret
=
setEncrypt
(
"MI9Q4eAHC0Ip7bVX2Sov"
);
//综合安防管理平台提供的secret,必填
var
ip
=
videoIp
;
//综合安防管理平台IP地址,必填
var
playMode
=
0
;
//初始播放模式:0-预览,1-回放
var
port
=
videoPort
;
//综合安防管理平台端口,若启用HTTPS协议,默认443
var
snapDir
=
"D:
\\
SnapDir"
;
//抓图存储路径
var
videoDir
=
"D:
\\
VideoDir"
;
//紧急录像或录像剪辑存储路径
var
layout
=
"2x2"
;
//playMode指定模式的布局
var
enableHTTPS
=
1
;
//是否启用HTTPS协议与综合安防管理平台交互,这里总是填1
var
encryptedFields
=
'secret'
;
//加密字段,默认加密领域为secret
var
showToolbar
=
0
;
//是否显示工具栏,0-不显示,非0-显示
var
showSmart
=
0
;
//是否显示智能信息(如配置移动侦测后画面上的线框),0-不显示,非0-显示
var
buttonIDs
=
"0,1,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
:
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
(
playWnd_width
,
playWnd_height
);
// 初始化后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
);
}
// 监听resize事件,使插件窗口尺寸跟随DIV窗口变化
$
(
window
).
resize
(
function
()
{
resetVideoWidth
();
if
(
oWebControl
!=
null
)
{
oWebControl
.
JS_Resize
(
playWnd_width
,
playWnd_height
);
setWndCover
();
}
});
function
resizeVideo
()
{
resetVideoWidth
();
if
(
oWebControl
!=
null
)
{
oWebControl
.
JS_Resize
(
playWnd_width
,
playWnd_height
);
setWndCover
();
}
}
// 监听滚动条scroll事件,使插件窗口跟随浏览器滚动而移动
$
(
window
).
scroll
(
function
()
{
resetVideoWidth
();
if
(
oWebControl
!=
null
)
{
oWebControl
.
JS_Resize
(
playWnd_width
,
playWnd_height
);
setWndCover
();
}
});
// 设置窗口裁剪,当因滚动条滚动导致窗口需要被遮住的情况下需要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
>
playWnd_width
)
?
playWnd_width
:
iCoverLeft
;
iCoverTop
=
(
iCoverTop
>
playWnd_height
)
?
playWnd_height
:
iCoverTop
;
iCoverRight
=
(
iCoverRight
>
playWnd_width
)
?
playWnd_width
:
iCoverRight
;
iCoverBottom
=
(
iCoverBottom
>
playWnd_height
)
?
playWnd_height
:
iCoverBottom
;
oWebControl
.
JS_RepairPartWindow
(
0
,
0
,
playWnd_width
+
1
,
playWnd_height
);
// 多1个像素点防止还原后边界缺失一个像素条
if
(
iCoverLeft
!=
0
)
{
oWebControl
.
JS_CuttingPartWindow
(
0
,
0
,
iCoverLeft
,
playWnd_height
);
}
if
(
iCoverTop
!=
0
)
{
oWebControl
.
JS_CuttingPartWindow
(
0
,
0
,
playWnd_width
+
1
,
iCoverTop
);
// 多剪掉一个像素条,防止出现剪掉一部分窗口后出现一个像素条
}
if
(
iCoverRight
!=
0
)
{
oWebControl
.
JS_CuttingPartWindow
(
playWnd_width
-
iCoverRight
,
0
,
iCoverRight
,
playWnd_height
);
}
if
(
iCoverBottom
!=
0
)
{
oWebControl
.
JS_CuttingPartWindow
(
0
,
playWnd_height
-
iCoverBottom
,
playWnd_width
,
iCoverBottom
);
}
}
//视频预览功能
$
(
"#startPreview"
).
click
(
function
()
{
var
cameraIndexCode
=
$
(
"#cameraIndexCode"
).
val
();
//获取输入的监控点编号值,必填
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
//可指定播放窗口
})
})
});
//停止全部预览
function
stopAllPreview
()
{
if
(
!
oWebControl
)
{
return
;
}
oWebControl
.
JS_RequestInterface
({
funcName
:
"stopAllPreview"
});
};
//播放视频函数,需要传入监控点编码☆☆☆☆
function
playVideo
(
videoCode
)
{
// stopAllPreview();
var
cameraIndexCode
=
videoCode
.
replaceAll
(
'-'
,
''
);
//字母必须小写
if
(
String
(
cameraIndexCode
)
===
''
)
{
return
;
}
console
.
log
(
"play:"
+
String
(
cameraIndexCode
));
var
cameraIndexCode
=
String
(
cameraIndexCode
);
//获取输入的监控点编号值,必填
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
//可指定播放窗口
})
})
}
function
playVideoByVideoList
(
videoList
)
{
if
(
!
videoList
||
videoList
.
length
===
0
)
{
return
;
}
var
streamMode
=
0
;
//主子码流标识:0-主码流,1-子码流
var
transMode
=
1
;
//传输协议:0-UDP,1-TCP
var
gpuMode
=
0
;
//是否启用GPU硬解,0-不启用,1-启用
var
wndId
=
-
1
;
//播放窗口序号(在2x2以上布局下可指定播放窗口)
var
list
=
[]
for
(
var
i
=
0
;
i
<
videoList
.
length
;
i
++
)
{
if
(
!
videoList
[
i
]
||
videoList
[
i
]
===
''
)
{
continue
;
}
var
cameraIndexCode
=
videoList
[
i
].
replaceAll
(
'-'
,
''
);
cameraIndexCode
=
cameraIndexCode
.
replace
(
/
(
^
\s
*
)
/g
,
""
);
cameraIndexCode
=
cameraIndexCode
.
replace
(
/
(\s
*$
)
/g
,
""
);
var
tmp
=
{
cameraIndexCode
:
cameraIndexCode
,
//监控点编号
streamMode
:
streamMode
,
//主子码流标识
transMode
:
transMode
,
//传输协议
gpuMode
:
gpuMode
,
//是否开启GPU硬解
wndId
:
i
+
1
//可指定播放窗口
}
list
.
push
(
tmp
);
}
if
(
list
.
length
===
0
)
{
return
;
}
oWebControl
.
JS_RequestInterface
({
funcName
:
"startMultiPreviewByCameraIndexCode"
,
argument
:
JSON
.
stringify
({
list
:
list
})
})
}
//隐藏播放窗口
function
hidePlay
()
{
if
(
typeof
oWebControl
!==
"undefined"
&&
oWebControl
!=
null
)
{
oWebControl
.
JS_HideWnd
();
}
}
function
showPlay
()
{
resizeVideo
();
if
(
typeof
oWebControl
!==
"undefined"
&&
oWebControl
!=
null
)
{
oWebControl
.
JS_ShowWnd
();
}
}
//播放视频函数测试,需要传入监控点编码☆☆☆☆
function
playVideotest
(
cameraIndexCode
)
{
if
(
String
(
cameraIndexCode
)
===
''
)
{
return
;
}
var
cameraIndexCode
=
String
(
cameraIndexCode
);
//获取输入的监控点编号值,必填
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
//可指定播放窗口
})
})
}
watch
(
()
=>
pProps
.
queryParams
,
async
(
newData
)
=>
{
await
initIp
();
//ip
initPlugin
();
showPlay
()
const
params
=
JSON
.
parse
(
pProps
.
queryParams
)
// const params = ['31c0d567dd1944d5b4ea3eddf94f740b']
console
.
log
(
'params'
,
params
)
console
.
log
(
' window.innerWidth'
,
window
.
innerWidth
)
getVideoFromVideoList
(
params
)
}
)
watch
(
()
=>
pProps
.
stopParams
,
async
(
newData
)
=>
{
console
.
log
(
'停停停停停停停停停停停停'
)
hidePlay
();
}
)
// watch(()=>route.params.id, watchEvent, { immediate: true })
// //监听回调函数
// function watchEvent(id){
// if(!VideoInfo.playVideoList){
// return;
// }
// getVideoFromVideoList(id);
// }
defineExpose
({
hidePlay
,
showPlay
,
resizeVideo
})
</
script
>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment