| | |
| | | `enable_hls` bit(1) DEFAULT NULL, |
| | | `enable_mp4` bit(1) DEFAULT NULL, |
| | | `enable` bit(1) NOT NULL, |
| | | `status` bit(1) NOT NULL, |
| | | `enable_remove_none_reader` bit(1) NOT NULL, |
| | | `createTime` varchar(50) NOT NULL, |
| | | PRIMARY KEY (`app`,`stream`) |
New file |
| | |
| | | ALTER TABLE stream_proxy ADD status bit(1) not null; |
| | |
| | | }else {
|
| | | mediaServerService.removeCount(mediaServerId);
|
| | | }
|
| | | if (item.getOriginType() == OriginType.PULL.ordinal()
|
| | | || item.getOriginType() == OriginType.FFMPEG_PULL.ordinal()) {
|
| | | // 设置拉流代理上线/离线
|
| | | streamProxyService.updateStatus(regist, app, streamId);
|
| | | }
|
| | | if ("rtp".equals(app) && !regist ) {
|
| | | StreamInfo streamInfo = redisCatchStorage.queryPlayByStreamId(streamId);
|
| | | if (streamInfo!=null){
|
| | |
| | | || item.getOriginType() == OriginType.RTC_PUSH.ordinal() ) {
|
| | | streamPushItem = zlmMediaListManager.addPush(item);
|
| | | }
|
| | |
|
| | | List<GbStream> gbStreams = new ArrayList<>();
|
| | | if (streamPushItem == null || streamPushItem.getGbId() == null) {
|
| | | GbStream gbStream = storager.getGbStream(app, streamId);
|
| | |
| | | public void setEnable_remove_none_reader(boolean enable_remove_none_reader) { |
| | | this.enable_remove_none_reader = enable_remove_none_reader; |
| | | } |
| | | |
| | | } |
| | |
| | | boolean start(String app, String stream); |
| | | |
| | | /** |
| | | * 更新状态 |
| | | * @param status 状态 |
| | | * @param app |
| | | * @param stream |
| | | */ |
| | | int updateStatus(boolean status, String app, String stream); |
| | | |
| | | |
| | | |
| | | /** |
| | | * 停用用视频代理 |
| | | * @param app |
| | | * @param stream |
| | |
| | | import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory; |
| | | import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig; |
| | | import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; |
| | | import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; |
| | | import com.genersoft.iot.vmp.service.IMediaServerService; |
| | | import com.genersoft.iot.vmp.service.IStreamProxyService; |
| | | import com.genersoft.iot.vmp.service.bean.SSRCInfo; |
| | | import com.genersoft.iot.vmp.storager.IVideoManagerStorager; |
| | | import com.genersoft.iot.vmp.storager.dao.MediaServerMapper; |
| | | import com.genersoft.iot.vmp.utils.redis.JedisUtil; |
| | | import com.genersoft.iot.vmp.utils.redis.RedisUtil; |
| | |
| | | |
| | | @Autowired |
| | | private RedisUtil redisUtil; |
| | | |
| | | @Autowired |
| | | private IVideoManagerStorager storager; |
| | | |
| | | @Autowired |
| | | private IStreamProxyService streamProxyService; |
| | | |
| | | @Autowired |
| | | private EventPublisher publisher; |
| | |
| | | public List<MediaServerItem> getAllOnline() { |
| | | String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetup.getServerId(); |
| | | Set<String> mediaServerIdSet = redisUtil.zRevRange(key, 0, -1); |
| | | |
| | | List<MediaServerItem> result = new ArrayList<>(); |
| | | if (mediaServerIdSet != null && mediaServerIdSet.size() > 0) { |
| | | for (String mediaServerId : mediaServerIdSet) { |
| | |
| | | result.add((MediaServerItem) redisUtil.get(serverKey)); |
| | | } |
| | | } |
| | | Collections.reverse(result); |
| | | return result; |
| | | } |
| | | |
| | |
| | | resetOnlineServerItem(serverItem); |
| | | updateMediaServerKeepalive(serverItem.getId(), null); |
| | | setZLMConfig(serverItem, "0".equals(zlmServerConfig.getHookEnable())); |
| | | |
| | | publisher.zlmOnlineEventPublish(serverItem.getId()); |
| | | |
| | | } |
| | |
| | | private IRedisCatchStorage redisCatchStorage; |
| | | |
| | | @Autowired |
| | | private IVideoManagerStorager storager; |
| | | |
| | | @Autowired |
| | | private UserSetup userSetup; |
| | | |
| | | @Autowired |
| | |
| | | |
| | | @Override |
| | | public void zlmServerOnline(String mediaServerId) { |
| | | zlmServerOffline(mediaServerId); |
| | | // 移除开启了无人观看自动移除的流 |
| | | List<StreamProxyItem> streamProxyItemList = streamProxyMapper.selecAutoRemoveItemByMediaServerId(mediaServerId); |
| | | if (streamProxyItemList.size() > 0) { |
| | | gbStreamMapper.batchDel(streamProxyItemList); |
| | | } |
| | | streamProxyMapper.deleteAutoRemoveItemByMediaServerId(mediaServerId); |
| | | |
| | | // 恢复流代理, 只查找这个这个流媒体 |
| | | List<StreamProxyItem> streamProxyListForEnable = storager.getStreamProxyListForEnableInMediaServer( |
| | | mediaServerId, true, false); |
| | | for (StreamProxyItem streamProxyDto : streamProxyListForEnable) { |
| | | logger.info("恢复流代理," + streamProxyDto.getApp() + "/" + streamProxyDto.getStream()); |
| | | JSONObject jsonObject = addStreamProxyToZlm(streamProxyDto); |
| | | if (jsonObject == null) { |
| | | // 设置为离线 |
| | | logger.info("恢复流代理失败" + streamProxyDto.getApp() + "/" + streamProxyDto.getStream()); |
| | | updateStatus(false, streamProxyDto.getApp(), streamProxyDto.getStream()); |
| | | }else { |
| | | updateStatus(true, streamProxyDto.getApp(), streamProxyDto.getStream()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | @Override |
| | |
| | | gbStreamMapper.batchDel(streamProxyItemList); |
| | | } |
| | | streamProxyMapper.deleteAutoRemoveItemByMediaServerId(mediaServerId); |
| | | // 其他的流设置未启用 |
| | | streamProxyMapper.updateStatus(false, mediaServerId); |
| | | // 其他的流设置离线 |
| | | streamProxyMapper.updateStatusByMediaServerId(false, mediaServerId); |
| | | String type = "PULL"; |
| | | |
| | | // 发送redis消息 |
| | |
| | | public void clean() { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public int updateStatus(boolean status, String app, String stream) { |
| | | return streamProxyMapper.updateStatus(status, app, stream); |
| | | } |
| | | } |
| | |
| | | /**
|
| | | * 根据媒体ID获取启用/不启用的代理列表
|
| | | * @param id 媒体ID
|
| | | * @param b 启用/不启用
|
| | | * @param enable 启用/不启用
|
| | | * @param status 状态
|
| | | * @return
|
| | | */
|
| | | List<StreamProxyItem> getStreamProxyListForEnableInMediaServer(String id, boolean b);
|
| | | List<StreamProxyItem> getStreamProxyListForEnableInMediaServer(String id, boolean enable, boolean status);
|
| | |
|
| | | /**
|
| | | * 根据通道ID获取其所在设备
|
| | |
| | | public interface StreamProxyMapper { |
| | | |
| | | @Insert("INSERT INTO stream_proxy (type, app, stream,mediaServerId, url, src_url, dst_url, " + |
| | | "timeout_ms, ffmpeg_cmd_key, rtp_type, enable_hls, enable_mp4, enable, enable_remove_none_reader, createTime) VALUES" + |
| | | "timeout_ms, ffmpeg_cmd_key, rtp_type, enable_hls, enable_mp4, enable, status, enable_remove_none_reader, createTime) VALUES" + |
| | | "('${type}','${app}', '${stream}', '${mediaServerId}','${url}', '${src_url}', '${dst_url}', " + |
| | | "'${timeout_ms}', '${ffmpeg_cmd_key}', '${rtp_type}', ${enable_hls}, ${enable_mp4}, ${enable}, " + |
| | | "'${timeout_ms}', '${ffmpeg_cmd_key}', '${rtp_type}', ${enable_hls}, ${enable_mp4}, ${enable}, ${status}, " + |
| | | "${enable_remove_none_reader}, '${createTime}' )") |
| | | int add(StreamProxyItem streamProxyDto); |
| | | |
| | |
| | | "rtp_type=#{rtp_type}, " + |
| | | "enable_hls=#{enable_hls}, " + |
| | | "enable=#{enable}, " + |
| | | "status=#{status}, " + |
| | | "enable_remove_none_reader=#{enable_remove_none_reader}, " + |
| | | "enable_mp4=#{enable_mp4} " + |
| | | "WHERE app=#{app} AND stream=#{stream}") |
| | |
| | | |
| | | @Select("SELECT st.*, pgs.gbId, pgs.name, pgs.longitude, pgs.latitude FROM stream_proxy st " + |
| | | "LEFT JOIN gb_stream pgs on st.app = pgs.app AND st.stream = pgs.stream " + |
| | | "WHERE st.enable=${enable} and st.mediaServerId = '${id}' order by st.createTime desc") |
| | | List<StreamProxyItem> selectForEnableInMediaServer(String id, boolean enable); |
| | | "WHERE st.enable=${enable} and st.status=${status} and st.mediaServerId = '${id}' order by st.createTime desc") |
| | | List<StreamProxyItem> selectForEnableInMediaServer(String id, boolean enable, boolean status); |
| | | |
| | | @Select("SELECT st.*, pgs.gbId, pgs.name, pgs.longitude, pgs.latitude FROM stream_proxy st " + |
| | | "LEFT JOIN gb_stream pgs on st.app = pgs.app AND st.stream = pgs.stream " + |
| | |
| | | List<StreamProxyItem> selectInMediaServer(String id); |
| | | |
| | | @Update("UPDATE stream_proxy " + |
| | | "SET enable=#{status} " + |
| | | "SET status=#{status} " + |
| | | "WHERE mediaServerId=#{mediaServerId}") |
| | | void updateStatus(boolean status, String mediaServerId); |
| | | void updateStatusByMediaServerId(boolean status, String mediaServerId); |
| | | |
| | | @Update("UPDATE stream_proxy " + |
| | | "SET status=${status} " + |
| | | "WHERE app=#{app} AND stream=#{stream}") |
| | | int updateStatus(boolean status, String app, String stream); |
| | | |
| | | @Delete("DELETE FROM stream_proxy WHERE enable_remove_none_reader=true AND mediaServerId=#{mediaServerId}") |
| | | void deleteAutoRemoveItemByMediaServerId(String mediaServerId); |
| | |
| | | } |
| | | |
| | | @Override |
| | | public List<StreamProxyItem> getStreamProxyListForEnableInMediaServer(String id, boolean enable) { |
| | | return streamProxyMapper.selectForEnableInMediaServer(id, enable); |
| | | public List<StreamProxyItem> getStreamProxyListForEnableInMediaServer(String id, boolean enable, boolean status) { |
| | | return streamProxyMapper.selectForEnableInMediaServer(id, enable, status); |
| | | } |
| | | |
| | | |
| | |
| | | </el-table-column> |
| | | |
| | | <el-table-column prop="gbId" label="国标编码" width="180" align="center" show-overflow-tooltip/> |
| | | <el-table-column label="状态" width="120" align="center"> |
| | | <template slot-scope="scope"> |
| | | <div slot="reference" class="name-wrapper"> |
| | | <el-tag size="medium" v-if="scope.row.status">在线</el-tag> |
| | | <el-tag size="medium" type="info" v-if="!scope.row.status">离线</el-tag> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="启用" width="120" align="center"> |
| | | <template slot-scope="scope"> |
| | | <div slot="reference" class="name-wrapper"> |
| | |
| | | style="width: 100%" |
| | | placeholder="请选择拉流节点" |
| | | > |
| | | <el-option label="自动选择" value="auto"></el-option> |
| | | <el-option |
| | | v-for="item in mediaServerList" |
| | | :key="item.id" |
| | |
| | | enable_mp4: false, |
| | | enable_remove_none_reader: false, |
| | | platformGbId: null, |
| | | mediaServerId: "auto", |
| | | mediaServerId: null, |
| | | }, |
| | | mediaServerList:{}, |
| | | ffmpegCmdList:{}, |
| | |
| | | console.log(error); |
| | | }); |
| | | this.mediaServer.getOnlineMediaServerList((data)=>{ |
| | | this.mediaServerList = data; |
| | | this.mediaServerList = data.data; |
| | | this.proxyParam.mediaServerId = this.mediaServerList[0].id |
| | | }) |
| | | }, |
| | | mediaServerIdChange:function (){ |