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:
648540858
2022-08-22 16:53:16 +08:00
146 changed files with 2878 additions and 17348 deletions

View File

@@ -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;
}

View File

@@ -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("&");

View File

@@ -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(",");

View File

@@ -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使用的IPzlm访问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();

View File

@@ -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拉流时拉流方式0tcp1udp2组播")
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() {

View File

@@ -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;