From 89a9ab4534f10a224f70e546db838423e84a1965 Mon Sep 17 00:00:00 2001 From: 64850858 <648540858@qq.com> Date: 星期五, 16 七月 2021 16:34:51 +0800 Subject: [PATCH] 添加zlm集群支持 --- src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java | 76 ++++++++++++++++++++------------------ 1 files changed, 40 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java index ed069f8..5919c9f 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java @@ -5,6 +5,8 @@ import com.genersoft.iot.vmp.conf.MediaConfig; import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem; import com.genersoft.iot.vmp.gb28181.session.SsrcUtil; +import com.genersoft.iot.vmp.media.zlm.dto.IMediaServerItem; +import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -30,10 +32,10 @@ private Map<String, Integer> currentStreams = null; - public int createRTPServer(String streamId) { + public int createRTPServer(IMediaServerItem mediaServerItem, String streamId) { if (currentStreams == null) { currentStreams = new HashMap<>(); - JSONObject jsonObject = zlmresTfulUtils.listRtpServer(); + JSONObject jsonObject = zlmresTfulUtils.listRtpServer(mediaServerItem); if (jsonObject != null) { JSONArray data = jsonObject.getJSONArray("data"); if (data != null) { @@ -48,7 +50,7 @@ if (currentStreams.get(streamId) != null) { Map<String, Object> closeRtpServerParam = new HashMap<>(); closeRtpServerParam.put("stream_id", streamId); - zlmresTfulUtils.closeRtpServer(closeRtpServerParam); + zlmresTfulUtils.closeRtpServer(mediaServerItem, closeRtpServerParam); currentStreams.remove(streamId); } @@ -58,7 +60,7 @@ param.put("port", newPort); param.put("enable_tcp", 1); param.put("stream_id", streamId); - JSONObject jsonObject = zlmresTfulUtils.openRtpServer(param); + JSONObject jsonObject = zlmresTfulUtils.openRtpServer(mediaServerItem, param); if (jsonObject != null) { switch (jsonObject.getInteger("code")){ @@ -68,11 +70,11 @@ case -300: // id宸茬粡瀛樺湪, 鍙兘宸茬粡鍦ㄥ叾浠栫鍙f帹娴� Map<String, Object> closeRtpServerParam = new HashMap<>(); closeRtpServerParam.put("stream_id", streamId); - zlmresTfulUtils.closeRtpServer(closeRtpServerParam); + zlmresTfulUtils.closeRtpServer(mediaServerItem, closeRtpServerParam); result = newPort; break; case -400: // 绔彛鍗犵敤 - result= createRTPServer(streamId); + result= createRTPServer(mediaServerItem, streamId); break; default: logger.error("鍒涘缓RTP Server 澶辫触 {}: " + jsonObject.getString("msg"), newPort); @@ -85,20 +87,22 @@ return result; } - public boolean closeRTPServer(String streamId) { + public boolean closeRTPServer(IMediaServerItem serverItem, String streamId) { boolean result = false; - Map<String, Object> param = new HashMap<>(); - param.put("stream_id", streamId); - JSONObject jsonObject = zlmresTfulUtils.closeRtpServer(param); - if (jsonObject != null ) { - if (jsonObject.getInteger("code") == 0) { - result = jsonObject.getInteger("hit") == 1; + if (serverItem !=null){ + Map<String, Object> param = new HashMap<>(); + param.put("stream_id", streamId); + JSONObject jsonObject = zlmresTfulUtils.closeRtpServer(serverItem, param); + if (jsonObject != null ) { + if (jsonObject.getInteger("code") == 0) { + result = jsonObject.getInteger("hit") == 1; + }else { + logger.error("鍏抽棴RTP Server 澶辫触: " + jsonObject.getString("msg")); + } }else { - logger.error("鍏抽棴RTP Server 澶辫触: " + jsonObject.getString("msg")); + // 妫�鏌LM鐘舵�� + logger.error("鍏抽棴RTP Server 澶辫触: 璇锋鏌LM鏈嶅姟"); } - }else { - // 妫�鏌LM鐘舵�� - logger.error("鍏抽棴RTP Server 澶辫触: 璇锋鏌LM鏈嶅姟"); } return result; } @@ -131,11 +135,11 @@ * @param tcp 鏄惁涓簍cp * @return SendRtpItem */ - public SendRtpItem createSendRtpItem(String ip, int port, String ssrc, String platformId, String deviceId, String channelId, boolean tcp){ + public SendRtpItem createSendRtpItem(IMediaServerItem serverItem, String ip, int port, String ssrc, String platformId, String deviceId, String channelId, boolean tcp){ String playSsrc = SsrcUtil.getPlaySsrc(); - int localPort = createRTPServer(SsrcUtil.getPlaySsrc()); + int localPort = createRTPServer(serverItem, SsrcUtil.getPlaySsrc()); if (localPort != -1) { - closeRTPServer(playSsrc); + closeRTPServer(serverItem, playSsrc); }else { logger.error("娌℃湁鍙敤鐨勭鍙�"); return null; @@ -150,6 +154,7 @@ sendRtpItem.setTcp(tcp); sendRtpItem.setApp("rtp"); sendRtpItem.setLocalPort(localPort); + sendRtpItem.setMediaServerId(serverItem.getId()); return sendRtpItem; } @@ -163,11 +168,11 @@ * @param tcp 鏄惁涓簍cp * @return SendRtpItem */ - public SendRtpItem createSendRtpItem(String ip, int port, String ssrc, String platformId, String app, String stream, String channelId, boolean tcp){ + public SendRtpItem createSendRtpItem(IMediaServerItem serverItem, String ip, int port, String ssrc, String platformId, String app, String stream, String channelId, boolean tcp){ String playSsrc = SsrcUtil.getPlaySsrc(); - int localPort = createRTPServer(SsrcUtil.getPlaySsrc()); + int localPort = createRTPServer(serverItem, SsrcUtil.getPlaySsrc()); if (localPort != -1) { - closeRTPServer(playSsrc); + closeRTPServer(serverItem, playSsrc); }else { logger.error("娌℃湁鍙敤鐨勭鍙�"); return null; @@ -182,21 +187,21 @@ sendRtpItem.setChannelId(channelId); sendRtpItem.setTcp(tcp); sendRtpItem.setLocalPort(localPort); + sendRtpItem.setMediaServerId(serverItem.getId()); return sendRtpItem; } /** * 璋冪敤zlm RESTful API 鈥斺�� startSendRtp */ - public Boolean startSendRtpStream(Map<String, Object>param) { + public Boolean startSendRtpStream(IMediaServerItem mediaServerItem, Map<String, Object>param) { Boolean result = false; - JSONObject jsonObject = zlmresTfulUtils.startSendRtp(param); - logger.info(jsonObject.toJSONString()); + JSONObject jsonObject = zlmresTfulUtils.startSendRtp(mediaServerItem, param); if (jsonObject == null) { logger.error("RTP鎺ㄦ祦澶辫触: 璇锋鏌LM鏈嶅姟"); } else if (jsonObject.getInteger("code") == 0) { result= true; - logger.info("RTP鎺ㄦ祦璇锋眰鎴愬姛锛屾湰鍦版帹娴佺鍙o細" + jsonObject.getString("local_port")); + logger.info("RTP鎺ㄦ祦[ {}/{} ]璇锋眰鎴愬姛锛屾湰鍦版帹娴佺鍙o細{}" ,param.get("app"), param.get("stream"), jsonObject.getString("local_port")); } else { logger.error("RTP鎺ㄦ祦澶辫触: " + jsonObject.getString("msg")); } @@ -206,16 +211,16 @@ /** * 鏌ヨ寰呰浆鎺ㄧ殑娴佹槸鍚﹀氨缁� */ - public Boolean isRtpReady(String streamId) { - JSONObject mediaInfo = zlmresTfulUtils.getMediaInfo("rtp", "rtmp", streamId); + public Boolean isRtpReady(MediaServerItem mediaServerItem, String streamId) { + JSONObject mediaInfo = zlmresTfulUtils.getMediaInfo(mediaServerItem,"rtp", "rtmp", streamId); return (mediaInfo.getInteger("code") == 0 && mediaInfo.getBoolean("online")); } /** * 鏌ヨ寰呰浆鎺ㄧ殑娴佹槸鍚﹀氨缁� */ - public Boolean isStreamReady(String app, String streamId) { - JSONObject mediaInfo = zlmresTfulUtils.getMediaInfo(app, "rtmp", streamId); + public Boolean isStreamReady(IMediaServerItem mediaServerItem, String app, String streamId) { + JSONObject mediaInfo = zlmresTfulUtils.getMediaInfo(mediaServerItem, app, "rtmp", streamId); return (mediaInfo.getInteger("code") == 0 && mediaInfo.getBoolean("online")); } @@ -224,18 +229,17 @@ * @param streamId * @return */ - public int totalReaderCount(String app, String streamId) { - JSONObject mediaInfo = zlmresTfulUtils.getMediaInfo(app, "rtmp", streamId); + public int totalReaderCount(IMediaServerItem mediaServerItem, String app, String streamId) { + JSONObject mediaInfo = zlmresTfulUtils.getMediaInfo(mediaServerItem, app, "rtmp", streamId); return mediaInfo.getInteger("totalReaderCount"); } /** * 璋冪敤zlm RESTful API 鈥斺�� stopSendRtp */ - public Boolean stopSendRtpStream(Map<String, Object>param) { + public Boolean stopSendRtpStream(IMediaServerItem mediaServerItem,Map<String, Object>param) { Boolean result = false; - JSONObject jsonObject = zlmresTfulUtils.stopSendRtp(param); - logger.info(jsonObject.toJSONString()); + JSONObject jsonObject = zlmresTfulUtils.stopSendRtp(mediaServerItem, param); if (jsonObject == null) { logger.error("鍋滄RTP鎺ㄦ祦澶辫触: 璇锋鏌LM鏈嶅姟"); } else if (jsonObject.getInteger("code") == 0) { -- Gitblit v1.8.0