Merge branch 'wvp-28181-2.0' into main-dev
# Conflicts: # src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java # src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java # src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java # src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java # src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/info/InfoRequestProcessor.java # src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/MessageHandlerAbstract.java # src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/KeepaliveNotifyMessageHandler.java # src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java # src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMServerFactory.java # src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java
This commit is contained in:
@@ -21,6 +21,7 @@ public class AssistRESTfulUtils {
|
||||
|
||||
private final static Logger logger = LoggerFactory.getLogger(AssistRESTfulUtils.class);
|
||||
|
||||
|
||||
public interface RequestCallback{
|
||||
void run(JSONObject response);
|
||||
}
|
||||
@@ -145,4 +146,25 @@ public class AssistRESTfulUtils {
|
||||
return sendGet(mediaServerItem, "api/record/addStreamCallInfo",param, callback);
|
||||
}
|
||||
|
||||
public JSONObject getDateList(MediaServerItem mediaServerItem, String app, String stream, int year, int month) {
|
||||
Map<String, Object> param = new HashMap<>();
|
||||
param.put("app", app);
|
||||
param.put("stream", stream);
|
||||
param.put("year", year);
|
||||
param.put("month", month);
|
||||
return sendGet(mediaServerItem, "api/record/date/list", param, null);
|
||||
}
|
||||
|
||||
public JSONObject getFileList(MediaServerItem mediaServerItem, int page, int count, String app, String stream,
|
||||
String startTime, String endTime) {
|
||||
Map<String, Object> param = new HashMap<>();
|
||||
param.put("app", app);
|
||||
param.put("stream", stream);
|
||||
param.put("page", page);
|
||||
param.put("count", count);
|
||||
param.put("startTime", startTime);
|
||||
param.put("endTime", endTime);
|
||||
return sendGet(mediaServerItem, "api/record/file/listWithDate", param, null);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
42
src/main/java/com/genersoft/iot/vmp/media/zlm/SendRtpPortManager.java
Normal file → Executable file
42
src/main/java/com/genersoft/iot/vmp/media/zlm/SendRtpPortManager.java
Normal file → Executable file
@@ -30,7 +30,7 @@ public class SendRtpPortManager {
|
||||
|
||||
private final String KEY = "VM_MEDIA_SEND_RTP_PORT_";
|
||||
|
||||
public int getNextPort(MediaServerItem mediaServer) {
|
||||
public synchronized int getNextPort(MediaServerItem mediaServer) {
|
||||
if (mediaServer == null) {
|
||||
logger.warn("[发送端口管理] 参数错误,mediaServer为NULL");
|
||||
return -1;
|
||||
@@ -50,17 +50,15 @@ public class SendRtpPortManager {
|
||||
String sendRtpPortRange = mediaServer.getSendRtpPortRange();
|
||||
int startPort;
|
||||
int endPort;
|
||||
if (sendRtpPortRange == null) {
|
||||
logger.warn("{}未设置发送端口默认值,自动使用40000-50000作为端口范围", mediaServer.getId());
|
||||
if (sendRtpPortRange != null) {
|
||||
String[] portArray = sendRtpPortRange.split(",");
|
||||
if (portArray.length != 2 || !NumberUtils.isParsable(portArray[0]) || !NumberUtils.isParsable(portArray[1])) {
|
||||
logger.warn("{}发送端口配置格式错误,自动使用40000-50000作为端口范围", mediaServer.getId());
|
||||
logger.warn("{}发送端口配置格式错误,自动使用50000-60000作为端口范围", mediaServer.getId());
|
||||
startPort = 50000;
|
||||
endPort = 60000;
|
||||
}else {
|
||||
|
||||
if ( Integer.parseInt(portArray[1]) - Integer.parseInt(portArray[0]) < 1) {
|
||||
logger.warn("{}发送端口配置错误,结束端口至少比开始端口大一,自动使用40000-50000作为端口范围", mediaServer.getId());
|
||||
logger.warn("{}发送端口配置错误,结束端口至少比开始端口大一,自动使用50000-60000作为端口范围", mediaServer.getId());
|
||||
startPort = 50000;
|
||||
endPort = 60000;
|
||||
}else {
|
||||
@@ -69,6 +67,7 @@ public class SendRtpPortManager {
|
||||
}
|
||||
}
|
||||
}else {
|
||||
logger.warn("{}未设置发送端口默认值,自动使用50000-60000作为端口范围", mediaServer.getId());
|
||||
startPort = 50000;
|
||||
endPort = 60000;
|
||||
}
|
||||
@@ -76,10 +75,35 @@ public class SendRtpPortManager {
|
||||
logger.warn("{}获取redis连接信息失败", mediaServer.getId());
|
||||
return -1;
|
||||
}
|
||||
// RedisAtomicInteger redisAtomicInteger = new RedisAtomicInteger(sendIndexKey , redisTemplate.getConnectionFactory());
|
||||
// return redisAtomicInteger.getAndUpdate((current)->{
|
||||
// return getPort(current, startPort, endPort, checkPort-> !sendRtpItemMap.containsKey(checkPort));
|
||||
// });
|
||||
return getSendPort(startPort, endPort, sendIndexKey, sendRtpItemMap);
|
||||
}
|
||||
|
||||
private synchronized int getSendPort(int startPort, int endPort, String sendIndexKey, Map<Integer, SendRtpItem> sendRtpItemMap){
|
||||
RedisAtomicInteger redisAtomicInteger = new RedisAtomicInteger(sendIndexKey , redisTemplate.getConnectionFactory());
|
||||
return redisAtomicInteger.getAndUpdate((current)->{
|
||||
return getPort(current, startPort, endPort, checkPort-> !sendRtpItemMap.containsKey(checkPort));
|
||||
});
|
||||
if (redisAtomicInteger.get() < startPort) {
|
||||
redisAtomicInteger.set(startPort);
|
||||
return startPort;
|
||||
}else {
|
||||
int port = redisAtomicInteger.getAndIncrement();
|
||||
if (port > endPort) {
|
||||
redisAtomicInteger.set(startPort);
|
||||
if (sendRtpItemMap.containsKey(startPort)) {
|
||||
return getSendPort(startPort, endPort, sendIndexKey, sendRtpItemMap);
|
||||
}else {
|
||||
return startPort;
|
||||
}
|
||||
}
|
||||
if (sendRtpItemMap.containsKey(port)) {
|
||||
return getSendPort(startPort, endPort, sendIndexKey, sendRtpItemMap);
|
||||
}else {
|
||||
return port;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
interface CheckPortCallback{
|
||||
|
||||
10
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
Normal file → Executable file
10
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
Normal file → Executable file
@@ -30,6 +30,7 @@ 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.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;
|
||||
@@ -311,7 +312,10 @@ public class ZLMHttpHookListener {
|
||||
if (param.getApp().equalsIgnoreCase("rtp")) {
|
||||
String receiveKey = VideoManagerConstants.WVP_OTHER_RECEIVE_RTP_INFO + userSetting.getServerId() + "_" + param.getStream();
|
||||
OtherRtpSendInfo otherRtpSendInfo = (OtherRtpSendInfo)redisTemplate.opsForValue().get(receiveKey);
|
||||
if (otherRtpSendInfo != null) {
|
||||
|
||||
String receiveKeyForPS = VideoManagerConstants.WVP_OTHER_RECEIVE_PS_INFO + userSetting.getServerId() + "_" + param.getStream();
|
||||
OtherPsSendInfo otherPsSendInfo = (OtherPsSendInfo)redisTemplate.opsForValue().get(receiveKeyForPS);
|
||||
if (otherRtpSendInfo != null || otherPsSendInfo != null) {
|
||||
result.setEnable_mp4(true);
|
||||
}
|
||||
}
|
||||
@@ -696,7 +700,9 @@ public class ZLMHttpHookListener {
|
||||
result.onTimeout(() -> {
|
||||
logger.info("[ZLM HOOK] 预览流自动点播, 等待超时");
|
||||
msg.setData(new HookResult(ErrorCode.ERROR100.getCode(), "点播超时"));
|
||||
resultHolder.invokeResult(msg);
|
||||
resultHolder.invokeAllResult(msg);
|
||||
inviteStreamService.removeInviteInfoByDeviceAndChannel(InviteSessionType.PLAY, deviceId, channelId);
|
||||
storager.stopPlay(deviceId, channelId);
|
||||
});
|
||||
|
||||
resultHolder.put(key, uuid, result);
|
||||
|
||||
0
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMServerConfig.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMServerConfig.java
Normal file → Executable file
2
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMServerFactory.java
Normal file → Executable file
2
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMServerFactory.java
Normal file → Executable file
@@ -42,7 +42,7 @@ public class ZLMServerFactory {
|
||||
* @param tcpMode 0/null udp 模式,1 tcp 被动模式, 2 tcp 主动模式。
|
||||
* @return
|
||||
*/
|
||||
public int createRTPServer(MediaServerItem mediaServerItem, String streamId, int ssrc, Integer port, Boolean onlyAuto, Boolean reUsePort, Integer tcpMode) {
|
||||
public int createRTPServer(MediaServerItem mediaServerItem, String streamId, long ssrc, Integer port, Boolean onlyAuto, Boolean reUsePort, Integer tcpMode) {
|
||||
int result = -1;
|
||||
// 查询此rtp server 是否已经存在
|
||||
JSONObject rtpInfo = zlmresTfulUtils.getRtpInfo(mediaServerItem, streamId);
|
||||
|
||||
0
src/main/java/com/genersoft/iot/vmp/media/zlm/ZlmHttpHookSubscribe.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/ZlmHttpHookSubscribe.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/ChannelOnlineEvent.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/ChannelOnlineEvent.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/HookSubscribeFactory.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/HookSubscribeFactory.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/HookSubscribeForRtpServerTimeout.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/HookSubscribeForRtpServerTimeout.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/HookSubscribeForServerStarted.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/HookSubscribeForServerStarted.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/HookSubscribeForStreamChange.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/HookSubscribeForStreamChange.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/HookType.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/HookType.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/IHookSubscribe.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/IHookSubscribe.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/MediaServerItem.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/MediaServerItem.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/ServerKeepaliveData.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/ServerKeepaliveData.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamAuthorityInfo.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamAuthorityInfo.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamProxyItem.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamProxyItem.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamPushItem.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamPushItem.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/ZLMRunInfo.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/ZLMRunInfo.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/hook/HookParam.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/hook/HookParam.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/hook/HookResult.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/hook/HookResult.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/hook/HookResultForOnPublish.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/hook/HookResultForOnPublish.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/hook/OnPlayHookParam.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/hook/OnPlayHookParam.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/hook/OnPublishHookParam.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/hook/OnPublishHookParam.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/hook/OnRtpServerTimeoutHookParam.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/hook/OnRtpServerTimeoutHookParam.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/hook/OnSendRtpStoppedHookParam.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/hook/OnSendRtpStoppedHookParam.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/hook/OnServerKeepaliveHookParam.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/hook/OnServerKeepaliveHookParam.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/hook/OnStreamChangedHookParam.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/hook/OnStreamChangedHookParam.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/hook/OnStreamNoneReaderHookParam.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/hook/OnStreamNoneReaderHookParam.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/hook/OnStreamNotFoundHookParam.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/hook/OnStreamNotFoundHookParam.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/hook/OriginType.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/hook/OriginType.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMEventAbstract.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMEventAbstract.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMOfflineEvent.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMOfflineEvent.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMOnlineEvent.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMOnlineEvent.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMStatusEventListener.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMStatusEventListener.java
Normal file → Executable file
Reference in New Issue
Block a user