From ff0d54968dd5a61e9cbd4e8525b7864540f4816d Mon Sep 17 00:00:00 2001 From: lin <648540858@qq.com> Date: Fri, 19 Sep 2025 22:55:44 +0800 Subject: [PATCH] =?UTF-8?q?zlm=E9=80=82=E9=85=8D=E6=96=B0=E7=9A=84?= =?UTF-8?q?=E4=BA=91=E7=AB=AF=E5=BD=95=E5=83=8F=E6=92=AD=E6=94=BE=E7=95=8C?= =?UTF-8?q?=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../media/abl/ABLMediaNodeServerService.java | 8 ++-- .../iot/vmp/media/abl/ABLRESTfulUtils.java | 5 ++- .../service/IMediaNodeServerService.java | 4 +- .../media/service/IMediaServerService.java | 4 +- .../service/impl/MediaServerServiceImpl.java | 8 ++-- .../media/zlm/ZLMMediaNodeServerService.java | 4 +- .../iot/vmp/service/ICloudRecordService.java | 4 +- .../service/impl/CloudRecordServiceImpl.java | 8 ++-- .../cloudRecord/CloudRecordController.java | 8 +--- web/src/api/cloudRecord.js | 6 +-- web/src/views/cloudRecord/detail.vue | 43 ++++++++++++++++--- web/src/views/common/h265web.vue | 3 ++ 12 files changed, 68 insertions(+), 37 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaNodeServerService.java b/src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaNodeServerService.java index f8e0bc600..26e70038a 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaNodeServerService.java +++ b/src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaNodeServerService.java @@ -488,16 +488,16 @@ public class ABLMediaNodeServerService implements IMediaNodeServerService { } @Override - public void seekRecordStamp(MediaServer mediaServer, String app, String stream, String key, Double stamp, String schema) { - ABLResult ablResult = ablresTfulUtils.controlRecordPlay(mediaServer, key, "seek", "120"); + public void seekRecordStamp(MediaServer mediaServer, String app, String stream, Double stamp, String schema) { + ABLResult ablResult = ablresTfulUtils.controlRecordPlay(mediaServer, app, stream, "seek", "120"); if (ablResult.getCode() != 0) { log.warn("[abl-seek] 失败:{}", ablResult.getMemo()); } } @Override - public void setRecordSpeed(MediaServer mediaServer, String app, String stream, String key, Integer speed, String schema) { - ABLResult ablResult = ablresTfulUtils.controlRecordPlay(mediaServer, key, "scale", speed + ""); + public void setRecordSpeed(MediaServer mediaServer, String app, String stream, Integer speed, String schema) { + ABLResult ablResult = ablresTfulUtils.controlRecordPlay(mediaServer, app, stream, "scale", speed + ""); if (ablResult.getCode() != 0) { log.warn("[abl-倍速] 失败:{}", ablResult.getMemo()); } diff --git a/src/main/java/com/genersoft/iot/vmp/media/abl/ABLRESTfulUtils.java b/src/main/java/com/genersoft/iot/vmp/media/abl/ABLRESTfulUtils.java index d71b88cab..f059632af 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/abl/ABLRESTfulUtils.java +++ b/src/main/java/com/genersoft/iot/vmp/media/abl/ABLRESTfulUtils.java @@ -522,9 +522,10 @@ public class ABLRESTfulUtils { } } - public ABLResult controlRecordPlay(MediaServer mediaServer, String key, String command, String value) { + public ABLResult controlRecordPlay(MediaServer mediaServer, String app, String stream, String command, String value) { Map param = new HashMap<>(); - param.put("key", key); + param.put("app", app); + param.put("stream", stream); param.put("command", command); param.put("value", Long.valueOf(value)); String response = sendGet(mediaServer, "controlRecordPlay", param); diff --git a/src/main/java/com/genersoft/iot/vmp/media/service/IMediaNodeServerService.java b/src/main/java/com/genersoft/iot/vmp/media/service/IMediaNodeServerService.java index 4e77b51bd..b0a768c84 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/service/IMediaNodeServerService.java +++ b/src/main/java/com/genersoft/iot/vmp/media/service/IMediaNodeServerService.java @@ -79,9 +79,9 @@ public interface IMediaNodeServerService { void loadMP4FileForDate(MediaServer mediaServer, String app, String stream, String datePath, String dateDir, ErrorCallback callback); - void seekRecordStamp(MediaServer mediaServer, String app, String stream, String key, Double stamp, String schema); + void seekRecordStamp(MediaServer mediaServer, String app, String stream, Double stamp, String schema); - void setRecordSpeed(MediaServer mediaServer, String app, String stream, String key, Integer speed, String schema); + void setRecordSpeed(MediaServer mediaServer, String app, String stream, Integer speed, String schema); DownloadFileInfo getDownloadFilePath(MediaServer mediaServer, RecordInfo recordInfo); diff --git a/src/main/java/com/genersoft/iot/vmp/media/service/IMediaServerService.java b/src/main/java/com/genersoft/iot/vmp/media/service/IMediaServerService.java index 2e447c077..424603021 100755 --- a/src/main/java/com/genersoft/iot/vmp/media/service/IMediaServerService.java +++ b/src/main/java/com/genersoft/iot/vmp/media/service/IMediaServerService.java @@ -166,9 +166,9 @@ public interface IMediaServerService { void loadMP4FileForDate(MediaServer mediaServer, String app, String stream, String datePath, String dateDir, ErrorCallback callback); - void seekRecordStamp(MediaServer mediaServer, String app, String stream, String key, Double stamp, String schema); + void seekRecordStamp(MediaServer mediaServer, String app, String stream, Double stamp, String schema); - void setRecordSpeed(MediaServer mediaServer, String app, String stream, String key, Integer speed, String schema); + void setRecordSpeed(MediaServer mediaServer, String app, String stream, Integer speed, String schema); DownloadFileInfo getDownloadFilePath(MediaServer mediaServer, RecordInfo recordInfo); diff --git a/src/main/java/com/genersoft/iot/vmp/media/service/impl/MediaServerServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/media/service/impl/MediaServerServiceImpl.java index 17b8d522a..6d508658c 100755 --- a/src/main/java/com/genersoft/iot/vmp/media/service/impl/MediaServerServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/media/service/impl/MediaServerServiceImpl.java @@ -973,23 +973,23 @@ public class MediaServerServiceImpl implements IMediaServerService { } @Override - public void seekRecordStamp(MediaServer mediaServer, String app, String stream, String key, Double stamp, String schema) { + public void seekRecordStamp(MediaServer mediaServer, String app, String stream, Double stamp, String schema) { IMediaNodeServerService mediaNodeServerService = nodeServerServiceMap.get(mediaServer.getType()); if (mediaNodeServerService == null) { log.info("[seekRecordStamp] 失败, mediaServer的类型: {},未找到对应的实现类", mediaServer.getType()); throw new ControllerException(ErrorCode.ERROR100.getCode(), "未找到mediaServer对应的实现类"); } - mediaNodeServerService.seekRecordStamp(mediaServer, app, stream, key, stamp, schema); + mediaNodeServerService.seekRecordStamp(mediaServer, app, stream, stamp, schema); } @Override - public void setRecordSpeed(MediaServer mediaServer, String app, String stream, String key, Integer speed, String schema) { + public void setRecordSpeed(MediaServer mediaServer, String app, String stream, Integer speed, String schema) { IMediaNodeServerService mediaNodeServerService = nodeServerServiceMap.get(mediaServer.getType()); if (mediaNodeServerService == null) { log.info("[setRecordSpeed] 失败, mediaServer的类型: {},未找到对应的实现类", mediaServer.getType()); throw new ControllerException(ErrorCode.ERROR100.getCode(), "未找到mediaServer对应的实现类"); } - mediaNodeServerService.setRecordSpeed(mediaServer, app, stream, key, speed, schema); + mediaNodeServerService.setRecordSpeed(mediaServer, app, stream, speed, schema); } @Override diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaNodeServerService.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaNodeServerService.java index ee7a2ade4..a6c53f517 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaNodeServerService.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaNodeServerService.java @@ -567,7 +567,7 @@ public class ZLMMediaNodeServerService implements IMediaNodeServerService { } @Override - public void seekRecordStamp(MediaServer mediaServer, String app, String stream, String key, Double stamp, String schema) { + public void seekRecordStamp(MediaServer mediaServer, String app, String stream, Double stamp, String schema) { ZLMResult zlmResult = zlmresTfulUtils.seekRecordStamp(mediaServer, app, stream, stamp, schema); if (zlmResult == null) { throw new ControllerException(ErrorCode.ERROR100.getCode(), "请求失败"); @@ -578,7 +578,7 @@ public class ZLMMediaNodeServerService implements IMediaNodeServerService { } @Override - public void setRecordSpeed(MediaServer mediaServer, String app, String stream, String key, Integer speed, String schema) { + public void setRecordSpeed(MediaServer mediaServer, String app, String stream, Integer speed, String schema) { ZLMResult zlmResult = zlmresTfulUtils.setRecordSpeed(mediaServer, app, stream, speed, schema); if (zlmResult == null) { throw new ControllerException(ErrorCode.ERROR100.getCode(), "请求失败"); diff --git a/src/main/java/com/genersoft/iot/vmp/service/ICloudRecordService.java b/src/main/java/com/genersoft/iot/vmp/service/ICloudRecordService.java index 6d33274e9..af32e77cb 100755 --- a/src/main/java/com/genersoft/iot/vmp/service/ICloudRecordService.java +++ b/src/main/java/com/genersoft/iot/vmp/service/ICloudRecordService.java @@ -61,9 +61,9 @@ public interface ICloudRecordService { */ void loadMP4FileForDate(String app, String stream, String date, ErrorCallback callback); - void seekRecord(String mediaServerId,String app, String stream, String key, Double seek, String schema); + void seekRecord(String mediaServerId,String app, String stream, Double seek, String schema); - void setRecordSpeed(String mediaServerId, String app, String stream, String key, Integer speed, String schema); + void setRecordSpeed(String mediaServerId, String app, String stream, Integer speed, String schema); void deleteFileByIds(Set ids); diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/CloudRecordServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/CloudRecordServiceImpl.java index 2482c1db9..a9bf5412f 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/CloudRecordServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/CloudRecordServiceImpl.java @@ -333,21 +333,21 @@ public class CloudRecordServiceImpl implements ICloudRecordService { } @Override - public void seekRecord(String mediaServerId,String app, String stream, String key, Double seek, String schema) { + public void seekRecord(String mediaServerId,String app, String stream, Double seek, String schema) { MediaServer mediaServer = mediaServerService.getOne(mediaServerId); if (mediaServer == null) { throw new ControllerException(ErrorCode.ERROR100.getCode(), "媒体节点不存在: " + mediaServerId); } - mediaServerService.seekRecordStamp(mediaServer, app, stream, key, seek, schema); + mediaServerService.seekRecordStamp(mediaServer, app, stream, seek, schema); } @Override - public void setRecordSpeed(String mediaServerId, String app, String stream, String key, Integer speed, String schema) { + public void setRecordSpeed(String mediaServerId, String app, String stream, Integer speed, String schema) { MediaServer mediaServer = mediaServerService.getOne(mediaServerId); if (mediaServer == null) { throw new ControllerException(ErrorCode.ERROR100.getCode(), "媒体节点不存在: " + mediaServerId); } - mediaServerService.setRecordSpeed(mediaServer, app, stream, key, speed, schema); + mediaServerService.setRecordSpeed(mediaServer, app, stream, speed, schema); } @Override diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/cloudRecord/CloudRecordController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/cloudRecord/CloudRecordController.java index 267690c32..3a1aaae94 100755 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/cloudRecord/CloudRecordController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/cloudRecord/CloudRecordController.java @@ -314,20 +314,18 @@ public class CloudRecordController { @Parameter(name = "mediaServerId", description = "使用的节点Id", required = true) @Parameter(name = "app", description = "应用名", required = true) @Parameter(name = "stream", description = "流ID", required = true) - @Parameter(name = "key", description = "流绑定的key", required = true) @Parameter(name = "seek", description = "要定位的时间位置,从录像开始的时间算起", required = true) public void seekRecord( @RequestParam(required = true) String mediaServerId, @RequestParam(required = true) String app, @RequestParam(required = true) String stream, - @RequestParam(required = true) String key, @RequestParam(required = true) Double seek, @RequestParam(required = false) String schema ) { if (schema == null) { schema = "ts"; } - cloudRecordService.seekRecord(mediaServerId, app, stream, key, seek, schema); + cloudRecordService.seekRecord(mediaServerId, app, stream, seek, schema); } @ResponseBody @@ -336,13 +334,11 @@ public class CloudRecordController { @Parameter(name = "mediaServerId", description = "使用的节点Id", required = true) @Parameter(name = "app", description = "应用名", required = true) @Parameter(name = "stream", description = "流ID", required = true) - @Parameter(name = "key", description = "流绑定的key", required = true) @Parameter(name = "speed", description = "要设置的录像倍速", required = true) public void setRecordSpeed( @RequestParam(required = true) String mediaServerId, @RequestParam(required = true) String app, @RequestParam(required = true) String stream, - @RequestParam(required = true) String key, @RequestParam(required = true) Integer speed, @RequestParam(required = false) String schema ) { @@ -350,7 +346,7 @@ public class CloudRecordController { schema = "ts"; } - cloudRecordService.setRecordSpeed(mediaServerId, app, stream, key, speed, schema); + cloudRecordService.setRecordSpeed(mediaServerId, app, stream, speed, schema); } @ResponseBody diff --git a/web/src/api/cloudRecord.js b/web/src/api/cloudRecord.js index 7bc871e47..63e0795b0 100644 --- a/web/src/api/cloudRecord.js +++ b/web/src/api/cloudRecord.js @@ -41,7 +41,7 @@ export function loadRecord(params) { } export function seek(params) { - const { mediaServerId, app, stream, key, seek, schema } = params + const { mediaServerId, app, stream, seek, schema } = params return request({ method: 'get', url: `/api/cloud/record/seek`, @@ -49,7 +49,6 @@ export function seek(params) { mediaServerId: mediaServerId, app: app, stream: stream, - key: key, seek: seek, schema: schema } @@ -57,7 +56,7 @@ export function seek(params) { } export function speed(params) { - const { mediaServerId, app, stream, key, speed, schema } = params + const { mediaServerId, app, stream, speed, schema } = params return request({ method: 'get', url: `/api/cloud/record/speed`, @@ -65,7 +64,6 @@ export function speed(params) { mediaServerId: mediaServerId, app: app, stream: stream, - key: key, speed: speed, schema: schema } diff --git a/web/src/views/cloudRecord/detail.vue b/web/src/views/cloudRecord/detail.vue index 0f1324553..d593d71c4 100755 --- a/web/src/views/cloudRecord/detail.vue +++ b/web/src/views/cloudRecord/detail.vue @@ -57,10 +57,12 @@
{{showPlayTimeValue}}
-
+
-
+
@@ -132,6 +134,8 @@ export default { detailFiles: [], videoUrl: null, streamInfo: null, + showTimeLeft: null, + isMousedown: false, loading: false, chooseDate: null, playTime: null, @@ -194,6 +198,10 @@ export default { return { left: `calc(${this.playerTime/this.streamInfo.duration * 100}% - 6px)` } } }, + created() { + document.addEventListener('mousemove', this.timeProcessMousemove) + document.addEventListener('mouseup', this.timeProcessMouseup) + }, mounted() { // 查询当年有视频的日期 this.getDateInYear(() => { @@ -207,6 +215,29 @@ export default { this.$destroy('recordVideoPlayer') }, methods: { + timeProcessMouseup(event) { + + }, + timeProcessMousemove(event) { + + }, + timeProcessClick(event) { + let x = event.offsetX + let clientWidth = event.target.clientWidth + this.seekRecord(x / clientWidth * this.streamInfo.duration) + }, + timeProcessMousedown(event) { + this.isMousedown = true + }, + timeProcessMouseEnter(event) { + this.showTimeLeft = event.offsetX + }, + timeProcessMouseMove(event) { + this.showTimeLeft = event.offsetX + }, + timeProcessMouseLeave(event) { + this.showTimeLeft = null + }, sidebarControl() { this.showSidebar = !this.showSidebar }, @@ -374,15 +405,17 @@ export default { }) }, - seekRecord() { + seekRecord(playSeekValue) { this.$store.dispatch('cloudRecord/seek', { mediaServerId: this.streamInfo.mediaServerId, app: this.streamInfo.app, stream: this.streamInfo.stream, - key: this.streamInfo.key, - seek: this.playSeekValue, + seek: playSeekValue, schema: 'fmp4' }) + .then((data) => { + this.playerTime = playSeekValue + }) .catch((error) => { console.log(error) }) diff --git a/web/src/views/common/h265web.vue b/web/src/views/common/h265web.vue index 3e6e233e3..ad7f8fdc9 100644 --- a/web/src/views/common/h265web.vue +++ b/web/src/views/common/h265web.vue @@ -256,6 +256,9 @@ export default { }, setPlaybackRate: function(speed) { h265webPlayer[this._uid].setPlaybackRate(speed) + }, + playNextFrame: function() { + h265webPlayer[this._uid].do() } } }