Commit f61051c46361c4863faf73db81062de0889900d4
1 parent
0eee65bc
优化streamchannge hook以及对推流的识别
Showing
14 changed files
with
129 additions
and
66 deletions
src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java
| @@ -30,7 +30,7 @@ public class StreamInfo { | @@ -30,7 +30,7 @@ public class StreamInfo { | ||
| 30 | private String rtsps; | 30 | private String rtsps; |
| 31 | private String rtc; | 31 | private String rtc; |
| 32 | private String mediaServerId; | 32 | private String mediaServerId; |
| 33 | - private JSONArray tracks; | 33 | + private Object tracks; |
| 34 | 34 | ||
| 35 | public static class TransactionInfo{ | 35 | public static class TransactionInfo{ |
| 36 | public String callId; | 36 | public String callId; |
| @@ -105,11 +105,11 @@ public class StreamInfo { | @@ -105,11 +105,11 @@ public class StreamInfo { | ||
| 105 | this.rtsp = rtsp; | 105 | this.rtsp = rtsp; |
| 106 | } | 106 | } |
| 107 | 107 | ||
| 108 | - public JSONArray getTracks() { | 108 | + public Object getTracks() { |
| 109 | return tracks; | 109 | return tracks; |
| 110 | } | 110 | } |
| 111 | 111 | ||
| 112 | - public void setTracks(JSONArray tracks) { | 112 | + public void setTracks(Object tracks) { |
| 113 | this.tracks = tracks; | 113 | this.tracks = tracks; |
| 114 | } | 114 | } |
| 115 | 115 |
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
| @@ -3,11 +3,13 @@ package com.genersoft.iot.vmp.media.zlm; | @@ -3,11 +3,13 @@ package com.genersoft.iot.vmp.media.zlm; | ||
| 3 | import java.util.List; | 3 | import java.util.List; |
| 4 | import java.util.UUID; | 4 | import java.util.UUID; |
| 5 | 5 | ||
| 6 | +import com.alibaba.fastjson.JSON; | ||
| 6 | import com.alibaba.fastjson.JSONArray; | 7 | import com.alibaba.fastjson.JSONArray; |
| 7 | import com.genersoft.iot.vmp.common.StreamInfo; | 8 | import com.genersoft.iot.vmp.common.StreamInfo; |
| 8 | import com.genersoft.iot.vmp.conf.MediaConfig; | 9 | import com.genersoft.iot.vmp.conf.MediaConfig; |
| 9 | import com.genersoft.iot.vmp.conf.UserSetup; | 10 | import com.genersoft.iot.vmp.conf.UserSetup; |
| 10 | import com.genersoft.iot.vmp.gb28181.bean.Device; | 11 | import com.genersoft.iot.vmp.gb28181.bean.Device; |
| 12 | +import com.genersoft.iot.vmp.media.zlm.dto.MediaItem; | ||
| 11 | import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; | 13 | import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; |
| 12 | import com.genersoft.iot.vmp.service.IMediaServerService; | 14 | import com.genersoft.iot.vmp.service.IMediaServerService; |
| 13 | import com.genersoft.iot.vmp.service.IMediaService; | 15 | import com.genersoft.iot.vmp.service.IMediaService; |
| @@ -258,12 +260,13 @@ public class ZLMHttpHookListener { | @@ -258,12 +260,13 @@ public class ZLMHttpHookListener { | ||
| 258 | */ | 260 | */ |
| 259 | @ResponseBody | 261 | @ResponseBody |
| 260 | @PostMapping(value = "/on_stream_changed", produces = "application/json;charset=UTF-8") | 262 | @PostMapping(value = "/on_stream_changed", produces = "application/json;charset=UTF-8") |
| 261 | - public ResponseEntity<String> onStreamChanged(@RequestBody JSONObject json){ | 263 | + public ResponseEntity<String> onStreamChanged(@RequestBody MediaItem item){ |
| 262 | 264 | ||
| 263 | if (logger.isDebugEnabled()) { | 265 | if (logger.isDebugEnabled()) { |
| 264 | - logger.debug("ZLM HOOK on_stream_changed API调用,参数:" + json.toString()); | 266 | + logger.debug("ZLM HOOK on_stream_changed API调用,参数:" + JSONObject.toJSONString(item)); |
| 265 | } | 267 | } |
| 266 | - String mediaServerId = json.getString("mediaServerId"); | 268 | + String mediaServerId = item.getMediaServerId(); |
| 269 | + JSONObject json = (JSONObject) JSON.toJSON(item); | ||
| 267 | ZLMHttpHookSubscribe.Event subscribe = this.subscribe.getSubscribe(ZLMHttpHookSubscribe.HookType.on_stream_changed, json); | 270 | ZLMHttpHookSubscribe.Event subscribe = this.subscribe.getSubscribe(ZLMHttpHookSubscribe.HookType.on_stream_changed, json); |
| 268 | if (subscribe != null ) { | 271 | if (subscribe != null ) { |
| 269 | MediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId); | 272 | MediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId); |
| @@ -272,13 +275,12 @@ public class ZLMHttpHookListener { | @@ -272,13 +275,12 @@ public class ZLMHttpHookListener { | ||
| 272 | } | 275 | } |
| 273 | 276 | ||
| 274 | } | 277 | } |
| 275 | - | ||
| 276 | // 流消失移除redis play | 278 | // 流消失移除redis play |
| 277 | - String app = json.getString("app"); | ||
| 278 | - String streamId = json.getString("stream"); | ||
| 279 | - String schema = json.getString("schema"); | ||
| 280 | - JSONArray tracks = json.getJSONArray("tracks"); | ||
| 281 | - boolean regist = json.getBoolean("regist"); | 279 | + String app = item.getApp(); |
| 280 | + String streamId = item.getStream(); | ||
| 281 | + String schema = item.getSchema(); | ||
| 282 | + List<MediaItem.MediaTrack> tracks = item.getTracks(); | ||
| 283 | + boolean regist = item.isRegist(); | ||
| 282 | if (tracks != null) { | 284 | if (tracks != null) { |
| 283 | logger.info("[stream: " + streamId + "] on_stream_changed->>" + schema); | 285 | logger.info("[stream: " + streamId + "] on_stream_changed->>" + schema); |
| 284 | } | 286 | } |
| @@ -298,24 +300,34 @@ public class ZLMHttpHookListener { | @@ -298,24 +300,34 @@ public class ZLMHttpHookListener { | ||
| 298 | redisCatchStorage.stopPlayback(streamInfo); | 300 | redisCatchStorage.stopPlayback(streamInfo); |
| 299 | } | 301 | } |
| 300 | }else { | 302 | }else { |
| 301 | - if (!"rtp".equals(app) ){ | ||
| 302 | - // 发送流变化redis消息 | ||
| 303 | - JSONObject jsonObject = new JSONObject(); | ||
| 304 | - jsonObject.put("serverId", userSetup.getServerId()); | ||
| 305 | - jsonObject.put("app", app); | ||
| 306 | - jsonObject.put("stream", streamId); | ||
| 307 | - jsonObject.put("register", regist); | ||
| 308 | - jsonObject.put("mediaServerId", mediaServerId); | ||
| 309 | - redisCatchStorage.sendStreamChangeMsg(jsonObject); | 303 | + if (!"rtp".equals(app)){ |
| 304 | + | ||
| 305 | + boolean pushChange = false; | ||
| 310 | 306 | ||
| 311 | MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId); | 307 | MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId); |
| 312 | if (regist) { | 308 | if (regist) { |
| 313 | - zlmMediaListManager.addMedia(mediaServerItem, app, streamId); | ||
| 314 | - StreamInfo streamInfo = mediaService.getStreamInfoByAppAndStream(mediaServerItem, app, streamId, tracks); | ||
| 315 | - redisCatchStorage.addStream(mediaServerItem, app, streamId, streamInfo); | 309 | + if ((item.getOriginType() == 1 || item.getOriginType() == 2 || item.getOriginType() == 8)) { |
| 310 | + pushChange = true; | ||
| 311 | + zlmMediaListManager.addMedia(item); | ||
| 312 | + StreamInfo streamInfo = mediaService.getStreamInfoByAppAndStream(mediaServerItem, app, streamId, tracks); | ||
| 313 | + redisCatchStorage.addPushStream(mediaServerItem, app, streamId, streamInfo); | ||
| 314 | + } | ||
| 316 | }else { | 315 | }else { |
| 317 | - zlmMediaListManager.removeMedia( app, streamId); | ||
| 318 | - redisCatchStorage.removeStream(mediaServerItem, app, streamId); | 316 | + int result = zlmMediaListManager.removeMedia( app, streamId); |
| 317 | + redisCatchStorage.removePushStream(mediaServerItem, app, streamId); | ||
| 318 | + if (result > 0) { | ||
| 319 | + pushChange = true; | ||
| 320 | + } | ||
| 321 | + } | ||
| 322 | + if(pushChange) { | ||
| 323 | + // 发送流变化redis消息 | ||
| 324 | + JSONObject jsonObject = new JSONObject(); | ||
| 325 | + jsonObject.put("serverId", userSetup.getServerId()); | ||
| 326 | + jsonObject.put("app", app); | ||
| 327 | + jsonObject.put("stream", streamId); | ||
| 328 | + jsonObject.put("register", regist); | ||
| 329 | + jsonObject.put("mediaServerId", mediaServerId); | ||
| 330 | + redisCatchStorage.sendStreamChangeMsg(jsonObject); | ||
| 319 | } | 331 | } |
| 320 | } | 332 | } |
| 321 | } | 333 | } |
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java
| 1 | package com.genersoft.iot.vmp.media.zlm; | 1 | package com.genersoft.iot.vmp.media.zlm; |
| 2 | 2 | ||
| 3 | import com.alibaba.fastjson.JSONObject; | 3 | import com.alibaba.fastjson.JSONObject; |
| 4 | +import com.genersoft.iot.vmp.media.zlm.dto.MediaItem; | ||
| 4 | import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; | 5 | import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; |
| 5 | import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; | 6 | import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; |
| 6 | import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem; | 7 | import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem; |
| @@ -87,6 +88,10 @@ public class ZLMMediaListManager { | @@ -87,6 +88,10 @@ public class ZLMMediaListManager { | ||
| 87 | updateMedia(mediaServerItem, app, streamId); | 88 | updateMedia(mediaServerItem, app, streamId); |
| 88 | } | 89 | } |
| 89 | 90 | ||
| 91 | + public void addMedia(MediaItem mediaItem) { | ||
| 92 | + storager.updateMedia(streamPushService.transform(mediaItem)); | ||
| 93 | + } | ||
| 94 | + | ||
| 90 | 95 | ||
| 91 | public void updateMedia(MediaServerItem mediaServerItem, String app, String streamId) { | 96 | public void updateMedia(MediaServerItem mediaServerItem, String app, String streamId) { |
| 92 | //使用异步更新推流 | 97 | //使用异步更新推流 |
| @@ -113,14 +118,16 @@ public class ZLMMediaListManager { | @@ -113,14 +118,16 @@ public class ZLMMediaListManager { | ||
| 113 | } | 118 | } |
| 114 | 119 | ||
| 115 | 120 | ||
| 116 | - public void removeMedia(String app, String streamId) { | 121 | + public int removeMedia(String app, String streamId) { |
| 117 | // 查找是否关联了国标, 关联了不删除, 置为离线 | 122 | // 查找是否关联了国标, 关联了不删除, 置为离线 |
| 118 | StreamProxyItem streamProxyItem = gbStreamMapper.selectOne(app, streamId); | 123 | StreamProxyItem streamProxyItem = gbStreamMapper.selectOne(app, streamId); |
| 124 | + int result = 0; | ||
| 119 | if (streamProxyItem == null) { | 125 | if (streamProxyItem == null) { |
| 120 | - storager.removeMedia(app, streamId); | 126 | + result = storager.removeMedia(app, streamId); |
| 121 | }else { | 127 | }else { |
| 122 | - storager.mediaOutline(app, streamId); | 128 | + result =storager.mediaOutline(app, streamId); |
| 123 | } | 129 | } |
| 130 | + return result; | ||
| 124 | } | 131 | } |
| 125 | 132 | ||
| 126 | // public void clearAllSessions() { | 133 | // public void clearAllSessions() { |
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/MediaItem.java
| @@ -5,6 +5,11 @@ import java.util.List; | @@ -5,6 +5,11 @@ import java.util.List; | ||
| 5 | public class MediaItem { | 5 | public class MediaItem { |
| 6 | 6 | ||
| 7 | /** | 7 | /** |
| 8 | + * 注册/注销 | ||
| 9 | + */ | ||
| 10 | + private boolean regist; | ||
| 11 | + | ||
| 12 | + /** | ||
| 8 | * 应用名 | 13 | * 应用名 |
| 9 | */ | 14 | */ |
| 10 | private String app; | 15 | private String app; |
| @@ -54,6 +59,11 @@ public class MediaItem { | @@ -54,6 +59,11 @@ public class MediaItem { | ||
| 54 | private String originUrl; | 59 | private String originUrl; |
| 55 | 60 | ||
| 56 | /** | 61 | /** |
| 62 | + * 服务器id | ||
| 63 | + */ | ||
| 64 | + private String mediaServerId; | ||
| 65 | + | ||
| 66 | + /** | ||
| 57 | * GMT unix系统时间戳,单位秒 | 67 | * GMT unix系统时间戳,单位秒 |
| 58 | */ | 68 | */ |
| 59 | private Long createStamp; | 69 | private Long createStamp; |
| @@ -78,6 +88,14 @@ public class MediaItem { | @@ -78,6 +88,14 @@ public class MediaItem { | ||
| 78 | */ | 88 | */ |
| 79 | private String vhost; | 89 | private String vhost; |
| 80 | 90 | ||
| 91 | + public boolean isRegist() { | ||
| 92 | + return regist; | ||
| 93 | + } | ||
| 94 | + | ||
| 95 | + public void setRegist(boolean regist) { | ||
| 96 | + this.regist = regist; | ||
| 97 | + } | ||
| 98 | + | ||
| 81 | /** | 99 | /** |
| 82 | * 是否是docker部署, docker部署不会自动更新zlm使用的端口,需要自己手动修改 | 100 | * 是否是docker部署, docker部署不会自动更新zlm使用的端口,需要自己手动修改 |
| 83 | */ | 101 | */ |
| @@ -376,4 +394,12 @@ public class MediaItem { | @@ -376,4 +394,12 @@ public class MediaItem { | ||
| 376 | public void setDocker(boolean docker) { | 394 | public void setDocker(boolean docker) { |
| 377 | this.docker = docker; | 395 | this.docker = docker; |
| 378 | } | 396 | } |
| 397 | + | ||
| 398 | + public String getMediaServerId() { | ||
| 399 | + return mediaServerId; | ||
| 400 | + } | ||
| 401 | + | ||
| 402 | + public void setMediaServerId(String mediaServerId) { | ||
| 403 | + this.mediaServerId = mediaServerId; | ||
| 404 | + } | ||
| 379 | } | 405 | } |
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamProxyItem.java
| @@ -17,6 +17,7 @@ public class StreamProxyItem extends GbStream { | @@ -17,6 +17,7 @@ public class StreamProxyItem extends GbStream { | ||
| 17 | private boolean enable; | 17 | private boolean enable; |
| 18 | private boolean enable_hls; | 18 | private boolean enable_hls; |
| 19 | private boolean enable_mp4; | 19 | private boolean enable_mp4; |
| 20 | + private boolean enable_remove_none_reader; // 无人观看时删除 | ||
| 20 | private String platformGbId; | 21 | private String platformGbId; |
| 21 | private String createTime; | 22 | private String createTime; |
| 22 | 23 | ||
| @@ -142,4 +143,12 @@ public class StreamProxyItem extends GbStream { | @@ -142,4 +143,12 @@ public class StreamProxyItem extends GbStream { | ||
| 142 | public void setCreateTime(String createTime) { | 143 | public void setCreateTime(String createTime) { |
| 143 | this.createTime = createTime; | 144 | this.createTime = createTime; |
| 144 | } | 145 | } |
| 146 | + | ||
| 147 | + public boolean isEnable_remove_none_reader() { | ||
| 148 | + return enable_remove_none_reader; | ||
| 149 | + } | ||
| 150 | + | ||
| 151 | + public void setEnable_remove_none_reader(boolean enable_remove_none_reader) { | ||
| 152 | + this.enable_remove_none_reader = enable_remove_none_reader; | ||
| 153 | + } | ||
| 145 | } | 154 | } |
src/main/java/com/genersoft/iot/vmp/service/IMediaService.java
| @@ -32,7 +32,7 @@ public interface IMediaService { | @@ -32,7 +32,7 @@ public interface IMediaService { | ||
| 32 | * @param stream | 32 | * @param stream |
| 33 | * @return | 33 | * @return |
| 34 | */ | 34 | */ |
| 35 | - StreamInfo getStreamInfoByAppAndStream(MediaServerItem mediaServerItem, String app, String stream, JSONArray tracks); | 35 | + StreamInfo getStreamInfoByAppAndStream(MediaServerItem mediaServerItem, String app, String stream, Object tracks); |
| 36 | 36 | ||
| 37 | /** | 37 | /** |
| 38 | * 根据应用名和流ID获取播放地址, 只是地址拼接,返回的ip使用远程访问ip,适用与zlm与wvp在一台主机的情况 | 38 | * 根据应用名和流ID获取播放地址, 只是地址拼接,返回的ip使用远程访问ip,适用与zlm与wvp在一台主机的情况 |
| @@ -40,5 +40,5 @@ public interface IMediaService { | @@ -40,5 +40,5 @@ public interface IMediaService { | ||
| 40 | * @param stream | 40 | * @param stream |
| 41 | * @return | 41 | * @return |
| 42 | */ | 42 | */ |
| 43 | - StreamInfo getStreamInfoByAppAndStream(MediaServerItem mediaInfo, String app, String stream, JSONArray tracks, String addr); | 43 | + StreamInfo getStreamInfoByAppAndStream(MediaServerItem mediaInfo, String app, String stream, Object tracks, String addr); |
| 44 | } | 44 | } |
src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java
| 1 | package com.genersoft.iot.vmp.service; | 1 | package com.genersoft.iot.vmp.service; |
| 2 | 2 | ||
| 3 | import com.genersoft.iot.vmp.gb28181.bean.GbStream; | 3 | import com.genersoft.iot.vmp.gb28181.bean.GbStream; |
| 4 | +import com.genersoft.iot.vmp.media.zlm.dto.MediaItem; | ||
| 4 | import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; | 5 | import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; |
| 5 | import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem; | 6 | import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem; |
| 6 | import com.github.pagehelper.PageInfo; | 7 | import com.github.pagehelper.PageInfo; |
| @@ -32,4 +33,6 @@ public interface IStreamPushService { | @@ -32,4 +33,6 @@ public interface IStreamPushService { | ||
| 32 | * @return | 33 | * @return |
| 33 | */ | 34 | */ |
| 34 | PageInfo<StreamPushItem> getPushList(Integer page, Integer count); | 35 | PageInfo<StreamPushItem> getPushList(Integer page, Integer count); |
| 36 | + | ||
| 37 | + StreamPushItem transform(MediaItem item); | ||
| 35 | } | 38 | } |
src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java
| @@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONArray; | @@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONArray; | ||
| 5 | import com.alibaba.fastjson.JSONObject; | 5 | import com.alibaba.fastjson.JSONObject; |
| 6 | import com.genersoft.iot.vmp.common.StreamInfo; | 6 | import com.genersoft.iot.vmp.common.StreamInfo; |
| 7 | import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils; | 7 | import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils; |
| 8 | +import com.genersoft.iot.vmp.media.zlm.dto.MediaItem; | ||
| 8 | import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; | 9 | import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; |
| 9 | import com.genersoft.iot.vmp.service.IMediaServerService; | 10 | import com.genersoft.iot.vmp.service.IMediaServerService; |
| 10 | import com.genersoft.iot.vmp.storager.IRedisCatchStorage; | 11 | import com.genersoft.iot.vmp.storager.IRedisCatchStorage; |
| @@ -31,7 +32,7 @@ public class MediaServiceImpl implements IMediaService { | @@ -31,7 +32,7 @@ public class MediaServiceImpl implements IMediaService { | ||
| 31 | 32 | ||
| 32 | 33 | ||
| 33 | @Override | 34 | @Override |
| 34 | - public StreamInfo getStreamInfoByAppAndStream(MediaServerItem mediaInfo, String app, String stream, JSONArray tracks) { | 35 | + public StreamInfo getStreamInfoByAppAndStream(MediaServerItem mediaInfo, String app, String stream, Object tracks) { |
| 35 | return getStreamInfoByAppAndStream(mediaInfo, app, stream, tracks, null); | 36 | return getStreamInfoByAppAndStream(mediaInfo, app, stream, tracks, null); |
| 36 | } | 37 | } |
| 37 | 38 | ||
| @@ -69,7 +70,7 @@ public class MediaServiceImpl implements IMediaService { | @@ -69,7 +70,7 @@ public class MediaServiceImpl implements IMediaService { | ||
| 69 | } | 70 | } |
| 70 | 71 | ||
| 71 | @Override | 72 | @Override |
| 72 | - public StreamInfo getStreamInfoByAppAndStream(MediaServerItem mediaInfo, String app, String stream, JSONArray tracks, String addr) { | 73 | + public StreamInfo getStreamInfoByAppAndStream(MediaServerItem mediaInfo, String app, String stream, Object tracks, String addr) { |
| 73 | StreamInfo streamInfoResult = new StreamInfo(); | 74 | StreamInfo streamInfoResult = new StreamInfo(); |
| 74 | streamInfoResult.setStreamId(stream); | 75 | streamInfoResult.setStreamId(stream); |
| 75 | streamInfoResult.setApp(app); | 76 | streamInfoResult.setApp(app); |
src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
| @@ -51,33 +51,38 @@ public class StreamPushServiceImpl implements IStreamPushService { | @@ -51,33 +51,38 @@ public class StreamPushServiceImpl implements IStreamPushService { | ||
| 51 | for (MediaItem item : mediaItems) { | 51 | for (MediaItem item : mediaItems) { |
| 52 | 52 | ||
| 53 | // 不保存国标推理以及拉流代理的流 | 53 | // 不保存国标推理以及拉流代理的流 |
| 54 | - if (item.getOriginType() == 3 || item.getOriginType() == 4 || item.getOriginType() == 5) { | ||
| 55 | - continue; | ||
| 56 | - } | ||
| 57 | - String key = item.getApp() + "_" + item.getStream(); | ||
| 58 | - StreamPushItem streamPushItem = result.get(key); | ||
| 59 | - if (streamPushItem == null) { | ||
| 60 | - streamPushItem = new StreamPushItem(); | ||
| 61 | - streamPushItem.setApp(item.getApp()); | ||
| 62 | - streamPushItem.setMediaServerId(mediaServerItem.getId()); | ||
| 63 | - streamPushItem.setStream(item.getStream()); | ||
| 64 | - streamPushItem.setAliveSecond(item.getAliveSecond()); | ||
| 65 | - streamPushItem.setCreateStamp(item.getCreateStamp()); | ||
| 66 | - streamPushItem.setOriginSock(item.getOriginSock()); | ||
| 67 | - streamPushItem.setTotalReaderCount(item.getTotalReaderCount()); | ||
| 68 | - streamPushItem.setOriginType(item.getOriginType()); | ||
| 69 | - streamPushItem.setOriginTypeStr(item.getOriginTypeStr()); | ||
| 70 | - streamPushItem.setOriginUrl(item.getOriginUrl()); | ||
| 71 | - streamPushItem.setCreateStamp(item.getCreateStamp()); | ||
| 72 | - streamPushItem.setAliveSecond(item.getAliveSecond()); | ||
| 73 | - streamPushItem.setStatus(true); | ||
| 74 | - streamPushItem.setVhost(item.getVhost()); | ||
| 75 | - result.put(key, streamPushItem); | 54 | + if (item.getOriginType() == 1 || item.getOriginType() == 2 || item.getOriginType() == 8) { |
| 55 | + String key = item.getApp() + "_" + item.getStream(); | ||
| 56 | + StreamPushItem streamPushItem = result.get(key); | ||
| 57 | + if (streamPushItem == null) { | ||
| 58 | + streamPushItem = transform(item); | ||
| 59 | + result.put(key, streamPushItem); | ||
| 60 | + } | ||
| 76 | } | 61 | } |
| 62 | + | ||
| 77 | } | 63 | } |
| 78 | 64 | ||
| 79 | return new ArrayList<>(result.values()); | 65 | return new ArrayList<>(result.values()); |
| 80 | } | 66 | } |
| 67 | + @Override | ||
| 68 | + public StreamPushItem transform(MediaItem item) { | ||
| 69 | + StreamPushItem streamPushItem = new StreamPushItem(); | ||
| 70 | + streamPushItem.setApp(item.getApp()); | ||
| 71 | + streamPushItem.setMediaServerId(item.getMediaServerId()); | ||
| 72 | + streamPushItem.setStream(item.getStream()); | ||
| 73 | + streamPushItem.setAliveSecond(item.getAliveSecond()); | ||
| 74 | + streamPushItem.setCreateStamp(item.getCreateStamp()); | ||
| 75 | + streamPushItem.setOriginSock(item.getOriginSock()); | ||
| 76 | + streamPushItem.setTotalReaderCount(item.getTotalReaderCount()); | ||
| 77 | + streamPushItem.setOriginType(item.getOriginType()); | ||
| 78 | + streamPushItem.setOriginTypeStr(item.getOriginTypeStr()); | ||
| 79 | + streamPushItem.setOriginUrl(item.getOriginUrl()); | ||
| 80 | + streamPushItem.setCreateStamp(item.getCreateStamp()); | ||
| 81 | + streamPushItem.setAliveSecond(item.getAliveSecond()); | ||
| 82 | + streamPushItem.setStatus(true); | ||
| 83 | + streamPushItem.setVhost(item.getVhost()); | ||
| 84 | + return streamPushItem; | ||
| 85 | + } | ||
| 81 | 86 | ||
| 82 | @Override | 87 | @Override |
| 83 | public PageInfo<StreamPushItem> getPushList(Integer page, Integer count) { | 88 | public PageInfo<StreamPushItem> getPushList(Integer page, Integer count) { |
src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
| @@ -135,7 +135,7 @@ public interface IRedisCatchStorage { | @@ -135,7 +135,7 @@ public interface IRedisCatchStorage { | ||
| 135 | * @param app | 135 | * @param app |
| 136 | * @param streamId | 136 | * @param streamId |
| 137 | */ | 137 | */ |
| 138 | - void addStream(MediaServerItem mediaServerItem, String app, String streamId, StreamInfo streamInfo); | 138 | + void addPushStream(MediaServerItem mediaServerItem, String app, String streamId, StreamInfo streamInfo); |
| 139 | 139 | ||
| 140 | /** | 140 | /** |
| 141 | * 移除流信息从redis | 141 | * 移除流信息从redis |
| @@ -143,5 +143,5 @@ public interface IRedisCatchStorage { | @@ -143,5 +143,5 @@ public interface IRedisCatchStorage { | ||
| 143 | * @param app | 143 | * @param app |
| 144 | * @param streamId | 144 | * @param streamId |
| 145 | */ | 145 | */ |
| 146 | - void removeStream(MediaServerItem mediaServerItem, String app, String streamId); | 146 | + void removePushStream(MediaServerItem mediaServerItem, String app, String streamId); |
| 147 | } | 147 | } |
src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
| @@ -353,7 +353,7 @@ public interface IVideoManagerStorager { | @@ -353,7 +353,7 @@ public interface IVideoManagerStorager { | ||
| 353 | * @param app | 353 | * @param app |
| 354 | * @param stream | 354 | * @param stream |
| 355 | */ | 355 | */ |
| 356 | - void removeMedia(String app, String stream); | 356 | + int removeMedia(String app, String stream); |
| 357 | 357 | ||
| 358 | 358 | ||
| 359 | /** | 359 | /** |
| @@ -366,7 +366,7 @@ public interface IVideoManagerStorager { | @@ -366,7 +366,7 @@ public interface IVideoManagerStorager { | ||
| 366 | * @param app | 366 | * @param app |
| 367 | * @param streamId | 367 | * @param streamId |
| 368 | */ | 368 | */ |
| 369 | - void mediaOutline(String app, String streamId); | 369 | + int mediaOutline(String app, String streamId); |
| 370 | 370 | ||
| 371 | /** | 371 | /** |
| 372 | * 设置平台在线/离线 | 372 | * 设置平台在线/离线 |
src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java
| @@ -53,7 +53,7 @@ public interface GbStreamMapper { | @@ -53,7 +53,7 @@ public interface GbStreamMapper { | ||
| 53 | @Update("UPDATE gb_stream " + | 53 | @Update("UPDATE gb_stream " + |
| 54 | "SET status=${status} " + | 54 | "SET status=${status} " + |
| 55 | "WHERE app=#{app} AND stream=#{stream}") | 55 | "WHERE app=#{app} AND stream=#{stream}") |
| 56 | - void setStatus(String app, String stream, boolean status); | 56 | + int setStatus(String app, String stream, boolean status); |
| 57 | 57 | ||
| 58 | @Select("SELECT gs.*, pgs.platformId FROM gb_stream gs LEFT JOIN platform_gb_stream pgs ON gs.app = pgs.app AND gs.stream = pgs.stream WHERE mediaServerId=#{mediaServerId} ") | 58 | @Select("SELECT gs.*, pgs.platformId FROM gb_stream gs LEFT JOIN platform_gb_stream pgs ON gs.app = pgs.app AND gs.stream = pgs.stream WHERE mediaServerId=#{mediaServerId} ") |
| 59 | List<GbStream> selectAllByMediaServerId(String mediaServerId); | 59 | List<GbStream> selectAllByMediaServerId(String mediaServerId); |
src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java
| @@ -308,13 +308,13 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | @@ -308,13 +308,13 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | ||
| 308 | } | 308 | } |
| 309 | 309 | ||
| 310 | @Override | 310 | @Override |
| 311 | - public void addStream(MediaServerItem mediaServerItem, String app, String streamId, StreamInfo streamInfo) { | 311 | + public void addPushStream(MediaServerItem mediaServerItem, String app, String streamId, StreamInfo streamInfo) { |
| 312 | String key = VideoManagerConstants.WVP_SERVER_STREAM_PUSH_PREFIX + app + "_" + streamId + "_" + mediaServerItem.getId(); | 312 | String key = VideoManagerConstants.WVP_SERVER_STREAM_PUSH_PREFIX + app + "_" + streamId + "_" + mediaServerItem.getId(); |
| 313 | redis.set(key, streamInfo); | 313 | redis.set(key, streamInfo); |
| 314 | } | 314 | } |
| 315 | 315 | ||
| 316 | @Override | 316 | @Override |
| 317 | - public void removeStream(MediaServerItem mediaServerItem, String app, String streamId) { | 317 | + public void removePushStream(MediaServerItem mediaServerItem, String app, String streamId) { |
| 318 | String key = VideoManagerConstants.WVP_SERVER_STREAM_PUSH_PREFIX + app + "_" + streamId + "_" + mediaServerItem.getId(); | 318 | String key = VideoManagerConstants.WVP_SERVER_STREAM_PUSH_PREFIX + app + "_" + streamId + "_" + mediaServerItem.getId(); |
| 319 | redis.del(key); | 319 | redis.del(key); |
| 320 | } | 320 | } |
src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java
| @@ -605,8 +605,8 @@ public class VideoManagerStoragerImpl implements IVideoManagerStorager { | @@ -605,8 +605,8 @@ public class VideoManagerStoragerImpl implements IVideoManagerStorager { | ||
| 605 | } | 605 | } |
| 606 | 606 | ||
| 607 | @Override | 607 | @Override |
| 608 | - public void removeMedia(String app, String stream) { | ||
| 609 | - streamPushMapper.del(app, stream); | 608 | + public int removeMedia(String app, String stream) { |
| 609 | + return streamPushMapper.del(app, stream); | ||
| 610 | } | 610 | } |
| 611 | 611 | ||
| 612 | @Override | 612 | @Override |
| @@ -615,8 +615,8 @@ public class VideoManagerStoragerImpl implements IVideoManagerStorager { | @@ -615,8 +615,8 @@ public class VideoManagerStoragerImpl implements IVideoManagerStorager { | ||
| 615 | } | 615 | } |
| 616 | 616 | ||
| 617 | @Override | 617 | @Override |
| 618 | - public void mediaOutline(String app, String streamId) { | ||
| 619 | - gbStreamMapper.setStatus(app, streamId, false); | 618 | + public int mediaOutline(String app, String streamId) { |
| 619 | + return gbStreamMapper.setStatus(app, streamId, false); | ||
| 620 | } | 620 | } |
| 621 | 621 | ||
| 622 | @Override | 622 | @Override |