| | |
| | | |
| | | alter table wvp_platform |
| | | add auto_push_channel bool default false |
| | | |
| | | alter table wvp_stream_proxy |
| | | add stream_key varying(255) |
| | |
| | | create_time character varying(50), |
| | | name character varying(255), |
| | | update_time character varying(50), |
| | | stream_key character varying(255), |
| | | enable_disable_none_reader bool default false, |
| | | constraint uk_stream_proxy_app_stream unique (app, stream) |
| | | ); |
| | |
| | | } |
| | | if (event.getGbStreams() != null && event.getGbStreams().size() > 0){ |
| | | for (GbStream gbStream : event.getGbStreams()) { |
| | | if (gbStream != null && gbStream.getStreamType().equals("push") && !userSetting.isUsePushingAsStatus()) { |
| | | if (gbStream != null |
| | | && gbStream.getStreamType() != null |
| | | && gbStream.getStreamType().equals("push") |
| | | && !userSetting.isUsePushingAsStatus()) { |
| | | continue; |
| | | } |
| | | DeviceChannel deviceChannelByStream = gbStreamService.getDeviceChannelListByStream(gbStream, gbStream.getCatalogId(), parentPlatform); |
| | |
| | | } |
| | | // æ¨æµé´æçå¤ç |
| | | if (!"rtp".equals(param.getApp())) { |
| | | StreamProxyItem stream = streamProxyService.getStreamProxyByAppAndStream(param.getApp(), param.getStream()); |
| | | if (stream != null) { |
| | | HookResultForOnPublish result = HookResultForOnPublish.SUCCESS(); |
| | | result.setEnable_audio(stream.isEnableAudio()); |
| | | result.setEnable_mp4(stream.isEnableMp4()); |
| | | return result; |
| | | } |
| | | if (userSetting.getPushAuthority()) { |
| | | // æ¨æµé´æ |
| | | if (param.getParams() == null) { |
| | |
| | | return sendPost(mediaServerItem, "delFFmpegSource",param, null); |
| | | } |
| | | |
| | | public JSONObject delStreamProxy(MediaServerItem mediaServerItem, String key){ |
| | | Map<String, Object> param = new HashMap<>(); |
| | | param.put("key", key); |
| | | return sendPost(mediaServerItem, "delStreamProxy",param, null); |
| | | } |
| | | |
| | | public JSONObject getMediaServerConfig(MediaServerItem mediaServerItem){ |
| | | return sendPost(mediaServerItem, "getServerConfig",null, null); |
| | | } |
| | |
| | | @Schema(description = "æ¯å¦ æ 人è§çæ¶èªå¨åç¨") |
| | | private boolean enableDisableNoneReader; |
| | | |
| | | @Schema(description = "ææµä»£çæ¶zlmè¿åçkeyï¼ç¨äºåæ¢ææµä»£ç") |
| | | private String streamKey; |
| | | |
| | | public String getType() { |
| | | return type; |
| | | } |
| | |
| | | this.enableAudio = enable_audio; |
| | | } |
| | | |
| | | public String getStreamKey() { |
| | | return streamKey; |
| | | } |
| | | |
| | | public void setStreamKey(String streamKey) { |
| | | this.streamKey = streamKey; |
| | | } |
| | | } |
| | |
| | | import com.genersoft.iot.vmp.gb28181.event.EventPublisher; |
| | | import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent; |
| | | import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils; |
| | | import com.genersoft.iot.vmp.media.zlm.ZLMServerFactory; |
| | | import com.genersoft.iot.vmp.media.zlm.ZlmHttpHookSubscribe; |
| | | import com.genersoft.iot.vmp.media.zlm.dto.HookSubscribeFactory; |
| | | import com.genersoft.iot.vmp.media.zlm.dto.HookSubscribeForStreamChange; |
| | |
| | | |
| | | @Autowired |
| | | private ZLMRESTfulUtils zlmresTfulUtils; |
| | | |
| | | @Autowired |
| | | private ZLMServerFactory zlmServerFactory; |
| | | |
| | | @Autowired |
| | | private StreamProxyMapper streamProxyMapper; |
| | |
| | | dstUrl = String.format("%s://%s:%s/%s/%s", schemaForUri, "127.0.0.1", port, param.getApp(), |
| | | param.getStream()); |
| | | }else { |
| | | dstUrl = String.format("rtmp://%s:%s/%s/%s", "127.0.0.1", mediaInfo.getRtmpPort(), param.getApp(), |
| | | dstUrl = String.format("rtsp://%s:%s/%s/%s", "127.0.0.1", mediaInfo.getRtspPort(), param.getApp(), |
| | | param.getStream()); |
| | | } |
| | | param.setDstUrl(dstUrl); |
| | |
| | | }); |
| | | if (param.isEnable()) { |
| | | String talkKey = UUID.randomUUID().toString(); |
| | | // dynamicTask.startCron(talkKey, ()->{ |
| | | // StreamInfo streamInfo = mediaService.getStreamInfoByAppAndStreamWithCheck(param.getApp(), param.getStream(), mediaInfo.getId(), false); |
| | | // if (streamInfo != null) { |
| | | // callback.run(ErrorCode.SUCCESS.getCode(), ErrorCode.SUCCESS.getMsg(), streamInfo); |
| | | // } |
| | | // }, 3000); |
| | | String delayTalkKey = UUID.randomUUID().toString(); |
| | | dynamicTask.startDelay(delayTalkKey, ()->{ |
| | | StreamInfo streamInfo = mediaService.getStreamInfoByAppAndStreamWithCheck(param.getApp(), param.getStream(), mediaInfo.getId(), false); |
| | |
| | | if (mediaServerItem == null) { |
| | | return null; |
| | | } |
| | | if ("default".equals(param.getType())){ |
| | | result = zlmresTfulUtils.addStreamProxy(mediaServerItem, param.getApp(), param.getStream(), param.getUrl().trim(), |
| | | param.isEnableAudio(), param.isEnableMp4(), param.getRtpType()); |
| | | }else if ("ffmpeg".equals(param.getType())) { |
| | | if (zlmServerFactory.isStreamReady(mediaServerItem, param.getApp(), param.getStream())) { |
| | | zlmresTfulUtils.closeStreams(mediaServerItem, param.getApp(), param.getStream()); |
| | | } |
| | | if ("ffmpeg".equalsIgnoreCase(param.getType())){ |
| | | result = zlmresTfulUtils.addFFmpegSource(mediaServerItem, param.getSrcUrl().trim(), param.getDstUrl(), |
| | | param.getTimeoutMs() + "", param.isEnableAudio(), param.isEnableMp4(), |
| | | param.getFfmpegCmdKey()); |
| | | }else { |
| | | result = zlmresTfulUtils.addStreamProxy(mediaServerItem, param.getApp(), param.getStream(), param.getUrl().trim(), |
| | | param.isEnableAudio(), param.isEnableMp4(), param.getRtpType()); |
| | | } |
| | | System.out.println("addStreamProxyToZlm===="); |
| | | System.out.println(result); |
| | | if (result != null && result.getInteger("code") == 0) { |
| | | JSONObject data = result.getJSONObject("data"); |
| | | if (data == null) { |
| | | logger.warn("[è·åææµä»£ççç»ææ°æ®Data] å¤±è´¥ï¼ {}", result ); |
| | | return result; |
| | | } |
| | | String key = data.getString("key"); |
| | | if (key == null) { |
| | | logger.warn("[è·åææµä»£ççç»ææ°æ®Dataä¸çKEY] å¤±è´¥ï¼ {}", result ); |
| | | return result; |
| | | } |
| | | param.setStreamKey(key); |
| | | streamProxyMapper.update(param); |
| | | } |
| | | return result; |
| | | } |
| | |
| | | return null; |
| | | } |
| | | MediaServerItem mediaServerItem = mediaServerService.getOne(param.getMediaServerId()); |
| | | JSONObject result = zlmresTfulUtils.closeStreams(mediaServerItem, param.getApp(), param.getStream()); |
| | | JSONObject result = null; |
| | | if ("ffmpeg".equalsIgnoreCase(param.getType())){ |
| | | result = zlmresTfulUtils.delFFmpegSource(mediaServerItem, param.getStreamKey()); |
| | | }else { |
| | | result = zlmresTfulUtils.delStreamProxy(mediaServerItem, param.getStreamKey()); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | |
| | | if (streamProxyItem != null) { |
| | | gbStreamService.sendCatalogMsg(streamProxyItem, CatalogEvent.DEL); |
| | | |
| | | JSONObject jsonObject = removeStreamProxyFromZlm(streamProxyItem); |
| | | if (jsonObject != null && jsonObject.getInteger("code") == 0) { |
| | | // 妿å
³èäºå½æ é£ä¹ç§»é¤å
³è |
| | | int i = platformGbStreamMapper.delByAppAndStream(app, stream); |
| | | gbStreamMapper.del(app, stream); |
| | | System.out.println(); |
| | | // TODO 妿å
³èçæ¨æµï¼ é£ä¹ç¶æè®¾ç½®ä¸ºç¦»çº¿ |
| | | } |
| | | // 妿å
³èäºå½æ é£ä¹ç§»é¤å
³è |
| | | platformGbStreamMapper.delByAppAndStream(app, stream); |
| | | gbStreamMapper.del(app, stream); |
| | | videoManagerStorager.deleteStreamProxy(app, stream); |
| | | redisCatchStorage.removeStream(streamProxyItem.getMediaServerId(), "PULL", app, stream); |
| | | JSONObject jsonObject = removeStreamProxyFromZlm(streamProxyItem); |
| | | if (jsonObject != null && jsonObject.getInteger("code") == 0) { |
| | | logger.info("[ç§»é¤ä»£ç]ï¼ ä»£çï¼ {}/{}, ä»zlmç§»é¤æå", app, stream); |
| | | }else { |
| | | logger.info("[ç§»é¤ä»£ç]ï¼ ä»£çï¼ {}/{}, ä»zlmç§»é¤å¤±è´¥", app, stream); |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | @Override |
| | |
| | | public interface StreamProxyMapper { |
| | | |
| | | @Insert("INSERT INTO wvp_stream_proxy (type, name, app, stream,media_server_id, url, src_url, dst_url, " + |
| | | "timeout_ms, ffmpeg_cmd_key, rtp_type, enable_audio, enable_mp4, enable, status, enable_remove_none_reader, enable_disable_none_reader, create_time) VALUES" + |
| | | "timeout_ms, ffmpeg_cmd_key, rtp_type, enable_audio, enable_mp4, enable, status, stream_key, enable_remove_none_reader, enable_disable_none_reader, create_time) VALUES" + |
| | | "(#{type}, #{name}, #{app}, #{stream}, #{mediaServerId}, #{url}, #{srcUrl}, #{dstUrl}, " + |
| | | "#{timeoutMs}, #{ffmpegCmdKey}, #{rtpType}, #{enableAudio}, #{enableMp4}, #{enable}, #{status}, " + |
| | | "#{timeoutMs}, #{ffmpegCmdKey}, #{rtpType}, #{enableAudio}, #{enableMp4}, #{enable}, #{status}, #{streamKey}, " + |
| | | "#{enableRemoveNoneReader}, #{enableDisableNoneReader}, #{createTime} )") |
| | | int add(StreamProxyItem streamProxyDto); |
| | | |
| | |
| | | "enable_audio=#{enableAudio}, " + |
| | | "enable=#{enable}, " + |
| | | "status=#{status}, " + |
| | | "stream_key=#{streamKey}, " + |
| | | "enable_remove_none_reader=#{enableRemoveNoneReader}, " + |
| | | "enable_disable_none_reader=#{enableDisableNoneReader}, " + |
| | | "enable_mp4=#{enableMp4} " + |
| | |
| | | @Select("SELECT st.*, pgs.gb_id, pgs.name, pgs.longitude, pgs.latitude FROM wvp_stream_proxy st LEFT join wvp_gb_stream pgs on st.app = pgs.app AND st.stream = pgs.stream order by st.create_time desc") |
| | | List<StreamProxyItem> selectAll(); |
| | | |
| | | @Select("SELECT st.*, pgs.gb_id, pgs.name, pgs.longitude, pgs.latitude FROM wvp_stream_proxy st LEFT join wvp_gb_stream pgs on st.app = pgs.app AND st.stream = pgs.stream WHERE st.enable=#{enable} order by st.create_time desc") |
| | | @Select("SELECT st.*, pgs.gb_id, pgs.name, pgs.longitude, pgs.latitude, 'proxy' as streamType FROM wvp_stream_proxy st LEFT join wvp_gb_stream pgs on st.app = pgs.app AND st.stream = pgs.stream WHERE st.enable=#{enable} order by st.create_time desc") |
| | | List<StreamProxyItem> selectForEnable(boolean enable); |
| | | |
| | | @Select("SELECT st.*, pgs.gb_id, pgs.name, pgs.longitude, pgs.latitude FROM wvp_stream_proxy st LEFT join wvp_gb_stream pgs on st.app = pgs.app AND st.stream = pgs.stream WHERE st.app=#{app} AND st.stream=#{stream} order by st.create_time desc") |
| | |
| | | return streamProxyService.getAll(page, count); |
| | | } |
| | | |
| | | @Operation(summary = "æ¥è¯¢æµä»£ç") |
| | | @Parameter(name = "app", description = "åºç¨å") |
| | | @Parameter(name = "stream", description = "æµId") |
| | | @GetMapping(value = "/one") |
| | | @ResponseBody |
| | | public StreamProxyItem one(String app, String stream){ |
| | | |
| | | return streamProxyService.getStreamProxyByAppAndStream(app, stream); |
| | | } |
| | | |
| | | @Operation(summary = "ä¿å代ç", parameters = { |
| | | @Parameter(name = "param", description = "代çåæ°", required = true), |
| | | }) |
| | |
| | | if (ObjectUtils.isEmpty(param.getGbId())) { |
| | | param.setGbId(null); |
| | | } |
| | | StreamProxyItem streamProxyItem = streamProxyService.getStreamProxyByAppAndStream(param.getApp(), param.getStream()); |
| | | if (streamProxyItem != null) { |
| | | streamProxyService.del(param.getApp(), param.getStream()); |
| | | } |
| | | |
| | | RequestMessage requestMessage = new RequestMessage(); |
| | | String key = DeferredResultHolder.CALLBACK_CMD_PROXY + param.getApp() + param.getStream(); |