[abl] 合并主线
This commit is contained in:
@@ -684,17 +684,11 @@ public class PlayServiceImpl implements IPlayService {
|
||||
* @param stream ssrc
|
||||
*/
|
||||
private void snapOnPlay(MediaServer mediaServerItemInuse, String deviceId, String channelId, String stream) {
|
||||
String streamUrl;
|
||||
if (mediaServerItemInuse.getRtspPort() != 0) {
|
||||
streamUrl = String.format("rtsp://127.0.0.1:%s/%s/%s", mediaServerItemInuse.getRtspPort(), "rtp", stream);
|
||||
} else {
|
||||
streamUrl = String.format("http://127.0.0.1:%s/%s/%s.live.mp4", mediaServerItemInuse.getHttpPort(), "rtp", stream);
|
||||
}
|
||||
String path = "snap";
|
||||
String fileName = deviceId + "_" + channelId + ".jpg";
|
||||
// 请求截图
|
||||
log.info("[请求截图]: " + fileName);
|
||||
mediaServerService.getSnap(mediaServerItemInuse, streamUrl, 15, 1, path, fileName);
|
||||
mediaServerService.getSnap(mediaServerItemInuse, "rtp", stream, 15, 1, path, fileName);
|
||||
}
|
||||
|
||||
public StreamInfo onPublishHandlerForPlay(MediaServer mediaServerItem, MediaInfo mediaInfo, Device device, DeviceChannel channel) {
|
||||
@@ -1617,17 +1611,11 @@ public class PlayServiceImpl implements IPlayService {
|
||||
if (inviteInfo != null) {
|
||||
if (inviteInfo.getStreamInfo() != null) {
|
||||
// 已存在线直接截图
|
||||
MediaServer mediaServerItemInuse = inviteInfo.getStreamInfo().getMediaServer();
|
||||
String streamUrl;
|
||||
if (mediaServerItemInuse.getRtspPort() != 0) {
|
||||
streamUrl = String.format("rtsp://127.0.0.1:%s/%s/%s", mediaServerItemInuse.getRtspPort(), "rtp", inviteInfo.getStreamInfo().getStream());
|
||||
}else {
|
||||
streamUrl = String.format("http://127.0.0.1:%s/%s/%s.live.mp4", mediaServerItemInuse.getHttpPort(), "rtp", inviteInfo.getStreamInfo().getStream());
|
||||
}
|
||||
MediaServer mediaServer = inviteInfo.getStreamInfo().getMediaServer();
|
||||
String path = "snap";
|
||||
// 请求截图
|
||||
log.info("[请求截图]: " + fileName);
|
||||
mediaServerService.getSnap(mediaServerItemInuse, streamUrl, 15, 1, path, fileName);
|
||||
mediaServerService.getSnap(mediaServer, "rtp", inviteInfo.getStreamInfo().getStream(), 15, 1, path, fileName);
|
||||
File snapFile = new File(path + File.separator + fileName);
|
||||
if (snapFile.exists()) {
|
||||
errorCallback.run(InviteErrorCode.SUCCESS.getCode(), InviteErrorCode.SUCCESS.getMsg(), snapFile.getAbsoluteFile());
|
||||
|
||||
@@ -3,9 +3,11 @@ package com.genersoft.iot.vmp.media.abl;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.genersoft.iot.vmp.conf.UserSetting;
|
||||
import com.genersoft.iot.vmp.conf.exception.ControllerException;
|
||||
import com.genersoft.iot.vmp.gb28181.service.IDeviceService;
|
||||
import com.genersoft.iot.vmp.gb28181.service.IInviteStreamService;
|
||||
import com.genersoft.iot.vmp.gb28181.service.IPlayService;
|
||||
import com.genersoft.iot.vmp.gb28181.session.AudioBroadcastManager;
|
||||
import com.genersoft.iot.vmp.gb28181.session.SSRCFactory;
|
||||
import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
|
||||
import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform;
|
||||
import com.genersoft.iot.vmp.media.abl.bean.hook.*;
|
||||
import com.genersoft.iot.vmp.media.abl.event.HookAblServerKeepaliveEvent;
|
||||
@@ -18,7 +20,6 @@ import com.genersoft.iot.vmp.media.zlm.dto.hook.HookResult;
|
||||
import com.genersoft.iot.vmp.media.zlm.dto.hook.HookResultForOnPublish;
|
||||
import com.genersoft.iot.vmp.service.*;
|
||||
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
|
||||
import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -54,9 +55,6 @@ public class ABLHttpHookListener {
|
||||
@Autowired
|
||||
private IPlayService playService;
|
||||
|
||||
@Autowired
|
||||
private IVideoManagerStorage storager;
|
||||
|
||||
@Autowired
|
||||
private IRedisCatchStorage redisCatchStorage;
|
||||
|
||||
@@ -77,9 +75,6 @@ public class ABLHttpHookListener {
|
||||
@Autowired
|
||||
private UserSetting userSetting;
|
||||
|
||||
@Autowired
|
||||
private VideoStreamSessionManager sessionManager;
|
||||
|
||||
@Autowired
|
||||
private SSRCFactory ssrcFactory;
|
||||
|
||||
@@ -272,7 +267,7 @@ public class ABLHttpHookListener {
|
||||
|
||||
logger.info("[ABL HOOK] 流未找到:{}->{}/{}", param.getMediaServerId(), param.getApp(), param.getStream());
|
||||
MediaServer mediaServer = mediaServerService.getOne(param.getMediaServerId());
|
||||
if (!userSetting.isAutoApplyPlay() || mediaServer == null) {
|
||||
if (!userSetting.getAutoApplyPlay() || mediaServer == null) {
|
||||
return HookResult.SUCCESS();
|
||||
}
|
||||
MediaNotFoundEvent mediaNotFoundEvent = MediaNotFoundEvent.getInstance(this, param, mediaServer);
|
||||
|
||||
@@ -8,7 +8,8 @@ import com.genersoft.iot.vmp.common.InviteSessionType;
|
||||
import com.genersoft.iot.vmp.common.StreamInfo;
|
||||
import com.genersoft.iot.vmp.conf.SipConfig;
|
||||
import com.genersoft.iot.vmp.conf.UserSetting;
|
||||
import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem;
|
||||
import com.genersoft.iot.vmp.gb28181.bean.SendRtpInfo;
|
||||
import com.genersoft.iot.vmp.gb28181.service.IInviteStreamService;
|
||||
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;
|
||||
@@ -17,10 +18,10 @@ import com.genersoft.iot.vmp.media.event.media.MediaDepartureEvent;
|
||||
import com.genersoft.iot.vmp.media.event.media.MediaRecordMp4Event;
|
||||
import com.genersoft.iot.vmp.media.event.media.MediaRecordProcessEvent;
|
||||
import com.genersoft.iot.vmp.media.service.IMediaNodeServerService;
|
||||
import com.genersoft.iot.vmp.service.IInviteStreamService;
|
||||
import com.genersoft.iot.vmp.service.bean.CloudRecordItem;
|
||||
import com.genersoft.iot.vmp.service.bean.DownloadFileInfo;
|
||||
import com.genersoft.iot.vmp.storager.dao.CloudRecordServiceMapper;
|
||||
import com.genersoft.iot.vmp.streamProxy.bean.StreamProxy;
|
||||
import com.genersoft.iot.vmp.utils.DateUtil;
|
||||
import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
|
||||
import org.slf4j.Logger;
|
||||
@@ -30,10 +31,7 @@ import org.springframework.context.event.EventListener;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
|
||||
@Service("abl")
|
||||
public class ABLMediaNodeServerService implements IMediaNodeServerService {
|
||||
@@ -183,7 +181,7 @@ public class ABLMediaNodeServerService implements IMediaNodeServerService {
|
||||
streamInfoResult.setApp(app);
|
||||
String addr = mediaServer.getStreamIp();
|
||||
streamInfoResult.setIp(addr);
|
||||
streamInfoResult.setMediaServerId(mediaServer.getId());
|
||||
streamInfoResult.setMediaServer(mediaServer);
|
||||
String callIdParam = ObjectUtils.isEmpty(callId)?"":"?callId=" + callId;
|
||||
streamInfoResult.setRtmp(addr, mediaServer.getRtmpPort(),mediaServer.getRtmpSSlPort(), app, stream, callIdParam);
|
||||
streamInfoResult.setRtsp(addr, mediaServer.getRtspPort(),mediaServer.getRtspSSLPort(), app, stream, callIdParam);
|
||||
@@ -207,8 +205,8 @@ public class ABLMediaNodeServerService implements IMediaNodeServerService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getSnap(MediaServer mediaServerItem, String app, String stream, int timeoutSec, int expireSec, String path, String fileName) {
|
||||
ablresTfulUtils.getSnap(mediaServerItem, app, stream, timeoutSec, path, fileName);
|
||||
public void getSnap(MediaServer mediaServer, String app, String stream, int timeoutSec, int expireSec, String path, String fileName) {
|
||||
ablresTfulUtils.getSnap(mediaServer, app, stream, timeoutSec, path, fileName);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -258,12 +256,6 @@ public class ABLMediaNodeServerService implements IMediaNodeServerService {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public WVPResult<String> addStreamProxy(MediaServer mediaServer, String app, String stream, String url, boolean enableAudio, boolean enableMp4, String rtpType) {
|
||||
logger.warn("[abl-addStreamProxy] 未实现");
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean delFFmpegSource(MediaServer mediaServer, String streamKey) {
|
||||
logger.warn("[abl-delFFmpegSource] 未实现");
|
||||
@@ -282,16 +274,6 @@ public class ABLMediaNodeServerService implements IMediaNodeServerService {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startSendRtpPassive(MediaServer mediaServer, SendRtpItem sendRtpItem, Integer timeout) {
|
||||
logger.warn("[abl-startSendRtpPassive] 未实现");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startSendRtpStream(MediaServer mediaServer, SendRtpItem sendRtpItem) {
|
||||
logger.warn("[abl-startSendRtpStream] 未实现");
|
||||
}
|
||||
|
||||
// 接受进度通知
|
||||
@EventListener
|
||||
public void onApplicationEvent(MediaRecordProcessEvent event) {
|
||||
@@ -307,11 +289,12 @@ public class ABLMediaNodeServerService implements IMediaNodeServerService {
|
||||
}
|
||||
@EventListener
|
||||
public void onApplicationEvent(MediaRecordMp4Event event) {
|
||||
InviteInfo inviteInfo = inviteStreamService.getInviteInfo(InviteSessionType.DOWNLOAD, null, null, event.getStream());
|
||||
InviteInfo inviteInfo = inviteStreamService.getInviteInfo(InviteSessionType.DOWNLOAD, null, event.getStream());
|
||||
if (inviteInfo == null || inviteInfo.getStreamInfo() == null) {
|
||||
return;
|
||||
}
|
||||
List<CloudRecordItem> cloudRecordItemList = cloudRecordServiceMapper.getList(null, event.getApp(), event.getStream(), null, null, null, null, null);
|
||||
List<CloudRecordItem> cloudRecordItemList = cloudRecordServiceMapper.getList(null, event.getApp(), event.getStream(),
|
||||
null, null, null, null, null, null);
|
||||
if (cloudRecordItemList.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
@@ -337,14 +320,62 @@ public class ABLMediaNodeServerService implements IMediaNodeServerService {
|
||||
|
||||
@Override
|
||||
public Long updateDownloadProcess(MediaServer mediaServer, String app, String stream) {
|
||||
List<CloudRecordItem> list = cloudRecordServiceMapper.getList(null, app, stream, null, null, null, null, null);
|
||||
List<CloudRecordItem> list = cloudRecordServiceMapper.getList(null, app, stream, null,
|
||||
null, null, null, null, null);
|
||||
if (list.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
Long downloadProcess = 0L;
|
||||
long downloadProcess = 0L;
|
||||
for (CloudRecordItem cloudRecordItem : list) {
|
||||
downloadProcess += cloudRecordItem.getTimeLen();
|
||||
downloadProcess += (long) cloudRecordItem.getTimeLen();
|
||||
}
|
||||
return downloadProcess;
|
||||
}
|
||||
|
||||
@Override
|
||||
public WVPResult<String> addStreamProxy(MediaServer mediaServer, String app, String stream, String url, boolean enableAudio, boolean enableMp4, String rtpType, Integer timeout) {
|
||||
logger.warn("[abl-addStreamProxy] 未实现");
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer startSendRtpPassive(MediaServer mediaServer, SendRtpInfo sendRtpItem, Integer timeout) {
|
||||
logger.warn("[abl-startSendRtpPassive] 未实现");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startSendRtpStream(MediaServer mediaServer, SendRtpInfo sendRtpItem) {
|
||||
logger.warn("[abl-startSendRtpStream] 未实现");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startProxy(MediaServer mediaServer, StreamProxy streamProxy) {
|
||||
logger.warn("[abl-startProxy] 未实现");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stopProxy(MediaServer mediaServer, String streamKey) {
|
||||
logger.warn("[abl-stopProxy] 未实现");
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> listRtpServer(MediaServer mediaServer) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadMP4File(MediaServer mediaServer, String app, String stream, String datePath) {
|
||||
logger.warn("[abl-loadMP4File] 未实现");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void seekRecordStamp(MediaServer mediaServer, String app, String stream, Double stamp, String schema) {
|
||||
logger.warn("[abl-seekRecordStamp] 未实现");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRecordSpeed(MediaServer mediaServer, String app, String stream, Integer speed, String schema) {
|
||||
logger.warn("[abl-setRecordSpeed] 未实现");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,13 +64,13 @@ public class ABLMediaServerStatusManger {
|
||||
|| event.getMediaServerItemList().isEmpty()) {
|
||||
return;
|
||||
}
|
||||
for (MediaServer mediaServerItem : event.getMediaServerItemList()) {
|
||||
if (!type.equals(mediaServerItem.getType())) {
|
||||
for (MediaServer mediaServer : event.getMediaServerItemList()) {
|
||||
if (!type.equals(mediaServer.getType())) {
|
||||
continue;
|
||||
}
|
||||
logger.info("[ABL-添加待上线节点] ID:" + mediaServerItem.getId());
|
||||
offlineABLPrimaryMap.put(mediaServerItem.getId(), mediaServerItem);
|
||||
offlineAblTimeMap.put(mediaServerItem.getId(), System.currentTimeMillis());
|
||||
logger.info("[ABL-添加待上线节点] ID:" + mediaServer.getId());
|
||||
offlineABLPrimaryMap.put(mediaServer.getId(), mediaServer);
|
||||
offlineAblTimeMap.put(mediaServer.getId(), System.currentTimeMillis());
|
||||
}
|
||||
execute();
|
||||
}
|
||||
@@ -108,13 +108,13 @@ public class ABLMediaServerStatusManger {
|
||||
@Async("taskExecutor")
|
||||
@EventListener
|
||||
public void onApplicationEvent(MediaServerDeleteEvent event) {
|
||||
if (event.getMediaServerId() == null) {
|
||||
if (event.getMediaServer() == null) {
|
||||
return;
|
||||
}
|
||||
logger.info("[ABL-节点被移除] ID:" + event.getMediaServerId());
|
||||
offlineABLPrimaryMap.remove(event.getMediaServerId());
|
||||
offlineAblsecondaryMap.remove(event.getMediaServerId());
|
||||
offlineAblTimeMap.remove(event.getMediaServerId());
|
||||
logger.info("[ABL-节点被移除] ID:" + event.getMediaServer().getServerId());
|
||||
offlineABLPrimaryMap.remove(event.getMediaServer().getServerId());
|
||||
offlineAblsecondaryMap.remove(event.getMediaServer().getServerId());
|
||||
offlineAblTimeMap.remove(event.getMediaServer().getServerId());
|
||||
}
|
||||
|
||||
@Scheduled(fixedDelay = 10*1000) //每隔10秒检查一次
|
||||
|
||||
@@ -85,7 +85,7 @@ public interface IMediaServerService {
|
||||
|
||||
Boolean connectRtpServer(MediaServer mediaServerItem, String address, int port, String stream);
|
||||
|
||||
void getSnap(MediaServer mediaServerItemInuse, String app, String stream, int timeoutSec, int expireSec, String path, String fileName);
|
||||
void getSnap(MediaServer mediaServer, String app, String stream, int timeoutSec, int expireSec, String path, String fileName);
|
||||
|
||||
MediaInfo getMediaInfo(MediaServer mediaServerItem, String app, String stream);
|
||||
|
||||
|
||||
@@ -253,9 +253,9 @@ public class ZLMMediaNodeServerService implements IMediaNodeServerService {
|
||||
public void getSnap(MediaServer mediaServer, String app, String stream, int timeoutSec, int expireSec, String path, String fileName) {
|
||||
String streamUrl;
|
||||
if (mediaServer.getRtspPort() != 0) {
|
||||
streamUrl = String.format("rtsp://127.0.0.1:%s/%s/%s", mediaServer.getRtspPort(), app, stream);
|
||||
}else {
|
||||
streamUrl = String.format("http://127.0.0.1:%s/%s/%s.live.mp4", mediaServer.getHttpPort(), app, stream);
|
||||
streamUrl = String.format("rtsp://127.0.0.1:%s/%s/%s", mediaServer.getRtspPort(), "rtp", stream);
|
||||
} else {
|
||||
streamUrl = String.format("http://127.0.0.1:%s/%s/%s.live.mp4", mediaServer.getHttpPort(), "rtp", stream);
|
||||
}
|
||||
zlmresTfulUtils.getSnap(mediaServer, streamUrl, timeoutSec, expireSec, path, fileName);
|
||||
}
|
||||
|
||||
@@ -2,4 +2,4 @@ spring:
|
||||
application:
|
||||
name: wvp
|
||||
profiles:
|
||||
active: 274-dev
|
||||
active: 274-plus
|
||||
|
||||
Reference in New Issue
Block a user