Merge branch 'refs/heads/2.7.1'
# Conflicts: # pom.xml # src/main/java/com/genersoft/iot/vmp/conf/security/WebSecurityConfig.java # src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestForMobilePositionProcessor.java # src/main/java/com/genersoft/iot/vmp/media/bean/MediaServer.java # src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java # src/main/java/com/genersoft/iot/vmp/service/ICloudRecordService.java # src/main/java/com/genersoft/iot/vmp/service/bean/CloudRecordItem.java # src/main/java/com/genersoft/iot/vmp/service/impl/CloudRecordServiceImpl.java # 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/StreamProxyServiceImpl.java # src/main/java/com/genersoft/iot/vmp/storager/dao/CloudRecordServiceMapper.java # src/main/java/com/genersoft/iot/vmp/storager/dao/MediaServerMapper.java
This commit is contained in:
@@ -100,6 +100,9 @@ public class MediaServer {
|
||||
@Schema(description = "类型: zlm/abl")
|
||||
private String type;
|
||||
|
||||
@Schema(description = "转码的前缀")
|
||||
private String transcodeSuffix;
|
||||
|
||||
public MediaServer() {
|
||||
}
|
||||
|
||||
@@ -126,6 +129,7 @@ public class MediaServer {
|
||||
rtpEnable = false; // 默认使用单端口;直到用户自己设置开启多端口
|
||||
rtpPortRange = zlmServerConfig.getPortRange().replace("_",","); // 默认使用30000,30500作为级联时发送流的端口号
|
||||
recordAssistPort = 0; // 默认关闭
|
||||
transcodeSuffix = zlmServerConfig.getTranscodeSuffix();
|
||||
|
||||
}
|
||||
|
||||
@@ -376,4 +380,12 @@ public class MediaServer {
|
||||
public void setWsFlvSSLPort(int wsFlvSSLPort) {
|
||||
this.wsFlvSSLPort = wsFlvSSLPort;
|
||||
}
|
||||
|
||||
public String getTranscodeSuffix() {
|
||||
return transcodeSuffix;
|
||||
}
|
||||
|
||||
public void setTranscodeSuffix(String transcodeSuffix) {
|
||||
this.transcodeSuffix = transcodeSuffix;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -104,7 +104,6 @@ public class SendRtpPortManager {
|
||||
return port;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
interface CheckPortCallback{
|
||||
|
||||
@@ -24,6 +24,12 @@ import com.genersoft.iot.vmp.service.*;
|
||||
import com.genersoft.iot.vmp.service.redisMsg.IRedisRpcService;
|
||||
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
|
||||
import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
|
||||
import com.genersoft.iot.vmp.utils.DateUtil;
|
||||
import com.genersoft.iot.vmp.utils.MediaServerUtils;
|
||||
import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
|
||||
import com.genersoft.iot.vmp.vmanager.bean.OtherPsSendInfo;
|
||||
import com.genersoft.iot.vmp.vmanager.bean.OtherRtpSendInfo;
|
||||
import com.genersoft.iot.vmp.vmanager.bean.StreamContent;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -36,6 +42,10 @@ import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.HashMap;
|
||||
import javax.sip.InvalidArgumentException;
|
||||
import javax.sip.SipException;
|
||||
import java.text.ParseException;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
@@ -202,6 +212,11 @@ public class ZLMHttpHookListener {
|
||||
if (mediaServer == null) {
|
||||
return HookResult.SUCCESS();
|
||||
}
|
||||
if (!ObjectUtils.isEmpty(mediaServer.getTranscodeSuffix())
|
||||
&& !"null".equalsIgnoreCase(mediaServer.getTranscodeSuffix())
|
||||
&& param.getStream().endsWith(mediaServer.getTranscodeSuffix()) ) {
|
||||
return;
|
||||
}
|
||||
if (param.getSchema().equalsIgnoreCase("rtsp")) {
|
||||
if (param.isRegist()) {
|
||||
logger.info("[ZLM HOOK] 流注册, {}->{}->{}/{}", param.getMediaServerId(), param.getSchema(), param.getApp(), param.getStream());
|
||||
@@ -226,6 +241,19 @@ public class ZLMHttpHookListener {
|
||||
|
||||
logger.info("[ZLM HOOK]流无人观看:{}->{}->{}/{}", param.getMediaServerId(), param.getSchema(),
|
||||
param.getApp(), param.getStream());
|
||||
|
||||
MediaServerItem mediaInfo = mediaServerService.getOne(param.getMediaServerId());
|
||||
if (mediaInfo == null) {
|
||||
JSONObject ret = new JSONObject();
|
||||
ret.put("code", 0);
|
||||
return ret;
|
||||
}
|
||||
if (!ObjectUtils.isEmpty(mediaInfo.getTranscodeSuffix())
|
||||
&& !"null".equalsIgnoreCase(mediaInfo.getTranscodeSuffix())
|
||||
&& param.getStream().endsWith(mediaInfo.getTranscodeSuffix()) ) {
|
||||
param.setStream(param.getStream().substring(0, param.getStream().lastIndexOf(mediaInfo.getTranscodeSuffix()) -1 ));
|
||||
}
|
||||
|
||||
JSONObject ret = new JSONObject();
|
||||
boolean close = mediaService.closeStreamOnNoneReader(param.getMediaServerId(), param.getApp(), param.getStream(), param.getSchema());
|
||||
ret.put("code", 0);
|
||||
@@ -348,22 +376,4 @@ public class ZLMHttpHookListener {
|
||||
|
||||
return HookResult.SUCCESS();
|
||||
}
|
||||
|
||||
private Map<String, String> urlParamToMap(String params) {
|
||||
HashMap<String, String> map = new HashMap<>();
|
||||
if (ObjectUtils.isEmpty(params)) {
|
||||
return map;
|
||||
}
|
||||
String[] paramsArray = params.split("&");
|
||||
if (paramsArray.length == 0) {
|
||||
return map;
|
||||
}
|
||||
for (String param : paramsArray) {
|
||||
String[] paramArray = param.split("=");
|
||||
if (paramArray.length == 2) {
|
||||
map.put(paramArray[0], paramArray[1]);
|
||||
}
|
||||
}
|
||||
return map;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -331,6 +331,9 @@ public class ZLMServerConfig extends HookParam {
|
||||
@JSONField(name = "shell.shell")
|
||||
private String shellPhell;
|
||||
|
||||
@JSONField(name = "transcode.suffix")
|
||||
private String transcodeSuffix;
|
||||
|
||||
|
||||
public String getHookIp() {
|
||||
return hookIp;
|
||||
@@ -1211,4 +1214,12 @@ public class ZLMServerConfig extends HookParam {
|
||||
public void setHookOnRtpServerTimeout(String hookOnRtpServerTimeout) {
|
||||
this.hookOnRtpServerTimeout = hookOnRtpServerTimeout;
|
||||
}
|
||||
|
||||
public String getTranscodeSuffix() {
|
||||
return transcodeSuffix;
|
||||
}
|
||||
|
||||
public void setTranscodeSuffix(String transcodeSuffix) {
|
||||
this.transcodeSuffix = transcodeSuffix;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ public class OnRecordMp4HookParam extends HookParam{
|
||||
private String vhost;
|
||||
private long start_time;
|
||||
private double time_len;
|
||||
private String params;
|
||||
|
||||
public String getApp() {
|
||||
return app;
|
||||
@@ -96,6 +97,14 @@ public class OnRecordMp4HookParam extends HookParam{
|
||||
this.time_len = time_len;
|
||||
}
|
||||
|
||||
public String getParams() {
|
||||
return params;
|
||||
}
|
||||
|
||||
public void setParams(String params) {
|
||||
this.params = params;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "OnRecordMp4HookParam{" +
|
||||
@@ -109,6 +118,7 @@ public class OnRecordMp4HookParam extends HookParam{
|
||||
", vhost='" + vhost + '\'' +
|
||||
", start_time=" + start_time +
|
||||
", time_len=" + time_len +
|
||||
", params=" + params +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user