From 33b51c40ddd9750a19b2c6a6618fb22386f87cd7 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期五, 13 十一月 2020 18:12:21 +0800 Subject: [PATCH] 增加强制不查询编码信息配置 --- src/main/java/com/genersoft/iot/vmp/vmanager/play/PlayController.java | 116 ++++++++++++++++++++++++++++++++++++---------------------- 1 files changed, 72 insertions(+), 44 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/play/PlayController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/play/PlayController.java index 134e692..c9b2d34 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/play/PlayController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/play/PlayController.java @@ -26,32 +26,38 @@ @RestController @RequestMapping("/api") public class PlayController { - + private final static Logger logger = LoggerFactory.getLogger(PlayController.class); - + @Autowired private SIPCommander cmder; - + @Autowired private IVideoManagerStorager storager; @Autowired private ZLMRESTfulUtils zlmresTfulUtils; - + + @Value("${media.closeWaitRTPInfo}") + private boolean closeWaitRTPInfo; + @GetMapping("/play/{deviceId}/{channelId}") - public ResponseEntity<String> play(@PathVariable String deviceId,@PathVariable String channelId){ - + public ResponseEntity<String> play(@PathVariable String deviceId, @PathVariable String channelId, + Integer getEncoding) { + + if (getEncoding == null) getEncoding = 0; + getEncoding = closeWaitRTPInfo ? 0: getEncoding; Device device = storager.queryVideoDevice(deviceId); StreamInfo streamInfo = storager.queryPlayByDevice(deviceId, channelId); if (streamInfo == null) { streamInfo = cmder.playStreamCmd(device, channelId); - }else { + } else { String streamId = String.format("%08x", Integer.parseInt(streamInfo.getSsrc())).toUpperCase(); JSONObject rtpInfo = zlmresTfulUtils.getRtpInfo(streamId); if (rtpInfo.getBoolean("exist")) { - return new ResponseEntity<String>(JSON.toJSONString(streamInfo),HttpStatus.OK); - }else { + return new ResponseEntity<String>(JSON.toJSONString(streamInfo), HttpStatus.OK); + } else { storager.stopPlay(streamInfo); streamInfo = cmder.playStreamCmd(device, channelId); } @@ -60,67 +66,89 @@ String streamId = String.format("%08x", Integer.parseInt(streamInfo.getSsrc())).toUpperCase(); // 绛夊緟鎺ㄦ祦, TODO 榛樿瓒呮椂30s boolean lockFlag = true; + boolean rtpPushed = false; long startTime = System.currentTimeMillis(); + JSONObject rtpInfo = null; - while (lockFlag) { - try { - if (System.currentTimeMillis() - startTime > 30 * 1000) { - storager.stopPlay(streamInfo); - return new ResponseEntity<String>("timeout",HttpStatus.OK); - }else { - streamInfo = storager.queryPlayByDevice(deviceId, channelId); - JSONObject rtpInfo = zlmresTfulUtils.getRtpInfo(streamId); - if (rtpInfo != null && rtpInfo.getBoolean("exist") && streamInfo.getFlv() != null){ - JSONObject mediaInfo = zlmresTfulUtils.getMediaInfo("rtp", "rtmp", streamId); - if (mediaInfo.getInteger("code") == 0 && mediaInfo.getBoolean("online")) { - lockFlag = false; - JSONArray tracks = mediaInfo.getJSONArray("tracks"); - streamInfo.setTracks(tracks); - storager.startPlay(streamInfo); - }else { - + if (getEncoding == 1) { + while (lockFlag) { + try { + if (System.currentTimeMillis() - startTime > 60 * 1000) { + storager.stopPlay(streamInfo); + logger.info("鎾斁绛夊緟瓒呮椂"); + return new ResponseEntity<String>("timeout", HttpStatus.OK); + } else { + streamInfo = storager.queryPlayByDevice(deviceId, channelId); + if (!rtpPushed) { + logger.info("鏌ヨRTP鎺ㄦ祦淇℃伅..."); + rtpInfo = zlmresTfulUtils.getRtpInfo(streamId); } - }else { - Thread.sleep(2000); - continue; - }; + if (rtpInfo != null && rtpInfo.getBoolean("exist") && streamInfo != null + && streamInfo.getFlv() != null) { + logger.info("鏌ヨ娴佺紪鐮佷俊鎭細" + streamInfo.getFlv()); + rtpPushed = true; + Thread.sleep(2000); + JSONObject mediaInfo = zlmresTfulUtils.getMediaInfo("rtp", "rtmp", streamId); + if (mediaInfo.getInteger("code") == 0 && mediaInfo.getBoolean("online")) { + lockFlag = false; + logger.info("娴佺紪鐮佷俊鎭凡鑾峰彇"); + JSONArray tracks = mediaInfo.getJSONArray("tracks"); + streamInfo.setTracks(tracks); + storager.startPlay(streamInfo); + } else { + logger.info("娴佺紪鐮佷俊鎭湭鑾峰彇锛�2绉掑悗閲嶈瘯..."); + } + } else { + Thread.sleep(2000); + continue; + } + } + } catch (InterruptedException e) { + e.printStackTrace(); } - } catch (InterruptedException e) { - e.printStackTrace(); } + } else { + String flv = storager.getMediaInfo().getWanIp() + ":" + storager.getMediaInfo().getHttpPort() + "/rtp/" + + streamId + ".flv"; + streamInfo.setFlv("http://" + flv); + streamInfo.setWs_flv("ws://" + flv); + storager.startPlay(streamInfo); } if (logger.isDebugEnabled()) { - logger.debug(String.format("璁惧棰勮 API璋冪敤锛宒eviceId锛�%s 锛宑hannelId锛�%s",deviceId, channelId)); - logger.debug("璁惧棰勮 API璋冪敤锛宻src锛�"+streamInfo.getSsrc()+",ZLMedia streamId:"+Integer.toHexString(Integer.parseInt(streamInfo.getSsrc()))); + logger.debug(String.format("璁惧棰勮 API璋冪敤锛宒eviceId锛�%s 锛宑hannelId锛�%s", deviceId, channelId)); + logger.debug("璁惧棰勮 API璋冪敤锛宻src锛�" + streamInfo.getSsrc() + ",ZLMedia streamId:" + + Integer.toHexString(Integer.parseInt(streamInfo.getSsrc()))); } - - if(streamInfo!=null) { - return new ResponseEntity<String>(JSON.toJSONString(streamInfo),HttpStatus.OK); + + if (streamInfo != null) { + return new ResponseEntity<String>(JSON.toJSONString(streamInfo), HttpStatus.OK); } else { logger.warn("璁惧棰勮API璋冪敤澶辫触锛�"); return new ResponseEntity<String>(HttpStatus.INTERNAL_SERVER_ERROR); } } - + @PostMapping("/play/{ssrc}/stop") - public ResponseEntity<String> playStop(@PathVariable String ssrc){ - + public ResponseEntity<String> playStop(@PathVariable String ssrc) { + cmder.streamByeCmd(ssrc); StreamInfo streamInfo = storager.queryPlayBySSRC(ssrc); - if (streamInfo == null) return new ResponseEntity<String>(HttpStatus.PAYMENT_REQUIRED); + if (streamInfo == null) + return new ResponseEntity<String>(HttpStatus.PAYMENT_REQUIRED); storager.stopPlay(streamInfo); if (logger.isDebugEnabled()) { logger.debug(String.format("璁惧棰勮鍋滄API璋冪敤锛宻src锛�%s", ssrc)); } - - if(ssrc!=null) { + + if (ssrc != null) { JSONObject json = new JSONObject(); json.put("ssrc", ssrc); - return new ResponseEntity<String>(json.toString(),HttpStatus.OK); + return new ResponseEntity<String>(json.toString(), HttpStatus.OK); } else { logger.warn("璁惧棰勮鍋滄API璋冪敤澶辫触锛�"); return new ResponseEntity<String>(HttpStatus.INTERNAL_SERVER_ERROR); } } } + -- Gitblit v1.8.0