From 33b75be71a7b7b324e652d3a4be62b0f03b5d46b Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期一, 01 四月 2024 18:21:38 +0800 Subject: [PATCH] 支持abl hook --- src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java | 169 ++++++++++++++------------------------------------------ 1 files changed, 43 insertions(+), 126 deletions(-) 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 b69ed19..89a7724 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 @@ -16,16 +16,14 @@ import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder; import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage; import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; -import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils; -import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; +import com.genersoft.iot.vmp.media.service.IMediaServerService; +import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.service.IInviteStreamService; -import com.genersoft.iot.vmp.service.IMediaServerService; -import com.genersoft.iot.vmp.service.IMediaService; import com.genersoft.iot.vmp.service.IPlayService; import com.genersoft.iot.vmp.service.bean.InviteErrorCode; -import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IVideoManagerStorage; import com.genersoft.iot.vmp.utils.DateUtil; +import com.genersoft.iot.vmp.vmanager.bean.AudioBroadcastResult; import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; import com.genersoft.iot.vmp.vmanager.bean.StreamContent; import com.genersoft.iot.vmp.vmanager.bean.WVPResult; @@ -48,6 +46,10 @@ import java.util.List; import java.util.UUID; + +/** + * @author lin + */ @Tag(name = "鍥芥爣璁惧鐐规挱") @RestController @@ -66,22 +68,13 @@ private IVideoManagerStorage storager; @Autowired - private IRedisCatchStorage redisCatchStorage; - - @Autowired private IInviteStreamService inviteStreamService; - - @Autowired - private ZLMRESTfulUtils zlmresTfulUtils; @Autowired private DeferredResultHolder resultHolder; @Autowired private IPlayService playService; - - @Autowired - private IMediaService mediaService; @Autowired private IMediaServerService mediaServerService; @@ -99,7 +92,7 @@ logger.info("[寮�濮嬬偣鎾璢 deviceId锛歿}, channelId锛歿}, ", deviceId, channelId); // 鑾峰彇鍙敤鐨剒lm Device device = storager.queryVideoDevice(deviceId); - MediaServerItem newMediaServerItem = playService.getNewMediaServerItem(device); + MediaServer newMediaServerItem = playService.getNewMediaServerItem(device); RequestMessage requestMessage = new RequestMessage(); String key = DeferredResultHolder.CALLBACK_CMD_PLAY + deviceId + channelId; @@ -197,50 +190,6 @@ json.put("isSubStream", isSubStream); return json; } - - /** - * 灏嗕笉鏄痟264鐨勮棰戦�氳繃ffmpeg 杞爜涓篽264 + aac - * @param streamId 娴両D - */ - @Operation(summary = "灏嗕笉鏄痟264鐨勮棰戦�氳繃ffmpeg 杞爜涓篽264 + aac", security = @SecurityRequirement(name = JwtUtils.HEADER)) - @Parameter(name = "streamId", description = "瑙嗛娴両D", required = true) - @PostMapping("/convert/{streamId}") - public JSONObject playConvert(@PathVariable String streamId) { -// StreamInfo streamInfo = redisCatchStorage.queryPlayByStreamId(streamId); - - InviteInfo inviteInfo = inviteStreamService.getInviteInfoByStream(null, streamId); - if (inviteInfo == null || inviteInfo.getStreamInfo() == null) { - logger.warn("瑙嗛杞爜API璋冪敤澶辫触锛�, 瑙嗛娴佸凡缁忓仠姝�!"); - throw new ControllerException(ErrorCode.ERROR100.getCode(), "鏈壘鍒拌棰戞祦淇℃伅, 瑙嗛娴佸彲鑳藉凡缁忓仠姝�"); - } - MediaServerItem mediaInfo = mediaServerService.getOne(inviteInfo.getStreamInfo().getMediaServerId()); - JSONObject rtpInfo = zlmresTfulUtils.getRtpInfo(mediaInfo, streamId); - if (!rtpInfo.getBoolean("exist")) { - logger.warn("瑙嗛杞爜API璋冪敤澶辫触锛�, 瑙嗛娴佸凡鍋滄鎺ㄦ祦!"); - throw new ControllerException(ErrorCode.ERROR100.getCode(), "鏈壘鍒拌棰戞祦淇℃伅, 瑙嗛娴佸彲鑳藉凡鍋滄鎺ㄦ祦"); - } else { - String dstUrl = String.format("rtmp://%s:%s/convert/%s", "127.0.0.1", mediaInfo.getRtmpPort(), - streamId ); - String srcUrl = String.format("rtsp://%s:%s/rtp/%s", "127.0.0.1", mediaInfo.getRtspPort(), streamId); - JSONObject jsonObject = zlmresTfulUtils.addFFmpegSource(mediaInfo, srcUrl, dstUrl, "1000000", true, false, null); - logger.info(jsonObject.toJSONString()); - if (jsonObject != null && jsonObject.getInteger("code") == 0) { - JSONObject data = jsonObject.getJSONObject("data"); - if (data != null) { - JSONObject result = new JSONObject(); - result.put("key", data.getString("key")); - StreamInfo streamInfoResult = mediaService.getStreamInfoByAppAndStreamWithCheck("convert", streamId, mediaInfo.getId(), false); - result.put("StreamInfo", streamInfoResult); - return result; - }else { - throw new ControllerException(ErrorCode.ERROR100.getCode(), "杞爜澶辫触"); - } - }else { - throw new ControllerException(ErrorCode.ERROR100.getCode(), "杞爜澶辫触"); - } - } - } - /** * 缁撴潫杞爜 */ @@ -252,18 +201,12 @@ if (mediaServerId == null) { throw new ControllerException(ErrorCode.ERROR400.getCode(), "娴佸獟浣擄細" + mediaServerId + "涓嶅瓨鍦�" ); } - MediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId); + MediaServer mediaInfo = mediaServerService.getOne(mediaServerId); if (mediaInfo == null) { throw new ControllerException(ErrorCode.ERROR100.getCode(), "浣跨敤鐨勬祦濯掍綋宸茬粡鍋滄杩愯" ); }else { - JSONObject jsonObject = zlmresTfulUtils.delFFmpegSource(mediaInfo, key); - logger.info(jsonObject.toJSONString()); - if (jsonObject != null && jsonObject.getInteger("code") == 0) { - JSONObject data = jsonObject.getJSONObject("data"); - if (data == null || data.getBoolean("flag") == null || !data.getBoolean("flag")) { - throw new ControllerException(ErrorCode.ERROR100 ); - } - }else { + Boolean deleted = mediaServerService.delFFmpegSource(mediaInfo, key); + if (!deleted) { throw new ControllerException(ErrorCode.ERROR100 ); } } @@ -271,68 +214,42 @@ @Operation(summary = "璇煶骞挎挱鍛戒护", security = @SecurityRequirement(name = JwtUtils.HEADER)) @Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true) - @GetMapping("/broadcast/{deviceId}") - @PostMapping("/broadcast/{deviceId}") - public DeferredResult<String> broadcastApi(@PathVariable String deviceId) { - if (logger.isDebugEnabled()) { - logger.debug("璇煶骞挎挱API璋冪敤"); - } - Device device = storager.queryVideoDevice(deviceId); - DeferredResult<String> result = new DeferredResult<>(3 * 1000L); - String key = DeferredResultHolder.CALLBACK_CMD_BROADCAST + deviceId; - if (resultHolder.exist(key, null)) { - result.setResult("璁惧浣跨敤涓�"); - return result; + @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璋冪敤"); } - String uuid = UUID.randomUUID().toString(); - if (device == null) { - - resultHolder.put(key, key, result); - RequestMessage msg = new RequestMessage(); - msg.setKey(key); - msg.setId(uuid); - JSONObject json = new JSONObject(); - json.put("DeviceID", deviceId); - json.put("CmdType", "Broadcast"); - json.put("Result", "Failed"); - json.put("Description", "Device 涓嶅瓨鍦�"); - msg.setData(json); - resultHolder.invokeResult(msg); - return result; + Device device = storager.queryVideoDevice(deviceId); + if (device == null) { + throw new ControllerException(ErrorCode.ERROR400.getCode(), "鏈壘鍒拌澶囷細 " + deviceId); } - try { - cmder.audioBroadcastCmd(device, (event) -> { - RequestMessage msg = new RequestMessage(); - msg.setKey(key); - msg.setId(uuid); - JSONObject json = new JSONObject(); - json.put("DeviceID", deviceId); - json.put("CmdType", "Broadcast"); - json.put("Result", "Failed"); - json.put("Description", String.format("璇煶骞挎挱鎿嶄綔澶辫触锛岄敊璇爜锛� %s, %s", event.statusCode, event.msg)); - msg.setData(json); - resultHolder.invokeResult(msg); - }); - } catch (InvalidArgumentException | SipException | ParseException e) { - logger.error("[鍛戒护鍙戦�佸け璐 璇煶骞挎挱: {}", e.getMessage()); - throw new ControllerException(ErrorCode.ERROR100.getCode(), "鍛戒护鍙戦�佸け璐�: " + e.getMessage()); + if (channelId == null) { + throw new ControllerException(ErrorCode.ERROR400.getCode(), "鏈壘鍒伴�氶亾锛� " + channelId); } - result.onTimeout(() -> { - logger.warn("璇煶骞挎挱鎿嶄綔瓒呮椂, 璁惧鏈繑鍥炲簲绛旀寚浠�"); - RequestMessage msg = new RequestMessage(); - msg.setKey(key); - msg.setId(uuid); - JSONObject json = new JSONObject(); - json.put("DeviceID", deviceId); - json.put("CmdType", "Broadcast"); - json.put("Result", "Failed"); - json.put("Error", "Timeout. Device did not response to broadcast command."); - msg.setData(json); - resultHolder.invokeResult(msg); - }); - resultHolder.put(key, uuid, result); - return result; + 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璋冪敤"); + } +// 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); } @Operation(summary = "鑾峰彇鎵�鏈夌殑ssrc", security = @SecurityRequirement(name = JwtUtils.HEADER)) -- Gitblit v1.8.0