优化ABL结果封装完成

This commit is contained in:
lin 2025-09-16 17:57:59 +08:00
parent c1672728d3
commit 403e7648f9
10 changed files with 350 additions and 312 deletions

View File

@ -1,7 +1,6 @@
package com.genersoft.iot.vmp.media.abl; package com.genersoft.iot.vmp.media.abl;
import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.genersoft.iot.vmp.common.CommonCallback; import com.genersoft.iot.vmp.common.CommonCallback;
import com.genersoft.iot.vmp.common.InviteInfo; import com.genersoft.iot.vmp.common.InviteInfo;
import com.genersoft.iot.vmp.common.InviteSessionType; import com.genersoft.iot.vmp.common.InviteSessionType;
@ -11,8 +10,9 @@ import com.genersoft.iot.vmp.conf.UserSetting;
import com.genersoft.iot.vmp.conf.exception.ControllerException; import com.genersoft.iot.vmp.conf.exception.ControllerException;
import com.genersoft.iot.vmp.gb28181.bean.SendRtpInfo; import com.genersoft.iot.vmp.gb28181.bean.SendRtpInfo;
import com.genersoft.iot.vmp.gb28181.service.IInviteStreamService; import com.genersoft.iot.vmp.gb28181.service.IInviteStreamService;
import com.genersoft.iot.vmp.media.abl.bean.ABLMedia;
import com.genersoft.iot.vmp.media.abl.bean.ABLResult;
import com.genersoft.iot.vmp.media.abl.bean.AblServerConfig; import com.genersoft.iot.vmp.media.abl.bean.AblServerConfig;
import com.genersoft.iot.vmp.media.abl.bean.hook.OnStreamArriveABLHookParam;
import com.genersoft.iot.vmp.media.bean.MediaInfo; import com.genersoft.iot.vmp.media.bean.MediaInfo;
import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer;
import com.genersoft.iot.vmp.media.event.media.MediaRecordMp4Event; import com.genersoft.iot.vmp.media.event.media.MediaRecordMp4Event;
@ -32,7 +32,10 @@ import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import java.util.*; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service("abl") @Service("abl")
public class ABLMediaNodeServerService implements IMediaNodeServerService { public class ABLMediaNodeServerService implements IMediaNodeServerService {
@ -70,18 +73,10 @@ public class ABLMediaNodeServerService implements IMediaNodeServerService {
if (mediaServer == null) { if (mediaServer == null) {
return; return;
} }
Map<String, Object> param = new HashMap<>(); ABLResult result = ablresTfulUtils.closeStreams(mediaServer, "rtp", streamId);
param.put("stream_id", streamId); logger.info("关闭RTP Server " + result);
param.put("force", 1); if (result.getCode() != 0) {
JSONObject jsonObject = ablresTfulUtils.closeStreams(mediaServer, "rtp", streamId); logger.error("[closeRtpServer] 失败: {}", result.getMemo());
logger.info("关闭RTP Server " + jsonObject);
if (jsonObject != null ) {
if (jsonObject.getInteger("code") != 0) {
logger.error("[closeRtpServer] 失败: " + jsonObject.getString("memo"));
}
}else {
// 检查ZLM状态
logger.error("[closeRtpServer] 失败: 请检查ZLM服务");
} }
} }
@ -96,31 +91,18 @@ public class ABLMediaNodeServerService implements IMediaNodeServerService {
if (mediaServer == null) { if (mediaServer == null) {
return; return;
} }
JSONObject jsonObject = ablresTfulUtils.closeStreams(mediaServer, "1078", streamId); ABLResult result = ablresTfulUtils.closeStreams(mediaServer, "1078", streamId);
logger.info("关闭RTP Server " + jsonObject); logger.info("关闭JT-RTP Server " + result);
if (jsonObject != null ) { if (result.getCode() != 0) {
if (jsonObject.getInteger("code") != 0) { logger.error("[JT-closeRtpServer] 失败: {}", result.getMemo());
logger.error("[closeRtpServer] 失败: " + jsonObject.getString("memo"));
}
}else {
// 检查ZLM状态
logger.error("[closeRtpServer] 失败: 请检查ZLM服务");
} }
} }
@Override @Override
public void closeStreams(MediaServer mediaServer, String app, String streamId) { public void closeStreams(MediaServer mediaServer, String app, String streamId) {
Map<String, Object> param = new HashMap<>(); ABLResult result = ablresTfulUtils.closeStreams(mediaServer, app, streamId);
param.put("stream_id", streamId); if (result.getCode() != 0) {
param.put("force", 1); logger.error("[closeStreams] 失败: {}", result.getMemo());
JSONObject jsonObject = ablresTfulUtils.closeStreams(mediaServer, app, streamId);
if (jsonObject != null ) {
if (jsonObject.getInteger("code") != 0) {
logger.error("[closeStreams] 失败: " + jsonObject.getString("memo"));
}
}else {
// 检查ZLM状态
logger.error("[closeStreams] 失败: 请检查ZLM服务");
} }
} }
@ -146,8 +128,8 @@ public class ABLMediaNodeServerService implements IMediaNodeServerService {
mediaServer.setIp(ip); mediaServer.setIp(ip);
mediaServer.setHttpPort(port); mediaServer.setHttpPort(port);
mediaServer.setSecret(secret); mediaServer.setSecret(secret);
JSONObject responseJSON = ablresTfulUtils.getServerConfig(mediaServer); ABLResult result = ablresTfulUtils.getServerConfig(mediaServer);
JSONArray data = responseJSON.getJSONArray("params"); JSONArray data = result.getParams();
if (data != null && !data.isEmpty()) { if (data != null && !data.isEmpty()) {
AblServerConfig config = AblServerConfig.getInstance(data); AblServerConfig config = AblServerConfig.getInstance(data);
config.setServerIp(ip); config.setServerIp(ip);
@ -173,19 +155,17 @@ public class ABLMediaNodeServerService implements IMediaNodeServerService {
@Override @Override
public List<StreamInfo> getMediaList(MediaServer mediaServer, String app, String stream, String callId) { public List<StreamInfo> getMediaList(MediaServer mediaServer, String app, String stream, String callId) {
JSONObject jsonObject = ablresTfulUtils.getMediaList(mediaServer, app, stream); ABLResult result = ablresTfulUtils.getMediaList(mediaServer, app, stream);
if (jsonObject == null || jsonObject.getInteger("code") != 0) { if (result.getCode() != 0) {
return null; return null;
} }
JSONArray mediaList = jsonObject.getJSONArray("mediaList"); if (result.getMediaList() == null || result.getMediaList().isEmpty()) {
if (mediaList == null || mediaList.isEmpty()) {
return new ArrayList<>(); return new ArrayList<>();
} }
List<StreamInfo> streamInfoList = new ArrayList<>(); List<StreamInfo> streamInfoList = new ArrayList<>();
for (int i = 0; i < mediaList.size(); i++) { for (int i = 0; i < result.getMediaList().size(); i++) {
JSONObject mediaJSON = mediaList.getJSONObject(i); ABLMedia ablMedia = result.getMediaList().get(i);
OnStreamArriveABLHookParam onStreamArriveABLHookParam = mediaJSON.to(OnStreamArriveABLHookParam.class); MediaInfo mediaInfo = MediaInfo.getInstance(ablMedia, mediaServer);
MediaInfo mediaInfo = MediaInfo.getInstance(onStreamArriveABLHookParam, mediaServer);
StreamInfo streamInfo = getStreamInfoByAppAndStream(mediaServer, app, stream, mediaInfo, callId, true); StreamInfo streamInfo = getStreamInfoByAppAndStream(mediaServer, app, stream, mediaInfo, callId, true);
if (streamInfo != null) { if (streamInfo != null) {
streamInfoList.add(streamInfo); streamInfoList.add(streamInfo);
@ -230,37 +210,26 @@ public class ABLMediaNodeServerService implements IMediaNodeServerService {
@Override @Override
public MediaInfo getMediaInfo(MediaServer mediaServer, String app, String stream) { public MediaInfo getMediaInfo(MediaServer mediaServer, String app, String stream) {
JSONObject jsonObject = ablresTfulUtils.getMediaList(mediaServer, app, stream); ABLResult ablResult = ablresTfulUtils.getMediaList(mediaServer, app, stream);
if (jsonObject == null || jsonObject.getInteger("code") != 0) { if (ablResult.getCode() != 0) {
return null; return null;
} }
JSONArray mediaList = jsonObject.getJSONArray("mediaList"); if (ablResult.getMediaList() == null || ablResult.getMediaList().isEmpty()) {
if (mediaList == null || mediaList.isEmpty()) {
return null; return null;
} }
MediaInfo mediaInfo = null; return MediaInfo.getInstance(ablResult.getMediaList().get(0), mediaServer);
for (int i = 0; i < mediaList.size(); i++) {
JSONObject mediaJSON = mediaList.getJSONObject(i);
OnStreamArriveABLHookParam onStreamArriveABLHookParam = mediaJSON.to(OnStreamArriveABLHookParam.class);
if (onStreamArriveABLHookParam == null) {
continue;
}
mediaInfo = MediaInfo.getInstance(onStreamArriveABLHookParam, mediaServer);
}
return mediaInfo;
} }
@Override @Override
public Boolean pauseRtpCheck(MediaServer mediaServer, String streamKey) { public Boolean pauseRtpCheck(MediaServer mediaServer, String streamKey) {
logger.warn("[abl-pauseRtpCheck] 未实现"); ABLResult ablResult = ablresTfulUtils.pauseRtpServer(mediaServer, streamKey);
return null; return ablResult.getCode() == 0;
} }
@Override @Override
public Boolean resumeRtpCheck(MediaServer mediaServer, String streamKey) { public Boolean resumeRtpCheck(MediaServer mediaServer, String streamKey) {
logger.warn("[abl-resumeRtpCheck] 未实现"); ABLResult ablResult = ablresTfulUtils.resumeRtpServer(mediaServer, streamKey);
return null; return ablResult.getCode() == 0;
} }
@Override @Override
@ -270,14 +239,14 @@ public class ABLMediaNodeServerService implements IMediaNodeServerService {
@Override @Override
public Boolean delFFmpegSource(MediaServer mediaServer, String streamKey) { public Boolean delFFmpegSource(MediaServer mediaServer, String streamKey) {
JSONObject jsonObject = ablresTfulUtils.delFFmpegProxy(mediaServer, streamKey); ABLResult ablResult = ablresTfulUtils.delFFmpegProxy(mediaServer, streamKey);
return jsonObject.getInteger("code") == 0; return ablResult.getCode() == 0;
} }
@Override @Override
public Boolean delStreamProxy(MediaServer mediaServer, String streamKey) { public Boolean delStreamProxy(MediaServer mediaServer, String streamKey) {
JSONObject jsonObject = ablresTfulUtils.delStreamProxy(mediaServer, streamKey); ABLResult ablResult = ablresTfulUtils.delStreamProxy(mediaServer, streamKey);
return jsonObject.getInteger("code") == 0; return ablResult.getCode() == 0;
} }
@Override @Override
@ -311,17 +280,15 @@ public class ABLMediaNodeServerService implements IMediaNodeServerService {
} }
long startTime = cloudRecordItemList.get(cloudRecordItemList.size() - 1).getStartTime(); long startTime = cloudRecordItemList.get(cloudRecordItemList.size() - 1).getStartTime();
long endTime = cloudRecordItemList.get(0).getEndTime(); long endTime = cloudRecordItemList.get(0).getEndTime();
JSONObject jsonObject = ablresTfulUtils.queryRecordList(event.getMediaServer(), event.getApp(), event.getStream(), DateUtil.timestampMsToUrlToyyyy_MM_dd_HH_mm_ss(startTime), ABLResult ablResult = ablresTfulUtils.queryRecordList(event.getMediaServer(), event.getApp(), event.getStream(), DateUtil.timestampMsToUrlToyyyy_MM_dd_HH_mm_ss(startTime),
DateUtil.timestampMsToUrlToyyyy_MM_dd_HH_mm_ss(endTime)); DateUtil.timestampMsToUrlToyyyy_MM_dd_HH_mm_ss(endTime));
System.err.println(jsonObject); if (ablResult.getCode() != 0) {
if (jsonObject == null || jsonObject.getInteger("code") != 0) {
return; return;
} }
JSONObject urlJson = jsonObject.getJSONObject("url"); if (ablResult.getUrl() == null) {
if (urlJson == null) {
return; return;
} }
String download = urlJson.getString("http-mp4") + "?download_speed=6"; String download = ablResult.getUrl().getDownload();
DownloadFileInfo downloadFileInfo = new DownloadFileInfo(); DownloadFileInfo downloadFileInfo = new DownloadFileInfo();
downloadFileInfo.setHttpPath(download); downloadFileInfo.setHttpPath(download);
downloadFileInfo.setHttpsPath(download); downloadFileInfo.setHttpsPath(download);
@ -346,11 +313,11 @@ public class ABLMediaNodeServerService implements IMediaNodeServerService {
@Override @Override
public WVPResult<String> addStreamProxy(MediaServer mediaServer, String app, String stream, String url, boolean enableAudio, boolean enableMp4, String rtpType, Integer timeout) { public WVPResult<String> addStreamProxy(MediaServer mediaServer, String app, String stream, String url, boolean enableAudio, boolean enableMp4, String rtpType, Integer timeout) {
JSONObject jsonObject = ablresTfulUtils.addStreamProxy(mediaServer, app, stream, url, !enableAudio, enableMp4, rtpType, timeout); ABLResult result = ablresTfulUtils.addStreamProxy(mediaServer, app, stream, url, !enableAudio, enableMp4, rtpType, timeout);
if (jsonObject.getInteger("code") != 0) { if (result.getCode() != 0) {
return WVPResult.fail(ErrorCode.ERROR100.getCode(), jsonObject.getString("memo")); return WVPResult.fail(ErrorCode.ERROR100.getCode(), result.getMemo());
}else { }else {
return WVPResult.success(jsonObject.getString("key")); return WVPResult.success(result.getKey());
} }
} }
@ -380,25 +347,23 @@ public class ABLMediaNodeServerService implements IMediaNodeServerService {
closeStreams(mediaServer, streamProxy.getApp(), streamProxy.getStream()); closeStreams(mediaServer, streamProxy.getApp(), streamProxy.getStream());
} }
JSONObject jsonObject = null; ABLResult ablResult = null;
if ("ffmpeg".equalsIgnoreCase(streamProxy.getType())){ if ("ffmpeg".equalsIgnoreCase(streamProxy.getType())){
if (streamProxy.getTimeout() == 0) { if (streamProxy.getTimeout() == 0) {
streamProxy.setTimeout(15); streamProxy.setTimeout(15);
} }
jsonObject = ablresTfulUtils.addFFmpegProxy(mediaServer, streamProxy.getApp(), streamProxy.getStream(), streamProxy.getSrcUrl().trim(), ablResult = ablresTfulUtils.addFFmpegProxy(mediaServer, streamProxy.getApp(), streamProxy.getStream(), streamProxy.getSrcUrl().trim(),
!streamProxy.isEnableAudio(), streamProxy.isEnableMp4(), streamProxy.getRtspType(), streamProxy.getTimeout()); !streamProxy.isEnableAudio(), streamProxy.isEnableMp4(), streamProxy.getRtspType(), streamProxy.getTimeout());
}else { }else {
jsonObject = ablresTfulUtils.addStreamProxy(mediaServer, streamProxy.getApp(), streamProxy.getStream(), streamProxy.getSrcUrl().trim(), ablResult = ablresTfulUtils.addStreamProxy(mediaServer, streamProxy.getApp(), streamProxy.getStream(), streamProxy.getSrcUrl().trim(),
streamProxy.isEnableAudio(), streamProxy.isEnableMp4(), streamProxy.getRtspType(), streamProxy.getTimeout()); streamProxy.isEnableAudio(), streamProxy.isEnableMp4(), streamProxy.getRtspType(), streamProxy.getTimeout());
} }
if (jsonObject == null) { if (ablResult.getCode() != 0) {
throw new ControllerException(ErrorCode.ERROR100.getCode(), "请求失败"); throw new ControllerException(ablResult.getCode(), ablResult.getMemo());
}else if (jsonObject.getInteger("code") != 0) {
throw new ControllerException(jsonObject.getInteger("code"), jsonObject.getString("memo"));
}else { }else {
String key = jsonObject.getString("key"); String key = ablResult.getKey();
if (key == null) { if (key == null) {
throw new ControllerException(jsonObject.getInteger("code"), "代理结果异常: " + jsonObject); throw new ControllerException(ablResult.getCode(), "代理结果异常: " + ablResult);
}else { }else {
return key; return key;
} }
@ -407,33 +372,30 @@ public class ABLMediaNodeServerService implements IMediaNodeServerService {
@Override @Override
public void stopProxy(MediaServer mediaServer, String streamKey, String type) { public void stopProxy(MediaServer mediaServer, String streamKey, String type) {
JSONObject jsonObject = null; ABLResult ablResult = null;
if ("ffmpeg".equalsIgnoreCase(type)){ if ("ffmpeg".equalsIgnoreCase(type)){
jsonObject = ablresTfulUtils.delFFmpegProxy(mediaServer, streamKey); ablResult = ablresTfulUtils.delFFmpegProxy(mediaServer, streamKey);
}else { }else {
jsonObject = ablresTfulUtils.delStreamProxy(mediaServer, streamKey); ablResult = ablresTfulUtils.delStreamProxy(mediaServer, streamKey);
} }
if (jsonObject == null) { if (ablResult.getCode() != 0) {
throw new ControllerException(ErrorCode.ERROR100.getCode(), "请求失败"); throw new ControllerException(ablResult.getCode(), ablResult.getMemo());
}else if (jsonObject.getInteger("code") != 0) {
throw new ControllerException(jsonObject.getInteger("code"), jsonObject.getString("memo"));
} }
} }
@Override @Override
public List<String> listRtpServer(MediaServer mediaServer) { public List<String> listRtpServer(MediaServer mediaServer) {
JSONObject jsonObject = ablresTfulUtils.getMediaList(mediaServer, "rtp", null); ABLResult ablResult = ablresTfulUtils.getMediaList(mediaServer, "rtp", null);
if (jsonObject == null || jsonObject.getInteger("code") != 0) { if (ablResult.getCode() != 0) {
return null; return null;
} }
JSONArray mediaList = jsonObject.getJSONArray("mediaList"); if (ablResult.getMediaList() == null || ablResult.getMediaList().isEmpty()) {
if (mediaList == null || mediaList.isEmpty()) {
return new ArrayList<>(); return new ArrayList<>();
} }
List<String> result = new ArrayList<>(); List<String> result = new ArrayList<>();
for (int i = 0; i < mediaList.size(); i++) { for (int i = 0; i < ablResult.getMediaList().size(); i++) {
JSONObject mediaJSON = mediaList.getJSONObject(i); ABLMedia ablMedia = ablResult.getMediaList().get(i);
result.add(mediaJSON.getString("stream")); result.add(ablMedia.getStream());
} }
return result; return result;
} }

View File

@ -1,17 +1,17 @@
package com.genersoft.iot.vmp.media.abl; package com.genersoft.iot.vmp.media.abl;
import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.genersoft.iot.vmp.conf.DynamicTask; import com.genersoft.iot.vmp.conf.DynamicTask;
import com.genersoft.iot.vmp.conf.UserSetting; import com.genersoft.iot.vmp.conf.UserSetting;
import com.genersoft.iot.vmp.media.abl.bean.ABLResult;
import com.genersoft.iot.vmp.media.abl.bean.AblServerConfig; import com.genersoft.iot.vmp.media.abl.bean.AblServerConfig;
import com.genersoft.iot.vmp.media.abl.bean.ConfigKeyId; import com.genersoft.iot.vmp.media.abl.bean.ConfigKeyId;
import com.genersoft.iot.vmp.media.abl.event.HookAblServerKeepaliveEvent; import com.genersoft.iot.vmp.media.abl.event.HookAblServerKeepaliveEvent;
import com.genersoft.iot.vmp.media.abl.event.HookAblServerStartEvent; import com.genersoft.iot.vmp.media.abl.event.HookAblServerStartEvent;
import com.genersoft.iot.vmp.media.bean.MediaServer;
import com.genersoft.iot.vmp.media.event.mediaServer.MediaServerChangeEvent; import com.genersoft.iot.vmp.media.event.mediaServer.MediaServerChangeEvent;
import com.genersoft.iot.vmp.media.event.mediaServer.MediaServerDeleteEvent; import com.genersoft.iot.vmp.media.event.mediaServer.MediaServerDeleteEvent;
import com.genersoft.iot.vmp.media.service.IMediaServerService; import com.genersoft.iot.vmp.media.service.IMediaServerService;
import com.genersoft.iot.vmp.media.bean.MediaServer;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -131,17 +131,18 @@ public class ABLMediaServerStatusManger {
continue; continue;
} }
logger.info("[ABL-尝试连接] ID{}, 地址: {}:{}", mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort()); logger.info("[ABL-尝试连接] ID{}, 地址: {}:{}", mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort());
JSONObject responseJson = ablResTfulUtils.getServerConfig(mediaServerItem); ABLResult ablResult = ablResTfulUtils.getServerConfig(mediaServerItem);
AblServerConfig ablServerConfig = null; AblServerConfig ablServerConfig = null;
if (responseJson == null) { if (ablResult.getCode() != 0) {
logger.info("[ABL-尝试连接]失败, ID{}, 地址: {}:{}", mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort()); logger.info("[ABL-尝试连接]失败, ID{}, 地址: {}:{}", mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort());
continue; continue;
} }
JSONArray data = responseJson.getJSONArray("params"); JSONArray params = ablResult.getParams();
if (data == null || data.isEmpty()) {
if (params == null || params.isEmpty()) {
logger.info("[ABL-尝试连接]失败, ID{}, 地址: {}:{}", mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort()); logger.info("[ABL-尝试连接]失败, ID{}, 地址: {}:{}", mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort());
}else { }else {
ablServerConfig = AblServerConfig.getInstance(data); ablServerConfig = AblServerConfig.getInstance(params);
initPort(mediaServerItem, ablServerConfig); initPort(mediaServerItem, ablServerConfig);
online(mediaServerItem, ablServerConfig); online(mediaServerItem, ablServerConfig);
} }
@ -153,19 +154,19 @@ public class ABLMediaServerStatusManger {
continue; continue;
} }
logger.info("[ABL-尝试连接] ID{}, 地址: {}:{}", mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort()); logger.info("[ABL-尝试连接] ID{}, 地址: {}:{}", mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort());
JSONObject responseJson = ablResTfulUtils.getServerConfig(mediaServerItem); ABLResult ablResult = ablResTfulUtils.getServerConfig(mediaServerItem);
AblServerConfig ablServerConfig = null; AblServerConfig ablServerConfig = null;
if (responseJson == null) { if (ablResult.getCode() != 0) {
logger.info("[ABL-尝试连接]失败, ID{}, 地址: {}:{}", mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort()); logger.info("[ABL-尝试连接]失败, ID{}, 地址: {}:{}", mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort());
offlineAblTimeMap.put(mediaServerItem.getId(), System.currentTimeMillis()); offlineAblTimeMap.put(mediaServerItem.getId(), System.currentTimeMillis());
continue; continue;
} }
JSONArray data = responseJson.getJSONArray("params"); JSONArray params = ablResult.getParams();
if (data == null || data.isEmpty()) { if (params == null || params.isEmpty()) {
logger.info("[ABL-尝试连接]失败, ID{}, 地址: {}:{}", mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort()); logger.info("[ABL-尝试连接]失败, ID{}, 地址: {}:{}", mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort());
offlineAblTimeMap.put(mediaServerItem.getId(), System.currentTimeMillis()); offlineAblTimeMap.put(mediaServerItem.getId(), System.currentTimeMillis());
}else { }else {
ablServerConfig = AblServerConfig.getInstance(data); ablServerConfig = AblServerConfig.getInstance(params);
initPort(mediaServerItem, ablServerConfig); initPort(mediaServerItem, ablServerConfig);
online(mediaServerItem, ablServerConfig); online(mediaServerItem, ablServerConfig);
} }
@ -184,8 +185,8 @@ public class ABLMediaServerStatusManger {
mediaServerService.update(mediaServerItem); mediaServerService.update(mediaServerItem);
if(mediaServerItem.isAutoConfig()) { if(mediaServerItem.isAutoConfig()) {
if (config == null) { if (config == null) {
JSONObject responseJSON = ablResTfulUtils.getServerConfig(mediaServerItem); ABLResult ablResult = ablResTfulUtils.getServerConfig(mediaServerItem);
JSONArray data = responseJSON.getJSONArray("params"); JSONArray data = ablResult.getParams();
if (data != null && !data.isEmpty()) { if (data != null && !data.isEmpty()) {
config = AblServerConfig.getInstance(data); config = AblServerConfig.getInstance(data);
} }
@ -247,11 +248,11 @@ public class ABLMediaServerStatusManger {
try { try {
if (config.getHookEnable() == 0) { if (config.getHookEnable() == 0) {
logger.info("[媒体服务节点-ABL] 开启HOOK功能 {}", mediaServerItem.getId()); logger.info("[媒体服务节点-ABL] 开启HOOK功能 {}", mediaServerItem.getId());
JSONObject responseJSON = ablResTfulUtils.setConfigParamValue(mediaServerItem, "hook_enable", "1"); ABLResult ablResult = ablResTfulUtils.setConfigParamValue(mediaServerItem, "hook_enable", "1");
if (responseJSON.getInteger("code") == 0) { if (ablResult.getCode() == 0) {
logger.info("[媒体服务节点-ABL] 开启HOOK功能成功 {}", mediaServerItem.getId()); logger.info("[媒体服务节点-ABL] 开启HOOK功能成功 {}", mediaServerItem.getId());
}else { }else {
logger.info("[媒体服务节点-ABL] 开启HOOK功能失败 {}->{}", mediaServerItem.getId(), responseJSON.getString("memo")); logger.info("[媒体服务节点-ABL] 开启HOOK功能失败 {}->{}", mediaServerItem.getId(), ablResult.getMemo());
} }
} }
}catch (Exception e) { }catch (Exception e) {
@ -286,11 +287,11 @@ public class ABLMediaServerStatusManger {
field.setAccessible(true); field.setAccessible(true);
// 利用反射获取值后对比是否与配置中相同不同则进行设置 // 利用反射获取值后对比是否与配置中相同不同则进行设置
if (!hookUrl.equals(field.get(config))) { if (!hookUrl.equals(field.get(config))) {
JSONObject responseJSON = ablResTfulUtils.setConfigParamValue(mediaServerItem, hook, hookUrl); ABLResult ablResult = ablResTfulUtils.setConfigParamValue(mediaServerItem, hook, hookUrl);
if (responseJSON.getInteger("code") == 0) { if (ablResult.getCode() == 0) {
logger.info("[媒体服务节点-ABL] 设置HOOK {} 成功 {}", hook, mediaServerItem.getId()); logger.info("[媒体服务节点-ABL] 设置HOOK {} 成功 {}", hook, mediaServerItem.getId());
}else { }else {
logger.info("[媒体服务节点-ABL] 设置HOOK {} 失败 {}->{}", hook, mediaServerItem.getId(), responseJSON.getString("memo")); logger.info("[媒体服务节点-ABL] 设置HOOK {} 失败 {}->{}", hook, mediaServerItem.getId(), ablResult.getMemo());
} }
} }
} }

View File

@ -1,7 +1,7 @@
package com.genersoft.iot.vmp.media.abl; package com.genersoft.iot.vmp.media.abl;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject; import com.genersoft.iot.vmp.media.abl.bean.ABLResult;
import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer;
import okhttp3.*; import okhttp3.*;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@ -27,7 +27,10 @@ public class ABLRESTfulUtils {
private OkHttpClient client; private OkHttpClient client;
public interface RequestCallback{ public interface RequestCallback{
void run(JSONObject response); void run(String response);
}
public interface ResultCallback{
void run(ABLResult response);
} }
private OkHttpClient getClient(){ private OkHttpClient getClient(){
@ -53,26 +56,23 @@ public class ABLRESTfulUtils {
} }
public JSONObject sendPost(MediaServer mediaServerItem, String api, Map<String, Object> param, RequestCallback callback) { public String sendPost(MediaServer mediaServerItem, String api, Map<String, Object> param, RequestCallback callback) {
return sendPost(mediaServerItem, api, param, callback, null); return sendPost(mediaServerItem, api, param, callback, null);
} }
public JSONObject sendPost(MediaServer mediaServerItem, String api, Map<String, Object> param, RequestCallback callback, Integer readTimeOut) { public String sendPost(MediaServer mediaServerItem, String api, Map<String, Object> param, RequestCallback callback, Integer readTimeOut) {
OkHttpClient client = getClient(readTimeOut); OkHttpClient client = getClient(readTimeOut);
if (mediaServerItem == null) { if (mediaServerItem == null) {
return null; return null;
} }
String url = String.format("http://%s:%s/index/api/%s", mediaServerItem.getIp(), mediaServerItem.getHttpPort(), api); String url = String.format("http://%s:%s/index/api/%s", mediaServerItem.getIp(), mediaServerItem.getHttpPort(), api);
JSONObject responseJSON = new JSONObject(); String result = null;
//-2自定义流媒体 调用错误码
responseJSON.put("code",-2);
responseJSON.put("msg","流媒体调用失败");
FormBody.Builder builder = new FormBody.Builder(); FormBody.Builder builder = new FormBody.Builder();
builder.add("secret",mediaServerItem.getSecret()); builder.add("secret",mediaServerItem.getSecret());
if (param != null && param.keySet().size() > 0) { if (param != null && !param.isEmpty()) {
for (String key : param.keySet()){ for (String key : param.keySet()){
if (param.get(key) != null) { if (param.get(key) != null) {
builder.add(key, param.get(key).toString()); builder.add(key, param.get(key).toString());
@ -93,8 +93,7 @@ public class ABLRESTfulUtils {
if (response.isSuccessful()) { if (response.isSuccessful()) {
ResponseBody responseBody = response.body(); ResponseBody responseBody = response.body();
if (responseBody != null) { if (responseBody != null) {
String responseStr = responseBody.string(); result = responseBody.string();
responseJSON = JSON.parseObject(responseStr);
} }
}else { }else {
response.close(); response.close();
@ -123,7 +122,7 @@ public class ABLRESTfulUtils {
if (response.isSuccessful()) { if (response.isSuccessful()) {
try { try {
String responseStr = Objects.requireNonNull(response.body()).string(); String responseStr = Objects.requireNonNull(response.body()).string();
callback.run(JSON.parseObject(responseStr)); callback.run(responseStr);
} catch (IOException e) { } catch (IOException e) {
logger.error(String.format("[ %s ]请求失败: %s", url, e.getMessage())); logger.error(String.format("[ %s ]请求失败: %s", url, e.getMessage()));
} }
@ -149,19 +148,16 @@ public class ABLRESTfulUtils {
} }
}); });
} }
return result;
return responseJSON;
} }
public JSONObject sendGet(MediaServer mediaServerItem, String api, Map<String, Object> param) { public String sendGet(MediaServer mediaServerItem, String api, Map<String, Object> param) {
OkHttpClient client = getClient(); OkHttpClient client = getClient();
if (mediaServerItem == null) { if (mediaServerItem == null) {
return null; return null;
} }
JSONObject responseJSON = null; String result = null;
StringBuilder stringBuffer = new StringBuilder(); StringBuilder stringBuffer = new StringBuilder();
stringBuffer.append(String.format("http://%s:%s/index/api/%s", mediaServerItem.getIp(), mediaServerItem.getHttpPort(), api)); stringBuffer.append(String.format("http://%s:%s/index/api/%s", mediaServerItem.getIp(), mediaServerItem.getHttpPort(), api));
if (param != null && !param.keySet().isEmpty()) { if (param != null && !param.keySet().isEmpty()) {
@ -188,8 +184,7 @@ public class ABLRESTfulUtils {
if (response.isSuccessful()) { if (response.isSuccessful()) {
ResponseBody responseBody = response.body(); ResponseBody responseBody = response.body();
if (responseBody != null) { if (responseBody != null) {
String responseStr = responseBody.string(); result = responseBody.string();
responseJSON = JSON.parseObject(responseStr);
} }
}else { }else {
response.close(); response.close();
@ -201,10 +196,7 @@ public class ABLRESTfulUtils {
}catch (IOException e) { }catch (IOException e) {
logger.error(String.format("[ %s ]请求失败: %s", url, e.getMessage())); logger.error(String.format("[ %s ]请求失败: %s", url, e.getMessage()));
} }
return result;
return responseJSON;
} }
public void sendGetForImg(MediaServer mediaServerItem, String api, Map<String, Object> params, String targetPath, String fileName) { public void sendGetForImg(MediaServer mediaServerItem, String api, Map<String, Object> params, String targetPath, String fileName) {
@ -330,32 +322,55 @@ public class ABLRESTfulUtils {
param.put("enable_mp4", 1); param.put("enable_mp4", 1);
} }
JSONObject jsonObject = sendPost(mediaServer, "openRtpServer", param, null); String response = sendPost(mediaServer, "openRtpServer", param, null);
if (jsonObject.getInteger("code") == 0) { if (response == null) {
return jsonObject.getInteger("port");
}else {
return 0; return 0;
}else {
ABLResult ablResult = JSON.parseObject(response, ABLResult.class);
if (ablResult.getCode() == 0) {
return ablResult.getPort();
}else {
return 0;
}
} }
} }
public JSONObject closeStreams(MediaServer mediaServerItem, String app, String stream) { public ABLResult closeStreams(MediaServer mediaServerItem, String app, String stream) {
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
param.put("vhost", "__defaultVhost__"); param.put("vhost", "__defaultVhost__");
param.put("app", app); param.put("app", app);
param.put("stream", stream); param.put("stream", stream);
param.put("force", 1); param.put("force", 1);
return sendPost(mediaServerItem, "close_streams",param, null); String response = sendPost(mediaServerItem, "close_streams", param, null);
ABLResult ablResult = JSON.parseObject(response, ABLResult.class);
if (ablResult == null) {
return ABLResult.getFailForMediaServer();
}else {
return ablResult;
}
} }
public JSONObject getServerConfig(MediaServer mediaServerItem){ public ABLResult getServerConfig(MediaServer mediaServerItem){
return sendPost(mediaServerItem, "getServerConfig",null, null); String response = sendPost(mediaServerItem, "getServerConfig", null, null);
ABLResult ablResult = JSON.parseObject(response, ABLResult.class);
if (ablResult == null) {
return ABLResult.getFailForMediaServer();
}else {
return ablResult;
}
} }
public JSONObject setConfigParamValue(MediaServer mediaServerItem, String key, Object value){ public ABLResult setConfigParamValue(MediaServer mediaServerItem, String key, Object value){
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
param.put("key", key); param.put("key", key);
param.put("value", value); param.put("value", value);
return sendGet(mediaServerItem,"setConfigParamValue", param); String response = sendGet(mediaServerItem, "setConfigParamValue", param);
ABLResult ablResult = JSON.parseObject(response, ABLResult.class);
if (ablResult == null) {
return ABLResult.getFailForMediaServer();
}else {
return ablResult;
}
} }
public void stopSendRtp(MediaServer mediaServer,String key) { public void stopSendRtp(MediaServer mediaServer,String key) {
@ -364,22 +379,35 @@ public class ABLRESTfulUtils {
sendPost(mediaServer,"stopSendRtp", param, null); sendPost(mediaServer,"stopSendRtp", param, null);
} }
public JSONObject getMediaList(MediaServer mediaServer, String app, String stream) { public ABLResult getMediaList(MediaServer mediaServer, String app, String stream) {
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
param.put("app", app); param.put("app", app);
if (stream != null) { if (stream != null) {
param.put("stream", stream); param.put("stream", stream);
} }
return sendPost(mediaServer,"getMediaList", param, null);
String response = sendGet(mediaServer, "getMediaList", param);
ABLResult ablResult = JSON.parseObject(response, ABLResult.class);
if (ablResult == null) {
return ABLResult.getFailForMediaServer();
}else {
return ablResult;
}
} }
public JSONObject queryRecordList(MediaServer mediaServer, String app, String stream, String startTime, String endTime) { public ABLResult queryRecordList(MediaServer mediaServer, String app, String stream, String startTime, String endTime) {
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
param.put("app", app); param.put("app", app);
param.put("stream", stream); param.put("stream", stream);
param.put("starttime", startTime); param.put("starttime", startTime);
param.put("endtime", endTime); param.put("endtime", endTime);
return sendPost(mediaServer,"queryRecordList", param, null); String response = sendGet(mediaServer, "queryRecordList", param);
ABLResult ablResult = JSON.parseObject(response, ABLResult.class);
if (ablResult == null) {
return ABLResult.getFailForMediaServer();
}else {
return ablResult;
}
} }
public void getSnap(MediaServer mediaServer, String app, String stream, int timeoutSec, String path, String fileName) { public void getSnap(MediaServer mediaServer, String app, String stream, int timeoutSec, String path, String fileName) {
@ -397,7 +425,7 @@ public class ABLRESTfulUtils {
} }
public JSONObject addStreamProxy(MediaServer mediaServer, String app, String stream, String url, boolean disableAudio, boolean enableMp4, String rtpType, Integer timeout) { public ABLResult addStreamProxy(MediaServer mediaServer, String app, String stream, String url, boolean disableAudio, boolean enableMp4, String rtpType, Integer timeout) {
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
param.put("app", app); param.put("app", app);
param.put("stream", stream); param.put("stream", stream);
@ -405,10 +433,16 @@ public class ABLRESTfulUtils {
param.put("disableAudio", disableAudio? "1" : "0"); param.put("disableAudio", disableAudio? "1" : "0");
param.put("enable_mp4", enableMp4 ? "1" : "0"); param.put("enable_mp4", enableMp4 ? "1" : "0");
// TODO rtpType timeout 尚不支持 // TODO rtpType timeout 尚不支持
return sendPost(mediaServer,"addStreamProxy", param, null); String response = sendGet(mediaServer, "addStreamProxy", param);
ABLResult ablResult = JSON.parseObject(response, ABLResult.class);
if (ablResult == null) {
return ABLResult.getFailForMediaServer();
}else {
return ablResult;
}
} }
public JSONObject addFFmpegProxy(MediaServer mediaServer, String app, String stream, String url, boolean disableAudio, boolean enableMp4, String rtpType, Integer timeout) { public ABLResult addFFmpegProxy(MediaServer mediaServer, String app, String stream, String url, boolean disableAudio, boolean enableMp4, String rtpType, Integer timeout) {
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
param.put("app", app); param.put("app", app);
param.put("stream", stream); param.put("stream", stream);
@ -416,19 +450,61 @@ public class ABLRESTfulUtils {
param.put("disableAudio", disableAudio); param.put("disableAudio", disableAudio);
param.put("enable_mp4", enableMp4); param.put("enable_mp4", enableMp4);
// TODO rtpType timeout 尚不支持 // TODO rtpType timeout 尚不支持
return sendPost(mediaServer,"addFFmpegProxy", param, null); String response = sendGet(mediaServer, "addFFmpegProxy", param);
ABLResult ablResult = JSON.parseObject(response, ABLResult.class);
if (ablResult == null) {
return ABLResult.getFailForMediaServer();
}else {
return ablResult;
}
} }
public JSONObject delStreamProxy(MediaServer mediaServer, String streamKey) { public ABLResult delStreamProxy(MediaServer mediaServer, String streamKey) {
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
param.put("key", streamKey); param.put("key", streamKey);
return sendPost(mediaServer,"delStreamProxy", param, null); String response = sendGet(mediaServer, "delStreamProxy", param);
ABLResult ablResult = JSON.parseObject(response, ABLResult.class);
if (ablResult == null) {
return ABLResult.getFailForMediaServer();
}else {
return ablResult;
}
} }
public JSONObject delFFmpegProxy(MediaServer mediaServer, String streamKey) { public ABLResult delFFmpegProxy(MediaServer mediaServer, String streamKey) {
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
param.put("key", streamKey); param.put("key", streamKey);
return sendPost(mediaServer,"delFFmpegProxy", param, null); String response = sendGet(mediaServer, "delFFmpegProxy", param);
ABLResult ablResult = JSON.parseObject(response, ABLResult.class);
if (ablResult == null) {
return ABLResult.getFailForMediaServer();
}else {
return ablResult;
}
}
public ABLResult pauseRtpServer(MediaServer mediaServer, String streamKey) {
Map<String, Object> param = new HashMap<>();
param.put("key", streamKey);
String response = sendGet(mediaServer, "pauseRtpServer", param);
ABLResult ablResult = JSON.parseObject(response, ABLResult.class);
if (ablResult == null) {
return ABLResult.getFailForMediaServer();
}else {
return ablResult;
}
}
public ABLResult resumeRtpServer(MediaServer mediaServer, String streamKey) {
Map<String, Object> param = new HashMap<>();
param.put("key", streamKey);
String response = sendGet(mediaServer, "resumeRtpServer", param);
ABLResult ablResult = JSON.parseObject(response, ABLResult.class);
if (ablResult == null) {
return ABLResult.getFailForMediaServer();
}else {
return ablResult;
}
} }
} }

View File

@ -0,0 +1,25 @@
package com.genersoft.iot.vmp.media.abl.bean;
import lombok.Data;
@Data
public class ABLMedia {
private String key;
private String app;
private String stream;
private Integer sourceType;
private Long duration;
private String sim;
private Boolean status;
private Boolean enable_hls;
private Boolean transcodingStatus;
private String sourceURL;
private Integer networkType;
private Integer readerCount;
private String videoCodec;
private Integer width;
private Integer height;
private String audioCodec;
private Integer audioChannels;
private Integer audioSampleRate;
}

View File

@ -0,0 +1,10 @@
package com.genersoft.iot.vmp.media.abl.bean;
import lombok.Data;
@Data
public class ABLRecordFile {
private String file;
private Long duration;
private ABLUrls url;
}

View File

@ -0,0 +1,48 @@
package com.genersoft.iot.vmp.media.abl.bean;
import com.alibaba.fastjson2.JSONArray;
import lombok.Data;
import java.util.List;
@Data
public class ABLResult {
private int code;
private String memo;
private String key;
private Integer port;
private JSONArray params;
private List<ABLMedia> mediaList;
private String app;
private String stream;
private String starttime;
private String endtime;
private ABLUrls url;
private ABLRecordFile recordFileList;
public static ABLResult getFailForMediaServer() {
ABLResult zlmResult = new ABLResult();
zlmResult.setCode(-2);
zlmResult.setMemo("流媒体调用失败");
return zlmResult;
}
public static ABLResult getMediaServer(int code, String msg) {
ABLResult zlmResult = new ABLResult();
zlmResult.setCode(code);
zlmResult.setMemo(msg);
return zlmResult;
}
@Override
public String toString() {
return "ZLMResult{" +
"code=" + code +
", memo='" + memo + '\'' +
(key != null ? (", key=" + key) : "") +
(port != null ? (", port=" + port) : "") +
'}';
}
}

View File

@ -0,0 +1,21 @@
package com.genersoft.iot.vmp.media.abl.bean;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Data;
@Data
public class ABLUrls {
private String rtsp;
private String rtmp;
@JSONField(name = "http-flv")
private String httpFlv;
@JSONField(name = "ws-flv")
private String wsFlv;
@JSONField(name = "http-mp4")
private String httpMp4;
private String download;
}

View File

@ -1,10 +1,14 @@
package com.genersoft.iot.vmp.media.abl.bean.hook; package com.genersoft.iot.vmp.media.abl.bean.hook;
import com.genersoft.iot.vmp.media.abl.bean.AblUrls; import com.genersoft.iot.vmp.media.abl.bean.AblUrls;
import lombok.Getter;
import lombok.Setter;
/** /**
* 流到来的事件 * 流到来的事件
*/ */
@Getter
@Setter
public class OnStreamArriveABLHookParam extends ABLHookParam{ public class OnStreamArriveABLHookParam extends ABLHookParam{
@ -105,141 +109,4 @@ public class OnStreamArriveABLHookParam extends ABLHookParam{
private AblUrls url; private AblUrls url;
public String getCallId() {
return callId;
}
public void setCallId(String callId) {
this.callId = callId;
}
public Boolean getStatus() {
return status;
}
public void setStatus(Boolean status) {
this.status = status;
}
public Boolean getEnableHls() {
return enableHls;
}
public void setEnableHls(Boolean enableHls) {
this.enableHls = enableHls;
}
public Boolean getTranscodingStatus() {
return transcodingStatus;
}
public void setTranscodingStatus(Boolean transcodingStatus) {
this.transcodingStatus = transcodingStatus;
}
public String getSourceURL() {
return sourceURL;
}
public void setSourceURL(String sourceURL) {
this.sourceURL = sourceURL;
}
public Integer getReaderCount() {
return readerCount;
}
public void setReaderCount(Integer readerCount) {
this.readerCount = readerCount;
}
public Integer getNoneReaderDuration() {
return noneReaderDuration;
}
public void setNoneReaderDuration(Integer noneReaderDuration) {
this.noneReaderDuration = noneReaderDuration;
}
public String getVideoCodec() {
return videoCodec;
}
public void setVideoCodec(String videoCodec) {
this.videoCodec = videoCodec;
}
public Integer getVideoFrameSpeed() {
return videoFrameSpeed;
}
public void setVideoFrameSpeed(Integer videoFrameSpeed) {
this.videoFrameSpeed = videoFrameSpeed;
}
public Integer getWidth() {
return width;
}
public void setWidth(Integer width) {
this.width = width;
}
public Integer getHeight() {
return height;
}
public void setHeight(Integer height) {
this.height = height;
}
public Integer getVideoBitrate() {
return videoBitrate;
}
public void setVideoBitrate(Integer videoBitrate) {
this.videoBitrate = videoBitrate;
}
public String getAudioCodec() {
return audioCodec;
}
public void setAudioCodec(String audioCodec) {
this.audioCodec = audioCodec;
}
public Integer getAudioChannels() {
return audioChannels;
}
public void setAudioChannels(Integer audioChannels) {
this.audioChannels = audioChannels;
}
public Integer getAudioSampleRate() {
return audioSampleRate;
}
public void setAudioSampleRate(Integer audioSampleRate) {
this.audioSampleRate = audioSampleRate;
}
public Integer getAudioBitrate() {
return audioBitrate;
}
public void setAudioBitrate(Integer audioBitrate) {
this.audioBitrate = audioBitrate;
}
public AblUrls getUrl() {
return url;
}
public void setUrl(AblUrls url) {
this.url = url;
}
} }

View File

@ -2,6 +2,7 @@ package com.genersoft.iot.vmp.media.bean;
import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.genersoft.iot.vmp.media.abl.bean.ABLMedia;
import com.genersoft.iot.vmp.media.abl.bean.hook.OnStreamArriveABLHookParam; import com.genersoft.iot.vmp.media.abl.bean.hook.OnStreamArriveABLHookParam;
import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamChangedHookParam; import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamChangedHookParam;
import com.genersoft.iot.vmp.media.zlm.dto.hook.OriginType; import com.genersoft.iot.vmp.media.zlm.dto.hook.OriginType;
@ -270,7 +271,38 @@ public class MediaInfo {
return mediaInfo; return mediaInfo;
} }
public static MediaInfo getInstanceForAblJson(JSONObject mediaJSON, MediaServer mediaServer) { public static MediaInfo getInstance(ABLMedia ablMedia, MediaServer mediaServer) {
return null; MediaInfo mediaInfo = new MediaInfo();
mediaInfo.setApp(ablMedia.getApp());
mediaInfo.setStream(ablMedia.getStream());
mediaInfo.setMediaServer(mediaServer);
mediaInfo.setReaderCount(ablMedia.getReaderCount());
mediaInfo.setOnline(true);
mediaInfo.setVideoCodec(ablMedia.getVideoCodec());
switch (ablMedia.getNetworkType()) {
case 21:
mediaInfo.setOriginType(OriginType.RTMP_PUSH.ordinal());
break;
case 23:
mediaInfo.setOriginType(OriginType.RTSP_PUSH.ordinal());
break;
case 30:
case 31:
case 32:
case 33:
mediaInfo.setOriginType(OriginType.PULL.ordinal());
break;
default:
mediaInfo.setOriginType(OriginType.UNKNOWN.ordinal());
break;
}
mediaInfo.setWidth(ablMedia.getWidth());
mediaInfo.setHeight(ablMedia.getHeight());
mediaInfo.setAudioCodec(ablMedia.getAudioCodec());
mediaInfo.setAudioChannels(ablMedia.getAudioChannels());
mediaInfo.setAudioSampleRate(ablMedia.getAudioSampleRate());
return mediaInfo;
} }
} }

View File

@ -7,13 +7,10 @@ import com.genersoft.iot.vmp.common.VideoManagerConstants;
import com.genersoft.iot.vmp.conf.UserSetting; import com.genersoft.iot.vmp.conf.UserSetting;
import com.genersoft.iot.vmp.conf.exception.ControllerException; import com.genersoft.iot.vmp.conf.exception.ControllerException;
import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
import com.genersoft.iot.vmp.gb28181.bean.SendRtpInfo;
import com.genersoft.iot.vmp.gb28181.bean.SsrcTransaction; import com.genersoft.iot.vmp.gb28181.bean.SsrcTransaction;
import com.genersoft.iot.vmp.gb28181.service.IDeviceChannelService; import com.genersoft.iot.vmp.gb28181.service.IDeviceChannelService;
import com.genersoft.iot.vmp.gb28181.service.IInviteStreamService; import com.genersoft.iot.vmp.gb28181.service.IInviteStreamService;
import com.genersoft.iot.vmp.gb28181.session.SipInviteSessionManager; import com.genersoft.iot.vmp.gb28181.session.SipInviteSessionManager;
import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander;
import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform;
import com.genersoft.iot.vmp.jt1078.bean.JTMediaStreamType; import com.genersoft.iot.vmp.jt1078.bean.JTMediaStreamType;
import com.genersoft.iot.vmp.jt1078.service.Ijt1078PlayService; import com.genersoft.iot.vmp.jt1078.service.Ijt1078PlayService;
import com.genersoft.iot.vmp.jt1078.service.Ijt1078Service; import com.genersoft.iot.vmp.jt1078.service.Ijt1078Service;
@ -21,8 +18,8 @@ import com.genersoft.iot.vmp.media.bean.MediaServer;
import com.genersoft.iot.vmp.media.bean.ResultForOnPublish; import com.genersoft.iot.vmp.media.bean.ResultForOnPublish;
import com.genersoft.iot.vmp.media.zlm.dto.StreamAuthorityInfo; import com.genersoft.iot.vmp.media.zlm.dto.StreamAuthorityInfo;
import com.genersoft.iot.vmp.service.IMediaService; import com.genersoft.iot.vmp.service.IMediaService;
import com.genersoft.iot.vmp.service.ISendRtpServerService;
import com.genersoft.iot.vmp.service.IRecordPlanService; import com.genersoft.iot.vmp.service.IRecordPlanService;
import com.genersoft.iot.vmp.service.ISendRtpServerService;
import com.genersoft.iot.vmp.service.IUserService; import com.genersoft.iot.vmp.service.IUserService;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import com.genersoft.iot.vmp.streamProxy.bean.StreamProxy; import com.genersoft.iot.vmp.streamProxy.bean.StreamProxy;
@ -37,7 +34,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map; import java.util.Map;
@Slf4j @Slf4j
@ -170,7 +166,7 @@ public class MediaServiceImpl implements IMediaService {
inviteInfo = inviteStreamService.getInviteInfoBySSRC(ssrc); inviteInfo = inviteStreamService.getInviteInfoBySSRC(ssrc);
if (inviteInfo != null) { if (inviteInfo != null) {
result.setStream_replace(inviteInfo.getStream()); result.setStream_replace(inviteInfo.getStream());
log.info("[ZLM HOOK]推流鉴权 stream: {} 替换为 {}", stream, inviteInfo.getStream()); log.info("[HOOK]推流鉴权 stream: {} 替换为 {}", stream, inviteInfo.getStream());
stream = inviteInfo.getStream(); stream = inviteInfo.getStream();
} }
} }