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
4b9c13d7
Commit
4b9c13d7
authored
Sep 26, 2024
by
张伯涛
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
视频监控模块代码合并
parent
067db927
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
457 additions
and
448 deletions
+457
-448
VideoViewPage.vue
src/views/Video/VideoViewPage.vue
+457
-448
No files found.
src/views/Video/VideoViewPage.vue
View file @
4b9c13d7
<
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"
>
<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: 20px 0 0 0px;
// width: 1200px;
/*播放容器的宽和高设定*/
height: 700px;
// border: 1px solid black;
margin: 20px 0 0 0px;
// width: 1200px;
/*播放容器的宽和高设定*/
height: 700px;
// border: 1px solid black;
}
.el-button-button {
// margin-top: 5px;
width: 80px;
// margin-top: 5px;
width: 80px;
}
</
style
>
...
...
@@ -68,26 +68,26 @@ 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
();
if
(
route
.
query
.
id
){
VideoInfo
.
value
=
route
.
query
.
id
;
getVideoFromVideoList
(
route
.
query
.
id
);
}
showPlay
();
})
onDeactivated
(()
=>
{
hidePlay
();
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
);
}
var
r
=
useRoute
();
console
.
log
(
'update'
)
console
.
log
(
r
.
query
.
id
);
if
(
r
.
query
.
id
){
VideoInfo
.
value
=
r
.
query
.
id
;
getVideoFromVideoList
(
r
.
query
.
id
);
}
})
//声明公用变量
...
...
@@ -96,229 +96,229 @@ var pubKey = '';
var
playWnd_width
=
window
.
innerWidth
-
200
;
var
playWnd_height
=
window
.
innerHeight
-
220
;
var
oWebControl
;
var
videoIp
;
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
:
[]
selectOptions
:
[],
value
:
[],
videoList
:
[],
playVideoList
:
[]
});
const
props
=
{
multiple
:
false
,
emitPath
:
false
}
initPage
();
function
down
(){
//下载插件
const
filepath
=
'/OutputFile/VideoWebPlugin.zip'
;
window
.
open
(
filepath
);
//下载插件
const
filepath
=
'/OutputFile/VideoWebPlugin.zip'
;
window
.
open
(
filepath
);
}
function
resetVideoWidth
(){
var
menuWidth
=
localStorage
.
getItem
(
"tabWidth"
);
if
(
!
menuWidth
||
menuWidth
===
''
||
!
Number
(
menuWidth
)){
playWnd_width
=
window
.
innerWidth
-
200
;
}
else
{
playWnd_width
=
window
.
innerWidth
-
Number
(
menuWidth
);
}
console
.
log
(
'playVW'
,
playWnd_width
);
var
menuWidth
=
localStorage
.
getItem
(
"tabWidth"
);
if
(
!
menuWidth
||
menuWidth
===
''
||
!
Number
(
menuWidth
)){
playWnd_width
=
window
.
innerWidth
-
200
;
}
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
);
}
})
}
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
);
}
})
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
();
//下拉列表
if
(
route
.
query
.
id
){
//设置选择框
VideoInfo
.
value
=
route
.
query
.
id
;
//播放视频
getVideoFromVideoList
(
route
.
query
.
id
);
}
getVideoInfo
();
//视频信息
getStats
();
//下拉列表
if
(
route
.
query
.
id
){
//设置选择框
VideoInfo
.
value
=
route
.
query
.
id
;
//播放视频
getVideoFromVideoList
(
route
.
query
.
id
);
}
}
//从视频列表中找到当前被选中的换热站对应的所有视频id
function
getVideoFromVideoList
(
Id
)
{
stopAllPreview
();
VideoInfo
.
playVideoList
.
length
=
0
;
VideoInfo
.
videoList
.
forEach
(
video
=>
{
if
(
video
.
stationId
===
Id
)
{
var
videoId
=
video
.
videoId
.
replaceAll
(
'-'
,
''
);
VideoInfo
.
playVideoList
.
push
(
videoId
);
}
})
if
(
oWebControl
)
{
playVideoByVideoList
(
VideoInfo
.
playVideoList
)
stopAllPreview
();
VideoInfo
.
playVideoList
.
length
=
0
;
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
();
}
if
(
!
oWebControl
)
{
return
;
}
if
(
isshow
)
{
hidePlay
();
}
else
{
showPlay
();
}
}
$
(
document
).
ready
(
function
()
{
initIp
();
//ip
initPlugin
();
$
(
'#startPlay'
).
click
(
function
()
{
if
(
oWebControl
)
{
showPlay
();
}
else
{
initPlugin
();
}
}
)
$
(
'#stopPlay'
).
click
(
function
()
{
hidePlay
();
$
(
document
).
ready
(
async
function
()
{
await
initIp
();
//ip
initPlugin
();
$
(
'#startPlay'
).
click
(
function
()
{
if
(
oWebControl
)
{
showPlay
();
}
else
{
initPlugin
();
}
)
}
)
$
(
'#stopPlay'
).
click
(
function
()
{
hidePlay
();
}
)
})
onUnmounted
(()
=>
{
hidePlay
();
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
(
"插件启动失败,请检查插件是否安装!"
);
}
}
});
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
});
oWebControl
.
JS_SetWindowControlCallback
({
cbIntegrationCallBack
:
cbIntegrationCallBack
});
}
// 推送消息
...
...
@@ -327,284 +327,293 @@ function cbIntegrationCallBack(oData) {
//初始化ip
async
function
initIp
(){
const
res
=
await
fetch
(
'https://api.ipify.org?format=json'
);
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"
;
videoIp
=
"192.168.1.130"
;
}
else
{
videoIp
=
"218.69.97.198"
;
}
videoPort
=
1443
;
}
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
=
1
;
//是否显示工具栏,0-不显示,非0-显示
var
showSmart
=
1
;
//是否显示智能信息(如配置移动侦测后画面上的线框)
,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窗口重合问题
});
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
=
1
;
//是否显示工具栏
,0-不显示,非0-显示
var
showSmart
=
1
;
//是否显示智能信息(如配置移动侦测后画面上的线框),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
()
}
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
);
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
();
}
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
();
}
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
();
}
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
);
}
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
//可指定播放窗口
})
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"
});
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
//可指定播放窗口
})
// 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
(
!
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
;
}
if
(
list
.
length
===
0
)
{
return
;
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
//可指定播放窗口
}
oWebControl
.
JS_RequestInterface
({
funcName
:
"startMultiPreviewByCameraIndexCode"
,
argument
:
JSON
.
stringify
({
list
:
list
})
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
();
}
if
(
typeof
oWebControl
!==
"undefined"
&&
oWebControl
!=
null
)
{
oWebControl
.
JS_HideWnd
();
}
}
function
showPlay
()
{
resizeVideo
();
if
(
typeof
oWebControl
!==
"undefined"
&&
oWebControl
!=
null
)
{
oWebControl
.
JS_ShowWnd
();
}
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
//可指定播放窗口
})
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
//可指定播放窗口
})
})
}
...
...
@@ -619,10 +628,10 @@ function playVideotest(cameraIndexCode) {
defineExpose
({
hidePlay
,
showPlay
,
resizeVideo
hidePlay
,
showPlay
,
resizeVideo
})
</
script
>
\ No newline at end of file
</
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