From 11e8fad2e981b3dca22dad4048246d012ce326b7 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期二, 22 六月 2021 13:13:31 +0800 Subject: [PATCH] Merge pull request #113 from lawrencehj/wvp-28181-2.0 --- src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java | 84 ++++++++++++++++++++++++++++++++++++----- 1 files changed, 73 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java index 42c10a7..320cc26 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.genersoft.iot.vmp.common.StreamInfo; +import com.genersoft.iot.vmp.conf.UserSetup; import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; import com.genersoft.iot.vmp.gb28181.event.SipSubscribe; @@ -15,6 +16,7 @@ import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IVideoManagerStorager; +import com.genersoft.iot.vmp.vmanager.bean.WVPResult; import com.genersoft.iot.vmp.vmanager.gb28181.play.bean.PlayResult; import com.genersoft.iot.vmp.service.IMediaService; import com.genersoft.iot.vmp.service.IPlayService; @@ -22,17 +24,18 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; +import org.springframework.util.ResourceUtils; import org.springframework.web.context.request.async.DeferredResult; import javax.sip.ClientTransaction; -import javax.sip.Dialog; -import javax.sip.header.CallIdHeader; import javax.sip.message.Response; +import java.io.FileNotFoundException; import java.util.UUID; +@SuppressWarnings(value = {"rawtypes", "unchecked"}) @Service public class PlayServiceImpl implements IPlayService { @@ -59,8 +62,8 @@ @Autowired private VideoStreamSessionManager streamSession; - @Value("${userSettings.playTimeout}") - private long playTimeout; + @Autowired + private UserSetup userSetup; @Override @@ -71,7 +74,7 @@ playResult.setDevice(device); UUID uuid = UUID.randomUUID(); playResult.setUuid(uuid.toString()); - DeferredResult<ResponseEntity<String>> result = new DeferredResult<ResponseEntity<String>>(playTimeout); + DeferredResult<ResponseEntity<String>> result = new DeferredResult<ResponseEntity<String>>(userSetup.getPlayTimeout()); playResult.setResult(result); // 褰曞儚鏌ヨ浠hannelId浣滀负deviceId鏌ヨ resultHolder.put(DeferredResultHolder.CALLBACK_CMD_PlAY + uuid, result); @@ -82,8 +85,44 @@ cmder.closeRTPServer(playResult.getDevice(), channelId); RequestMessage msg = new RequestMessage(); msg.setId(DeferredResultHolder.CALLBACK_CMD_PlAY + playResult.getUuid()); - msg.setData("Timeout"); + WVPResult wvpResult = new WVPResult(); + wvpResult.setCode(-1); + wvpResult.setMsg("Timeout"); + msg.setData(wvpResult); resultHolder.invokeResult(msg); + }); + result.onCompletion(()->{ + // 鐐规挱缁撴潫鏃惰皟鐢ㄦ埅鍥炬帴鍙� + try { + String classPath = ResourceUtils.getURL("classpath:").getPath(); + // System.out.println(classPath); + String path = classPath + "static/static/snap/"; + if(classPath.contains("jar")) { + classPath = classPath.substring(0, classPath.lastIndexOf(".")); + classPath = classPath.substring(0, classPath.lastIndexOf("/")); + path = classPath + "/snap/"; + } + if (path.startsWith("file:")) { + path = path.substring(path.indexOf(":") + 1, path.length()); + } + if(System.getProperty("os.name").contains("indows")) { + path = path.substring(1, path.length()); + } + String fileName = deviceId + "_" + channelId + ".jpg"; + ResponseEntity responseEntity = (ResponseEntity)result.getResult(); + if (responseEntity != null && responseEntity.getStatusCode() == HttpStatus.OK) { + WVPResult wvpResult = (WVPResult)responseEntity.getBody(); + if (wvpResult.getCode() == 0) { + StreamInfo streamInfoForSuccess = (StreamInfo)wvpResult.getData(); + String flvUrl = streamInfoForSuccess.getFlv(); + // 璇锋眰鎴浘 + zlmresTfulUtils.getSnap(flvUrl, 5, 1, path, fileName); + } + } + System.out.println(path); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } }); if (streamInfo == null) { // 鍙戦�佺偣鎾秷鎭� @@ -98,7 +137,10 @@ msg.setId(DeferredResultHolder.CALLBACK_CMD_PlAY + uuid); Response response = event.getResponse(); cmder.closeRTPServer(playResult.getDevice(), channelId); - msg.setData(String.format("鐐规挱澶辫触锛� 閿欒鐮侊細 %s, %s", response.getStatusCode(), response.getReasonPhrase())); + WVPResult wvpResult = new WVPResult(); + wvpResult.setCode(-1); + wvpResult.setMsg(String.format("鐐规挱澶辫触锛� 閿欒鐮侊細 %s, %s", response.getStatusCode(), response.getReasonPhrase())); + msg.setData(wvpResult); resultHolder.invokeResult(msg); if (errorEvent != null) { errorEvent.response(event); @@ -109,7 +151,10 @@ if (streamId == null) { RequestMessage msg = new RequestMessage(); msg.setId(DeferredResultHolder.CALLBACK_CMD_PlAY + uuid); - msg.setData(String.format("鐐规挱澶辫触锛� redis缂撳瓨streamId绛変簬null")); + WVPResult wvpResult = new WVPResult(); + wvpResult.setCode(-1); + wvpResult.setMsg(String.format("鐐规挱澶辫触锛� redis缂撳瓨streamId绛変簬null")); + msg.setData(wvpResult); resultHolder.invokeResult(msg); return playResult; } @@ -117,7 +162,13 @@ if (rtpInfo != null && rtpInfo.getBoolean("exist")) { RequestMessage msg = new RequestMessage(); msg.setId(DeferredResultHolder.CALLBACK_CMD_PlAY + uuid); - msg.setData(JSON.toJSONString(streamInfo)); + + WVPResult wvpResult = new WVPResult(); + wvpResult.setCode(0); + wvpResult.setMsg("success"); + wvpResult.setData(streamInfo); + msg.setData(wvpResult); + resultHolder.invokeResult(msg); if (hookEvent != null) { hookEvent.response(JSONObject.parseObject(JSON.toJSONString(streamInfo))); @@ -133,7 +184,11 @@ RequestMessage msg = new RequestMessage(); msg.setId(DeferredResultHolder.CALLBACK_CMD_PlAY + uuid); Response response = event.getResponse(); - msg.setData(String.format("鐐规挱澶辫触锛� 閿欒鐮侊細 %s, %s", response.getStatusCode(), response.getReasonPhrase())); + + WVPResult wvpResult = new WVPResult(); + wvpResult.setCode(-1); + wvpResult.setMsg(String.format("鐐规挱澶辫触锛� 閿欒鐮侊細 %s, %s", response.getStatusCode(), response.getReasonPhrase())); + msg.setData(wvpResult); resultHolder.invokeResult(msg); }); } @@ -163,6 +218,13 @@ streamInfo.setTransactionInfo(transactionInfo); redisCatchStorage.startPlay(streamInfo); msg.setData(JSON.toJSONString(streamInfo)); + + WVPResult wvpResult = new WVPResult(); + wvpResult.setCode(0); + wvpResult.setMsg("sucess"); + wvpResult.setData(streamInfo); + msg.setData(wvpResult); + resultHolder.invokeResult(msg); } else { logger.warn("璁惧棰勮API璋冪敤澶辫触锛�"); -- Gitblit v1.8.0