From 1458014fe304e6a492a66c9a7b69600d47efc1d8 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期五, 30 六月 2023 15:24:07 +0800 Subject: [PATCH] 修复合并主线后语音对讲失败的问题 --- src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java | 28 +++++++++++++++------------- 1 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java index c345770..316e74c 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java @@ -235,8 +235,10 @@ sendRtpItem.setUsePs(false); sendRtpItem.setReceiveStream(stream + "_talk"); - - int port = zlmrtpServerFactory.keepPort(mediaServerItem, playSsrc, null); + String callId = SipUtils.getNewCallId(); + int port = zlmrtpServerFactory.keepPort(mediaServerItem, playSsrc, 0, ssrcFromCallback ->{ + return redisCatchStorage.querySendRTPServer(device.getDeviceId(), channelId, null, callId) != null; + }); //绔彛鑾峰彇澶辫触鐨剆srcInfo 娌℃湁蹇呰鍙戦�佺偣鎾寚浠� if (port <= 0) { logger.info("[璇煶瀵硅] 绔彛鍒嗛厤寮傚父锛宒eviceId={},channelId={}", device.getDeviceId(), channelId); @@ -264,7 +266,7 @@ } }, userSetting.getPlayTimeout()); - String callId = SipUtils.getNewCallId(); + zlmrtpServerFactory.releasePort(mediaServerItem, playSsrc); Map<String, Object> param = new HashMap<>(12); @@ -293,12 +295,12 @@ // 鏌ョ湅璁惧鏄惁宸茬粡鍦ㄦ帹娴� try { - cmder.talkStreamCmd(mediaServerItem, sendRtpItem, device, channelId, callId, (MediaServerItem mediaServerItemInuse, JSONObject response) -> { - logger.info("[璇煶瀵硅] 娴佸凡鐢熸垚锛� 寮�濮嬫帹娴侊細 " + response.toJSONString()); + cmder.talkStreamCmd(mediaServerItem, sendRtpItem, device, channelId, callId, (mediaServerItemInuse, hookParam) -> { + logger.info("[璇煶瀵硅] 娴佸凡鐢熸垚锛� 寮�濮嬫帹娴侊細 " + hookParam); dynamicTask.stop(timeOutTaskKey); // TODO 鏆備笉鍋氬鐞� - }, (MediaServerItem mediaServerItemInuse, JSONObject json) -> { - logger.info("[璇煶瀵硅] 璁惧寮�濮嬫帹娴侊細 " + json.toJSONString()); + }, (mediaServerItemInuse, hookParam) -> { + logger.info("[璇煶瀵硅] 璁惧寮�濮嬫帹娴侊細 " + hookParam); dynamicTask.stop(timeOutTaskKey); }, (event) -> { @@ -362,7 +364,7 @@ null); return; } - logger.info("[鐐规挱寮�濮媇 deviceId: {}, channelId: {},鐮佹祦绫诲瀷锛歿},鏀舵祦绔彛锛� {}, 鏀舵祦妯″紡锛歿}, SSRC: {}, SSRC鏍¢獙锛歿}", + logger.info("[鐐规挱寮�濮媇 deviceId: {}, channelId: {},鐮佹祦绫诲瀷锛歿}, 鏀舵祦绔彛锛� {}, 鏀舵祦妯″紡锛歿}, SSRC: {}, SSRC鏍¢獙锛歿}", device.getDeviceId(), channelId, device.isSwitchPrimarySubStream() ? "杈呯爜娴�" : "涓荤爜娴�", ssrcInfo.getPort(), device.getStreamMode(), ssrcInfo.getSsrc(), device.isSsrcCheck()); //绔彛鑾峰彇澶辫触鐨剆srcInfo 娌℃湁蹇呰鍙戦�佺偣鎾寚浠� @@ -445,7 +447,7 @@ InviteErrorCode.SUCCESS.getCode(), InviteErrorCode.SUCCESS.getMsg(), streamInfo); - logger.info("[鐐规挱鎴愬姛] deviceId: {}, channelId: {},鐮佹祦绫诲瀷锛歿}", device.getDeviceId(), + logger.info("[鐐规挱鎴愬姛] deviceId: {}, channelId:{}, 鐮佹祦绫诲瀷锛歿}", device.getDeviceId(), device.isSwitchPrimarySubStream() ? "杈呯爜娴�" : "涓荤爜娴�"); String streamUrl; if (mediaServerItemInuse.getRtspPort() != 0) { @@ -617,10 +619,10 @@ } @Override - public StreamInfo onPublishHandlerForPlay(MediaServerItem mediaServerItem, JSONObject response, String deviceId, String channelId) { - StreamInfo streamInfo = onPublishHandler(mediaServerItem, response, deviceId, channelId); + public StreamInfo onPublishHandlerForPlay(MediaServerItem mediaServerItem, HookParam hookParam, String deviceId, String channelId) { + OnStreamChangedHookParam streamChangedHookParam = (OnStreamChangedHookParam) hookParam; + StreamInfo streamInfo = onPublishHandler(mediaServerItem, streamChangedHookParam, deviceId, channelId); Device device = redisCatchStorage.getDevice(deviceId); - OnStreamChangedHookParam streamChangedHookParam = (OnStreamChangedHookParam)hookParam; if (streamInfo != null) { DeviceChannel deviceChannel = storager.queryChannel(deviceId, channelId); if (deviceChannel != null) { @@ -1571,7 +1573,7 @@ } } - talk(mediaServerItem, device, channelId, stream, (MediaServerItem mediaServerItem1, JSONObject response) -> { + talk(mediaServerItem, device, channelId, stream, (mediaServerItem1, hookParam) -> { logger.info("[璇煶瀵硅] 鏀跺埌璁惧鍙戞潵鐨勬祦"); }, eventResult -> { logger.warn("[璇煶瀵硅] 澶辫触锛寋}/{}, 閿欒鐮� {} {}", device.getDeviceId(), channelId, eventResult.statusCode, eventResult.msg); -- Gitblit v1.8.0