From 4142601a4b0a57dc71bd6ae9b91756e0aa30c6a6 Mon Sep 17 00:00:00 2001 From: chenparty <870300816@qq.com> Date: 星期二, 23 十一月 2021 17:09:15 +0800 Subject: [PATCH] 增加回放控制功能(回放暂停、回放恢复、回放拖动播放、回放倍速播放) --- src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/PlaybackController.java | 95 +++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 95 insertions(+), 0 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 98df8dd..90ecfd4 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 @@ -9,6 +9,7 @@ import com.genersoft.iot.vmp.service.bean.SSRCInfo; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.service.IPlayService; +import com.genersoft.iot.vmp.vmanager.gb28181.session.InfoCseqCache; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -152,4 +153,98 @@ return new ResponseEntity<String>(HttpStatus.INTERNAL_SERVER_ERROR); } } + + @ApiOperation("鍥炴斁鏆傚仠") + @ApiImplicitParams({ + @ApiImplicitParam(name = "streamId", value = "鍥炴斁娴両D", dataTypeClass = String.class), + }) + @GetMapping("/pause/{streamId}") + public ResponseEntity<String> playPause(@PathVariable String streamId) { + logger.info("playPause: "+streamId); + JSONObject json = new JSONObject(); + StreamInfo streamInfo = redisCatchStorage.queryPlaybackByStreamId(streamId); + if (null == streamInfo) { + json.put("msg", "streamId涓嶅瓨鍦�"); + logger.warn("streamId涓嶅瓨鍦�!"); + return new ResponseEntity<String>(json.toString(), HttpStatus.BAD_REQUEST); + } + setCseq(streamId); + Device device = storager.queryVideoDevice(streamInfo.getDeviceID()); + cmder.playPauseCmd(device, streamInfo); + json.put("msg", "ok"); + return new ResponseEntity<String>(json.toString(), HttpStatus.OK); + } + + @ApiOperation("鍥炴斁鎭㈠") + @ApiImplicitParams({ + @ApiImplicitParam(name = "streamId", value = "鍥炴斁娴両D", dataTypeClass = String.class), + }) + @GetMapping("/resume/{streamId}") + public ResponseEntity<String> playResume(@PathVariable String streamId) { + logger.info("playResume: "+streamId); + JSONObject json = new JSONObject(); + StreamInfo streamInfo = redisCatchStorage.queryPlaybackByStreamId(streamId); + if (null == streamInfo) { + json.put("msg", "streamId涓嶅瓨鍦�"); + logger.warn("streamId涓嶅瓨鍦�!"); + return new ResponseEntity<String>(json.toString(), HttpStatus.BAD_REQUEST); + } + setCseq(streamId); + Device device = storager.queryVideoDevice(streamInfo.getDeviceID()); + cmder.playResumeCmd(device, streamInfo); + json.put("msg", "ok"); + return new ResponseEntity<String>(json.toString(), HttpStatus.OK); + } + + @ApiOperation("鍥炴斁鎷栧姩鎾斁") + @ApiImplicitParams({ + @ApiImplicitParam(name = "streamId", value = "鍥炴斁娴両D", dataTypeClass = String.class), + @ApiImplicitParam(name = "seekTime", value = "鎷栧姩鍋忕Щ閲忥紝鍗曚綅s", dataTypeClass = Long.class), + }) + @GetMapping("/seek/{streamId}/{seekTime}") + public ResponseEntity<String> playSeek(@PathVariable String streamId, @PathVariable long seekTime) { + logger.info("playSeek: "+streamId+", "+seekTime); + JSONObject json = new JSONObject(); + StreamInfo streamInfo = redisCatchStorage.queryPlaybackByStreamId(streamId); + if (null == streamInfo) { + json.put("msg", "streamId涓嶅瓨鍦�"); + logger.warn("streamId涓嶅瓨鍦�!"); + return new ResponseEntity<String>(json.toString(), HttpStatus.BAD_REQUEST); + } + setCseq(streamId); + Device device = storager.queryVideoDevice(streamInfo.getDeviceID()); + cmder.playSeekCmd(device, streamInfo, seekTime); + json.put("msg", "ok"); + return new ResponseEntity<String>(json.toString(), HttpStatus.OK); + } + + @ApiOperation("鍥炴斁鍊嶉�熸挱鏀�") + @ApiImplicitParams({ + @ApiImplicitParam(name = "streamId", value = "鍥炴斁娴両D", dataTypeClass = String.class), + @ApiImplicitParam(name = "speed", value = "鍊嶉�� 1銆�2銆�4", dataTypeClass = String.class), + }) + @GetMapping("/speed/{streamId}/{speed}") + public ResponseEntity<String> playSpeed(@PathVariable String streamId, @PathVariable String speed) { + logger.info("playSpeed: "+streamId+", "+speed); + JSONObject json = new JSONObject(); + StreamInfo streamInfo = redisCatchStorage.queryPlaybackByStreamId(streamId); + if (null == streamInfo) { + json.put("msg", "streamId涓嶅瓨鍦�"); + logger.warn("streamId涓嶅瓨鍦�!"); + return new ResponseEntity<String>(json.toString(), HttpStatus.BAD_REQUEST); + } + setCseq(streamId); + Device device = storager.queryVideoDevice(streamInfo.getDeviceID()); + cmder.playSpeedCmd(device, streamInfo, speed); + json.put("msg", "ok"); + return new ResponseEntity<String>(json.toString(), HttpStatus.OK); + } + + public void setCseq(String streamId) { + if (InfoCseqCache.CSEQCACHE.containsKey(streamId)) { + InfoCseqCache.CSEQCACHE.put(streamId, InfoCseqCache.CSEQCACHE.get(streamId) + 1); + } else { + InfoCseqCache.CSEQCACHE.put(streamId, 2L); + } + } } -- Gitblit v1.8.0