From 6e4268a670a796a884261ab77d70b59dc95cb909 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期四, 20 六月 2024 18:12:35 +0800
Subject: [PATCH] 调整推流数据写入redis
---
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java | 78 ++++++++++++++++++++-------------------
1 files changed, 40 insertions(+), 38 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 4d29532..73f20bf 100755
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
@@ -29,6 +29,7 @@
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.utils.MediaServerUtils;
import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
import com.genersoft.iot.vmp.vmanager.bean.OtherPsSendInfo;
import com.genersoft.iot.vmp.vmanager.bean.OtherRtpSendInfo;
@@ -47,7 +48,6 @@
import javax.sip.InvalidArgumentException;
import javax.sip.SipException;
import java.text.ParseException;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@@ -179,7 +179,7 @@
}
});
if (!"rtp".equals(param.getApp())) {
- Map<String, String> paramMap = urlParamToMap(param.getParams());
+ Map<String, String> paramMap = MediaServerUtils.urlParamToMap(param.getParams());
StreamAuthorityInfo streamAuthorityInfo = redisCatchStorage.getStreamAuthorityInfo(param.getApp(), param.getStream());
if (streamAuthorityInfo != null && streamAuthorityInfo.getCallId() != null && !streamAuthorityInfo.getCallId().equals(paramMap.get("callId"))) {
return new HookResult(401, "Unauthorized");
@@ -220,7 +220,7 @@
logger.info("鎺ㄦ祦閴存潈澶辫触锛� 缂哄皯蹇呰鍙傛暟锛歴ign=md5(user琛ㄧ殑pushKey)");
return new HookResultForOnPublish(401, "Unauthorized");
}
- Map<String, String> paramMap = urlParamToMap(param.getParams());
+ Map<String, String> paramMap = MediaServerUtils.urlParamToMap(param.getParams());
String sign = paramMap.get("sign");
if (sign == null) {
logger.info("鎺ㄦ祦閴存潈澶辫触锛� 缂哄皯蹇呰鍙傛暟锛歴ign=md5(user琛ㄧ殑pushKey)");
@@ -289,7 +289,7 @@
String channelId = ssrcTransactionForAll.get(0).getChannelId();
DeviceChannel deviceChannel = storager.queryChannel(deviceId, channelId);
if (deviceChannel != null) {
- result.setEnable_audio(deviceChannel.isHasAudio());
+ result.setEnable_audio(deviceChannel.getHasAudio());
}
// 濡傛灉鏄綍鍍忎笅杞藉氨璁剧疆瑙嗛闂撮殧鍗佺
if (ssrcTransactionForAll.get(0).getType() == InviteSessionType.DOWNLOAD) {
@@ -351,6 +351,11 @@
logger.info("[ZLM HOOK] 娴佸彉鍖栨湭鎵惧埌ZLM, {}", param.getMediaServerId());
return;
}
+ if (!ObjectUtils.isEmpty(mediaInfo.getTranscodeSuffix())
+ && !"null".equalsIgnoreCase(mediaInfo.getTranscodeSuffix())
+ && param.getStream().endsWith(mediaInfo.getTranscodeSuffix()) ) {
+ return;
+ }
if (subscribe != null) {
subscribe.response(mediaInfo, param);
}
@@ -370,8 +375,20 @@
streamAuthorityInfo.setOriginTypeStr(param.getOriginTypeStr());
}
redisCatchStorage.updateStreamAuthorityInfo(param.getApp(), param.getStream(), streamAuthorityInfo);
+
+ Map<String, String> params = MediaServerUtils.urlParamToMap(param.getParams());
+ param.setParamMap(params);
+ StreamInfo streamInfoByAppAndStream = mediaService.getStreamInfoByAppAndStream(mediaInfo,
+ param.getApp(), param.getStream(), tracks, params.get("callId"));
+ param.setStreamInfo(new StreamContent(streamInfoByAppAndStream));
+
+ param.setSeverId(userSetting.getServerId());
+ streamPushService.updatePush(param);
+ // 鍐椾綑鏁版嵁锛岃嚜宸辩郴缁熶腑鑷敤
+ redisCatchStorage.addPushListItem(param.getApp(), param.getStream(), param);
}
}
+ // TODO 淇敼涓虹涓�涓负鍑� 鍚庣画涓嶅啀澶勭悊
if ("rtsp".equals(param.getSchema())) {
logger.info("娴佸彉鍖栵細娉ㄥ唽->{}, app->{}, stream->{}", param.isRegist(), param.getApp(), param.getStream());
if (param.isRegist()) {
@@ -452,24 +469,14 @@
if (!"rtp".equals(param.getApp())) {
String type = OriginType.values()[param.getOriginType()].getType();
if (param.isRegist()) {
- StreamAuthorityInfo streamAuthorityInfo = redisCatchStorage.getStreamAuthorityInfo(
- param.getApp(), param.getStream());
- String callId = null;
- if (streamAuthorityInfo != null) {
- callId = streamAuthorityInfo.getCallId();
- }
+ Map<String, String> params = MediaServerUtils.urlParamToMap(param.getParams());
+ param.setParamMap(params);
StreamInfo streamInfoByAppAndStream = mediaService.getStreamInfoByAppAndStream(mediaInfo,
- param.getApp(), param.getStream(), tracks, callId);
+ param.getApp(), param.getStream(), tracks, params.get("callId"));
param.setStreamInfo(new StreamContent(streamInfoByAppAndStream));
+
redisCatchStorage.addStream(mediaInfo, type, param.getApp(), param.getStream(), param);
- if (param.getOriginType() == OriginType.RTSP_PUSH.ordinal()
- || param.getOriginType() == OriginType.RTMP_PUSH.ordinal()
- || param.getOriginType() == OriginType.RTC_PUSH.ordinal()) {
- param.setSeverId(userSetting.getServerId());
- streamPushService.updatePush(param);
- // 鍐椾綑鏁版嵁锛岃嚜宸辩郴缁熶腑鑷敤
- redisCatchStorage.addPushListItem(param.getApp(), param.getStream(), param);
- }
+
} else {
// 鍏煎娴佹敞閿�鏃剁被鍨嬩粠redis璁板綍鑾峰彇
OnStreamChangedHookParam onStreamChangedHookParam = redisCatchStorage.getStreamInfo(
@@ -518,13 +525,13 @@
}
if (sendRtpItem.getApp().equals(param.getApp())) {
// 鍦╤ook鏀跺埌杩欎釜娑堟伅锛岃鏄庡彂娴佷竴瀹氭槸鏈骇瀹屾垚鐨勩��
- redisCatchStorage.deleteSendRTPServer(sendRtpItem);
ssrcFactory.releaseSsrc(sendRtpItem.getMediaServerId(), sendRtpItem.getSsrc());
ParentPlatform platform = storager.queryParentPlatByServerGBId(sendRtpItem.getPlatformId());
Device device = deviceService.getDevice(sendRtpItem.getPlatformId());
try {
if (platform != null) {
commanderFroPlatform.streamByeCmd(platform, sendRtpItem);
+ redisCatchStorage.deleteSendRTPServer(sendRtpItem);
redisCatchStorage.sendPlatformStopPlayMsg(sendRtpItem, platform);
} else if (device != null) {
cmder.streamByeCmd(device, sendRtpItem.getChannelId(), param.getStream(), sendRtpItem.getCallId());
@@ -563,6 +570,19 @@
logger.info("[ZLM HOOK]娴佹棤浜鸿鐪嬶細{}->{}->{}/{}", param.getMediaServerId(), param.getSchema(),
param.getApp(), param.getStream());
+
+ MediaServerItem mediaInfo = mediaServerService.getOne(param.getMediaServerId());
+ if (mediaInfo == null) {
+ JSONObject ret = new JSONObject();
+ ret.put("code", 0);
+ return ret;
+ }
+ if (!ObjectUtils.isEmpty(mediaInfo.getTranscodeSuffix())
+ && !"null".equalsIgnoreCase(mediaInfo.getTranscodeSuffix())
+ && param.getStream().endsWith(mediaInfo.getTranscodeSuffix()) ) {
+ param.setStream(param.getStream().substring(0, param.getStream().lastIndexOf(mediaInfo.getTranscodeSuffix()) -1 ));
+ }
+
JSONObject ret = new JSONObject();
ret.put("code", 0);
// 鍥芥爣绫诲瀷鐨勬祦
@@ -880,23 +900,5 @@
});
return HookResult.SUCCESS();
- }
-
- private Map<String, String> urlParamToMap(String params) {
- HashMap<String, String> map = new HashMap<>();
- if (ObjectUtils.isEmpty(params)) {
- return map;
- }
- String[] paramsArray = params.split("&");
- if (paramsArray.length == 0) {
- return map;
- }
- for (String param : paramsArray) {
- String[] paramArray = param.split("=");
- if (paramArray.length == 2) {
- map.put(paramArray[0], paramArray[1]);
- }
- }
- return map;
}
}
--
Gitblit v1.8.0