From e59b7811f9856b0920cf6cade36c6a9eec3d5d02 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Thu, 16 May 2024 17:12:56 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=B7=E5=BA=B7=E8=8E=B7=E5=8F=96=E7=9B=91?= =?UTF-8?q?=E6=8E=A7=E7=82=B9=E5=9B=9E=E6=94=BE=E5=8F=96=E6=B5=81URLv2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../video/controller/VideoItemController.java | 38 +++++++++++++++++-- .../video/service/IVideoItemService.java | 2 + .../service/impl/VideoItemServiceImpl.java | 25 ++++++++++++ 3 files changed, 62 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/zhgd/xmgl/modules/video/controller/VideoItemController.java b/src/main/java/com/zhgd/xmgl/modules/video/controller/VideoItemController.java index 9a41b2259..da673e9aa 100644 --- a/src/main/java/com/zhgd/xmgl/modules/video/controller/VideoItemController.java +++ b/src/main/java/com/zhgd/xmgl/modules/video/controller/VideoItemController.java @@ -1,12 +1,9 @@ package com.zhgd.xmgl.modules.video.controller; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.lang.tree.TreeNode; import com.zhgd.annotation.OperLog; import com.zhgd.jeecg.common.api.vo.Result; import com.zhgd.jeecg.common.mybatis.EntityMap; import com.zhgd.xmgl.async.AsyncProject; -import com.zhgd.xmgl.modules.bridgeerectmachine.entity.BridgeErectMachineData; import com.zhgd.xmgl.modules.video.entity.VideoItem; import com.zhgd.xmgl.modules.video.service.IVideoItemService; import io.swagger.annotations.Api; @@ -316,4 +313,39 @@ public class VideoItemController { public Result> getPlayUrlFromHikvision(String projectSn) throws ExecutionException, InterruptedException { return Result.success(videoItemService.getPlayUrlFromHikvision(projectSn)); } + + @OperLog(operModul = "视频管理", operType = "海康获取监控点回放取流URLv2", operDesc = "海康获取监控点回放取流URLv2") + @ApiOperation(value = "海康获取监控点回放取流URLv2", notes = "海康获取监控点回放取流URLv2", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "projectSn", value = "项目SN", paramType = "body", required = true, dataType = "String"), + @ApiImplicitParam(name = "serialNumber", value = "视频设备监控点编号", paramType = "body", required = true, dataType = "String"), + @ApiImplicitParam(name = "recordLocation", value = "存储类型,0:中心存储\n" + + "1:设备存储\n" + + "默认为中心存储", paramType = "body", required = false, dataType = "String"), + @ApiImplicitParam(name = "protocol", value = "取流协议(应用层协议),\n" + + "“hik”:HIK私有协议,使用视频SDK进行播放时,传入此类型;\n" + + "“rtsp”:RTSP协议;\n" + + "“rtmp”:RTMP协议(RTMP协议只支持海康SDK协议、EHOME协议、ONVIF协议接入的设备;只支持H264视频编码和AAC音频编码;RTMP回放要求录像片段连续,需要在URL后自行拼接beginTime=20190902T100303&endTime=20190902T100400,其中20190902T100303至20190902T100400为查询出有连续录像的时间段。对于不连续的录像,需要分段查询分段播放);\n" + + "“hls”:HLS协议(HLS协议只支持海康SDK协议、EHOME协议、ONVIF协议接入的设备;只支持H264视频编码和AAC音频编码;hls协议只支持云存储,不支持设备存储,云存储版本要求v2.2.4及以上的2.x版本,或v3.0.5及以上的3.x版本;ISC版本要求v1.2.0版本及以上,需在运管中心-视频联网共享中切换成启动平台外置VOD),\n" + + "“ws”:Websocket协议(一般用于H5视频播放器取流播放)。\n" + + "参数不填,默认为HIK协议", paramType = "body", required = false, dataType = "Integer"), + @ApiImplicitParam(name = "transmode", value = "传输协议(传输层协议)0:UDP\n" + + "1:TCP\n" + + "默认为TCP,在protocol设置为rtsp或者rtmp时有效\n" + + "注:EHOME设备回放只支持TCP传输\n" + + "GB28181 2011及以前版本只支持UDP传输", paramType = "body", required = false, dataType = "Integer"), + @ApiImplicitParam(name = "beginTime", value = "开始查询时间", paramType = "body", required = true, dataType = "String"), + @ApiImplicitParam(name = "endTime", value = "结束查询时间", paramType = "body", required = true, dataType = "String"), + @ApiImplicitParam(name = "uuid", value = "分页查询id,上一次查询返回的uuid,用于继续查询剩余片段,默认为空字符串。当存储类型为设备存储时,该字段生效,中心存储会一次性返回全部片段。", paramType = "body", required = false, dataType = "String"), + @ApiImplicitParam(name = "expand", value = "扩展内容,格式:key=value,\n" + + "调用方根据其播放控件支持的解码格式选择相应的封装类型;\n" + + "多个扩展时,以“&”隔开;支持的内容详见附录F expand扩展内容说明", paramType = "body", required = false, dataType = "String"), + @ApiImplicitParam(name = "streamform", value = "输出码流转封装格式,“ps”:PS封装格式、“rtp”:RTP封装协议。当protocol=rtsp时生效,且不传值时默认为RTP封装协议", paramType = "body", required = false, dataType = "String"), + @ApiImplicitParam(name = "lockType", value = "查询录像的锁定类型,0-查询全部录像;1-查询未锁定录像;2-查询已锁定录像,不传默认值为0。通过录像锁定与解锁接口来进行录像锁定与解锁。", paramType = "body", required = false, dataType = "Integer"), + }) + @PostMapping("/callPostPlaybackURLsV2") + public Result callPostPlaybackURLsV2(@RequestBody Map map) { + return Result.success(videoItemService.callPostPlaybackURLsV2(map)); + } + } diff --git a/src/main/java/com/zhgd/xmgl/modules/video/service/IVideoItemService.java b/src/main/java/com/zhgd/xmgl/modules/video/service/IVideoItemService.java index 30ce38a14..3fb409d13 100644 --- a/src/main/java/com/zhgd/xmgl/modules/video/service/IVideoItemService.java +++ b/src/main/java/com/zhgd/xmgl/modules/video/service/IVideoItemService.java @@ -70,4 +70,6 @@ public interface IVideoItemService extends IService { Map getPlayUrlFromHikvision(String projectSn) throws ExecutionException, InterruptedException; VideoItem queryById(String id); + + JSONObject callPostPlaybackURLsV2(Map map); } diff --git a/src/main/java/com/zhgd/xmgl/modules/video/service/impl/VideoItemServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/video/service/impl/VideoItemServiceImpl.java index 0d4b4ee2d..f011fef51 100644 --- a/src/main/java/com/zhgd/xmgl/modules/video/service/impl/VideoItemServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/video/service/impl/VideoItemServiceImpl.java @@ -25,6 +25,7 @@ import com.zhgd.xmgl.modules.video.service.IVideoItemService; import com.zhgd.xmgl.modules.worker.entity.UserDevAuthority; import com.zhgd.xmgl.modules.worker.mapper.UserDevAuthorityMapper; import com.zhgd.xmgl.modules.worker.service.IUserDevAuthorityService; +import com.zhgd.xmgl.util.DateUtils; import com.zhgd.xmgl.util.HikVideoUtil; import com.zhgd.xmgl.util.MessageUtil; import com.zhgd.xmgl.util.YsVideoUtil; @@ -80,6 +81,10 @@ public class VideoItemServiceImpl extends ServiceImpl map) { + String cameraIndexCode = MapUtils.getString(map, "serialNumber"); + Integer recordLocation = MapUtils.getInteger(map, "recordLocation"); + String protocol = MapUtils.getString(map, "protocol"); + Integer transmode = MapUtils.getInteger(map, "transmode"); + Date beginTime = DateUtils.convertQueryDate(MapUtils.getString(map, "beginTime"), true); + Date endTime = DateUtils.convertQueryDate(MapUtils.getString(map, "endTime"), false); + String uuid = MapUtils.getString(map, "uuid"); + String expand = MapUtils.getString(map, "expand"); + String streamform = MapUtils.getString(map, "streamform"); + String lockType = MapUtils.getString(map, "lockType"); + ProjectVideoConfig projectVideoConfig = getEnableProjectVideoConfigByProjectSn(map); + if (projectVideoConfig.getVideoType() == 3) { + return HikVideoUtil.callPostPlaybackURLsV2(cameraIndexCode, recordLocation, protocol, transmode, beginTime, endTime, uuid, expand, streamform, lockType, projectVideoConfig.getAccount(), projectVideoConfig.getPassword(), projectVideoConfig.getAppId(), projectVideoConfig.getAppSecret()); + } else { + throw new OpenAlertException(MessageUtil.get("paramErr")); + } + } + }