From 5749cdd16cd79890c659775de9b1cb7e7ffda5b1 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期四, 29 十月 2020 10:45:23 +0800
Subject: [PATCH] Merge pull request #6 from lawrencehj/master

---
 src/main/java/com/genersoft/iot/vmp/vmanager/play/PlayController.java |   72 ++++++++++++++++++++----------------
 1 files changed, 40 insertions(+), 32 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 64fb8f8..00f268c 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,32 @@
 @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;
-	
+
 	@GetMapping("/play/{deviceId}/{channelId}")
-	public ResponseEntity<String> play(@PathVariable String deviceId,@PathVariable String channelId){
-		
+	public ResponseEntity<String> play(@PathVariable String deviceId, @PathVariable String channelId) {
+
 		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,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 {
+					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 != null && streamInfo.getFlv() != null){
-						logger.info("RTP宸叉帹娴侊紝鏌ヨ缂栫爜淇℃伅锛�"+streamInfo.getFlv());
+					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("濯掍綋缂栫爜淇℃伅宸茶幏鍙�");
+							logger.info("娴佺紪鐮佷俊鎭凡鑾峰彇");
 							JSONArray tracks = mediaInfo.getJSONArray("tracks");
 							streamInfo.setTracks(tracks);
 							storager.startPlay(streamInfo);
-						}else {
-							logger.info("濯掍綋缂栫爜淇℃伅鏈幏鍙栵紝2绉掑悗閲嶈瘯...");
+						} else {
+							logger.info("娴佺紪鐮佷俊鎭湭鑾峰彇锛�2绉掑悗閲嶈瘯...");
 						}
-					}else {
+					} else {
 						Thread.sleep(2000);
 						continue;
-					};
+					}
 				}
 			} catch (InterruptedException e) {
 				e.printStackTrace();
@@ -95,33 +101,35 @@
 		}
 
 		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