648540858
2021-11-24 08c45876df5121b5b750798bae3e658f0ec575c6
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,103 @@
         return new ResponseEntity<String>(HttpStatus.INTERNAL_SERVER_ERROR);
      }
   }
   @ApiOperation("回放暂停")
   @ApiImplicitParams({
         @ApiImplicitParam(name = "streamId", value = "回放流ID", 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 = "回放流ID", 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 = "回放流ID", 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 = "回放流ID", dataTypeClass = String.class),
         @ApiImplicitParam(name = "speed", value = "倍速0.25 0.5 1、2、4", dataTypeClass = Double.class),
   })
   @GetMapping("/speed/{streamId}/{speed}")
   public ResponseEntity<String> playSpeed(@PathVariable String streamId, @PathVariable Double 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);
      }
      if(speed != 0.25 && speed != 0.5 && speed != 1 && speed != 2.0 && speed != 4.0) {
         json.put("msg", "不支持的speed(0.25 0.5 1、2、4)");
         logger.warn("不支持的speed: " + speed);
         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);
      }
   }
}