From 15df08964bb459d6d01ec5ef423eae094eac1c72 Mon Sep 17 00:00:00 2001 From: ‘sxh’ <1632740646@qq.com> Date: 星期四, 15 六月 2023 11:00:29 +0800 Subject: [PATCH] 新增设备主子码流选择,默认为不开启 --- src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java | 64 +++++++++++++++++++++++++------ 1 files changed, 51 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java index 3a94f79..4b18a17 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java @@ -345,10 +345,19 @@ } if ("rtp".equals(param.getApp()) && !param.isRegist()) { - InviteInfo inviteInfo = inviteStreamService.getInviteInfoByStream(null, param.getStream()); - if (inviteInfo != null && (inviteInfo.getType() == InviteSessionType.PLAY || inviteInfo.getType() == InviteSessionType.PLAYBACK)) { - inviteStreamService.removeInviteInfo(inviteInfo); - storager.stopPlay(inviteInfo.getDeviceId(), inviteInfo.getChannelId()); + if(param.getStream().split("_").length == 3){ + boolean isSubStream = "sub".equals(param.getStream().split("_")[0]); + InviteInfo inviteInfo = inviteStreamService.getInviteInfoByStream(null, param.getStream(), isSubStream); + if(inviteInfo != null && (inviteInfo.getType() == InviteSessionType.PLAY )){ + inviteStreamService.removeInviteInfo(inviteInfo.getType(),inviteInfo.getDeviceId(), + inviteInfo.getChannelId(),inviteInfo.isSubStream(),inviteInfo.getStream()); + } + }else { + InviteInfo inviteInfo = inviteStreamService.getInviteInfoByStream(null, param.getStream()); + if (inviteInfo != null && (inviteInfo.getType() == InviteSessionType.PLAY || inviteInfo.getType() == InviteSessionType.PLAYBACK)) { + inviteStreamService.removeInviteInfo(inviteInfo); + storager.stopPlay(inviteInfo.getDeviceId(), inviteInfo.getChannelId()); + } } } else { if (!"rtp".equals(param.getApp())) { @@ -476,7 +485,16 @@ Device device = deviceService.getDevice(inviteInfo.getDeviceId()); if (device != null) { try { - if (inviteStreamService.getInviteInfo(inviteInfo.getType(), inviteInfo.getDeviceId(), inviteInfo.getChannelId(), inviteInfo.getStream()) != null) { + InviteInfo info = null; + if(device.isSwitchPrimarySubStream()){ + boolean isSubStream = "sub".equals(param.getStream().split("_")[0]); + info = inviteStreamService.getInviteInfo(inviteInfo.getType(), inviteInfo.getDeviceId(), inviteInfo.getChannelId(),isSubStream, inviteInfo.getStream()); + }else { + info = inviteStreamService.getInviteInfo(inviteInfo.getType(), inviteInfo.getDeviceId(), inviteInfo.getChannelId(), inviteInfo.getStream()); + + } + + if (info != null) { cmder.streamByeCmd(device, inviteInfo.getChannelId(), inviteInfo.getStream(), null); } @@ -486,9 +504,15 @@ } } - inviteStreamService.removeInviteInfo(inviteInfo.getType(), inviteInfo.getDeviceId(), - inviteInfo.getChannelId(), inviteInfo.getStream()); - storager.stopPlay(inviteInfo.getDeviceId(), inviteInfo.getChannelId()); + if(device.isSwitchPrimarySubStream()){ + boolean isSubStream = "sub".equals(param.getStream().split("_")[0]); + inviteStreamService.removeInviteInfo(inviteInfo.getType(), inviteInfo.getDeviceId(), + inviteInfo.getChannelId(),isSubStream, inviteInfo.getStream()); + }else { + inviteStreamService.removeInviteInfo(inviteInfo.getType(), inviteInfo.getDeviceId(), + inviteInfo.getChannelId(), inviteInfo.getStream()); + storager.stopPlay(inviteInfo.getDeviceId(), inviteInfo.getChannelId()); + } return ret; } } else { @@ -541,12 +565,26 @@ if ("rtp".equals(param.getApp())) { String[] s = param.getStream().split("_"); - if (!mediaInfo.isRtpEnable() || s.length != 2) { + if (!mediaInfo.isRtpEnable() ) { + defaultResult.setResult(HookResult.SUCCESS()); + return defaultResult; + }else if(s.length != 2 && s.length != 3 ){ defaultResult.setResult(HookResult.SUCCESS()); return defaultResult; } - String deviceId = s[0]; - String channelId = s[1]; + String deviceId = null; + String channelId = null; + boolean isSubStream = false; + if (s[0].length() < 20) { + if ("sub".equals(s[0])) { + isSubStream = true; + } + deviceId = s[1]; + channelId = s[2]; + } else { + deviceId = s[0]; + channelId = s[1]; + } Device device = redisCatchStorage.getDevice(deviceId); if (device == null) { defaultResult.setResult(new HookResult(ErrorCode.ERROR404.getCode(), ErrorCode.ERROR404.getMsg())); @@ -560,7 +598,7 @@ logger.info("[ZLM HOOK] 娴佹湭鎵惧埌, 鍙戣捣鑷姩鐐规挱锛歿}->{}->{}/{}", param.getMediaServerId(), param.getSchema(), param.getApp(), param.getStream()); RequestMessage msg = new RequestMessage(); - String key = DeferredResultHolder.CALLBACK_CMD_PLAY + deviceId + channelId; + String key = DeferredResultHolder.getPlayKey(deviceId, channelId, device.isSwitchPrimarySubStream(), isSubStream); boolean exist = resultHolder.exist(key, null); msg.setKey(key); String uuid = UUID.randomUUID().toString(); @@ -578,7 +616,7 @@ resultHolder.put(key, uuid, result); if (!exist) { - playService.play(mediaInfo, deviceId, channelId, (code, message, data) -> { + playService.play(mediaInfo, deviceId, channelId,isSubStream, (code, message, data) -> { msg.setData(new HookResult(code, message)); resultHolder.invokeResult(msg); }); -- Gitblit v1.8.0