From c7d15150237c946fbb4f5547dab0018a5f573d88 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期二, 27 六月 2023 15:34:38 +0800 Subject: [PATCH] 增加redis通道 --- src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/PlaybackController.java | 65 ++++++++++++++++++++------------ 1 files changed, 41 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/PlaybackController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/PlaybackController.java index 20860bf..8bab3fd 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/PlaybackController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/PlaybackController.java @@ -1,13 +1,17 @@ package com.genersoft.iot.vmp.vmanager.gb28181.playback; import com.genersoft.iot.vmp.common.StreamInfo; +import com.genersoft.iot.vmp.conf.UserSetting; import com.genersoft.iot.vmp.conf.exception.ControllerException; +import com.genersoft.iot.vmp.conf.exception.ServiceException; import com.genersoft.iot.vmp.conf.exception.SsrcTransactionNotFoundException; import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder; import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage; +import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.service.IPlayService; import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; +import com.genersoft.iot.vmp.vmanager.bean.StreamContent; import com.genersoft.iot.vmp.vmanager.bean.WVPResult; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -30,12 +34,13 @@ import javax.sip.InvalidArgumentException; import javax.sip.SipException; import java.text.ParseException; +import java.util.UUID; /** * @author lin */ @Tag(name = "瑙嗛鍥炴斁") -@CrossOrigin + @RestController @RequestMapping("/api/playback") public class PlaybackController { @@ -44,6 +49,9 @@ @Autowired private SIPCommander cmder; + + @Autowired + private ZLMRTPServerFactory zlmrtpServerFactory; @Autowired private IVideoManagerStorage storager; @@ -57,30 +65,46 @@ @Autowired private DeferredResultHolder resultHolder; + @Autowired + private UserSetting userSetting; + @Operation(summary = "寮�濮嬭棰戝洖鏀�") @Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true) @Parameter(name = "channelId", description = "閫氶亾鍥芥爣缂栧彿", required = true) @Parameter(name = "startTime", description = "寮�濮嬫椂闂�", required = true) @Parameter(name = "endTime", description = "缁撴潫鏃堕棿", required = true) @GetMapping("/start/{deviceId}/{channelId}") - public DeferredResult<WVPResult<StreamInfo>> play(@PathVariable String deviceId, @PathVariable String channelId, - String startTime, String endTime) { + public DeferredResult<WVPResult<StreamContent>> start(@PathVariable String deviceId, @PathVariable String channelId, + String startTime, String endTime) { if (logger.isDebugEnabled()) { logger.debug(String.format("璁惧鍥炴斁 API璋冪敤锛宒eviceId锛�%s 锛宑hannelId锛�%s", deviceId, channelId)); } + String uuid = UUID.randomUUID().toString(); + String key = DeferredResultHolder.CALLBACK_CMD_PLAYBACK + deviceId + channelId; + DeferredResult<WVPResult<StreamContent>> result = new DeferredResult<>(userSetting.getPlayTimeout().longValue()); + resultHolder.put(key, uuid, result); - return playService.playBack(deviceId, channelId, startTime, endTime, null, + WVPResult<StreamContent> wvpResult = new WVPResult<>(); + + RequestMessage msg = new RequestMessage(); + msg.setKey(key); + msg.setId(uuid); + + playService.playBack(deviceId, channelId, startTime, endTime, null, playBackResult->{ - if (playBackResult.getCode() != ErrorCode.SUCCESS.getCode()) { - RequestMessage data = playBackResult.getData(); - data.setData(WVPResult.fail(playBackResult.getCode(), playBackResult.getMsg())); - resultHolder.invokeResult(data); - }else { - resultHolder.invokeResult(playBackResult.getData()); + wvpResult.setCode(playBackResult.getCode()); + wvpResult.setMsg(playBackResult.getMsg()); + if (playBackResult.getCode() == ErrorCode.SUCCESS.getCode()) { + StreamInfo streamInfo = (StreamInfo)playBackResult.getData(); + wvpResult.setData(new StreamContent(streamInfo)); } + msg.setData(wvpResult); + resultHolder.invokeResult(msg); }); + + return result; } @@ -113,14 +137,11 @@ @GetMapping("/pause/{streamId}") public void playPause(@PathVariable String streamId) { logger.info("playPause: "+streamId); - StreamInfo streamInfo = redisCatchStorage.queryPlayback(null, null, streamId, null); - if (null == streamInfo) { - logger.warn("streamId涓嶅瓨鍦�!"); - throw new ControllerException(ErrorCode.ERROR400.getCode(), "streamId涓嶅瓨鍦�"); - } - Device device = storager.queryVideoDevice(streamInfo.getDeviceID()); + try { - cmder.playPauseCmd(device, streamInfo); + playService.pauseRtp(streamId); + } catch (ServiceException e) { + throw new ControllerException(ErrorCode.ERROR400.getCode(), e.getMessage()); } catch (InvalidArgumentException | ParseException | SipException e) { throw new ControllerException(ErrorCode.ERROR100.getCode(), e.getMessage()); } @@ -132,14 +153,10 @@ @GetMapping("/resume/{streamId}") public void playResume(@PathVariable String streamId) { logger.info("playResume: "+streamId); - StreamInfo streamInfo = redisCatchStorage.queryPlayback(null, null, streamId, null); - if (null == streamInfo) { - logger.warn("streamId涓嶅瓨鍦�!"); - throw new ControllerException(ErrorCode.ERROR400.getCode(), "streamId涓嶅瓨鍦�"); - } - Device device = storager.queryVideoDevice(streamInfo.getDeviceID()); try { - cmder.playResumeCmd(device, streamInfo); + playService.resumeRtp(streamId); + } catch (ServiceException e) { + throw new ControllerException(ErrorCode.ERROR400.getCode(), e.getMessage()); } catch (InvalidArgumentException | ParseException | SipException e) { throw new ControllerException(ErrorCode.ERROR100.getCode(), e.getMessage()); } -- Gitblit v1.8.0