Compare commits

..

1 Commits

Author SHA1 Message Date
阿斌
42259f9f2b
Pre Merge pull request !36 from 阿斌/N/A 2026-05-25 14:17:20 +00:00
3 changed files with 132 additions and 163 deletions

View File

@ -1,5 +1,6 @@
package com.genersoft.iot.vmp.jt1078.config; package com.genersoft.iot.vmp.jt1078.config;
import com.genersoft.iot.vmp.jt1078.bean.common.ConfigAttribute;
import lombok.Data; import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.core.annotation.Order; import org.springframework.core.annotation.Order;
@ -18,8 +19,7 @@ public class JT1078Config {
private Boolean record = false; private Boolean record = false;
/** /**
* IDLE状态超时时间单位默认0表示不启用启用后当连接进入IDLE状态超过该时间时将被断开连接 * IdleStateHandler reader idle timeout, unit: minutes
连接进入IDLE状态的条件是在readerIdleTime时间内没有收到任何数据包并且在writerIdleTime时间内没有发送任何数据包
*/ */
private Integer readerIdleTime = 0; private Integer readerIdleTime = 15;
} }

View File

@ -273,11 +273,6 @@ export default {
}, },
setPlaybackRate: function() { setPlaybackRate: function() {
},
resize(width, height) {
if (jessibucaPlayer[this._uid]) {
jessibucaPlayer[this._uid].resize()
}
} }
} }
} }

View File

@ -50,10 +50,7 @@
</div> </div>
</div> </div>
<div id="playerBox" style="width: 100%;"> <div id="playerBox" style="width: 100%;">
<div :class="{ <div class="playBox" style="height: calc(100vh - 220px); width: 100%; background-color: #000000">
'play-box': true,
'play-box-fullscreen': isFullScreen,
}">
<div <div
v-if="playLoading" v-if="playLoading"
style="position: relative; left: calc(50% - 32px); top: 43%; z-index: 100;color: #fff;float: left; text-align: center;" style="position: relative; left: calc(50% - 32px); top: 43%; z-index: 100;color: #fff;float: left; text-align: center;"
@ -91,13 +88,8 @@
@playTimeChange="showPlayTimeChange" @playTimeChange="showPlayTimeChange"
/> />
</div> </div>
<div :class="{ <div class="player-option-box">
'player-option-box': true,
'player-option-box-bottom': isFullScreen
}">
<div v-if="showTime" class="time-line-show">{{ showTimeValue }}</div>
<VideoTimeline <VideoTimeline
style="height: 55px"
ref="Timeline" ref="Timeline"
:init-time="initTime" :init-time="initTime"
:time-segments="timeSegments" :time-segments="timeSegments"
@ -106,134 +98,135 @@
@mousedown="timelineMouseDown" @mousedown="timelineMouseDown"
@mouseup="mouseupTimeline" @mouseup="mouseupTimeline"
/> />
<div style="height: 40px; background-color: #383838; display: grid; grid-template-columns: 1fr 400px 1fr"> <div v-if="showTime" class="time-line-show">{{ showTimeValue }}</div>
<div style="text-align: left;"> </div>
<div class="record-play-control" style="background-color: transparent; box-shadow: 0 0 10px transparent"> <div style="height: 40px; background-color: #383838; display: grid; grid-template-columns: 1fr 400px 1fr">
<a <div style="text-align: left;">
target="_blank" <div class="record-play-control" style="background-color: transparent; box-shadow: 0 0 10px transparent">
class="record-play-control-item iconfont icon-list" <a
title="列表" target="_blank"
@click="sidebarControl()" class="record-play-control-item iconfont icon-list"
/> title="列表"
<a @click="sidebarControl()"
target="_blank" />
class="record-play-control-item iconfont icon-camera1196054easyiconnet" <a
title="截图" target="_blank"
@click="snap()" class="record-play-control-item iconfont icon-camera1196054easyiconnet"
/> title="截图"
<a @click="snap()"
target="_blank" />
class="record-play-control-item iconfont icon-xiazai1" <a
title="下载录像" target="_blank"
@click="chooseTimeForRecord()" class="record-play-control-item iconfont icon-xiazai1"
/> title="下载录像"
<!-- <a target="_blank" class="record-play-control-item iconfont icon-xiazai011" title="下载" @click="gbPause()" />--> @click="chooseTimeForRecord()"
</div> />
<!-- <a target="_blank" class="record-play-control-item iconfont icon-xiazai011" title="下载" @click="gbPause()" />-->
</div> </div>
<div style="text-align: center;"> </div>
<div class="record-play-control"> <div style="text-align: center;">
<a <div class="record-play-control">
v-if="chooseFileIndex > 0" <a
target="_blank" v-if="chooseFileIndex > 0"
class="record-play-control-item iconfont icon-diyigeshipin" target="_blank"
title="上一个" class="record-play-control-item iconfont icon-diyigeshipin"
@click="playLast()" title="上一个"
/> @click="playLast()"
<a />
v-else <a
style="color: #acacac; cursor: not-allowed" v-else
target="_blank" style="color: #acacac; cursor: not-allowed"
class="record-play-control-item iconfont icon-diyigeshipin" target="_blank"
title="上一个" class="record-play-control-item iconfont icon-diyigeshipin"
/> title="上一个"
/>
<a
target="_blank"
class="record-play-control-item iconfont icon-kuaijin"
title="快退五秒"
@click="seekBackward()"
/>
<a
target="_blank"
class="record-play-control-item iconfont icon-stop1"
style="font-size: 14px"
title="停止"
@click="stopPLay()"
/>
<a
v-if="playing"
target="_blank"
class="record-play-control-item iconfont icon-zanting"
title="暂停"
@click="pausePlay()"
/>
<a v-if="!playing" target="_blank" class="record-play-control-item iconfont icon-kaishi" title="播放" @click="play()" />
<a
target="_blank"
class="record-play-control-item iconfont icon-houtui"
title="快进五秒"
@click="seekForward()"
/>
<a
v-if="chooseFileIndex < detailFiles.length - 1"
target="_blank"
class="record-play-control-item iconfont icon-zuihouyigeshipin"
title="下一个"
@click="playNext()"
/>
<a
v-else
style="color: #acacac; cursor: not-allowed"
target="_blank"
class="record-play-control-item iconfont icon-zuihouyigeshipin"
title="下一个"
@click="playNext()"
/>
<el-dropdown @command="changePlaySpeed">
<a <a
target="_blank" target="_blank"
class="record-play-control-item iconfont icon-kuaijin" class="record-play-control-item record-play-control-speed"
title="快退五秒" title="倍速播放"
@click="seekBackward()" >{{ playSpeed }}X</a>
/> <el-dropdown-menu slot="dropdown">
<a <el-dropdown-item
target="_blank" v-for="item in playSpeedRange"
class="record-play-control-item iconfont icon-stop1" :key="item"
style="font-size: 14px" :command="item"
title="停止" >{{ item }}X
@click="stopPLay()" </el-dropdown-item>
/> </el-dropdown-menu>
<a </el-dropdown>
v-if="playing"
target="_blank"
class="record-play-control-item iconfont icon-zanting"
title="暂停"
@click="pausePlay()"
/>
<a v-if="!playing" target="_blank" class="record-play-control-item iconfont icon-kaishi" title="播放" @click="play()" />
<a
target="_blank"
class="record-play-control-item iconfont icon-houtui"
title="快进五秒"
@click="seekForward()"
/>
<a
v-if="chooseFileIndex < detailFiles.length - 1"
target="_blank"
class="record-play-control-item iconfont icon-zuihouyigeshipin"
title="下一个"
@click="playNext()"
/>
<a
v-else
style="color: #acacac; cursor: not-allowed"
target="_blank"
class="record-play-control-item iconfont icon-zuihouyigeshipin"
title="下一个"
@click="playNext()"
/>
<el-dropdown @command="changePlaySpeed" placement="top">
<a
target="_blank"
class="record-play-control-item record-play-control-speed"
title="倍速播放"
>{{ playSpeed }}X</a>
<el-dropdown-menu slot="dropdown" :append-to-body="false">
<el-dropdown-item
v-for="item in playSpeedRange"
:key="item"
:command="item"
>{{ item }}X
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
</div> </div>
<div style="text-align: right;"> </div>
<div class="record-play-control" style="background-color: transparent; box-shadow: 0 0 10px transparent"> <div style="text-align: right;">
<el-dropdown @command="changePlayer" placement="top"> <div class="record-play-control" style="background-color: transparent; box-shadow: 0 0 10px transparent">
<a <el-dropdown @command="changePlayer">
target="_blank"
class="record-play-control-item record-play-control-speed"
title="切换播放器"
>{{ playerLabel }}</a>
<el-dropdown-menu slot="dropdown" :append-to-body="false">
<el-dropdown-item command="jessibuca">Jessibuca</el-dropdown-item>
<el-dropdown-item command="webRTC">WebRTC</el-dropdown-item>
<el-dropdown-item command="h265web">H265Web</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<a <a
v-if="!isFullScreen"
target="_blank" target="_blank"
class="record-play-control-item iconfont icon-fangdazhanshi" class="record-play-control-item record-play-control-speed"
title="全屏" title="切换播放器"
@click="fullScreen()" >{{ playerLabel }}</a>
/> <el-dropdown-menu slot="dropdown">
<a <el-dropdown-item command="jessibuca">Jessibuca</el-dropdown-item>
v-else <el-dropdown-item command="webRTC">WebRTC</el-dropdown-item>
target="_blank" <el-dropdown-item command="h265web">H265Web</el-dropdown-item>
class="record-play-control-item iconfont icon-suoxiao1" </el-dropdown-menu>
title="全屏" </el-dropdown>
@click="fullScreen()" <a
/> v-if="!isFullScreen"
</div> target="_blank"
class="record-play-control-item iconfont icon-fangdazhanshi"
title="全屏"
@click="fullScreen()"
/>
<a
v-else
target="_blank"
class="record-play-control-item iconfont icon-suoxiao1"
title="全屏"
@click="fullScreen()"
/>
</div> </div>
</div> </div>
</div> </div>
@ -451,10 +444,8 @@ export default {
const playerHeight = this.$refs.recordVideoPlayer.playerHeight const playerHeight = this.$refs.recordVideoPlayer.playerHeight
screenfull.request(document.getElementById('playerBox')) screenfull.request(document.getElementById('playerBox'))
screenfull.on('change', (event) => { screenfull.on('change', (event) => {
this.$refs.recordVideoPlayer.resize(playerWidth, playerHeight)
this.isFullScreen = screenfull.isFullscreen this.isFullScreen = screenfull.isFullscreen
if (this.$refs.recordVideoPlayer && this.$refs.recordVideoPlayer.resize) {
this.$refs.recordVideoPlayer.resize(playerWidth, playerHeight)
}
}) })
this.isFullScreen = true this.isFullScreen = true
}, },
@ -683,31 +674,14 @@ export default {
} }
.player-option-box { .player-option-box {
height: 95px; height: 50px
}
.player-option-box-bottom {
width: 100%;
position: absolute;
bottom: 0;
} }
.time-line-show { .time-line-show {
position: relative; position: relative;
color: rgba(250, 249, 249, 0.89); color: rgba(250, 249, 249, 0.89);
top: -24px; left: calc(50% - 85px);
height: 0; top: -72px;
width: stretch;
float: left;
text-align: center;
text-shadow: 1px 0 #5f6b7c, -1px 0 #5f6b7c, 0 1px #5f6b7c, 0 -1px #5f6b7c, 1.1px 1.1px #5f6b7c, 1.1px -1.1px #5f6b7c, -1.1px 1.1px #5f6b7c, -1.1px -1.1px #5f6b7c; text-shadow: 1px 0 #5f6b7c, -1px 0 #5f6b7c, 0 1px #5f6b7c, 0 -1px #5f6b7c, 1.1px 1.1px #5f6b7c, 1.1px -1.1px #5f6b7c, -1.1px 1.1px #5f6b7c, -1.1px -1.1px #5f6b7c;
} }
.play-box {
width: 100%; aspect-ratio: 16 / 9;
background-color: #000000;
height: calc(100vh - 220px);
}
.play-box-fullscreen {
height: 100vh !important;
}
</style> </style>