Browse Source

存储所有流信息到redis

pull/276/head
648540858 3 years ago
parent
commit
2bac0b3c22
  1. 2
      src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java
  2. 24
      src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
  3. 22
      src/main/java/com/genersoft/iot/vmp/media/zlm/dto/OriginType.java
  4. 4
      src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
  5. 17
      src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java

2
src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java

@ -10,7 +10,7 @@ public class VideoManagerConstants {
public static final String WVP_SERVER_PREFIX = "VMP_SIGNALLING_SERVER_INFO_"; public static final String WVP_SERVER_PREFIX = "VMP_SIGNALLING_SERVER_INFO_";
public static final String WVP_SERVER_STREAM_PUSH_PREFIX = "VMP_SIGNALLING_STREAM_PUSH_"; public static final String WVP_SERVER_STREAM_PUSH_PREFIX = "VMP_SIGNALLING_STREAM_";
public static final String MEDIA_SERVER_PREFIX = "VMP_MEDIA_SERVER_"; public static final String MEDIA_SERVER_PREFIX = "VMP_MEDIA_SERVER_";

24
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java

@ -11,6 +11,7 @@ import com.genersoft.iot.vmp.conf.UserSetup;
import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.bean.Device;
import com.genersoft.iot.vmp.media.zlm.dto.MediaItem; 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.MediaServerItem;
import com.genersoft.iot.vmp.media.zlm.dto.OriginType;
import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
import com.genersoft.iot.vmp.service.IMediaServerService; import com.genersoft.iot.vmp.service.IMediaServerService;
import com.genersoft.iot.vmp.service.IMediaService; import com.genersoft.iot.vmp.service.IMediaService;
@ -315,24 +316,23 @@ public class ZLMHttpHookListener {
}else { }else {
if (!"rtp".equals(app)){ if (!"rtp".equals(app)){
boolean pushChange = false;
MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId); MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId);
if (regist) { if (regist) {
if ((item.getOriginType() == 1 || item.getOriginType() == 2 || item.getOriginType() == 8)) { StreamInfo streamInfo = mediaService.getStreamInfoByAppAndStream(mediaServerItem, app, streamId, tracks);
pushChange = true; redisCatchStorage.addStream(mediaServerItem, OriginType.values()[item.getOriginType()].getType(), app, streamId, streamInfo);
if (item.getOriginType() == OriginType.RTSP_PUSH.ordinal()
|| item.getOriginType() == OriginType.RTMP_PUSH.ordinal()
|| item.getOriginType() == OriginType.RTC_PUSH.ordinal() ) {
zlmMediaListManager.addMedia(item); zlmMediaListManager.addMedia(item);
StreamInfo streamInfo = mediaService.getStreamInfoByAppAndStream(mediaServerItem, app, streamId, tracks);
redisCatchStorage.addPushStream(mediaServerItem, app, streamId, streamInfo);
} }
}else { }else {
int result = zlmMediaListManager.removeMedia( app, streamId); zlmMediaListManager.removeMedia( app, streamId);
redisCatchStorage.removePushStream(mediaServerItem, app, streamId); redisCatchStorage.removeStream(mediaServerItem, OriginType.values()[item.getOriginType()].getType(), app, streamId);
if (result > 0) {
pushChange = true;
}
} }
if(pushChange) { if (item.getOriginType() == OriginType.RTSP_PUSH.ordinal()
|| item.getOriginType() == OriginType.RTMP_PUSH.ordinal()
|| item.getOriginType() == OriginType.RTC_PUSH.ordinal() ) {
// 发送流变化redis消息 // 发送流变化redis消息
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put("serverId", userSetup.getServerId()); jsonObject.put("serverId", userSetup.getServerId());

22
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/OriginType.java

@ -0,0 +1,22 @@
package com.genersoft.iot.vmp.media.zlm.dto;
public enum OriginType {
UNKNOWN("UNKNOWN"),
RTMP_PUSH("PUSH"),
RTSP_PUSH("PUSH"),
RTP_PUSH("RTP"),
RTC_PUSH("PUSH"),
PULL("PULL"),
FFMPEG_PULL("PULL"),
MP4_VOD("MP4_VOD"),
DEVICE_CHN("DEVICE_CHN");
private final String type;
OriginType(String type) {
this.type = type;
}
public String getType() {
return type;
}
}

4
src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java

@ -135,7 +135,7 @@ public interface IRedisCatchStorage {
* @param app * @param app
* @param streamId * @param streamId
*/ */
void addPushStream(MediaServerItem mediaServerItem, String app, String streamId, StreamInfo streamInfo); void addStream(MediaServerItem mediaServerItem, String type, String app, String streamId, StreamInfo streamInfo);
/** /**
* 移除流信息从redis * 移除流信息从redis
@ -143,7 +143,7 @@ public interface IRedisCatchStorage {
* @param app * @param app
* @param streamId * @param streamId
*/ */
void removePushStream(MediaServerItem mediaServerItem, String app, String streamId); void removeStream(MediaServerItem mediaServerItem, String type, String app, String streamId);
/** /**
* 开始下载录像时存入 * 开始下载录像时存入

17
src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java

@ -3,6 +3,7 @@ package com.genersoft.iot.vmp.storager.impl;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.common.StreamInfo;
import com.genersoft.iot.vmp.common.VideoManagerConstants; 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.gb28181.bean.*;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
@ -24,6 +25,9 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage {
@Autowired @Autowired
private DeviceChannelMapper deviceChannelMapper; private DeviceChannelMapper deviceChannelMapper;
@Autowired
private UserSetup userSetup;
private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
/** /**
@ -313,15 +317,18 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage {
} }
@Override @Override
public void addPushStream(MediaServerItem mediaServerItem, String app, String streamId, StreamInfo streamInfo) { public void addStream(MediaServerItem mediaServerItem, String type, String app, String streamId, StreamInfo streamInfo) {
String key = VideoManagerConstants.WVP_SERVER_STREAM_PUSH_PREFIX + app + "_" + streamId + "_" + mediaServerItem.getId(); String key = VideoManagerConstants.WVP_SERVER_STREAM_PUSH_PREFIX + userSetup.getServerId() + "_" + type + "_" + app + "_" + streamId + "_" + mediaServerItem.getId();
redis.set(key, streamInfo); redis.set(key, streamInfo);
} }
@Override @Override
public void removePushStream(MediaServerItem mediaServerItem, String app, String streamId) { public void removeStream(MediaServerItem mediaServerItem, String type, String app, String streamId) {
String key = VideoManagerConstants.WVP_SERVER_STREAM_PUSH_PREFIX + app + "_" + streamId + "_" + mediaServerItem.getId(); String key = VideoManagerConstants.WVP_SERVER_STREAM_PUSH_PREFIX + userSetup.getServerId() + "_*_" + app + "_" + streamId + "_" + mediaServerItem.getId();
redis.del(key); List<Object> streams = redis.scan(key);
for (Object stream : streams) {
redis.del((String) stream);
}
} }
@Override @Override

Loading…
Cancel
Save