Commit f7e39141db04ae209f436f359e781cea6a978051
1 parent
c9f091d5
修复重启服务后拉流代理回复失败的问题
Showing
6 changed files
with
52 additions
and
10 deletions
src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java
| @@ -175,3 +175,4 @@ public class CatalogEventLister implements ApplicationListener<CatalogEvent> { | @@ -175,3 +175,4 @@ public class CatalogEventLister implements ApplicationListener<CatalogEvent> { | ||
| 175 | } | 175 | } |
| 176 | } | 176 | } |
| 177 | } | 177 | } |
| 178 | + | ||
| 178 | \ No newline at end of file | 179 | \ No newline at end of file |
src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java
| 1 | package com.genersoft.iot.vmp.service.impl; | 1 | package com.genersoft.iot.vmp.service.impl; |
| 2 | 2 | ||
| 3 | +import com.alibaba.fastjson.JSONArray; | ||
| 3 | import com.alibaba.fastjson.JSONObject; | 4 | import com.alibaba.fastjson.JSONObject; |
| 4 | import com.genersoft.iot.vmp.common.StreamInfo; | 5 | import com.genersoft.iot.vmp.common.StreamInfo; |
| 5 | import com.genersoft.iot.vmp.conf.SipConfig; | 6 | import com.genersoft.iot.vmp.conf.SipConfig; |
| @@ -285,9 +286,12 @@ public class StreamProxyServiceImpl implements IStreamProxyService { | @@ -285,9 +286,12 @@ public class StreamProxyServiceImpl implements IStreamProxyService { | ||
| 285 | } | 286 | } |
| 286 | streamProxyMapper.deleteAutoRemoveItemByMediaServerId(mediaServerId); | 287 | streamProxyMapper.deleteAutoRemoveItemByMediaServerId(mediaServerId); |
| 287 | 288 | ||
| 289 | + // 移除拉流代理生成的流信息 | ||
| 290 | +// syncPullStream(mediaServerId); | ||
| 291 | + | ||
| 288 | // 恢复流代理, 只查找这个这个流媒体 | 292 | // 恢复流代理, 只查找这个这个流媒体 |
| 289 | List<StreamProxyItem> streamProxyListForEnable = storager.getStreamProxyListForEnableInMediaServer( | 293 | List<StreamProxyItem> streamProxyListForEnable = storager.getStreamProxyListForEnableInMediaServer( |
| 290 | - mediaServerId, true, false); | 294 | + mediaServerId, true); |
| 291 | for (StreamProxyItem streamProxyDto : streamProxyListForEnable) { | 295 | for (StreamProxyItem streamProxyDto : streamProxyListForEnable) { |
| 292 | logger.info("恢复流代理," + streamProxyDto.getApp() + "/" + streamProxyDto.getStream()); | 296 | logger.info("恢复流代理," + streamProxyDto.getApp() + "/" + streamProxyDto.getStream()); |
| 293 | JSONObject jsonObject = addStreamProxyToZlm(streamProxyDto); | 297 | JSONObject jsonObject = addStreamProxyToZlm(streamProxyDto); |
| @@ -339,4 +343,45 @@ public class StreamProxyServiceImpl implements IStreamProxyService { | @@ -339,4 +343,45 @@ public class StreamProxyServiceImpl implements IStreamProxyService { | ||
| 339 | public int updateStatus(boolean status, String app, String stream) { | 343 | public int updateStatus(boolean status, String app, String stream) { |
| 340 | return streamProxyMapper.updateStatus(status, app, stream); | 344 | return streamProxyMapper.updateStatus(status, app, stream); |
| 341 | } | 345 | } |
| 346 | + | ||
| 347 | + private void syncPullStream(String mediaServerId){ | ||
| 348 | + MediaServerItem mediaServer = mediaServerService.getOne(mediaServerId); | ||
| 349 | + if (mediaServer != null) { | ||
| 350 | + List<MediaItem> allPullStream = redisCatchStorage.getStreams(mediaServerId, "PULL"); | ||
| 351 | + if (allPullStream.size() > 0) { | ||
| 352 | + zlmresTfulUtils.getMediaList(mediaServer, jsonObject->{ | ||
| 353 | + Map<String, StreamInfo> stringStreamInfoMap = new HashMap<>(); | ||
| 354 | + if (jsonObject.getInteger("code") == 0) { | ||
| 355 | + JSONArray data = jsonObject.getJSONArray("data"); | ||
| 356 | + if(data != null && data.size() > 0) { | ||
| 357 | + for (int i = 0; i < data.size(); i++) { | ||
| 358 | + JSONObject streamJSONObj = data.getJSONObject(i); | ||
| 359 | + if ("rtmp".equals(streamJSONObj.getString("schema"))) { | ||
| 360 | + StreamInfo streamInfo = new StreamInfo(); | ||
| 361 | + String app = streamJSONObj.getString("app"); | ||
| 362 | + String stream = streamJSONObj.getString("stream"); | ||
| 363 | + streamInfo.setApp(app); | ||
| 364 | + streamInfo.setStream(stream); | ||
| 365 | + stringStreamInfoMap.put(app+stream, streamInfo); | ||
| 366 | + } | ||
| 367 | + } | ||
| 368 | + } | ||
| 369 | + } | ||
| 370 | + if (stringStreamInfoMap.size() == 0) { | ||
| 371 | + redisCatchStorage.removeStream(mediaServerId, "PULL"); | ||
| 372 | + }else { | ||
| 373 | + for (String key : stringStreamInfoMap.keySet()) { | ||
| 374 | + StreamInfo streamInfo = stringStreamInfoMap.get(key); | ||
| 375 | + if (stringStreamInfoMap.get(streamInfo.getApp() + streamInfo.getStream()) == null) { | ||
| 376 | + redisCatchStorage.removeStream(mediaServerId, "PULL", streamInfo.getApp(), | ||
| 377 | + streamInfo.getStream()); | ||
| 378 | + } | ||
| 379 | + } | ||
| 380 | + } | ||
| 381 | + }); | ||
| 382 | + } | ||
| 383 | + | ||
| 384 | + } | ||
| 385 | + | ||
| 386 | + } | ||
| 342 | } | 387 | } |
src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorage.java
| @@ -401,10 +401,9 @@ public interface IVideoManagerStorage { | @@ -401,10 +401,9 @@ public interface IVideoManagerStorage { | ||
| 401 | * 根据媒体ID获取启用/不启用的代理列表 | 401 | * 根据媒体ID获取启用/不启用的代理列表 |
| 402 | * @param id 媒体ID | 402 | * @param id 媒体ID |
| 403 | * @param enable 启用/不启用 | 403 | * @param enable 启用/不启用 |
| 404 | - * @param status 状态 | ||
| 405 | * @return | 404 | * @return |
| 406 | */ | 405 | */ |
| 407 | - List<StreamProxyItem> getStreamProxyListForEnableInMediaServer(String id, boolean enable, boolean status); | 406 | + List<StreamProxyItem> getStreamProxyListForEnableInMediaServer(String id, boolean enable); |
| 408 | 407 | ||
| 409 | /** | 408 | /** |
| 410 | * 根据通道ID获取其所在设备 | 409 | * 根据通道ID获取其所在设备 |
src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java
| @@ -51,8 +51,8 @@ public interface StreamProxyMapper { | @@ -51,8 +51,8 @@ public interface StreamProxyMapper { | ||
| 51 | 51 | ||
| 52 | @Select("SELECT st.*, pgs.gbId, pgs.name, pgs.longitude, pgs.latitude FROM stream_proxy st " + | 52 | @Select("SELECT st.*, pgs.gbId, pgs.name, pgs.longitude, pgs.latitude FROM stream_proxy st " + |
| 53 | "LEFT JOIN gb_stream pgs on st.app = pgs.app AND st.stream = pgs.stream " + | 53 | "LEFT JOIN gb_stream pgs on st.app = pgs.app AND st.stream = pgs.stream " + |
| 54 | - "WHERE st.enable=${enable} and st.status=${status} and st.mediaServerId = '${id}' order by st.createTime desc") | ||
| 55 | - List<StreamProxyItem> selectForEnableInMediaServer(String id, boolean enable, boolean status); | 54 | + "WHERE st.enable=${enable} and st.mediaServerId = #{id} order by st.createTime desc") |
| 55 | + List<StreamProxyItem> selectForEnableInMediaServer(String id, boolean enable); | ||
| 56 | 56 | ||
| 57 | @Select("SELECT st.*, pgs.gbId, pgs.name, pgs.longitude, pgs.latitude FROM stream_proxy st " + | 57 | @Select("SELECT st.*, pgs.gbId, pgs.name, pgs.longitude, pgs.latitude FROM stream_proxy st " + |
| 58 | "LEFT JOIN gb_stream pgs on st.app = pgs.app AND st.stream = pgs.stream " + | 58 | "LEFT JOIN gb_stream pgs on st.app = pgs.app AND st.stream = pgs.stream " + |
src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java
| @@ -911,8 +911,8 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage { | @@ -911,8 +911,8 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage { | ||
| 911 | } | 911 | } |
| 912 | 912 | ||
| 913 | @Override | 913 | @Override |
| 914 | - public List<StreamProxyItem> getStreamProxyListForEnableInMediaServer(String id, boolean enable, boolean status) { | ||
| 915 | - return streamProxyMapper.selectForEnableInMediaServer(id, enable, status); | 914 | + public List<StreamProxyItem> getStreamProxyListForEnableInMediaServer(String id, boolean enable) { |
| 915 | + return streamProxyMapper.selectForEnableInMediaServer(id, enable); | ||
| 916 | } | 916 | } |
| 917 | 917 | ||
| 918 | 918 |