From 098dd8a04515c9dbb143ab39678c2a71a03ec427 Mon Sep 17 00:00:00 2001
From: lin <18010473990@163.com>
Date: 星期六, 08 一月 2022 18:00:31 +0800
Subject: [PATCH] 优化推流结束时流类型的获取
---
src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java | 32 ++++++++--------
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java | 16 ++------
src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java | 28 +++++++++++---
src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java | 8 +++-
src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java | 12 +++---
5 files changed, 54 insertions(+), 42 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 118b2af..c1f473d 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
@@ -343,24 +343,16 @@
MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId);
if (mediaServerItem != null){
if (regist) {
- StreamInfo streamInfo = mediaService.getStreamInfoByAppAndStream(mediaServerItem, app, streamId, tracks);
- redisCatchStorage.addStream(mediaServerItem, type, app, streamId, streamInfo);
+ redisCatchStorage.addStream(mediaServerItem, type, app, streamId, item);
if (item.getOriginType() == OriginType.RTSP_PUSH.ordinal()
|| item.getOriginType() == OriginType.RTMP_PUSH.ordinal()
|| item.getOriginType() == OriginType.RTC_PUSH.ordinal() ) {
zlmMediaListManager.addPush(item);
}
}else {
- // 鍏煎娴佹敞閿�鏃剁被鍨嬮敊璇殑闂锛岀瓑zlm鏇存柊鍚庡垹闄�
- StreamPushItem streamPushItem = streamPushService.getPush(app, streamId);
- if (streamPushItem != null) {
- type = "PUSH";
- }else {
- StreamProxyItem streamProxyByAppAndStream = streamProxyService.getStreamProxyByAppAndStream(app, streamId);
- if (streamProxyByAppAndStream != null) {
- type = "PULL";
- }
- }
+ // 鍏煎娴佹敞閿�鏃剁被鍨嬩粠redis璁板綍鑾峰彇
+ MediaItem mediaItem = redisCatchStorage.getStreamInfo(app, streamId, mediaServerId);
+ type = OriginType.values()[mediaItem.getOriginType()].getType();
zlmMediaListManager.removeMedia(app, streamId);
redisCatchStorage.removeStream(mediaServerItem.getId(), type, app, streamId);
}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java
index 8ec9474..1efc614 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java
@@ -279,18 +279,18 @@
String type = "PULL";
// 鍙戦�乺edis娑堟伅
- List<StreamInfo> streamInfoList = redisCatchStorage.getStreams(mediaServerId, type);
- if (streamInfoList.size() > 0) {
- for (StreamInfo streamInfo : streamInfoList) {
+ List<MediaItem> mediaItems = redisCatchStorage.getStreams(mediaServerId, type);
+ if (mediaItems.size() > 0) {
+ for (MediaItem mediaItem : mediaItems) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("serverId", userSetup.getServerId());
- jsonObject.put("app", streamInfo.getApp());
- jsonObject.put("stream", streamInfo.getStreamId());
+ jsonObject.put("app", mediaItem.getApp());
+ jsonObject.put("stream", mediaItem.getStream());
jsonObject.put("register", false);
jsonObject.put("mediaServerId", mediaServerId);
redisCatchStorage.sendStreamChangeMsg(type, jsonObject);
// 绉婚櫎redis鍐呮祦鐨勪俊鎭�
- redisCatchStorage.removeStream(mediaServerId, type, streamInfo.getApp(), streamInfo.getStreamId());
+ redisCatchStorage.removeStream(mediaServerId, type, mediaItem.getApp(), mediaItem.getStream());
}
}
}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
index 2a70754..3fac37a 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
@@ -173,16 +173,16 @@
List<StreamPushItem> pushList = getPushList(mediaServerId);
Map<String, StreamPushItem> pushItemMap = new HashMap<>();
// redis璁板綍
- List<StreamInfo> streamInfoPushList = redisCatchStorage.getStreams(mediaServerId, "PUSH");
- Map<String, StreamInfo> streamInfoPushItemMap = new HashMap<>();
+ List<MediaItem> mediaItems = redisCatchStorage.getStreams(mediaServerId, "PUSH");
+ Map<String, MediaItem> streamInfoPushItemMap = new HashMap<>();
if (pushList.size() > 0) {
for (StreamPushItem streamPushItem : pushList) {
pushItemMap.put(streamPushItem.getApp() + streamPushItem.getStream(), streamPushItem);
}
}
- if (streamInfoPushList.size() > 0) {
- for (StreamInfo streamInfo : streamInfoPushList) {
- streamInfoPushItemMap.put(streamInfo.getApp() + streamInfo.getStreamId(), streamInfo);
+ if (mediaItems.size() > 0) {
+ for (MediaItem mediaItem : mediaItems) {
+ streamInfoPushItemMap.put(mediaItem.getApp() + mediaItem.getStream(), mediaItem);
}
}
zlmresTfulUtils.getMediaList(mediaServerItem, (mediaList ->{
@@ -221,19 +221,19 @@
}
}
- Collection<StreamInfo> offlineStreamInfoItems = streamInfoPushItemMap.values();
- if (offlineStreamInfoItems.size() > 0) {
+ Collection<MediaItem> offlineMediaItemList = streamInfoPushItemMap.values();
+ if (offlineMediaItemList.size() > 0) {
String type = "PUSH";
- for (StreamInfo offlineStreamInfoItem : offlineStreamInfoItems) {
+ for (MediaItem offlineMediaItem : offlineMediaItemList) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("serverId", userSetup.getServerId());
- jsonObject.put("app", offlineStreamInfoItem.getApp());
- jsonObject.put("stream", offlineStreamInfoItem.getStreamId());
+ jsonObject.put("app", offlineMediaItem.getApp());
+ jsonObject.put("stream", offlineMediaItem.getStream());
jsonObject.put("register", false);
jsonObject.put("mediaServerId", mediaServerId);
redisCatchStorage.sendStreamChangeMsg(type, jsonObject);
// 绉婚櫎redis鍐呮祦鐨勪俊鎭�
- redisCatchStorage.removeStream(mediaServerItem.getId(), "PUSH", offlineStreamInfoItem.getApp(), offlineStreamInfoItem.getStreamId());
+ redisCatchStorage.removeStream(mediaServerItem.getId(), "PUSH", offlineMediaItem.getApp(), offlineMediaItem.getStream());
}
}
}));
@@ -250,15 +250,15 @@
// 鍙戦�佹祦鍋滄娑堟伅
String type = "PUSH";
// 鍙戦�乺edis娑堟伅
- List<StreamInfo> streamInfoList = redisCatchStorage.getStreams(mediaServerId, type);
+ List<MediaItem> streamInfoList = redisCatchStorage.getStreams(mediaServerId, type);
if (streamInfoList.size() > 0) {
- for (StreamInfo streamInfo : streamInfoList) {
+ for (MediaItem mediaItem : streamInfoList) {
// 绉婚櫎redis鍐呮祦鐨勪俊鎭�
- redisCatchStorage.removeStream(mediaServerId, type, streamInfo.getApp(), streamInfo.getStreamId());
+ redisCatchStorage.removeStream(mediaServerId, type, mediaItem.getApp(), mediaItem.getStream());
JSONObject jsonObject = new JSONObject();
jsonObject.put("serverId", userSetup.getServerId());
- jsonObject.put("app", streamInfo.getApp());
- jsonObject.put("stream", streamInfo.getStreamId());
+ jsonObject.put("app", mediaItem.getApp());
+ jsonObject.put("stream", mediaItem.getStream());
jsonObject.put("register", false);
jsonObject.put("mediaServerId", mediaServerId);
redisCatchStorage.sendStreamChangeMsg(type, jsonObject);
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java b/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
index f7b16a8..8dc21ff 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
@@ -3,7 +3,9 @@
import com.alibaba.fastjson.JSONObject;
import com.genersoft.iot.vmp.common.StreamInfo;
import com.genersoft.iot.vmp.gb28181.bean.*;
+import com.genersoft.iot.vmp.media.zlm.dto.MediaItem;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
+import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
import com.genersoft.iot.vmp.service.bean.ThirdPartyGB;
@@ -143,7 +145,7 @@
* @param app
* @param streamId
*/
- void addStream(MediaServerItem mediaServerItem, String type, String app, String streamId, StreamInfo streamInfo);
+ void addStream(MediaServerItem mediaServerItem, String type, String app, String streamId, MediaItem item);
/**
* 绉婚櫎娴佷俊鎭粠redis
@@ -175,7 +177,7 @@
*/
ThirdPartyGB queryMemberNoGBId(String queryKey);
- List<StreamInfo> getStreams(String mediaServerId, String pull);
+ List<MediaItem> getStreams(String mediaServerId, String pull);
/**
* 灏哾evice淇℃伅鍐欏叆redis
@@ -206,4 +208,6 @@
SubscribeInfo getSubscribe(String key);
void delSubscribe(String key);
+
+ MediaItem getStreamInfo(String app, String streamId, String mediaServerId);
}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java
index 2dcc217..1d68943 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java
@@ -5,7 +5,9 @@
import com.genersoft.iot.vmp.common.VideoManagerConstants;
import com.genersoft.iot.vmp.conf.UserSetup;
import com.genersoft.iot.vmp.gb28181.bean.*;
+import com.genersoft.iot.vmp.media.zlm.dto.MediaItem;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
+import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
import com.genersoft.iot.vmp.service.bean.ThirdPartyGB;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
@@ -386,9 +388,9 @@
}
@Override
- public void addStream(MediaServerItem mediaServerItem, String type, String app, String streamId, StreamInfo streamInfo) {
+ public void addStream(MediaServerItem mediaServerItem, String type, String app, String streamId, MediaItem mediaItem) {
String key = VideoManagerConstants.WVP_SERVER_STREAM_PREFIX + userSetup.getServerId() + "_" + type + "_" + app + "_" + streamId + "_" + mediaServerItem.getId();
- redis.set(key, streamInfo);
+ redis.set(key, mediaItem);
}
@Override
@@ -421,13 +423,13 @@
}
@Override
- public List<StreamInfo> getStreams(String mediaServerId, String type) {
- List<StreamInfo> result = new ArrayList<>();
+ public List<MediaItem> getStreams(String mediaServerId, String type) {
+ List<MediaItem> result = new ArrayList<>();
String key = VideoManagerConstants.WVP_SERVER_STREAM_PREFIX + userSetup.getServerId() + "_" + type + "_*_*_" + mediaServerId;
List<Object> streams = redis.scan(key);
for (Object stream : streams) {
- StreamInfo streamInfo = (StreamInfo)redis.get((String) stream);
- result.add(streamInfo);
+ MediaItem mediaItem = (MediaItem)redis.get((String) stream);
+ result.add(mediaItem);
}
return result;
}
@@ -492,4 +494,18 @@
return result;
}
+
+ @Override
+ public MediaItem getStreamInfo(String app, String streamId, String mediaServerId) {
+ String scanKey = VideoManagerConstants.WVP_SERVER_STREAM_PREFIX + userSetup.getServerId() + "_*_" + app + "_" + streamId + "_" + mediaServerId;
+
+ MediaItem result = null;
+ List<Object> keys = redis.scan(scanKey);
+ if (keys.size() > 0) {
+ String key = (String) keys.get(0);
+ result = (MediaItem)redis.get(key);
+ }
+
+ return result;
+ }
}
--
Gitblit v1.8.0