From 0eee65bc424cbdb348052ba4ef6b91add28bc6a4 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期三, 24 十一月 2021 10:02:47 +0800 Subject: [PATCH] 保存拉流代理返回结果添加streamInfo --- src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java | 55 ++++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 40 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java index b7aebf4..e35f059 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java @@ -3,15 +3,15 @@ import java.util.List; import java.util.UUID; -import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.conf.MediaConfig; import com.genersoft.iot.vmp.conf.UserSetup; import com.genersoft.iot.vmp.gb28181.bean.Device; -import com.genersoft.iot.vmp.media.zlm.dto.IMediaServerItem; import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; import com.genersoft.iot.vmp.service.IMediaServerService; +import com.genersoft.iot.vmp.service.IMediaService; +import com.genersoft.iot.vmp.service.bean.SSRCInfo; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IVideoManagerStorager; import com.genersoft.iot.vmp.service.IPlayService; @@ -32,7 +32,7 @@ import javax.servlet.http.HttpServletRequest; /** - * @Description:閽堝 ZLMediaServer鐨刪ook浜嬩欢鐩戝惉 + * @description:閽堝 ZLMediaServer鐨刪ook浜嬩欢鐩戝惉 * @author: swwheihei * @date: 2020骞�5鏈�8鏃� 涓婂崍10:46:48 */ @@ -41,7 +41,6 @@ public class ZLMHttpHookListener { private final static Logger logger = LoggerFactory.getLogger(ZLMHttpHookListener.class); - @Autowired private SIPCommander cmder; @@ -57,6 +56,9 @@ @Autowired private IMediaServerService mediaServerService; + + @Autowired + private IMediaService mediaService; @Autowired private ZLMRESTfulUtils zlmresTfulUtils; @@ -125,7 +127,7 @@ String mediaServerId = json.getString("mediaServerId"); ZLMHttpHookSubscribe.Event subscribe = this.subscribe.getSubscribe(ZLMHttpHookSubscribe.HookType.on_play, json); if (subscribe != null ) { - IMediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId); + MediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId); if (mediaInfo != null) { subscribe.response(mediaInfo, json); } @@ -150,7 +152,7 @@ String mediaServerId = json.getString("mediaServerId"); ZLMHttpHookSubscribe.Event subscribe = this.subscribe.getSubscribe(ZLMHttpHookSubscribe.HookType.on_publish, json); if (subscribe != null) { - IMediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId); + MediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId); if (mediaInfo != null) { subscribe.response(mediaInfo, json); } @@ -237,7 +239,7 @@ String mediaServerId = json.getString("mediaServerId"); ZLMHttpHookSubscribe.Event subscribe = this.subscribe.getSubscribe(ZLMHttpHookSubscribe.HookType.on_shell_login, json); if (subscribe != null ) { - IMediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId); + MediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId); if (mediaInfo != null) { subscribe.response(mediaInfo, json); } @@ -264,7 +266,7 @@ String mediaServerId = json.getString("mediaServerId"); ZLMHttpHookSubscribe.Event subscribe = this.subscribe.getSubscribe(ZLMHttpHookSubscribe.HookType.on_stream_changed, json); if (subscribe != null ) { - IMediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId); + MediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId); if (mediaInfo != null) { subscribe.response(mediaInfo, json); } @@ -297,11 +299,23 @@ } }else { if (!"rtp".equals(app) ){ - IMediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId); + // 鍙戦�佹祦鍙樺寲redis娑堟伅 + JSONObject jsonObject = new JSONObject(); + jsonObject.put("serverId", userSetup.getServerId()); + jsonObject.put("app", app); + jsonObject.put("stream", streamId); + jsonObject.put("register", regist); + jsonObject.put("mediaServerId", mediaServerId); + redisCatchStorage.sendStreamChangeMsg(jsonObject); + + MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId); if (regist) { zlmMediaListManager.addMedia(mediaServerItem, app, streamId); + StreamInfo streamInfo = mediaService.getStreamInfoByAppAndStream(mediaServerItem, app, streamId, tracks); + redisCatchStorage.addStream(mediaServerItem, app, streamId, streamInfo); }else { zlmMediaListManager.removeMedia( app, streamId); + redisCatchStorage.removeStream(mediaServerItem, app, streamId); } } } @@ -328,6 +342,7 @@ String streamId = json.getString("stream"); String app = json.getString("app"); + // TODO 濡傛灉鍦ㄧ粰涓婄骇鎺ㄦ祦锛屼篃涓嶅仠姝€�� if ("rtp".equals(app)){ JSONObject ret = new JSONObject(); ret.put("code", 0); @@ -347,6 +362,10 @@ cmder.streamByeCmd(streamInfoForPlayBackCatch.getDeviceID(), streamInfoForPlayBackCatch.getChannelId()); redisCatchStorage.stopPlayback(streamInfoForPlayBackCatch); } + } + MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId); + if (mediaServerItem != null && "-1".equals(mediaServerItem.getStreamNoneReaderDelayMS())) { + ret.put("close", false); } return new ResponseEntity<String>(ret.toString(),HttpStatus.OK); }else { @@ -369,19 +388,25 @@ logger.debug("ZLM HOOK on_stream_not_found API璋冪敤锛屽弬鏁帮細" + json.toString()); } String mediaServerId = json.getString("mediaServerId"); - IMediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId); + MediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId); if (userSetup.isAutoApplyPlay() && mediaInfo != null) { String app = json.getString("app"); String streamId = json.getString("stream"); - if ("rtp".equals(app) && streamId.contains("gb_play") ) { + if ("rtp".equals(app)) { String[] s = streamId.split("_"); - if (s.length == 4) { - String deviceId = s[2]; - String channelId = s[3]; + if (s.length == 2) { + String deviceId = s[0]; + String channelId = s[1]; Device device = storager.queryVideoDevice(deviceId); if (device != null) { UUID uuid = UUID.randomUUID(); - cmder.playStreamCmd(mediaInfo, device, channelId, (IMediaServerItem mediaServerItemInuse, JSONObject response) -> { + SSRCInfo ssrcInfo; + String streamId2 = null; + if (mediaInfo.isRtpEnable()) { + streamId2 = String.format("%s_%s", device.getDeviceId(), channelId); + } + ssrcInfo = mediaServerService.openRTPServer(mediaInfo, streamId2); + cmder.playStreamCmd(mediaInfo, ssrcInfo, device, channelId, (MediaServerItem mediaServerItemInuse, JSONObject response) -> { logger.info("鏀跺埌璁㈤槄娑堟伅锛� " + response.toJSONString()); playService.onPublishHandlerForPlay(mediaServerItemInuse, response, deviceId, channelId, uuid.toString()); }, null); -- Gitblit v1.8.0