From 4a41bc6d92447db0ec2d50358c39de3d8aa2e889 Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期六, 12 十月 2024 16:36:10 +0800 Subject: [PATCH] 工单取图片 --- src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java | 4 src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java | 615 +++++++++++++++++++++++++++++++------------------------ 2 files changed, 350 insertions(+), 269 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java index 5d5f1c3..da5749c 100755 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java @@ -29,11 +29,11 @@ void run(JSONObject response); } - private OkHttpClient getClient(){ + public OkHttpClient getClient(){ return getClient(null); } - private OkHttpClient getClient(Integer readTimeOut){ + public OkHttpClient getClient(Integer readTimeOut){ if (client == null) { if (readTimeOut == null) { readTimeOut = 10; diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java index 4103f6b..c436e16 100755 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java @@ -3,6 +3,7 @@ import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.fasterxml.jackson.databind.ObjectMapper; +import com.genersoft.iot.vmp.common.InviteInfo; import com.genersoft.iot.vmp.common.InviteSessionType; import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.conf.UserSetting; @@ -16,6 +17,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.service.IMediaServerService; +import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils; import com.genersoft.iot.vmp.service.IInviteStreamService; import com.genersoft.iot.vmp.service.IPlayService; import com.genersoft.iot.vmp.service.bean.InviteErrorCode; @@ -30,6 +32,10 @@ import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; +import okhttp3.HttpUrl; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; import org.bytedeco.javacv.FFmpegFrameGrabber; import org.bytedeco.javacv.Frame; import org.bytedeco.javacv.FrameGrabber; @@ -45,332 +51,407 @@ import org.springframework.web.context.request.async.DeferredResult; import javax.servlet.http.HttpServletRequest; -import java.net.MalformedURLException; -import java.net.URL; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.*; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; +import java.util.Map; import java.util.UUID; /** * @author lin */ -@Tag(name = "鍥芥爣璁惧鐐规挱") +@Tag(name = "鍥芥爣璁惧鐐规挱") @RestController @RequestMapping("/api/play") public class PlayController { - private final static Logger logger = LoggerFactory.getLogger(PlayController.class); + private final static Logger logger = LoggerFactory.getLogger(PlayController.class); - @Autowired - private SIPCommander cmder; + @Autowired + private SIPCommander cmder; + @Autowired + private ZLMRESTfulUtils zlmresTfulUtils; + @Autowired + private VideoStreamSessionManager streamSession; - @Autowired - private VideoStreamSessionManager streamSession; + @Autowired + private IVideoManagerStorage storager; - @Autowired - private IVideoManagerStorage storager; + @Autowired + private IInviteStreamService inviteStreamService; - @Autowired - private IInviteStreamService inviteStreamService; + @Autowired + private DeferredResultHolder resultHolder; - @Autowired - private DeferredResultHolder resultHolder; + @Autowired + private IPlayService playService; - @Autowired - private IPlayService playService; + @Autowired + private IMediaServerService mediaServerService; - @Autowired - private IMediaServerService mediaServerService; + @Autowired + private UserSetting userSetting; - @Autowired - private UserSetting userSetting; + private final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); - private final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + @Operation(summary = "寮�濮嬬偣鎾�", security = @SecurityRequirement(name = JwtUtils.HEADER)) + @Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true) + @Parameter(name = "channelId", description = "閫氶亾鍥芥爣缂栧彿", required = true) + @GetMapping("/start/{deviceId}/{channelId}") + public DeferredResult<WVPResult<StreamContent>> play(HttpServletRequest request, @PathVariable String deviceId, + @PathVariable String channelId) { - @Operation(summary = "寮�濮嬬偣鎾�", security = @SecurityRequirement(name = JwtUtils.HEADER)) - @Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true) - @Parameter(name = "channelId", description = "閫氶亾鍥芥爣缂栧彿", required = true) - @GetMapping("/start/{deviceId}/{channelId}") - public DeferredResult<WVPResult<StreamContent>> play(HttpServletRequest request, @PathVariable String deviceId, - @PathVariable String channelId) { + logger.info("[寮�濮嬬偣鎾璢 deviceId锛歿}, channelId锛歿}, ", deviceId, channelId); + // 鑾峰彇鍙敤鐨剒lm + Device device = storager.queryVideoDevice(deviceId); + MediaServer newMediaServerItem = playService.getNewMediaServerItem(device); - logger.info("[寮�濮嬬偣鎾璢 deviceId锛歿}, channelId锛歿}, ", deviceId, channelId); - // 鑾峰彇鍙敤鐨剒lm - Device device = storager.queryVideoDevice(deviceId); - MediaServer newMediaServerItem = playService.getNewMediaServerItem(device); + RequestMessage requestMessage = new RequestMessage(); + String key = DeferredResultHolder.CALLBACK_CMD_PLAY + deviceId + channelId; + requestMessage.setKey(key); + String uuid = UUID.randomUUID().toString(); + requestMessage.setId(uuid); + DeferredResult<WVPResult<StreamContent>> result = new DeferredResult<>(userSetting.getPlayTimeout().longValue()); - RequestMessage requestMessage = new RequestMessage(); - String key = DeferredResultHolder.CALLBACK_CMD_PLAY + deviceId + channelId; - requestMessage.setKey(key); - String uuid = UUID.randomUUID().toString(); - requestMessage.setId(uuid); - DeferredResult<WVPResult<StreamContent>> result = new DeferredResult<>(userSetting.getPlayTimeout().longValue()); + result.onTimeout(() -> { + logger.info("[鐐规挱绛夊緟瓒呮椂] deviceId锛歿}, channelId锛歿}, ", deviceId, channelId); + // 閲婃斁rtpserver + WVPResult<StreamInfo> wvpResult = new WVPResult<>(); + wvpResult.setCode(ErrorCode.ERROR100.getCode()); + wvpResult.setMsg("鐐规挱瓒呮椂"); + requestMessage.setData(wvpResult); + resultHolder.invokeAllResult(requestMessage); + inviteStreamService.removeInviteInfoByDeviceAndChannel(InviteSessionType.PLAY, deviceId, channelId); + storager.stopPlay(deviceId, channelId); + }); - result.onTimeout(()->{ - logger.info("[鐐规挱绛夊緟瓒呮椂] deviceId锛歿}, channelId锛歿}, ", deviceId, channelId); - // 閲婃斁rtpserver - WVPResult<StreamInfo> wvpResult = new WVPResult<>(); - wvpResult.setCode(ErrorCode.ERROR100.getCode()); - wvpResult.setMsg("鐐规挱瓒呮椂"); - requestMessage.setData(wvpResult); - resultHolder.invokeAllResult(requestMessage); - inviteStreamService.removeInviteInfoByDeviceAndChannel(InviteSessionType.PLAY, deviceId, channelId); - storager.stopPlay(deviceId, channelId); - }); + // 褰曞儚鏌ヨ浠hannelId浣滀负deviceId鏌ヨ + resultHolder.put(key, uuid, result); - // 褰曞儚鏌ヨ浠hannelId浣滀负deviceId鏌ヨ - resultHolder.put(key, uuid, result); + playService.play(newMediaServerItem, deviceId, channelId, null, (code, msg, data) -> { + WVPResult<StreamContent> wvpResult = new WVPResult<>(); + if (code == InviteErrorCode.SUCCESS.getCode()) { + wvpResult.setCode(ErrorCode.SUCCESS.getCode()); + wvpResult.setMsg(ErrorCode.SUCCESS.getMsg()); - playService.play(newMediaServerItem, deviceId, channelId, null, (code, msg, data) -> { - WVPResult<StreamContent> wvpResult = new WVPResult<>(); - if (code == InviteErrorCode.SUCCESS.getCode()) { - wvpResult.setCode(ErrorCode.SUCCESS.getCode()); - wvpResult.setMsg(ErrorCode.SUCCESS.getMsg()); - - if (data != null) { - StreamInfo streamInfo = (StreamInfo)data; - if (userSetting.getUseSourceIpAsStreamIp()) { - streamInfo=streamInfo.clone();//娣辨嫹璐� - String host; - try { - URL url=new URL(request.getRequestURL().toString()); - host=url.getHost(); - } catch (MalformedURLException e) { - host=request.getLocalAddr(); - } - streamInfo.channgeStreamIp(host); - } - if (!ObjectUtils.isEmpty(newMediaServerItem.getTranscodeSuffix()) && !"null".equalsIgnoreCase(newMediaServerItem.getTranscodeSuffix())) { - streamInfo.setStream(streamInfo.getStream() + "_" + newMediaServerItem.getTranscodeSuffix()); - } - wvpResult.setData(new StreamContent(streamInfo)); - }else { - wvpResult.setCode(code); - wvpResult.setMsg(msg); - } - }else { - wvpResult.setCode(code); - wvpResult.setMsg(msg); - } - requestMessage.setData(wvpResult); - // 姝ゅ蹇呴』閲婃斁鎵�鏈夎姹� - resultHolder.invokeAllResult(requestMessage); - }); - return result; - } + if (data != null) { + StreamInfo streamInfo = (StreamInfo) data; + if (userSetting.getUseSourceIpAsStreamIp()) { + streamInfo = streamInfo.clone();//娣辨嫹璐� + String host; + try { + URL url = new URL(request.getRequestURL().toString()); + host = url.getHost(); + } catch (MalformedURLException e) { + host = request.getLocalAddr(); + } + streamInfo.channgeStreamIp(host); + } + if (!ObjectUtils.isEmpty(newMediaServerItem.getTranscodeSuffix()) && !"null".equalsIgnoreCase(newMediaServerItem.getTranscodeSuffix())) { + streamInfo.setStream(streamInfo.getStream() + "_" + newMediaServerItem.getTranscodeSuffix()); + } + wvpResult.setData(new StreamContent(streamInfo)); + } else { + wvpResult.setCode(code); + wvpResult.setMsg(msg); + } + } else { + wvpResult.setCode(code); + wvpResult.setMsg(msg); + } + requestMessage.setData(wvpResult); + // 姝ゅ蹇呴』閲婃斁鎵�鏈夎姹� + resultHolder.invokeAllResult(requestMessage); + }); + return result; + } - @Operation(summary = "寮�濮嬬偣鎾苟杩斿洖鍥剧墖", security = @SecurityRequirement(name = JwtUtils.HEADER)) - @Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true) - @Parameter(name = "channelId", description = "閫氶亾鍥芥爣缂栧彿", required = true) - @GetMapping("/start/img/{deviceId}/{channelId}") - public DeferredResult<WVPResult<String>> playReturnImg(HttpServletRequest request, @PathVariable String deviceId, - @PathVariable String channelId) { + @Operation(summary = "寮�濮嬬偣鎾苟杩斿洖鍥剧墖", security = @SecurityRequirement(name = JwtUtils.HEADER)) + @Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true) + @Parameter(name = "channelId", description = "閫氶亾鍥芥爣缂栧彿", required = true) + @GetMapping("/start/img/{deviceId}/{channelId}") + public DeferredResult<WVPResult<String>> playReturnImg(HttpServletRequest request, @PathVariable String deviceId, + @PathVariable String channelId) throws IOException { + logger.info("[寮�濮嬬偣鎾璢 deviceId锛歿}, channelId锛歿}, ", deviceId, channelId); + DeferredResult<WVPResult<String>> result = new DeferredResult<>(20 * 1000L); + //宸茬粡瀛樺湪娴� + InviteInfo inviteInfo = inviteStreamService.getInviteInfoByDeviceAndChannel(InviteSessionType.PLAY, deviceId, channelId); + if (inviteInfo != null) { + logger.info("宸插瓨鍦ㄦ祦"); + if (inviteInfo.getStreamInfo() != null) { + // 宸插瓨鍦ㄧ嚎鐩存帴鎴浘 + MediaServer mediaServerItemInuse = mediaServerService.getOne(inviteInfo.getStreamInfo().getMediaServerId()); + String streamUrl; + if (mediaServerItemInuse.getRtspPort() != 0) { + streamUrl = String.format("rtsp://127.0.0.1:%s/%s/%s", mediaServerItemInuse.getRtspPort(), "rtp", inviteInfo.getStreamInfo().getStream()); + } else { + streamUrl = String.format("http://127.0.0.1:%s/%s/%s.live.mp4", mediaServerItemInuse.getHttpPort(), "rtp", inviteInfo.getStreamInfo().getStream()); + } + WVPResult<String> wvpResult = new WVPResult<>(); + String img = getImg(streamUrl); + wvpResult.setData(img); + wvpResult.setCode(ErrorCode.SUCCESS.getCode()); + wvpResult.setMsg(ErrorCode.SUCCESS.getMsg()); + result.setResult(wvpResult); + } + } else { + logger.info("鏈瓨鍦ㄦ祦"); + // 鑾峰彇鍙敤鐨剒lm + Device device = storager.queryVideoDevice(deviceId); + MediaServer newMediaServerItem = playService.getNewMediaServerItem(device); - DeferredResult<WVPResult<StreamContent>> play = this.play(request, deviceId, channelId); - Object resultStr = play.getResult(); - System.out.println("鑾峰彇缁撴灉锛�" + play); - System.out.println("鑾峰彇缁撴灉锛�" + resultStr); - WVPResult wvpResult = (WVPResult) resultStr; - WVPResult<String> result = new WVPResult<>(); - result.setData(this.getImg(wvpResult)); - result.setCode(wvpResult.getCode()); - result.setMsg(wvpResult.getMsg()); - DeferredResult<WVPResult<String>> r = new DeferredResult<>(userSetting.getPlayTimeout().longValue()); - r.setResult(result); - return r; - } + RequestMessage requestMessage = new RequestMessage(); + String key = DeferredResultHolder.CALLBACK_CMD_PLAY + deviceId + channelId; + requestMessage.setKey(key); + String uuid = UUID.randomUUID().toString(); + requestMessage.setId(uuid); + //20绉掑瓨娲� + result.onTimeout(() -> { + logger.info("[鐐规挱绛夊緟瓒呮椂] deviceId锛歿}, channelId锛歿}, ", deviceId, channelId); + // 閲婃斁rtpserver + WVPResult<StreamInfo> wvpResult = new WVPResult<>(); + wvpResult.setCode(ErrorCode.ERROR100.getCode()); + wvpResult.setMsg("鐐规挱瓒呮椂"); + requestMessage.setData(wvpResult); + resultHolder.invokeAllResult(requestMessage); + inviteStreamService.removeInviteInfoByDeviceAndChannel(InviteSessionType.PLAY, deviceId, channelId); + storager.stopPlay(deviceId, channelId); + }); - private String getImg(WVPResult<StreamContent> wvpResult) { - String imgUrl = null; - if (wvpResult.getCode() == 0) { - String rtspUrl = wvpResult.getData().getFmp4(); // 鍙杕p4鍦板潃 - if (StringUtils.hasText(rtspUrl)) { - System.out.println("鐩爣鍦板潃锛�" + rtspUrl); - FFmpegFrameGrabber grabber = null; - try { - grabber = new FFmpegFrameGrabber(rtspUrl); + // 褰曞儚鏌ヨ浠hannelId浣滀负deviceId鏌ヨ + resultHolder.put(key, uuid, result); + + playService.play(newMediaServerItem, deviceId, channelId, null, (code, msg, data) -> { + WVPResult<String> wvpResult = new WVPResult<>(); + if (code == InviteErrorCode.SUCCESS.getCode()) { + wvpResult.setCode(ErrorCode.SUCCESS.getCode()); + wvpResult.setMsg(ErrorCode.SUCCESS.getMsg()); + + if (data != null) { + StreamInfo streamInfo = (StreamInfo) data; + if (userSetting.getUseSourceIpAsStreamIp()) { + streamInfo = streamInfo.clone();//娣辨嫹璐� + String host; + try { + URL url = new URL(request.getRequestURL().toString()); + host = url.getHost(); + } catch (MalformedURLException e) { + host = request.getLocalAddr(); + } + streamInfo.channgeStreamIp(host); + } + if (!ObjectUtils.isEmpty(newMediaServerItem.getTranscodeSuffix()) && !"null".equalsIgnoreCase(newMediaServerItem.getTranscodeSuffix())) { + streamInfo.setStream(streamInfo.getStream() + "_" + newMediaServerItem.getTranscodeSuffix()); + } + StreamContent streamContent = new StreamContent(streamInfo); + String rtspUrl = streamContent.getFmp4(); // 鍙杕p4鍦板潃 + String img = getImg(rtspUrl); + wvpResult.setData(img); + } else { + wvpResult.setCode(code); + wvpResult.setMsg(msg); + } + } else { + wvpResult.setCode(code); + wvpResult.setMsg(msg); + } + requestMessage.setData(wvpResult); + // 姝ゅ蹇呴』閲婃斁鎵�鏈夎姹� + resultHolder.invokeAllResult(requestMessage); + }); + } + return result; + } + + private String getImg(String rtspUrl) { + String imgUrl = null; + if (StringUtils.hasText(rtspUrl)) { + System.out.println("鐩爣鍦板潃锛�" + rtspUrl); + FFmpegFrameGrabber grabber = null; + try { + grabber = new FFmpegFrameGrabber(rtspUrl); // grabber.setOption("rtsp_transport", "tcp"); // 浣跨敤tcp鐨勬柟寮忥紝涓嶇劧浼氫涪鍖呭緢涓ラ噸 // grabber.setVideoOption("probesize", "10000"); // 璁剧疆鎹曡幏鍒嗘瀽鐨勬渶澶у瓧鑺� - grabber.start(); - Frame frame = grabber.grabImage(); // 鐩存帴鎹曡幏涓�甯� - if (frame != null) { - System.out.println("鎴愬姛鎹曡幏涓�甯�"); - // 灏咶rame杞崲涓篗at - OpenCVFrameConverter.ToMat converter = new OpenCVFrameConverter.ToMat(); - Mat mat = converter.convertToMat(frame); + grabber.start(); + Frame frame = grabber.grabImage(); // 鐩存帴鎹曡幏涓�甯� + if (frame != null) { + System.out.println("鎴愬姛鎹曡幏涓�甯�"); + // 灏咶rame杞崲涓篗at + OpenCVFrameConverter.ToMat converter = new OpenCVFrameConverter.ToMat(); + Mat mat = converter.convertToMat(frame); - imgUrl = format.format(new Date()) + "_" + IdUtils.randomUUID() + ".png"; - // 鐢熸垚鍥剧墖璺緞 - String imgPath = "/home/zgyw/uploadPath/" + imgUrl; - System.out.println("鍥剧墖淇濆瓨鍦板潃锛�" + imgPath); - imgUrl = "/profile/" + imgUrl; - // 淇濆瓨鍥剧墖 - opencv_imgcodecs.imwrite(imgPath, mat); - } else { - System.out.println("鏈崟鑾峰埌甯�"); - } - } catch (FrameGrabber.Exception e) { - e.printStackTrace(); - } finally { - if (grabber != null) { - try { - grabber.stop(); // 鍋滄鎹曡幏 - } catch (FrameGrabber.Exception e) { - e.printStackTrace(); - } - } - } - } - } else { - System.out.println("璇锋眰澶辫触锛岄敊璇爜锛�" + wvpResult.getCode() + "--" + wvpResult.getMsg()); - } - System.out.println("鍥剧墖URL锛�" + imgUrl); - return imgUrl; - } + imgUrl = format.format(new Date()) + "_" + IdUtils.randomUUID() + ".png"; + // 鐢熸垚鍥剧墖璺緞 + String imgPath = "/home/zgyw/uploadPath/" + imgUrl; + System.out.println("鍥剧墖淇濆瓨鍦板潃锛�" + imgPath); + imgUrl = "/profile/" + imgUrl; + // 淇濆瓨鍥剧墖 + opencv_imgcodecs.imwrite(imgPath, mat); + } else { + System.out.println("鏈崟鑾峰埌甯�"); + } + } catch (FrameGrabber.Exception e) { + e.printStackTrace(); + } finally { + if (grabber != null) { + try { + grabber.stop(); // 鍋滄鎹曡幏 + } catch (FrameGrabber.Exception e) { + e.printStackTrace(); + } + } + } + } + return imgUrl; + } - @Operation(summary = "鍋滄鐐规挱", security = @SecurityRequirement(name = JwtUtils.HEADER)) - @Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true) - @Parameter(name = "channelId", description = "閫氶亾鍥芥爣缂栧彿", required = true) - @GetMapping("/stop/{deviceId}/{channelId}") - public JSONObject playStop(@PathVariable String deviceId, @PathVariable String channelId) { + @Operation(summary = "鍋滄鐐规挱", security = @SecurityRequirement(name = JwtUtils.HEADER)) + @Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true) + @Parameter(name = "channelId", description = "閫氶亾鍥芥爣缂栧彿", required = true) + @GetMapping("/stop/{deviceId}/{channelId}") + public JSONObject playStop(@PathVariable String deviceId, @PathVariable String channelId) { - logger.debug(String.format("璁惧棰勮/鍥炴斁鍋滄API璋冪敤锛宻treamId锛�%s_%s", deviceId, channelId )); + logger.debug(String.format("璁惧棰勮/鍥炴斁鍋滄API璋冪敤锛宻treamId锛�%s_%s", deviceId, channelId)); - if (deviceId == null || channelId == null) { - throw new ControllerException(ErrorCode.ERROR400); - } + if (deviceId == null || channelId == null) { + throw new ControllerException(ErrorCode.ERROR400); + } - Device device = storager.queryVideoDevice(deviceId); - if (device == null) { - throw new ControllerException(ErrorCode.ERROR100.getCode(), "璁惧[" + deviceId + "]涓嶅瓨鍦�"); - } + Device device = storager.queryVideoDevice(deviceId); + if (device == null) { + throw new ControllerException(ErrorCode.ERROR100.getCode(), "璁惧[" + deviceId + "]涓嶅瓨鍦�"); + } - playService.stopPlay(device, channelId); - JSONObject json = new JSONObject(); - json.put("deviceId", deviceId); - json.put("channelId", channelId); - return json; - } - /** - * 缁撴潫杞爜 - */ - @Operation(summary = "缁撴潫杞爜", security = @SecurityRequirement(name = JwtUtils.HEADER)) - @Parameter(name = "key", description = "瑙嗛娴乲ey", required = true) - @Parameter(name = "mediaServerId", description = "娴佸獟浣撴湇鍔D", required = true) - @PostMapping("/convertStop/{key}") - public void playConvertStop(@PathVariable String key, String mediaServerId) { - if (mediaServerId == null) { - throw new ControllerException(ErrorCode.ERROR400.getCode(), "娴佸獟浣擄細" + mediaServerId + "涓嶅瓨鍦�" ); - } - MediaServer mediaInfo = mediaServerService.getOne(mediaServerId); - if (mediaInfo == null) { - throw new ControllerException(ErrorCode.ERROR100.getCode(), "浣跨敤鐨勬祦濯掍綋宸茬粡鍋滄杩愯" ); - }else { - Boolean deleted = mediaServerService.delFFmpegSource(mediaInfo, key); - if (!deleted) { - throw new ControllerException(ErrorCode.ERROR100 ); - } - } - } + playService.stopPlay(device, channelId); + JSONObject json = new JSONObject(); + json.put("deviceId", deviceId); + json.put("channelId", channelId); + return json; + } - @Operation(summary = "璇煶骞挎挱鍛戒护", security = @SecurityRequirement(name = JwtUtils.HEADER)) - @Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true) - @Parameter(name = "deviceId", description = "閫氶亾鍥芥爣缂栧彿", required = true) - @Parameter(name = "timeout", description = "鎺ㄦ祦瓒呮椂鏃堕棿(绉�)", required = true) - @GetMapping("/broadcast/{deviceId}/{channelId}") - @PostMapping("/broadcast/{deviceId}/{channelId}") + /** + * 缁撴潫杞爜 + */ + @Operation(summary = "缁撴潫杞爜", security = @SecurityRequirement(name = JwtUtils.HEADER)) + @Parameter(name = "key", description = "瑙嗛娴乲ey", required = true) + @Parameter(name = "mediaServerId", description = "娴佸獟浣撴湇鍔D", required = true) + @PostMapping("/convertStop/{key}") + public void playConvertStop(@PathVariable String key, String mediaServerId) { + if (mediaServerId == null) { + throw new ControllerException(ErrorCode.ERROR400.getCode(), "娴佸獟浣擄細" + mediaServerId + "涓嶅瓨鍦�"); + } + MediaServer mediaInfo = mediaServerService.getOne(mediaServerId); + if (mediaInfo == null) { + throw new ControllerException(ErrorCode.ERROR100.getCode(), "浣跨敤鐨勬祦濯掍綋宸茬粡鍋滄杩愯"); + } else { + Boolean deleted = mediaServerService.delFFmpegSource(mediaInfo, key); + if (!deleted) { + throw new ControllerException(ErrorCode.ERROR100); + } + } + } + + @Operation(summary = "璇煶骞挎挱鍛戒护", security = @SecurityRequirement(name = JwtUtils.HEADER)) + @Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true) + @Parameter(name = "deviceId", description = "閫氶亾鍥芥爣缂栧彿", required = true) + @Parameter(name = "timeout", description = "鎺ㄦ祦瓒呮椂鏃堕棿(绉�)", required = true) + @GetMapping("/broadcast/{deviceId}/{channelId}") + @PostMapping("/broadcast/{deviceId}/{channelId}") public AudioBroadcastResult broadcastApi(@PathVariable String deviceId, @PathVariable String channelId, Integer timeout, Boolean broadcastMode) { - if (logger.isDebugEnabled()) { - logger.debug("璇煶骞挎挱API璋冪敤"); - } - Device device = storager.queryVideoDevice(deviceId); - if (device == null) { - throw new ControllerException(ErrorCode.ERROR400.getCode(), "鏈壘鍒拌澶囷細 " + deviceId); - } - if (channelId == null) { - throw new ControllerException(ErrorCode.ERROR400.getCode(), "鏈壘鍒伴�氶亾锛� " + channelId); - } + if (logger.isDebugEnabled()) { + logger.debug("璇煶骞挎挱API璋冪敤"); + } + Device device = storager.queryVideoDevice(deviceId); + if (device == null) { + throw new ControllerException(ErrorCode.ERROR400.getCode(), "鏈壘鍒拌澶囷細 " + deviceId); + } + if (channelId == null) { + throw new ControllerException(ErrorCode.ERROR400.getCode(), "鏈壘鍒伴�氶亾锛� " + channelId); + } - return playService.audioBroadcast(device, channelId, broadcastMode); + return playService.audioBroadcast(device, channelId, broadcastMode); - } + } - @Operation(summary = "鍋滄璇煶骞挎挱") - @Parameter(name = "deviceId", description = "璁惧Id", required = true) - @Parameter(name = "channelId", description = "閫氶亾Id", required = true) - @GetMapping("/broadcast/stop/{deviceId}/{channelId}") - @PostMapping("/broadcast/stop/{deviceId}/{channelId}") - public void stopBroadcast(@PathVariable String deviceId, @PathVariable String channelId) { - if (logger.isDebugEnabled()) { - logger.debug("鍋滄璇煶骞挎挱API璋冪敤"); - } + @Operation(summary = "鍋滄璇煶骞挎挱") + @Parameter(name = "deviceId", description = "璁惧Id", required = true) + @Parameter(name = "channelId", description = "閫氶亾Id", required = true) + @GetMapping("/broadcast/stop/{deviceId}/{channelId}") + @PostMapping("/broadcast/stop/{deviceId}/{channelId}") + public void stopBroadcast(@PathVariable String deviceId, @PathVariable String channelId) { + if (logger.isDebugEnabled()) { + logger.debug("鍋滄璇煶骞挎挱API璋冪敤"); + } // try { // playService.stopAudioBroadcast(deviceId, channelId); // } catch (InvalidArgumentException | ParseException | SipException e) { // logger.error("[鍛戒护鍙戦�佸け璐 鍋滄璇煶: {}", e.getMessage()); // throw new ControllerException(ErrorCode.ERROR100.getCode(), "鍛戒护鍙戦�佸け璐�: " + e.getMessage()); // } - playService.stopAudioBroadcast(deviceId, channelId); - } + playService.stopAudioBroadcast(deviceId, channelId); + } - @Operation(summary = "鑾峰彇鎵�鏈夌殑ssrc", security = @SecurityRequirement(name = JwtUtils.HEADER)) - @GetMapping("/ssrc") - public JSONObject getSSRC() { - if (logger.isDebugEnabled()) { - logger.debug("鑾峰彇鎵�鏈夌殑ssrc"); - } - JSONArray objects = new JSONArray(); - List<SsrcTransaction> allSsrc = streamSession.getAllSsrc(); - for (SsrcTransaction transaction : allSsrc) { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("deviceId", transaction.getDeviceId()); - jsonObject.put("channelId", transaction.getChannelId()); - jsonObject.put("ssrc", transaction.getSsrc()); - jsonObject.put("streamId", transaction.getStream()); - objects.add(jsonObject); - } + @Operation(summary = "鑾峰彇鎵�鏈夌殑ssrc", security = @SecurityRequirement(name = JwtUtils.HEADER)) + @GetMapping("/ssrc") + public JSONObject getSSRC() { + if (logger.isDebugEnabled()) { + logger.debug("鑾峰彇鎵�鏈夌殑ssrc"); + } + JSONArray objects = new JSONArray(); + List<SsrcTransaction> allSsrc = streamSession.getAllSsrc(); + for (SsrcTransaction transaction : allSsrc) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("deviceId", transaction.getDeviceId()); + jsonObject.put("channelId", transaction.getChannelId()); + jsonObject.put("ssrc", transaction.getSsrc()); + jsonObject.put("streamId", transaction.getStream()); + objects.add(jsonObject); + } - JSONObject jsonObject = new JSONObject(); - jsonObject.put("data", objects); - jsonObject.put("count", objects.size()); - return jsonObject; - } + JSONObject jsonObject = new JSONObject(); + jsonObject.put("data", objects); + jsonObject.put("count", objects.size()); + return jsonObject; + } - @Operation(summary = "鑾峰彇鎴浘", security = @SecurityRequirement(name = JwtUtils.HEADER)) - @Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true) - @Parameter(name = "channelId", description = "閫氶亾鍥芥爣缂栧彿", required = true) - @Parameter(name = "isSubStream", description = "鏄惁瀛愮爜娴侊紙true-瀛愮爜娴侊紝false-涓荤爜娴侊級锛岄粯璁や负false", required = true) - @GetMapping("/snap") - public DeferredResult<String> getSnap(String deviceId, String channelId,boolean isSubStream) { - if (logger.isDebugEnabled()) { - logger.debug("鑾峰彇鎴浘: {}/{}", deviceId, channelId); - } + @Operation(summary = "鑾峰彇鎴浘", security = @SecurityRequirement(name = JwtUtils.HEADER)) + @Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true) + @Parameter(name = "channelId", description = "閫氶亾鍥芥爣缂栧彿", required = true) + @Parameter(name = "isSubStream", description = "鏄惁瀛愮爜娴侊紙true-瀛愮爜娴侊紝false-涓荤爜娴侊級锛岄粯璁や负false", required = true) + @GetMapping("/snap") + public DeferredResult<String> getSnap(String deviceId, String channelId, boolean isSubStream) { + if (logger.isDebugEnabled()) { + logger.debug("鑾峰彇鎴浘: {}/{}", deviceId, channelId); + } - DeferredResult<String> result = new DeferredResult<>(3 * 1000L); - String key = DeferredResultHolder.CALLBACK_CMD_SNAP + deviceId; - String uuid = UUID.randomUUID().toString(); - resultHolder.put(key, uuid, result); + DeferredResult<String> result = new DeferredResult<>(3 * 1000L); + String key = DeferredResultHolder.CALLBACK_CMD_SNAP + deviceId; + String uuid = UUID.randomUUID().toString(); + resultHolder.put(key, uuid, result); - RequestMessage message = new RequestMessage(); - message.setKey(key); - message.setId(uuid); + RequestMessage message = new RequestMessage(); + message.setKey(key); + message.setId(uuid); - String fileName = deviceId + "_" + channelId + "_" + DateUtil.getNowForUrl() + ".jpg"; - playService.getSnap(deviceId, channelId, fileName, (code, msg, data) -> { - if (code == InviteErrorCode.SUCCESS.getCode()) { - message.setData(data); - }else { - message.setData(WVPResult.fail(code, msg)); - } - resultHolder.invokeResult(message); - }); - return result; - } + String fileName = deviceId + "_" + channelId + "_" + DateUtil.getNowForUrl() + ".jpg"; + playService.getSnap(deviceId, channelId, fileName, (code, msg, data) -> { + if (code == InviteErrorCode.SUCCESS.getCode()) { + message.setData(data); + } else { + message.setData(WVPResult.fail(code, msg)); + } + resultHolder.invokeResult(message); + }); + return result; + } } -- Gitblit v1.8.0