Merge branch 'wvp-28181-2.0'
# Conflicts: # src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java # src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java # src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java # src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java # web_src/src/components/Login.vue
This commit is contained in:
@@ -9,6 +9,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.io.File;
|
||||
@@ -49,7 +50,7 @@ public class AssistRESTfulUtils {
|
||||
if (mediaServerItem == null) {
|
||||
return null;
|
||||
}
|
||||
if (StringUtils.isEmpty(mediaServerItem.getRecordAssistPort())) {
|
||||
if (ObjectUtils.isEmpty(mediaServerItem.getRecordAssistPort())) {
|
||||
logger.warn("未启用Assist服务");
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
@@ -633,7 +634,7 @@ public class ZLMHttpHookListener {
|
||||
|
||||
private Map<String, String> urlParamToMap(String params) {
|
||||
HashMap<String, String> map = new HashMap<>();
|
||||
if (StringUtils.isEmpty(params)) {
|
||||
if (ObjectUtils.isEmpty(params)) {
|
||||
return map;
|
||||
}
|
||||
String[] paramsArray = params.split("&");
|
||||
|
||||
@@ -9,6 +9,7 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.*;
|
||||
@@ -187,7 +188,7 @@ public class ZLMRTPServerFactory {
|
||||
|
||||
// 使用RTPServer 功能找一个可用的端口
|
||||
String sendRtpPortRange = serverItem.getSendRtpPortRange();
|
||||
if (StringUtils.isEmpty(sendRtpPortRange)) {
|
||||
if (ObjectUtils.isEmpty(sendRtpPortRange)) {
|
||||
return null;
|
||||
}
|
||||
String[] portRangeStrArray = serverItem.getSendRtpPortRange().split(",");
|
||||
@@ -229,7 +230,7 @@ public class ZLMRTPServerFactory {
|
||||
public SendRtpItem createSendRtpItem(MediaServerItem serverItem, String ip, int port, String ssrc, String platformId, String app, String stream, String channelId, boolean tcp){
|
||||
// 使用RTPServer 功能找一个可用的端口
|
||||
String sendRtpPortRange = serverItem.getSendRtpPortRange();
|
||||
if (StringUtils.isEmpty(sendRtpPortRange)) {
|
||||
if (ObjectUtils.isEmpty(sendRtpPortRange)) {
|
||||
return null;
|
||||
}
|
||||
String[] portRangeStrArray = serverItem.getSendRtpPortRange().split(",");
|
||||
|
||||
@@ -3,64 +3,94 @@ package com.genersoft.iot.vmp.media.zlm.dto;
|
||||
|
||||
import com.genersoft.iot.vmp.gb28181.session.SsrcConfig;
|
||||
import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
@Schema(description = "流媒体服务信息")
|
||||
public class MediaServerItem{
|
||||
|
||||
@Schema(description = "ID")
|
||||
private String id;
|
||||
|
||||
@Schema(description = "IP")
|
||||
private String ip;
|
||||
|
||||
@Schema(description = "hook使用的IP(zlm访问WVP使用的IP)")
|
||||
private String hookIp;
|
||||
|
||||
@Schema(description = "SDP IP")
|
||||
private String sdpIp;
|
||||
|
||||
@Schema(description = "流IP")
|
||||
private String streamIp;
|
||||
|
||||
@Schema(description = "HTTP端口")
|
||||
private int httpPort;
|
||||
|
||||
@Schema(description = "HTTPS端口")
|
||||
private int httpSSlPort;
|
||||
|
||||
@Schema(description = "RTMP端口")
|
||||
private int rtmpPort;
|
||||
|
||||
@Schema(description = "RTMPS端口")
|
||||
private int rtmpSSlPort;
|
||||
|
||||
@Schema(description = "RTP收流端口(单端口模式有用)")
|
||||
private int rtpProxyPort;
|
||||
|
||||
@Schema(description = "RTSP端口")
|
||||
private int rtspPort;
|
||||
|
||||
@Schema(description = "RTSPS端口")
|
||||
private int rtspSSLPort;
|
||||
|
||||
@Schema(description = "是否开启自动配置ZLM")
|
||||
private boolean autoConfig;
|
||||
|
||||
@Schema(description = "ZLM鉴权参数")
|
||||
private String secret;
|
||||
|
||||
@Schema(description = "某个流无人观看时,触发hook.on_stream_none_reader事件的最大等待时间,单位毫秒")
|
||||
private int streamNoneReaderDelayMS;
|
||||
|
||||
@Schema(description = "keepalive hook触发间隔,单位秒")
|
||||
private int hookAliveInterval;
|
||||
|
||||
@Schema(description = "是否使用多端口模式")
|
||||
private boolean rtpEnable;
|
||||
|
||||
@Schema(description = "状态")
|
||||
private boolean status;
|
||||
|
||||
@Schema(description = "多端口RTP收流端口范围")
|
||||
private String rtpPortRange;
|
||||
|
||||
@Schema(description = "RTP发流端口范围")
|
||||
private String sendRtpPortRange;
|
||||
|
||||
@Schema(description = "assist服务端口")
|
||||
private int recordAssistPort;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
private String createTime;
|
||||
|
||||
@Schema(description = "更新时间")
|
||||
private String updateTime;
|
||||
|
||||
@Schema(description = "上次心跳时间")
|
||||
private String lastKeepaliveTime;
|
||||
|
||||
@Schema(description = "是否是默认ZLM")
|
||||
private boolean defaultServer;
|
||||
|
||||
@Schema(description = "SSRC信息")
|
||||
private SsrcConfig ssrcConfig;
|
||||
|
||||
@Schema(description = "当前使用到的端口")
|
||||
private int currentPort;
|
||||
|
||||
|
||||
@@ -68,6 +98,7 @@ public class MediaServerItem{
|
||||
* 每一台ZLM都有一套独立的SSRC列表
|
||||
* 在ApplicationCheckRunner里对mediaServerSsrcMap进行初始化
|
||||
*/
|
||||
@Schema(description = "ID")
|
||||
private HashMap<String, SsrcConfig> mediaServerSsrcMap;
|
||||
|
||||
public MediaServerItem() {
|
||||
@@ -76,9 +107,9 @@ public class MediaServerItem{
|
||||
public MediaServerItem(ZLMServerConfig zlmServerConfig, String sipIp) {
|
||||
id = zlmServerConfig.getGeneralMediaServerId();
|
||||
ip = zlmServerConfig.getIp();
|
||||
hookIp = StringUtils.isEmpty(zlmServerConfig.getHookIp())? sipIp: zlmServerConfig.getHookIp();
|
||||
sdpIp = StringUtils.isEmpty(zlmServerConfig.getSdpIp())? zlmServerConfig.getIp(): zlmServerConfig.getSdpIp();
|
||||
streamIp = StringUtils.isEmpty(zlmServerConfig.getStreamIp())? zlmServerConfig.getIp(): zlmServerConfig.getStreamIp();
|
||||
hookIp = ObjectUtils.isEmpty(zlmServerConfig.getHookIp())? sipIp: zlmServerConfig.getHookIp();
|
||||
sdpIp = ObjectUtils.isEmpty(zlmServerConfig.getSdpIp())? zlmServerConfig.getIp(): zlmServerConfig.getSdpIp();
|
||||
streamIp = ObjectUtils.isEmpty(zlmServerConfig.getStreamIp())? zlmServerConfig.getIp(): zlmServerConfig.getStreamIp();
|
||||
httpPort = zlmServerConfig.getHttpPort();
|
||||
httpSSlPort = zlmServerConfig.getHttpSSLport();
|
||||
rtmpPort = zlmServerConfig.getRtmpPort();
|
||||
|
||||
@@ -1,24 +1,45 @@
|
||||
package com.genersoft.iot.vmp.media.zlm.dto;
|
||||
|
||||
import com.genersoft.iot.vmp.gb28181.bean.GbStream;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
|
||||
/**
|
||||
* @author lin
|
||||
*/
|
||||
@Schema(description = "拉流代理的信息")
|
||||
public class StreamProxyItem extends GbStream {
|
||||
|
||||
@Schema(description = "类型")
|
||||
private String type;
|
||||
@Schema(description = "应用名")
|
||||
private String app;
|
||||
@Schema(description = "流ID")
|
||||
private String stream;
|
||||
@Schema(description = "流媒体服务ID")
|
||||
private String mediaServerId;
|
||||
@Schema(description = "拉流地址")
|
||||
private String url;
|
||||
@Schema(description = "拉流地址")
|
||||
private String src_url;
|
||||
@Schema(description = "目标地址")
|
||||
private String dst_url;
|
||||
@Schema(description = "超时时间")
|
||||
private int timeout_ms;
|
||||
@Schema(description = "ffmpeg模板KEY")
|
||||
private String ffmpeg_cmd_key;
|
||||
@Schema(description = "rtsp拉流时,拉流方式,0:tcp,1:udp,2:组播")
|
||||
private String rtp_type;
|
||||
@Schema(description = "是否启用")
|
||||
private boolean enable;
|
||||
@Schema(description = "是否启用HLS")
|
||||
private boolean enable_hls;
|
||||
@Schema(description = "是否启用MP4")
|
||||
private boolean enable_mp4;
|
||||
private boolean enable_remove_none_reader; // 无人观看时删除
|
||||
@Schema(description = "是否 无人观看时删除")
|
||||
private boolean enable_remove_none_reader;
|
||||
@Schema(description = "上级平台国标ID")
|
||||
private String platformGbId;
|
||||
@Schema(description = "创建时间")
|
||||
private String createTime;
|
||||
|
||||
public String getType() {
|
||||
|
||||
@@ -2,37 +2,43 @@ package com.genersoft.iot.vmp.media.zlm.dto;
|
||||
|
||||
import com.genersoft.iot.vmp.gb28181.bean.GbStream;
|
||||
import com.genersoft.iot.vmp.utils.DateUtil;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.springframework.util.unit.DataUnit;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@Schema(description = "推流信息")
|
||||
public class StreamPushItem extends GbStream implements Comparable<StreamPushItem>{
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@Schema(description = "id")
|
||||
private Integer id;
|
||||
|
||||
/**
|
||||
* 应用名
|
||||
*/
|
||||
@Schema(description = "应用名")
|
||||
private String app;
|
||||
|
||||
/**
|
||||
* 流id
|
||||
*/
|
||||
@Schema(description = "流id")
|
||||
private String stream;
|
||||
|
||||
/**
|
||||
* 观看总人数,包括hls/rtsp/rtmp/http-flv/ws-flv
|
||||
*/
|
||||
@Schema(description = "观看总人数")
|
||||
private String totalReaderCount;
|
||||
|
||||
/**
|
||||
* 协议 包括hls/rtsp/rtmp/http-flv/ws-flv
|
||||
*/
|
||||
@Schema(description = "协议 包括hls/rtsp/rtmp/http-flv/ws-flv")
|
||||
private List<MediaSchema> schemas;
|
||||
|
||||
/**
|
||||
@@ -46,71 +52,85 @@ public class StreamPushItem extends GbStream implements Comparable<StreamPushIte
|
||||
* mp4_vod=6,
|
||||
* device_chn=7
|
||||
*/
|
||||
@Schema(description = "产生源类型")
|
||||
private int originType;
|
||||
|
||||
/**
|
||||
* 客户端和服务器网络信息,可能为null类型
|
||||
*/
|
||||
@Schema(description = "客户端和服务器网络信息,可能为null类型")
|
||||
private MediaItem.OriginSock originSock;
|
||||
|
||||
/**
|
||||
* 产生源类型的字符串描述
|
||||
*/
|
||||
@Schema(description = "产生源类型的字符串描述")
|
||||
private String originTypeStr;
|
||||
|
||||
/**
|
||||
* 产生源的url
|
||||
*/
|
||||
@Schema(description = "产生源的url")
|
||||
private String originUrl;
|
||||
|
||||
/**
|
||||
* 存活时间,单位秒
|
||||
*/
|
||||
@Schema(description = "存活时间,单位秒")
|
||||
private Long aliveSecond;
|
||||
|
||||
/**
|
||||
* 音视频轨道
|
||||
*/
|
||||
@Schema(description = "音视频轨道")
|
||||
private List<MediaItem.MediaTrack> tracks;
|
||||
|
||||
/**
|
||||
* 音视频轨道
|
||||
*/
|
||||
@Schema(description = "音视频轨道")
|
||||
private String vhost;
|
||||
|
||||
/**
|
||||
* 使用的流媒体ID
|
||||
*/
|
||||
@Schema(description = "使用的流媒体ID")
|
||||
private String mediaServerId;
|
||||
|
||||
/**
|
||||
* 使用的服务ID
|
||||
*/
|
||||
@Schema(description = "使用的服务ID")
|
||||
private String serverId;
|
||||
|
||||
/**
|
||||
* 推流时间
|
||||
*/
|
||||
@Schema(description = "推流时间")
|
||||
private String pushTime;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
@Schema(description = "更新时间")
|
||||
private String updateTime;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@Schema(description = "创建时间")
|
||||
private String createTime;
|
||||
|
||||
/**
|
||||
* 是否正在推流
|
||||
*/
|
||||
@Schema(description = "是否正在推流")
|
||||
private boolean pushIng;
|
||||
|
||||
/**
|
||||
* 是否自己平台的推流
|
||||
*/
|
||||
@Schema(description = "是否自己平台的推流")
|
||||
private boolean self;
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user