Commit 098dd8a04515c9dbb143ab39678c2a71a03ec427

Authored by lin
1 parent abb60593

优化推流结束时流类型的获取

src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
... ... @@ -343,24 +343,16 @@ public class ZLMHttpHookListener {
343 343 MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId);
344 344 if (mediaServerItem != null){
345 345 if (regist) {
346   - StreamInfo streamInfo = mediaService.getStreamInfoByAppAndStream(mediaServerItem, app, streamId, tracks);
347   - redisCatchStorage.addStream(mediaServerItem, type, app, streamId, streamInfo);
  346 + redisCatchStorage.addStream(mediaServerItem, type, app, streamId, item);
348 347 if (item.getOriginType() == OriginType.RTSP_PUSH.ordinal()
349 348 || item.getOriginType() == OriginType.RTMP_PUSH.ordinal()
350 349 || item.getOriginType() == OriginType.RTC_PUSH.ordinal() ) {
351 350 zlmMediaListManager.addPush(item);
352 351 }
353 352 }else {
354   - // 兼容流注销时类型错误的问题,等zlm更新后删除
355   - StreamPushItem streamPushItem = streamPushService.getPush(app, streamId);
356   - if (streamPushItem != null) {
357   - type = "PUSH";
358   - }else {
359   - StreamProxyItem streamProxyByAppAndStream = streamProxyService.getStreamProxyByAppAndStream(app, streamId);
360   - if (streamProxyByAppAndStream != null) {
361   - type = "PULL";
362   - }
363   - }
  353 + // 兼容流注销时类型从redis记录获取
  354 + MediaItem mediaItem = redisCatchStorage.getStreamInfo(app, streamId, mediaServerId);
  355 + type = OriginType.values()[mediaItem.getOriginType()].getType();
364 356 zlmMediaListManager.removeMedia(app, streamId);
365 357 redisCatchStorage.removeStream(mediaServerItem.getId(), type, app, streamId);
366 358 }
... ...
src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java
... ... @@ -279,18 +279,18 @@ public class StreamProxyServiceImpl implements IStreamProxyService {
279 279 String type = "PULL";
280 280  
281 281 // 发送redis消息
282   - List<StreamInfo> streamInfoList = redisCatchStorage.getStreams(mediaServerId, type);
283   - if (streamInfoList.size() > 0) {
284   - for (StreamInfo streamInfo : streamInfoList) {
  282 + List<MediaItem> mediaItems = redisCatchStorage.getStreams(mediaServerId, type);
  283 + if (mediaItems.size() > 0) {
  284 + for (MediaItem mediaItem : mediaItems) {
285 285 JSONObject jsonObject = new JSONObject();
286 286 jsonObject.put("serverId", userSetup.getServerId());
287   - jsonObject.put("app", streamInfo.getApp());
288   - jsonObject.put("stream", streamInfo.getStreamId());
  287 + jsonObject.put("app", mediaItem.getApp());
  288 + jsonObject.put("stream", mediaItem.getStream());
289 289 jsonObject.put("register", false);
290 290 jsonObject.put("mediaServerId", mediaServerId);
291 291 redisCatchStorage.sendStreamChangeMsg(type, jsonObject);
292 292 // 移除redis内流的信息
293   - redisCatchStorage.removeStream(mediaServerId, type, streamInfo.getApp(), streamInfo.getStreamId());
  293 + redisCatchStorage.removeStream(mediaServerId, type, mediaItem.getApp(), mediaItem.getStream());
294 294 }
295 295 }
296 296 }
... ...
src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
... ... @@ -173,16 +173,16 @@ public class StreamPushServiceImpl implements IStreamPushService {
173 173 List<StreamPushItem> pushList = getPushList(mediaServerId);
174 174 Map<String, StreamPushItem> pushItemMap = new HashMap<>();
175 175 // redis记录
176   - List<StreamInfo> streamInfoPushList = redisCatchStorage.getStreams(mediaServerId, "PUSH");
177   - Map<String, StreamInfo> streamInfoPushItemMap = new HashMap<>();
  176 + List<MediaItem> mediaItems = redisCatchStorage.getStreams(mediaServerId, "PUSH");
  177 + Map<String, MediaItem> streamInfoPushItemMap = new HashMap<>();
178 178 if (pushList.size() > 0) {
179 179 for (StreamPushItem streamPushItem : pushList) {
180 180 pushItemMap.put(streamPushItem.getApp() + streamPushItem.getStream(), streamPushItem);
181 181 }
182 182 }
183   - if (streamInfoPushList.size() > 0) {
184   - for (StreamInfo streamInfo : streamInfoPushList) {
185   - streamInfoPushItemMap.put(streamInfo.getApp() + streamInfo.getStreamId(), streamInfo);
  183 + if (mediaItems.size() > 0) {
  184 + for (MediaItem mediaItem : mediaItems) {
  185 + streamInfoPushItemMap.put(mediaItem.getApp() + mediaItem.getStream(), mediaItem);
186 186 }
187 187 }
188 188 zlmresTfulUtils.getMediaList(mediaServerItem, (mediaList ->{
... ... @@ -221,19 +221,19 @@ public class StreamPushServiceImpl implements IStreamPushService {
221 221 }
222 222  
223 223 }
224   - Collection<StreamInfo> offlineStreamInfoItems = streamInfoPushItemMap.values();
225   - if (offlineStreamInfoItems.size() > 0) {
  224 + Collection<MediaItem> offlineMediaItemList = streamInfoPushItemMap.values();
  225 + if (offlineMediaItemList.size() > 0) {
226 226 String type = "PUSH";
227   - for (StreamInfo offlineStreamInfoItem : offlineStreamInfoItems) {
  227 + for (MediaItem offlineMediaItem : offlineMediaItemList) {
228 228 JSONObject jsonObject = new JSONObject();
229 229 jsonObject.put("serverId", userSetup.getServerId());
230   - jsonObject.put("app", offlineStreamInfoItem.getApp());
231   - jsonObject.put("stream", offlineStreamInfoItem.getStreamId());
  230 + jsonObject.put("app", offlineMediaItem.getApp());
  231 + jsonObject.put("stream", offlineMediaItem.getStream());
232 232 jsonObject.put("register", false);
233 233 jsonObject.put("mediaServerId", mediaServerId);
234 234 redisCatchStorage.sendStreamChangeMsg(type, jsonObject);
235 235 // 移除redis内流的信息
236   - redisCatchStorage.removeStream(mediaServerItem.getId(), "PUSH", offlineStreamInfoItem.getApp(), offlineStreamInfoItem.getStreamId());
  236 + redisCatchStorage.removeStream(mediaServerItem.getId(), "PUSH", offlineMediaItem.getApp(), offlineMediaItem.getStream());
237 237 }
238 238 }
239 239 }));
... ... @@ -250,15 +250,15 @@ public class StreamPushServiceImpl implements IStreamPushService {
250 250 // 发送流停止消息
251 251 String type = "PUSH";
252 252 // 发送redis消息
253   - List<StreamInfo> streamInfoList = redisCatchStorage.getStreams(mediaServerId, type);
  253 + List<MediaItem> streamInfoList = redisCatchStorage.getStreams(mediaServerId, type);
254 254 if (streamInfoList.size() > 0) {
255   - for (StreamInfo streamInfo : streamInfoList) {
  255 + for (MediaItem mediaItem : streamInfoList) {
256 256 // 移除redis内流的信息
257   - redisCatchStorage.removeStream(mediaServerId, type, streamInfo.getApp(), streamInfo.getStreamId());
  257 + redisCatchStorage.removeStream(mediaServerId, type, mediaItem.getApp(), mediaItem.getStream());
258 258 JSONObject jsonObject = new JSONObject();
259 259 jsonObject.put("serverId", userSetup.getServerId());
260   - jsonObject.put("app", streamInfo.getApp());
261   - jsonObject.put("stream", streamInfo.getStreamId());
  260 + jsonObject.put("app", mediaItem.getApp());
  261 + jsonObject.put("stream", mediaItem.getStream());
262 262 jsonObject.put("register", false);
263 263 jsonObject.put("mediaServerId", mediaServerId);
264 264 redisCatchStorage.sendStreamChangeMsg(type, jsonObject);
... ...
src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
... ... @@ -3,7 +3,9 @@ package com.genersoft.iot.vmp.storager;
3 3 import com.alibaba.fastjson.JSONObject;
4 4 import com.genersoft.iot.vmp.common.StreamInfo;
5 5 import com.genersoft.iot.vmp.gb28181.bean.*;
  6 +import com.genersoft.iot.vmp.media.zlm.dto.MediaItem;
6 7 import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
  8 +import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
7 9 import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
8 10 import com.genersoft.iot.vmp.service.bean.ThirdPartyGB;
9 11  
... ... @@ -143,7 +145,7 @@ public interface IRedisCatchStorage {
143 145 * @param app
144 146 * @param streamId
145 147 */
146   - void addStream(MediaServerItem mediaServerItem, String type, String app, String streamId, StreamInfo streamInfo);
  148 + void addStream(MediaServerItem mediaServerItem, String type, String app, String streamId, MediaItem item);
147 149  
148 150 /**
149 151 * 移除流信息从redis
... ... @@ -175,7 +177,7 @@ public interface IRedisCatchStorage {
175 177 */
176 178 ThirdPartyGB queryMemberNoGBId(String queryKey);
177 179  
178   - List<StreamInfo> getStreams(String mediaServerId, String pull);
  180 + List<MediaItem> getStreams(String mediaServerId, String pull);
179 181  
180 182 /**
181 183 * 将device信息写入redis
... ... @@ -206,4 +208,6 @@ public interface IRedisCatchStorage {
206 208 SubscribeInfo getSubscribe(String key);
207 209  
208 210 void delSubscribe(String key);
  211 +
  212 + MediaItem getStreamInfo(String app, String streamId, String mediaServerId);
209 213 }
... ...
src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java
... ... @@ -5,7 +5,9 @@ import com.genersoft.iot.vmp.common.StreamInfo;
5 5 import com.genersoft.iot.vmp.common.VideoManagerConstants;
6 6 import com.genersoft.iot.vmp.conf.UserSetup;
7 7 import com.genersoft.iot.vmp.gb28181.bean.*;
  8 +import com.genersoft.iot.vmp.media.zlm.dto.MediaItem;
8 9 import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
  10 +import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
9 11 import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
10 12 import com.genersoft.iot.vmp.service.bean.ThirdPartyGB;
11 13 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
... ... @@ -386,9 +388,9 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage {
386 388 }
387 389  
388 390 @Override
389   - public void addStream(MediaServerItem mediaServerItem, String type, String app, String streamId, StreamInfo streamInfo) {
  391 + public void addStream(MediaServerItem mediaServerItem, String type, String app, String streamId, MediaItem mediaItem) {
390 392 String key = VideoManagerConstants.WVP_SERVER_STREAM_PREFIX + userSetup.getServerId() + "_" + type + "_" + app + "_" + streamId + "_" + mediaServerItem.getId();
391   - redis.set(key, streamInfo);
  393 + redis.set(key, mediaItem);
392 394 }
393 395  
394 396 @Override
... ... @@ -421,13 +423,13 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage {
421 423 }
422 424  
423 425 @Override
424   - public List<StreamInfo> getStreams(String mediaServerId, String type) {
425   - List<StreamInfo> result = new ArrayList<>();
  426 + public List<MediaItem> getStreams(String mediaServerId, String type) {
  427 + List<MediaItem> result = new ArrayList<>();
426 428 String key = VideoManagerConstants.WVP_SERVER_STREAM_PREFIX + userSetup.getServerId() + "_" + type + "_*_*_" + mediaServerId;
427 429 List<Object> streams = redis.scan(key);
428 430 for (Object stream : streams) {
429   - StreamInfo streamInfo = (StreamInfo)redis.get((String) stream);
430   - result.add(streamInfo);
  431 + MediaItem mediaItem = (MediaItem)redis.get((String) stream);
  432 + result.add(mediaItem);
431 433 }
432 434 return result;
433 435 }
... ... @@ -492,4 +494,18 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage {
492 494  
493 495 return result;
494 496 }
  497 +
  498 + @Override
  499 + public MediaItem getStreamInfo(String app, String streamId, String mediaServerId) {
  500 + String scanKey = VideoManagerConstants.WVP_SERVER_STREAM_PREFIX + userSetup.getServerId() + "_*_" + app + "_" + streamId + "_" + mediaServerId;
  501 +
  502 + MediaItem result = null;
  503 + List<Object> keys = redis.scan(scanKey);
  504 + if (keys.size() > 0) {
  505 + String key = (String) keys.get(0);
  506 + result = (MediaItem)redis.get(key);
  507 + }
  508 +
  509 + return result;
  510 + }
495 511 }
... ...