src/main/java/com/genersoft/iot/vmp/vmanager/play/PlayController.java
@@ -60,34 +60,40 @@ 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) { if (System.currentTimeMillis() - startTime > 60 * 1000) { storager.stopPlay(streamInfo); logger.info("播放等待超时"); return new ResponseEntity<String>("timeout",HttpStatus.OK); }else { streamInfo = storager.queryPlayByDevice(deviceId, channelId); JSONObject rtpInfo = zlmresTfulUtils.getRtpInfo(streamId); if (!rtpPushed) { logger.info("查询RTP推流信息..."); rtpInfo = zlmresTfulUtils.getRtpInfo(streamId); } if (rtpInfo != null && rtpInfo.getBoolean("exist") && streamInfo != null && streamInfo.getFlv() != null){ logger.info("RTP已推流,查询编码信息:"+streamInfo.getFlv()); 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("媒体编码信息已获取"); logger.info("流编码信息已获取"); JSONArray tracks = mediaInfo.getJSONArray("tracks"); streamInfo.setTracks(tracks); storager.startPlay(streamInfo); }else { logger.info("媒体编码信息未获取,2秒后重试..."); logger.info("流编码信息未获取,2秒后重试..."); } }else { Thread.sleep(2000); continue; }; } } } catch (InterruptedException e) { e.printStackTrace(); @@ -96,7 +102,8 @@ if (logger.isDebugEnabled()) { logger.debug(String.format("设备预览 API调用,deviceId:%s ,channelId:%s",deviceId, channelId)); logger.debug("设备预览 API调用,ssrc:"+streamInfo.getSsrc()+",ZLMedia streamId:"+Integer.toHexString(Integer.parseInt(streamInfo.getSsrc()))); logger.debug("设备预览 API调用,ssrc:" + streamInfo.getSsrc() + ",ZLMedia streamId:" + Integer.toHexString(Integer.parseInt(streamInfo.getSsrc()))); } if(streamInfo!=null) { @@ -112,7 +119,8 @@ 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调用,ssrc:%s", ssrc)); src/main/java/com/genersoft/iot/vmp/vmanager/playback/PlaybackController.java
@@ -52,7 +52,7 @@ } Device device = storager.queryVideoDevice(deviceId); StreamInfo streamInfo = storager.queryPlayBlackByDevice(deviceId, channelId); StreamInfo streamInfo = storager.queryPlaybackByDevice(deviceId, channelId); if (streamInfo != null) { cmder.streamByeCmd(streamInfo.getSsrc()); @@ -64,7 +64,7 @@ // if (rtpInfo.getBoolean("exist")) { // return new ResponseEntity<String>(JSON.toJSONString(streamInfo),HttpStatus.OK); // }else { // storager.stopPlayBlack(streamInfo); // storager.stopPlayback(streamInfo); // streamInfo = cmder.playbackStreamCmd(device, channelId, startTime, endTime); // } // } @@ -77,29 +77,40 @@ } // 等待推流, TODO 默认超时15s boolean lockFlag = true; boolean rtpPushed = false; long lockStartTime = System.currentTimeMillis(); JSONObject rtpInfo = null; while (lockFlag) { try { if (System.currentTimeMillis() - lockStartTime > 75 * 1000) { storager.stopPlayBlack(streamInfo); storager.stopPlayback(streamInfo); logger.info("播放等待超时"); return new ResponseEntity<String>("timeout",HttpStatus.OK); }else { streamInfo = storager.queryPlayBlackByDevice(deviceId, channelId); JSONObject rtpInfo = zlmresTfulUtils.getRtpInfo(streamId); if (rtpInfo != null && rtpInfo.getBoolean("exist") && streamInfo.getFlv() != null){ streamInfo = storager.queryPlaybackByDevice(deviceId, channelId); if (!rtpPushed) { logger.info("查询RTP推流信息..."); rtpInfo = zlmresTfulUtils.getRtpInfo(streamId); } 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.startPlayBlack(streamInfo); storager.startPlayback(streamInfo); }else { logger.info("流编码信息未获取,2秒后重试..."); } }else { Thread.sleep(2000); continue; }; } } } catch (InterruptedException e) { e.printStackTrace();