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

优化--直播接口流程结束异步处理截图操作,提高接口响应速度和并发能力
pull/578/head
648540858 2022-08-09 17:34:36 +08:00 committed by GitHub
commit eb177a6742
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 22 additions and 14 deletions

View File

@ -11,8 +11,10 @@ import javax.sip.ResponseEvent;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.context.request.async.DeferredResult; import org.springframework.web.context.request.async.DeferredResult;
@ -104,6 +106,10 @@ public class PlayServiceImpl implements IPlayService {
private ZLMHttpHookSubscribe subscribe; private ZLMHttpHookSubscribe subscribe;
@Qualifier("taskExecutor")
@Autowired
private ThreadPoolTaskExecutor taskExecutor;
@Override @Override
@ -135,21 +141,23 @@ public class PlayServiceImpl implements IPlayService {
result.onCompletion(()->{ result.onCompletion(()->{
// 点播结束时调用截图接口 // 点播结束时调用截图接口
// TODO 应该在上流时调用更好,结束也可能是错误结束 taskExecutor.execute(()->{
String path = "snap"; // TODO 应该在上流时调用更好,结束也可能是错误结束
String fileName = deviceId + "_" + channelId + ".jpg"; String path = "snap";
ResponseEntity responseEntity = (ResponseEntity)result.getResult(); String fileName = deviceId + "_" + channelId + ".jpg";
if (responseEntity != null && responseEntity.getStatusCode() == HttpStatus.OK) { ResponseEntity responseEntity = (ResponseEntity)result.getResult();
WVPResult wvpResult = (WVPResult)responseEntity.getBody(); if (responseEntity != null && responseEntity.getStatusCode() == HttpStatus.OK) {
if (Objects.requireNonNull(wvpResult).getCode() == 0) { WVPResult wvpResult = (WVPResult)responseEntity.getBody();
StreamInfo streamInfoForSuccess = (StreamInfo)wvpResult.getData(); if (Objects.requireNonNull(wvpResult).getCode() == 0) {
MediaServerItem mediaInfo = mediaServerService.getOne(streamInfoForSuccess.getMediaServerId()); StreamInfo streamInfoForSuccess = (StreamInfo)wvpResult.getData();
String streamUrl = streamInfoForSuccess.getFmp4(); MediaServerItem mediaInfo = mediaServerService.getOne(streamInfoForSuccess.getMediaServerId());
// 请求截图 String streamUrl = streamInfoForSuccess.getFmp4();
logger.info("[请求截图]: " + fileName); // 请求截图
zlmresTfulUtils.getSnap(mediaInfo, streamUrl, 15, 1, path, fileName); logger.info("[请求截图]: " + fileName);
zlmresTfulUtils.getSnap(mediaInfo, streamUrl, 15, 1, path, fileName);
}
} }
} });
}); });
if (streamInfo != null) { if (streamInfo != null) {
String streamId = streamInfo.getStream(); String streamId = streamInfo.getStream();