Commit eb177a67424c0f83ab02abe338dbc3cd0d49cd62

Authored by 648540858
Committed by GitHub
2 parents a88518f8 871b4e53

Merge pull request #570 from TristingChen/optimize--play-complete

优化--直播接口流程结束异步处理截图操作,提高接口响应速度和并发能力
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
@@ -11,8 +11,10 @@ import javax.sip.ResponseEvent; @@ -11,8 +11,10 @@ import javax.sip.ResponseEvent;
11 import org.slf4j.Logger; 11 import org.slf4j.Logger;
12 import org.slf4j.LoggerFactory; 12 import org.slf4j.LoggerFactory;
13 import org.springframework.beans.factory.annotation.Autowired; 13 import org.springframework.beans.factory.annotation.Autowired;
  14 +import org.springframework.beans.factory.annotation.Qualifier;
14 import org.springframework.http.HttpStatus; 15 import org.springframework.http.HttpStatus;
15 import org.springframework.http.ResponseEntity; 16 import org.springframework.http.ResponseEntity;
  17 +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
16 import org.springframework.stereotype.Service; 18 import org.springframework.stereotype.Service;
17 import org.springframework.web.context.request.async.DeferredResult; 19 import org.springframework.web.context.request.async.DeferredResult;
18 20
@@ -104,6 +106,10 @@ public class PlayServiceImpl implements IPlayService { @@ -104,6 +106,10 @@ public class PlayServiceImpl implements IPlayService {
104 private ZLMHttpHookSubscribe subscribe; 106 private ZLMHttpHookSubscribe subscribe;
105 107
106 108
  109 + @Qualifier("taskExecutor")
  110 + @Autowired
  111 + private ThreadPoolTaskExecutor taskExecutor;
  112 +
107 113
108 114
109 @Override 115 @Override
@@ -135,21 +141,23 @@ public class PlayServiceImpl implements IPlayService { @@ -135,21 +141,23 @@ public class PlayServiceImpl implements IPlayService {
135 141
136 result.onCompletion(()->{ 142 result.onCompletion(()->{
137 // 点播结束时调用截图接口 143 // 点播结束时调用截图接口
138 - // TODO 应该在上流时调用更好,结束也可能是错误结束  
139 - String path = "snap";  
140 - String fileName = deviceId + "_" + channelId + ".jpg";  
141 - ResponseEntity responseEntity = (ResponseEntity)result.getResult();  
142 - if (responseEntity != null && responseEntity.getStatusCode() == HttpStatus.OK) {  
143 - WVPResult wvpResult = (WVPResult)responseEntity.getBody();  
144 - if (Objects.requireNonNull(wvpResult).getCode() == 0) {  
145 - StreamInfo streamInfoForSuccess = (StreamInfo)wvpResult.getData();  
146 - MediaServerItem mediaInfo = mediaServerService.getOne(streamInfoForSuccess.getMediaServerId());  
147 - String streamUrl = streamInfoForSuccess.getFmp4();  
148 - // 请求截图  
149 - logger.info("[请求截图]: " + fileName);  
150 - zlmresTfulUtils.getSnap(mediaInfo, streamUrl, 15, 1, path, fileName); 144 + taskExecutor.execute(()->{
  145 + // TODO 应该在上流时调用更好,结束也可能是错误结束
  146 + String path = "snap";
  147 + String fileName = deviceId + "_" + channelId + ".jpg";
  148 + ResponseEntity responseEntity = (ResponseEntity)result.getResult();
  149 + if (responseEntity != null && responseEntity.getStatusCode() == HttpStatus.OK) {
  150 + WVPResult wvpResult = (WVPResult)responseEntity.getBody();
  151 + if (Objects.requireNonNull(wvpResult).getCode() == 0) {
  152 + StreamInfo streamInfoForSuccess = (StreamInfo)wvpResult.getData();
  153 + MediaServerItem mediaInfo = mediaServerService.getOne(streamInfoForSuccess.getMediaServerId());
  154 + String streamUrl = streamInfoForSuccess.getFmp4();
  155 + // 请求截图
  156 + logger.info("[请求截图]: " + fileName);
  157 + zlmresTfulUtils.getSnap(mediaInfo, streamUrl, 15, 1, path, fileName);
  158 + }
151 } 159 }
152 - } 160 + });
153 }); 161 });
154 if (streamInfo != null) { 162 if (streamInfo != null) {
155 String streamId = streamInfo.getStream(); 163 String streamId = streamInfo.getStream();