优化媒体节点服务的代码结构

This commit is contained in:
648540858
2024-03-21 23:39:32 +08:00
parent 4134c73745
commit b90dc789b4
66 changed files with 667 additions and 629 deletions

View File

@@ -3,7 +3,7 @@ package com.genersoft.iot.vmp.media;
import com.genersoft.iot.vmp.conf.MediaConfig;
import com.genersoft.iot.vmp.media.event.MediaServerChangeEvent;
import com.genersoft.iot.vmp.media.service.IMediaServerService;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -37,15 +37,15 @@ public class MediaServerConfig implements CommandLineRunner {
public void run(String... strings) throws Exception {
// 清理所有在线节点的缓存信息
mediaServerService.clearMediaServerForOnline();
MediaServerItem defaultMediaServer = mediaServerService.getDefaultMediaServer();
MediaServerItem mediaSerItemInConfig = mediaConfig.getMediaSerItem();
MediaServer defaultMediaServer = mediaServerService.getDefaultMediaServer();
MediaServer mediaSerItemInConfig = mediaConfig.getMediaSerItem();
if (defaultMediaServer != null && mediaSerItemInConfig.getId().equals(defaultMediaServer.getId())) {
mediaServerService.update(mediaSerItemInConfig);
}else {
if (defaultMediaServer != null) {
mediaServerService.delete(defaultMediaServer.getId());
}
MediaServerItem mediaServerItem = mediaServerService.getOneFromDatabase(mediaSerItemInConfig.getId());
MediaServer mediaServerItem = mediaServerService.getOneFromDatabase(mediaSerItemInConfig.getId());
if (mediaServerItem == null) {
mediaServerService.add(mediaSerItemInConfig);
}else {
@@ -55,7 +55,7 @@ public class MediaServerConfig implements CommandLineRunner {
// 发送媒体节点变化事件
mediaServerService.syncCatchFromDatabase();
// 获取所有的zlm 并开启主动连接
List<MediaServerItem> all = mediaServerService.getAllFromDatabase();
List<MediaServer> all = mediaServerService.getAllFromDatabase();
logger.info("[媒体节点] 加载节点列表, 共{}个节点", all.size());
MediaServerChangeEvent event = new MediaServerChangeEvent(this);
event.setMediaServerItemList(all);

View File

@@ -2,8 +2,9 @@ package com.genersoft.iot.vmp.media.abl;
import com.genersoft.iot.vmp.common.CommonCallback;
import com.genersoft.iot.vmp.common.StreamInfo;
import com.genersoft.iot.vmp.media.bean.MediaInfo;
import com.genersoft.iot.vmp.media.service.IMediaNodeServerService;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServer;
import org.springframework.stereotype.Service;
import java.util.List;
@@ -12,57 +13,72 @@ import java.util.List;
public class ABLMediaNodeServerService implements IMediaNodeServerService {
@Override
public int createRTPServer(MediaServerItem mediaServerItem, String streamId, long ssrc, Integer port, Boolean onlyAuto, Boolean reUsePort, Integer tcpMode) {
public int createRTPServer(MediaServer mediaServerItem, String streamId, long ssrc, Integer port, Boolean onlyAuto, Boolean reUsePort, Integer tcpMode) {
return 0;
}
@Override
public void closeRtpServer(MediaServerItem mediaServerItem, String streamId) {
public void closeRtpServer(MediaServer mediaServerItem, String streamId) {
}
@Override
public void closeRtpServer(MediaServerItem mediaServerItem, String streamId, CommonCallback<Boolean> callback) {
public void closeRtpServer(MediaServer mediaServerItem, String streamId, CommonCallback<Boolean> callback) {
}
@Override
public void closeStreams(MediaServerItem mediaServerItem, String rtp, String streamId) {
public void closeStreams(MediaServer mediaServerItem, String rtp, String streamId) {
}
@Override
public Boolean updateRtpServerSSRC(MediaServerItem mediaServerItem, String streamId, String ssrc) {
public Boolean updateRtpServerSSRC(MediaServer mediaServerItem, String streamId, String ssrc) {
return null;
}
@Override
public boolean checkNodeId(MediaServerItem mediaServerItem) {
public boolean checkNodeId(MediaServer mediaServerItem) {
return false;
}
@Override
public void online(MediaServerItem mediaServerItem) {
public void online(MediaServer mediaServerItem) {
}
@Override
public MediaServerItem checkMediaServer(String ip, int port, String secret) {
public MediaServer checkMediaServer(String ip, int port, String secret) {
return null;
}
@Override
public boolean stopSendRtp(MediaServerItem mediaInfo, String app, String stream, String ssrc) {
public boolean stopSendRtp(MediaServer mediaInfo, String app, String stream, String ssrc) {
return false;
}
@Override
public boolean deleteRecordDirectory(MediaServerItem mediaServerItem, String app, String stream, String date, String fileName) {
public boolean deleteRecordDirectory(MediaServer mediaServerItem, String app, String stream, String date, String fileName) {
return false;
}
@Override
public List<StreamInfo> getMediaList(MediaServerItem mediaServerItem, String app, String stream, String callId) {
public List<StreamInfo> getMediaList(MediaServer mediaServerItem, String app, String stream, String callId) {
return null;
}
@Override
public Boolean connectRtpServer(MediaServer mediaServerItem, String address, int port, String stream) {
return null;
}
@Override
public void getSnap(MediaServer mediaServerItem, String streamUrl, int timeoutSec, int expireSec, String path, String fileName) {
}
@Override
public MediaInfo getMediaInfo(MediaServer mediaServerItem, String app, String stream) {
return null;
}
}

View File

@@ -11,7 +11,7 @@ import java.util.List;
* 视频信息
*/
@Schema(description = "视频信息")
public class Track {
public class MediaInfo {
@Schema(description = "观看人数")
private Integer readerCount;
@Schema(description = "视频编码类型")
@@ -26,12 +26,14 @@ public class Track {
private Integer audioChannels;
@Schema(description = "音频采样率")
private Integer audioSampleRate;
@Schema(description = "音频采样率")
private Long duration;
public static Track getInstance(JSONObject jsonObject) {
Track track = new Track();
public static MediaInfo getInstance(JSONObject jsonObject) {
MediaInfo mediaInfo = new MediaInfo();
Integer totalReaderCount = jsonObject.getInteger("totalReaderCount");
if (totalReaderCount != null) {
track.setReaderCount(totalReaderCount);
mediaInfo.setReaderCount(totalReaderCount);
}
JSONArray jsonArray = jsonObject.getJSONArray("tracks");
if (jsonArray.isEmpty()) {
@@ -45,77 +47,81 @@ public class Track {
Integer sampleRate = trackJson.getInteger("sample_rate");
Integer height = trackJson.getInteger("height");
Integer width = trackJson.getInteger("height");
Long duration = trackJson.getLongValue("duration");
if (channels != null) {
track.setAudioChannels(channels);
mediaInfo.setAudioChannels(channels);
}
if (sampleRate != null) {
track.setAudioSampleRate(sampleRate);
mediaInfo.setAudioSampleRate(sampleRate);
}
if (height != null) {
track.setHeight(height);
mediaInfo.setHeight(height);
}
if (width != null) {
track.setWidth(width);
mediaInfo.setWidth(width);
}
if (duration > 0L) {
mediaInfo.setDuration(duration);
}
if (codecId != null) {
switch (codecId) {
case 0:
track.setVideoCodec("H264");
mediaInfo.setVideoCodec("H264");
break;
case 1:
track.setVideoCodec("H265");
mediaInfo.setVideoCodec("H265");
break;
case 2:
track.setAudioCodec("AAC");
mediaInfo.setAudioCodec("AAC");
break;
case 3:
track.setAudioCodec("G711A");
mediaInfo.setAudioCodec("G711A");
break;
case 4:
track.setAudioCodec("G711U");
mediaInfo.setAudioCodec("G711U");
break;
}
}
}
return track;
return mediaInfo;
}
public static Track getInstance(OnStreamChangedHookParam param) {
public static MediaInfo getInstance(OnStreamChangedHookParam param) {
List<OnStreamChangedHookParam.MediaTrack> tracks = param.getTracks();
Track track = new Track();
track.setReaderCount(param.getTotalReaderCount());
MediaInfo mediaInfo = new MediaInfo();
mediaInfo.setReaderCount(param.getTotalReaderCount());
for (OnStreamChangedHookParam.MediaTrack mediaTrack : tracks) {
switch (mediaTrack.getCodec_id()) {
case 0:
track.setVideoCodec("H264");
mediaInfo.setVideoCodec("H264");
break;
case 1:
track.setVideoCodec("H265");
mediaInfo.setVideoCodec("H265");
break;
case 2:
track.setAudioCodec("AAC");
mediaInfo.setAudioCodec("AAC");
break;
case 3:
track.setAudioCodec("G711A");
mediaInfo.setAudioCodec("G711A");
break;
case 4:
track.setAudioCodec("G711U");
mediaInfo.setAudioCodec("G711U");
break;
}
if (mediaTrack.getSample_rate() > 0) {
track.setAudioSampleRate(mediaTrack.getSample_rate());
mediaInfo.setAudioSampleRate(mediaTrack.getSample_rate());
}
if (mediaTrack.getChannels() > 0) {
track.setAudioChannels(mediaTrack.getChannels());
mediaInfo.setAudioChannels(mediaTrack.getChannels());
}
if (mediaTrack.getHeight() > 0) {
track.setHeight(mediaTrack.getHeight());
mediaInfo.setHeight(mediaTrack.getHeight());
}
if (mediaTrack.getWidth() > 0) {
track.setWidth(mediaTrack.getWidth());
mediaInfo.setWidth(mediaTrack.getWidth());
}
}
return track;
return mediaInfo;
}
public Integer getReaderCount() {
@@ -173,4 +179,12 @@ public class Track {
public void setAudioSampleRate(Integer audioSampleRate) {
this.audioSampleRate = audioSampleRate;
}
public Long getDuration() {
return duration;
}
public void setDuration(Long duration) {
this.duration = duration;
}
}

View File

@@ -1,6 +1,6 @@
package com.genersoft.iot.vmp.media.event;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServer;
import org.springframework.context.ApplicationEvent;
import java.util.ArrayList;
@@ -13,22 +13,22 @@ public class MediaServerChangeEvent extends ApplicationEvent {
super(source);
}
private List<MediaServerItem> mediaServerItemList;
private List<MediaServer> mediaServerItemList;
public List<MediaServerItem> getMediaServerItemList() {
public List<MediaServer> getMediaServerItemList() {
return mediaServerItemList;
}
public void setMediaServerItemList(List<MediaServerItem> mediaServerItemList) {
public void setMediaServerItemList(List<MediaServer> mediaServerItemList) {
this.mediaServerItemList = mediaServerItemList;
}
public void setMediaServerItemList(MediaServerItem... mediaServerItemArray) {
public void setMediaServerItemList(MediaServer... mediaServerItemArray) {
this.mediaServerItemList = new ArrayList<>();
this.mediaServerItemList.addAll(Arrays.asList(mediaServerItemArray));
}
public void setMediaServerItem(List<MediaServerItem> mediaServerItemList) {
public void setMediaServerItem(List<MediaServer> mediaServerItemList) {
this.mediaServerItemList = mediaServerItemList;
}
}

View File

@@ -2,30 +2,41 @@ package com.genersoft.iot.vmp.media.service;
import com.genersoft.iot.vmp.common.CommonCallback;
import com.genersoft.iot.vmp.common.StreamInfo;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
import com.genersoft.iot.vmp.media.bean.MediaInfo;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServer;
import java.util.List;
public interface IMediaNodeServerService {
int createRTPServer(MediaServerItem mediaServerItem, String streamId, long ssrc, Integer port, Boolean onlyAuto, Boolean reUsePort, Integer tcpMode);
int createRTPServer(MediaServer mediaServerItem, String streamId, long ssrc, Integer port, Boolean onlyAuto, Boolean reUsePort, Integer tcpMode);
void closeRtpServer(MediaServerItem mediaServerItem, String streamId);
void closeRtpServer(MediaServer mediaServerItem, String streamId);
void closeRtpServer(MediaServerItem mediaServerItem, String streamId, CommonCallback<Boolean> callback);
void closeRtpServer(MediaServer mediaServerItem, String streamId, CommonCallback<Boolean> callback);
void closeStreams(MediaServerItem mediaServerItem, String app, String stream);
void closeStreams(MediaServer mediaServerItem, String app, String stream);
Boolean updateRtpServerSSRC(MediaServerItem mediaServerItem, String stream, String ssrc);
Boolean updateRtpServerSSRC(MediaServer mediaServerItem, String stream, String ssrc);
boolean checkNodeId(MediaServerItem mediaServerItem);
boolean checkNodeId(MediaServer mediaServerItem);
void online(MediaServerItem mediaServerItem);
void online(MediaServer mediaServerItem);
MediaServerItem checkMediaServer(String ip, int port, String secret);
MediaServer checkMediaServer(String ip, int port, String secret);
boolean stopSendRtp(MediaServerItem mediaInfo, String app, String stream, String ssrc);
boolean stopSendRtp(MediaServer mediaInfo, String app, String stream, String ssrc);
boolean deleteRecordDirectory(MediaServerItem mediaServerItem, String app, String stream, String date, String fileName);
boolean deleteRecordDirectory(MediaServer mediaServerItem, String app, String stream, String date, String fileName);
List<StreamInfo> getMediaList(MediaServerItem mediaServerItem, String app, String stream, String callId);
List<StreamInfo> getMediaList(MediaServer mediaServerItem, String app, String stream, String callId);
Boolean connectRtpServer(MediaServer mediaServerItem, String address, int port, String stream);
void getSnap(MediaServer mediaServerItem, String streamUrl, int timeoutSec, int expireSec, String path, String fileName);
MediaInfo getMediaInfo(MediaServer mediaServerItem, String app, String stream);
Boolean pauseRtpCheck(MediaServer mediaServerItem, String streamKey);
Boolean resumeRtpCheck(MediaServer mediaServerItem, String streamKey);
}

View File

@@ -2,7 +2,8 @@ package com.genersoft.iot.vmp.media.service;
import com.genersoft.iot.vmp.common.CommonCallback;
import com.genersoft.iot.vmp.common.StreamInfo;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
import com.genersoft.iot.vmp.media.bean.MediaInfo;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServer;
import com.genersoft.iot.vmp.service.bean.MediaServerLoad;
import com.genersoft.iot.vmp.service.bean.SSRCInfo;
@@ -13,37 +14,37 @@ import java.util.List;
*/
public interface IMediaServerService {
List<MediaServerItem> getAllOnlineList();
List<MediaServer> getAllOnlineList();
List<MediaServerItem> getAll();
List<MediaServer> getAll();
List<MediaServerItem> getAllFromDatabase();
List<MediaServer> getAllFromDatabase();
List<MediaServerItem> getAllOnline();
List<MediaServer> getAllOnline();
MediaServerItem getOne(String generalMediaServerId);
MediaServer getOne(String generalMediaServerId);
void syncCatchFromDatabase();
MediaServerItem getMediaServerForMinimumLoad(Boolean hasAssist);
MediaServer getMediaServerForMinimumLoad(Boolean hasAssist);
void updateVmServer(List<MediaServerItem> mediaServerItemList);
void updateVmServer(List<MediaServer> mediaServerItemList);
SSRCInfo openRTPServer(MediaServerItem mediaServerItem, String streamId, String presetSsrc, boolean ssrcCheck,
SSRCInfo openRTPServer(MediaServer mediaServerItem, String streamId, String presetSsrc, boolean ssrcCheck,
boolean isPlayback, Integer port, Boolean onlyAuto, Boolean reUsePort, Integer tcpMode);
SSRCInfo openRTPServer(MediaServerItem mediaServerItem, String streamId, String ssrc, boolean ssrcCheck, boolean isPlayback, Integer port, Boolean onlyAuto);
SSRCInfo openRTPServer(MediaServer mediaServerItem, String streamId, String ssrc, boolean ssrcCheck, boolean isPlayback, Integer port, Boolean onlyAuto);
void closeRTPServer(MediaServerItem mediaServerItem, String streamId);
void closeRTPServer(MediaServer mediaServerItem, String streamId);
void closeRTPServer(MediaServerItem mediaServerItem, String streamId, CommonCallback<Boolean> callback);
Boolean updateRtpServerSSRC(MediaServerItem mediaServerItem, String streamId, String ssrc);
void closeRTPServer(MediaServer mediaServerItem, String streamId, CommonCallback<Boolean> callback);
Boolean updateRtpServerSSRC(MediaServer mediaServerItem, String streamId, String ssrc);
void closeRTPServer(String mediaServerId, String streamId);
void clearRTPServer(MediaServerItem mediaServerItem);
void clearRTPServer(MediaServer mediaServerItem);
void update(MediaServerItem mediaSerItem);
void update(MediaServer mediaSerItem);
void addCount(String mediaServerId);
@@ -53,27 +54,37 @@ public interface IMediaServerService {
void clearMediaServerForOnline();
void add(MediaServerItem mediaSerItem);
void add(MediaServer mediaSerItem);
void resetOnlineServerItem(MediaServerItem serverItem);
void resetOnlineServerItem(MediaServer serverItem);
MediaServerItem checkMediaServer(String ip, int port, String secret, String type);
MediaServer checkMediaServer(String ip, int port, String secret, String type);
boolean checkMediaRecordServer(String ip, int port);
void delete(String id);
MediaServerItem getDefaultMediaServer();
MediaServer getDefaultMediaServer();
MediaServerLoad getLoad(MediaServerItem mediaServerItem);
MediaServerLoad getLoad(MediaServer mediaServerItem);
List<MediaServerItem> getAllWithAssistPort();
List<MediaServer> getAllWithAssistPort();
MediaServerItem getOneFromDatabase(String id);
MediaServer getOneFromDatabase(String id);
boolean stopSendRtp(MediaServerItem mediaInfo, String app, String stream, String ssrc);
boolean stopSendRtp(MediaServer mediaInfo, String app, String stream, String ssrc);
boolean deleteRecordDirectory(MediaServerItem mediaServerItem, String app, String stream, String date, String fileName);
boolean deleteRecordDirectory(MediaServer mediaServerItem, String app, String stream, String date, String fileName);
List<StreamInfo> getMediaList(MediaServerItem mediaInfo, String app, String stream, String callId);
List<StreamInfo> getMediaList(MediaServer mediaInfo, String app, String stream, String callId);
Boolean connectRtpServer(MediaServer mediaServerItem, String address, int port, String stream);
void getSnap(MediaServer mediaServerItemInuse, String streamUrl, int timeoutSec, int expireSec, String path, String fileName);
MediaInfo getMediaInfo(MediaServer mediaServerItem, String app, String stream);
Boolean pauseRtpCheck(MediaServer mediaServerItem, String streamKey);
boolean resumeRtpCheck(MediaServer mediaServerItem, String streamKey);
}

View File

@@ -7,11 +7,12 @@ import com.genersoft.iot.vmp.common.VideoManagerConstants;
import com.genersoft.iot.vmp.conf.UserSetting;
import com.genersoft.iot.vmp.conf.exception.ControllerException;
import com.genersoft.iot.vmp.gb28181.session.SSRCFactory;
import com.genersoft.iot.vmp.media.bean.MediaInfo;
import com.genersoft.iot.vmp.media.event.MediaServerChangeEvent;
import com.genersoft.iot.vmp.media.event.MediaServerDeleteEvent;
import com.genersoft.iot.vmp.media.service.IMediaNodeServerService;
import com.genersoft.iot.vmp.media.service.IMediaServerService;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServer;
import com.genersoft.iot.vmp.service.IInviteStreamService;
import com.genersoft.iot.vmp.service.bean.MediaServerLoad;
import com.genersoft.iot.vmp.service.bean.SSRCInfo;
@@ -73,9 +74,9 @@ public class MediaServerServiceImpl implements IMediaServerService {
* 初始化
*/
@Override
public void updateVmServer(List<MediaServerItem> mediaServerItemList) {
public void updateVmServer(List<MediaServer> mediaServerItemList) {
logger.info("[媒体服务节点] 缓存初始化 ");
for (MediaServerItem mediaServerItem : mediaServerItemList) {
for (MediaServer mediaServerItem : mediaServerItemList) {
if (ObjectUtils.isEmpty(mediaServerItem.getId())) {
continue;
}
@@ -94,7 +95,7 @@ public class MediaServerServiceImpl implements IMediaServerService {
@Override
public SSRCInfo openRTPServer(MediaServerItem mediaServerItem, String streamId, String presetSsrc, boolean ssrcCheck,
public SSRCInfo openRTPServer(MediaServer mediaServerItem, String streamId, String presetSsrc, boolean ssrcCheck,
boolean isPlayback, Integer port, Boolean onlyAuto, Boolean reUsePort, Integer tcpMode) {
if (mediaServerItem == null || mediaServerItem.getId() == null) {
logger.info("[openRTPServer] 失败, mediaServerItem == null || mediaServerItem.getId() == null");
@@ -134,13 +135,13 @@ public class MediaServerServiceImpl implements IMediaServerService {
}
@Override
public SSRCInfo openRTPServer(MediaServerItem mediaServerItem, String streamId, String ssrc, boolean ssrcCheck, boolean isPlayback, Integer port, Boolean onlyAuto) {
public SSRCInfo openRTPServer(MediaServer mediaServerItem, String streamId, String ssrc, boolean ssrcCheck, boolean isPlayback, Integer port, Boolean onlyAuto) {
return openRTPServer(mediaServerItem, streamId, ssrc, ssrcCheck, isPlayback, port, onlyAuto, null, 0);
}
@Override
public void closeRTPServer(MediaServerItem mediaServerItem, String streamId) {
public void closeRTPServer(MediaServer mediaServerItem, String streamId) {
if (mediaServerItem == null) {
return;
}
@@ -153,7 +154,7 @@ public class MediaServerServiceImpl implements IMediaServerService {
}
@Override
public void closeRTPServer(MediaServerItem mediaServerItem, String streamId, CommonCallback<Boolean> callback) {
public void closeRTPServer(MediaServer mediaServerItem, String streamId, CommonCallback<Boolean> callback) {
if (mediaServerItem == null) {
callback.run(false);
return;
@@ -168,7 +169,7 @@ public class MediaServerServiceImpl implements IMediaServerService {
@Override
public void closeRTPServer(String mediaServerId, String streamId) {
MediaServerItem mediaServerItem = this.getOne(mediaServerId);
MediaServer mediaServerItem = this.getOne(mediaServerId);
if (mediaServerItem == null) {
return;
}
@@ -184,7 +185,7 @@ public class MediaServerServiceImpl implements IMediaServerService {
}
@Override
public Boolean updateRtpServerSSRC(MediaServerItem mediaServerItem, String streamId, String ssrc) {
public Boolean updateRtpServerSSRC(MediaServer mediaServerItem, String streamId, String ssrc) {
if (mediaServerItem == null) {
return false;
}
@@ -198,7 +199,7 @@ public class MediaServerServiceImpl implements IMediaServerService {
@Override
public void releaseSsrc(String mediaServerItemId, String ssrc) {
MediaServerItem mediaServerItem = getOne(mediaServerItemId);
MediaServer mediaServerItem = getOne(mediaServerItemId);
if (mediaServerItem == null || ssrc == null) {
return;
}
@@ -209,21 +210,21 @@ public class MediaServerServiceImpl implements IMediaServerService {
* 媒体服务节点 重启后重置他的推流信息, TODO 给正在使用的设备发送停止命令
*/
@Override
public void clearRTPServer(MediaServerItem mediaServerItem) {
public void clearRTPServer(MediaServer mediaServerItem) {
ssrcFactory.reset(mediaServerItem.getId());
}
@Override
public void update(MediaServerItem mediaSerItem) {
public void update(MediaServer mediaSerItem) {
mediaServerMapper.update(mediaSerItem);
MediaServerItem mediaServerItemInRedis = getOne(mediaSerItem.getId());
MediaServerItem mediaServerItemInDataBase = mediaServerMapper.queryOne(mediaSerItem.getId());
MediaServer mediaServerInRedis = getOne(mediaSerItem.getId());
MediaServer mediaServerItemInDataBase = mediaServerMapper.queryOne(mediaSerItem.getId());
if (mediaServerItemInDataBase == null) {
return;
}
mediaServerItemInDataBase.setStatus(mediaSerItem.isStatus());
if (mediaServerItemInRedis == null || !ssrcFactory.hasMediaServerSSRC(mediaServerItemInDataBase.getId())) {
if (mediaServerInRedis == null || !ssrcFactory.hasMediaServerSSRC(mediaServerItemInDataBase.getId())) {
ssrcFactory.initMediaServerSSRC(mediaServerItemInDataBase.getId(),null);
}
String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + mediaServerItemInDataBase.getId();
@@ -240,13 +241,13 @@ public class MediaServerServiceImpl implements IMediaServerService {
@Override
public List<MediaServerItem> getAllOnlineList() {
List<MediaServerItem> result = new ArrayList<>();
public List<MediaServer> getAllOnlineList() {
List<MediaServer> result = new ArrayList<>();
List<Object> mediaServerKeys = RedisUtil.scan(redisTemplate, String.format("%S*", VideoManagerConstants.MEDIA_SERVER_PREFIX+ userSetting.getServerId() + "_" ));
String onlineKey = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId();
for (Object mediaServerKey : mediaServerKeys) {
String key = (String) mediaServerKey;
MediaServerItem mediaServerItem = JsonUtil.redisJsonToObject(redisTemplate, key, MediaServerItem.class);
MediaServer mediaServerItem = JsonUtil.redisJsonToObject(redisTemplate, key, MediaServer.class);
if (Objects.isNull(mediaServerItem)) {
continue;
}
@@ -269,13 +270,13 @@ public class MediaServerServiceImpl implements IMediaServerService {
}
@Override
public List<MediaServerItem> getAll() {
List<MediaServerItem> mediaServerList = mediaServerMapper.queryAll();
public List<MediaServer> getAll() {
List<MediaServer> mediaServerList = mediaServerMapper.queryAll();
if (mediaServerList.isEmpty()) {
return new ArrayList<>();
}
for (MediaServerItem mediaServerItem : mediaServerList) {
MediaServerItem mediaServerItemInRedis = getOne(mediaServerItem.getId());
for (MediaServer mediaServerItem : mediaServerList) {
MediaServer mediaServerItemInRedis = getOne(mediaServerItem.getId());
if (mediaServerItemInRedis != null) {
mediaServerItem.setStatus(mediaServerItemInRedis.isStatus());
}
@@ -285,21 +286,21 @@ public class MediaServerServiceImpl implements IMediaServerService {
@Override
public List<MediaServerItem> getAllFromDatabase() {
public List<MediaServer> getAllFromDatabase() {
return mediaServerMapper.queryAll();
}
@Override
public List<MediaServerItem> getAllOnline() {
public List<MediaServer> getAllOnline() {
String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId();
Set<Object> mediaServerIdSet = redisTemplate.opsForZSet().reverseRange(key, 0, -1);
List<MediaServerItem> result = new ArrayList<>();
List<MediaServer> result = new ArrayList<>();
if (mediaServerIdSet != null && mediaServerIdSet.size() > 0) {
for (Object mediaServerId : mediaServerIdSet) {
String mediaServerIdStr = (String) mediaServerId;
String serverKey = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + mediaServerIdStr;
result.add((MediaServerItem) redisTemplate.opsForValue().get(serverKey));
result.add((MediaServer) redisTemplate.opsForValue().get(serverKey));
}
}
Collections.reverse(result);
@@ -312,17 +313,17 @@ public class MediaServerServiceImpl implements IMediaServerService {
* @return MediaServerItem
*/
@Override
public MediaServerItem getOne(String mediaServerId) {
public MediaServer getOne(String mediaServerId) {
if (mediaServerId == null) {
return null;
}
String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + mediaServerId;
return JsonUtil.redisJsonToObject(redisTemplate, key, MediaServerItem.class);
return JsonUtil.redisJsonToObject(redisTemplate, key, MediaServer.class);
}
@Override
public MediaServerItem getDefaultMediaServer() {
public MediaServer getDefaultMediaServer() {
return mediaServerMapper.queryDefault();
}
@@ -333,7 +334,7 @@ public class MediaServerServiceImpl implements IMediaServerService {
}
@Override
public void add(MediaServerItem mediaServerItem) {
public void add(MediaServer mediaServerItem) {
mediaServerItem.setCreateTime(DateUtil.getNow());
mediaServerItem.setUpdateTime(DateUtil.getNow());
if (mediaServerItem.getHookAliveInterval() == null || mediaServerItem.getHookAliveInterval() == 0F) {
@@ -364,7 +365,7 @@ public class MediaServerServiceImpl implements IMediaServerService {
}
@Override
public void resetOnlineServerItem(MediaServerItem serverItem) {
public void resetOnlineServerItem(MediaServer serverItem) {
// 更新缓存
String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId();
// 使用zset的分数作为当前并发量 默认值设置为0
@@ -378,7 +379,7 @@ public class MediaServerServiceImpl implements IMediaServerService {
}
}
private int getMediaList(MediaServerItem serverItem) {
private int getMediaList(MediaServer serverItem) {
return 0;
}
@@ -405,7 +406,7 @@ public class MediaServerServiceImpl implements IMediaServerService {
* @return MediaServerItem
*/
@Override
public MediaServerItem getMediaServerForMinimumLoad(Boolean hasAssist) {
public MediaServer getMediaServerForMinimumLoad(Boolean hasAssist) {
String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId();
Long size = redisTemplate.opsForZSet().zCard(key);
if (size == null || size == 0) {
@@ -416,14 +417,14 @@ public class MediaServerServiceImpl implements IMediaServerService {
// 获取分数最低的,及并发最低的
Set<Object> objects = redisTemplate.opsForZSet().range(key, 0, -1);
ArrayList<Object> mediaServerObjectS = new ArrayList<>(objects);
MediaServerItem mediaServerItem = null;
MediaServer mediaServerItem = null;
if (hasAssist == null) {
String mediaServerId = (String)mediaServerObjectS.get(0);
mediaServerItem = getOne(mediaServerId);
}else if (hasAssist) {
for (Object mediaServerObject : mediaServerObjectS) {
String mediaServerId = (String)mediaServerObject;
MediaServerItem serverItem = getOne(mediaServerId);
MediaServer serverItem = getOne(mediaServerId);
if (serverItem.getRecordAssistPort() > 0) {
mediaServerItem = serverItem;
break;
@@ -432,7 +433,7 @@ public class MediaServerServiceImpl implements IMediaServerService {
}else if (!hasAssist) {
for (Object mediaServerObject : mediaServerObjectS) {
String mediaServerId = (String)mediaServerObject;
MediaServerItem serverItem = getOne(mediaServerId);
MediaServer serverItem = getOne(mediaServerId);
if (serverItem.getRecordAssistPort() == 0) {
mediaServerItem = serverItem;
break;
@@ -444,7 +445,7 @@ public class MediaServerServiceImpl implements IMediaServerService {
}
@Override
public MediaServerItem checkMediaServer(String ip, int port, String secret, String type) {
public MediaServer checkMediaServer(String ip, int port, String secret, String type) {
if (mediaServerMapper.queryOneByHostAndPort(ip, port) != null) {
throw new ControllerException(ErrorCode.ERROR100.getCode(), "此连接已存在");
}
@@ -454,7 +455,7 @@ public class MediaServerServiceImpl implements IMediaServerService {
logger.info("[closeRTPServer] 失败, mediaServerItem的类型 {},未找到对应的实现类", type);
return null;
}
MediaServerItem mediaServerItem = mediaNodeServerService.checkMediaServer(ip, port, secret);
MediaServer mediaServerItem = mediaNodeServerService.checkMediaServer(ip, port, secret);
if (mediaServerItem != null) {
if (mediaServerMapper.queryOne(mediaServerItem.getId()) != null) {
throw new ControllerException(ErrorCode.ERROR100.getCode(), "媒体服务ID [" + mediaServerItem.getId() + " ] 已存在,请修改媒体服务器配置");
@@ -495,20 +496,20 @@ public class MediaServerServiceImpl implements IMediaServerService {
}
@Override
public MediaServerItem getOneFromDatabase(String mediaServerId) {
public MediaServer getOneFromDatabase(String mediaServerId) {
return mediaServerMapper.queryOne(mediaServerId);
}
@Override
public void syncCatchFromDatabase() {
List<MediaServerItem> allInCatch = getAllOnlineList();
List<MediaServerItem> allInDatabase = mediaServerMapper.queryAll();
Map<String, MediaServerItem> mediaServerItemMap = new HashMap<>();
List<MediaServer> allInCatch = getAllOnlineList();
List<MediaServer> allInDatabase = mediaServerMapper.queryAll();
Map<String, MediaServer> mediaServerItemMap = new HashMap<>();
for (MediaServerItem mediaServerItem : allInDatabase) {
for (MediaServer mediaServerItem : allInDatabase) {
mediaServerItemMap.put(mediaServerItem.getId(), mediaServerItem);
}
for (MediaServerItem mediaServerItem : allInCatch) {
for (MediaServer mediaServerItem : allInCatch) {
// 清除数据中不存在但redis缓存数据
if (!mediaServerItemMap.containsKey(mediaServerItem.getId())) {
delete(mediaServerItem.getId());
@@ -517,7 +518,7 @@ public class MediaServerServiceImpl implements IMediaServerService {
}
@Override
public MediaServerLoad getLoad(MediaServerItem mediaServerItem) {
public MediaServerLoad getLoad(MediaServer mediaServerItem) {
MediaServerLoad result = new MediaServerLoad();
result.setId(mediaServerItem.getId());
result.setPush(redisCatchStorage.getPushStreamCount(mediaServerItem.getId()));
@@ -529,13 +530,13 @@ public class MediaServerServiceImpl implements IMediaServerService {
}
@Override
public List<MediaServerItem> getAllWithAssistPort() {
public List<MediaServer> getAllWithAssistPort() {
return mediaServerMapper.queryAllWithAssistPort();
}
@Override
public boolean stopSendRtp(MediaServerItem mediaInfo, String app, String stream, String ssrc) {
public boolean stopSendRtp(MediaServer mediaInfo, String app, String stream, String ssrc) {
IMediaNodeServerService mediaNodeServerService = nodeServerServiceMap.get(mediaInfo.getType());
if (mediaNodeServerService == null) {
logger.info("[stopSendRtp] 失败, mediaServerItem的类型 {},未找到对应的实现类", mediaInfo.getType());
@@ -545,7 +546,7 @@ public class MediaServerServiceImpl implements IMediaServerService {
}
@Override
public boolean deleteRecordDirectory(MediaServerItem mediaServerItem, String app, String stream, String date, String fileName) {
public boolean deleteRecordDirectory(MediaServer mediaServerItem, String app, String stream, String date, String fileName) {
IMediaNodeServerService mediaNodeServerService = nodeServerServiceMap.get(mediaServerItem.getType());
if (mediaNodeServerService == null) {
logger.info("[stopSendRtp] 失败, mediaServerItem的类型 {},未找到对应的实现类", mediaServerItem.getType());
@@ -555,7 +556,7 @@ public class MediaServerServiceImpl implements IMediaServerService {
}
@Override
public List<StreamInfo> getMediaList(MediaServerItem mediaServerItem, String app, String stream, String callId) {
public List<StreamInfo> getMediaList(MediaServer mediaServerItem, String app, String stream, String callId) {
IMediaNodeServerService mediaNodeServerService = nodeServerServiceMap.get(mediaServerItem.getType());
if (mediaNodeServerService == null) {
logger.info("[getMediaList] 失败, mediaServerItem的类型 {},未找到对应的实现类", mediaServerItem.getType());
@@ -563,4 +564,54 @@ public class MediaServerServiceImpl implements IMediaServerService {
}
return mediaNodeServerService.getMediaList(mediaServerItem, app, stream, callId);
}
@Override
public Boolean connectRtpServer(MediaServer mediaServerItem, String address, int port, String stream) {
IMediaNodeServerService mediaNodeServerService = nodeServerServiceMap.get(mediaServerItem.getType());
if (mediaNodeServerService == null) {
logger.info("[connectRtpServer] 失败, mediaServerItem的类型 {},未找到对应的实现类", mediaServerItem.getType());
return false;
}
return mediaNodeServerService.connectRtpServer(mediaServerItem, address, port, stream);
}
@Override
public void getSnap(MediaServer mediaServerItem, String streamUrl, int timeoutSec, int expireSec, String path, String fileName) {
IMediaNodeServerService mediaNodeServerService = nodeServerServiceMap.get(mediaServerItem.getType());
if (mediaNodeServerService == null) {
logger.info("[getSnap] 失败, mediaServerItem的类型 {},未找到对应的实现类", mediaServerItem.getType());
return;
}
mediaNodeServerService.getSnap(mediaServerItem, streamUrl, timeoutSec, expireSec, path, fileName);
}
@Override
public MediaInfo getMediaInfo(MediaServer mediaServerItem, String app, String stream) {
IMediaNodeServerService mediaNodeServerService = nodeServerServiceMap.get(mediaServerItem.getType());
if (mediaNodeServerService == null) {
logger.info("[getMediaInfo] 失败, mediaServerItem的类型 {},未找到对应的实现类", mediaServerItem.getType());
return null;
}
return mediaNodeServerService.getMediaInfo(mediaServerItem, app, stream);
}
@Override
public Boolean pauseRtpCheck(MediaServer mediaServerItem, String streamKey) {
IMediaNodeServerService mediaNodeServerService = nodeServerServiceMap.get(mediaServerItem.getType());
if (mediaNodeServerService == null) {
logger.info("[pauseRtpCheck] 失败, mediaServerItem的类型 {},未找到对应的实现类", mediaServerItem.getType());
return false;
}
return mediaNodeServerService.pauseRtpCheck(mediaServerItem, streamKey);
}
@Override
public boolean resumeRtpCheck(MediaServer mediaServerItem, String streamKey) {
IMediaNodeServerService mediaNodeServerService = nodeServerServiceMap.get(mediaServerItem.getType());
if (mediaNodeServerService == null) {
logger.info("[pauseRtpCheck] 失败, mediaServerItem的类型 {},未找到对应的实现类", mediaServerItem.getType());
return false;
}
return mediaNodeServerService.resumeRtpCheck(mediaServerItem, streamKey);
}
}

View File

@@ -2,7 +2,7 @@ package com.genersoft.iot.vmp.media.zlm;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServer;
import com.genersoft.iot.vmp.utils.SSLSocketClientUtil;
import okhttp3.*;
import okhttp3.logging.HttpLoggingInterceptor;
@@ -70,7 +70,7 @@ public class AssistRESTfulUtils {
}
public JSONObject sendGet(MediaServerItem mediaServerItem, String api, Map<String, Object> param, RequestCallback callback) {
public JSONObject sendGet(MediaServer mediaServerItem, String api, Map<String, Object> param, RequestCallback callback) {
OkHttpClient client = getClient();
if (mediaServerItem == null) {
@@ -155,7 +155,7 @@ public class AssistRESTfulUtils {
return responseJSON;
}
public JSONObject sendPost(MediaServerItem mediaServerItem, String url,
public JSONObject sendPost(MediaServer mediaServerItem, String url,
JSONObject param, ZLMRESTfulUtils.RequestCallback callback,
Integer readTimeOut) {
OkHttpClient client = getClient(readTimeOut);
@@ -244,12 +244,12 @@ public class AssistRESTfulUtils {
return responseJSON;
}
public JSONObject getInfo(MediaServerItem mediaServerItem, RequestCallback callback){
public JSONObject getInfo(MediaServer mediaServerItem, RequestCallback callback){
Map<String, Object> param = new HashMap<>();
return sendGet(mediaServerItem, "api/record/info",param, callback);
}
public JSONObject addTask(MediaServerItem mediaServerItem, String app, String stream, String startTime,
public JSONObject addTask(MediaServer mediaServerItem, String app, String stream, String startTime,
String endTime, String callId, List<String> filePathList, String remoteHost) {
JSONObject videoTaskInfoJSON = new JSONObject();
@@ -266,7 +266,7 @@ public class AssistRESTfulUtils {
return sendPost(mediaServerItem, urlStr, videoTaskInfoJSON, null, 30);
}
public JSONObject queryTaskList(MediaServerItem mediaServerItem, String app, String stream, String callId,
public JSONObject queryTaskList(MediaServer mediaServerItem, String app, String stream, String callId,
String taskId, Boolean isEnd, String scheme) {
Map<String, Object> param = new HashMap<>();
if (!ObjectUtils.isEmpty(app)) {

View File

@@ -3,7 +3,7 @@ package com.genersoft.iot.vmp.media.zlm;
import com.genersoft.iot.vmp.common.VideoManagerConstants;
import com.genersoft.iot.vmp.conf.UserSetting;
import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServer;
import com.genersoft.iot.vmp.utils.redis.RedisUtil;
import org.apache.commons.lang3.math.NumberUtils;
import org.slf4j.Logger;
@@ -30,7 +30,7 @@ public class SendRtpPortManager {
private final String KEY = "VM_MEDIA_SEND_RTP_PORT_";
public synchronized int getNextPort(MediaServerItem mediaServer) {
public synchronized int getNextPort(MediaServer mediaServer) {
if (mediaServer == null) {
logger.warn("[发送端口管理] 参数错误mediaServer为NULL");
return -1;

View File

@@ -18,7 +18,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform;
import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
import com.genersoft.iot.vmp.media.bean.Track;
import com.genersoft.iot.vmp.media.bean.MediaInfo;
import com.genersoft.iot.vmp.media.service.IMediaServerService;
import com.genersoft.iot.vmp.media.zlm.dto.*;
import com.genersoft.iot.vmp.media.zlm.dto.hook.*;
@@ -34,7 +34,6 @@ 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.apache.poi.ss.formula.functions.T;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -153,7 +152,7 @@ public class ZLMHttpHookListener {
});
try {
HookZlmServerKeepaliveEvent event = new HookZlmServerKeepaliveEvent(this);
MediaServerItem mediaServerItem = mediaServerService.getOne(param.getMediaServerId());
MediaServer mediaServerItem = mediaServerService.getOne(param.getMediaServerId());
if (mediaServerItem != null) {
event.setMediaServerItem(mediaServerItem);
applicationEventPublisher.publishEvent(event);
@@ -179,7 +178,7 @@ public class ZLMHttpHookListener {
JSONObject json = (JSONObject) JSON.toJSON(param);
ZlmHttpHookSubscribe.Event subscribe = this.subscribe.sendNotify(HookType.on_play, json);
if (subscribe != null) {
MediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId);
MediaServer mediaInfo = mediaServerService.getOne(mediaServerId);
if (mediaInfo != null) {
subscribe.response(mediaInfo, param);
}
@@ -209,7 +208,7 @@ public class ZLMHttpHookListener {
// TODO 加快处理速度
String mediaServerId = json.getString("mediaServerId");
MediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId);
MediaServer mediaInfo = mediaServerService.getOne(mediaServerId);
if (mediaInfo == null) {
return new HookResultForOnPublish(200, "success");
}
@@ -360,7 +359,7 @@ public class ZLMHttpHookListener {
JSONObject json = (JSONObject) JSON.toJSON(param);
taskExecutor.execute(() -> {
ZlmHttpHookSubscribe.Event subscribe = this.subscribe.sendNotify(HookType.on_stream_changed, json);
MediaServerItem mediaInfo = mediaServerService.getOne(param.getMediaServerId());
MediaServer mediaInfo = mediaServerService.getOne(param.getMediaServerId());
if (mediaInfo == null) {
logger.info("[ZLM HOOK] 流变化未找到ZLM, {}", param.getMediaServerId());
return;
@@ -472,7 +471,7 @@ public class ZLMHttpHookListener {
callId = streamAuthorityInfo.getCallId();
}
StreamInfo streamInfoByAppAndStream = mediaService.getStreamInfoByAppAndStream(mediaInfo,
param.getApp(), param.getStream(), Track.getInstance(param), callId);
param.getApp(), param.getStream(), MediaInfo.getInstance(param), callId);
param.setStreamInfo(new StreamContent(streamInfoByAppAndStream));
redisCatchStorage.addStream(mediaInfo, type, param.getApp(), param.getStream(), param);
if (param.getOriginType() == OriginType.RTSP_PUSH.ordinal()
@@ -680,7 +679,7 @@ public class ZLMHttpHookListener {
DeferredResult<HookResult> defaultResult = new DeferredResult<>();
MediaServerItem mediaInfo = mediaServerService.getOne(param.getMediaServerId());
MediaServer mediaInfo = mediaServerService.getOne(param.getMediaServerId());
if (!userSetting.isAutoApplyPlay() || mediaInfo == null) {
defaultResult.setResult(new HookResult(ErrorCode.ERROR404.getCode(), ErrorCode.ERROR404.getMsg()));
return defaultResult;
@@ -811,7 +810,7 @@ public class ZLMHttpHookListener {
});
try {
HookZlmServerStartEvent event = new HookZlmServerStartEvent(this);
MediaServerItem mediaServerItem = mediaServerService.getOne(zlmServerConfig.getMediaServerId());
MediaServer mediaServerItem = mediaServerService.getOne(zlmServerConfig.getMediaServerId());
if (mediaServerItem != null) {
event.setMediaServerItem(mediaServerItem);
applicationEventPublisher.publishEvent(event);

View File

@@ -88,7 +88,7 @@ public class ZLMMediaListManager {
}
public void sendStreamEvent(String app, String stream, String mediaServerId) {
MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId);
MediaServer mediaServerItem = mediaServerService.getOne(mediaServerId);
// 查看推流状态
Boolean streamReady = zlmServerFactory.isStreamReady(mediaServerItem, app, stream);
if (streamReady != null && streamReady) {

View File

@@ -6,11 +6,10 @@ import com.alibaba.fastjson2.JSONObject;
import com.genersoft.iot.vmp.common.CommonCallback;
import com.genersoft.iot.vmp.common.StreamInfo;
import com.genersoft.iot.vmp.conf.exception.ControllerException;
import com.genersoft.iot.vmp.media.bean.Track;
import com.genersoft.iot.vmp.media.bean.MediaInfo;
import com.genersoft.iot.vmp.media.service.IMediaNodeServerService;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServer;
import com.genersoft.iot.vmp.media.zlm.dto.ZLMServerConfig;
import com.genersoft.iot.vmp.service.impl.DeviceServiceImpl;
import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -39,32 +38,32 @@ public class ZLMMediaNodeServerService implements IMediaNodeServerService {
private String sipIp;
@Override
public int createRTPServer(MediaServerItem mediaServerItem, String streamId, long ssrc, Integer port, Boolean onlyAuto, Boolean reUsePort, Integer tcpMode) {
public int createRTPServer(MediaServer mediaServerItem, String streamId, long ssrc, Integer port, Boolean onlyAuto, Boolean reUsePort, Integer tcpMode) {
return zlmServerFactory.createRTPServer(mediaServerItem, streamId, ssrc, port, onlyAuto, reUsePort, tcpMode);
}
@Override
public void closeRtpServer(MediaServerItem mediaServerItem, String streamId) {
public void closeRtpServer(MediaServer mediaServerItem, String streamId) {
zlmresTfulUtils.closeStreams(mediaServerItem, "rtp", streamId);
}
@Override
public void closeRtpServer(MediaServerItem mediaServerItem, String streamId, CommonCallback<Boolean> callback) {
public void closeRtpServer(MediaServer mediaServerItem, String streamId, CommonCallback<Boolean> callback) {
zlmServerFactory.closeRtpServer(mediaServerItem, streamId, callback);
}
@Override
public void closeStreams(MediaServerItem mediaServerItem, String app, String stream) {
public void closeStreams(MediaServer mediaServerItem, String app, String stream) {
zlmresTfulUtils.closeStreams(mediaServerItem, app, stream);
}
@Override
public Boolean updateRtpServerSSRC(MediaServerItem mediaServerItem, String streamId, String ssrc) {
public Boolean updateRtpServerSSRC(MediaServer mediaServerItem, String streamId, String ssrc) {
return zlmServerFactory.updateRtpServerSSRC(mediaServerItem, streamId, ssrc);
}
@Override
public boolean checkNodeId(MediaServerItem mediaServerItem) {
public boolean checkNodeId(MediaServer mediaServerItem) {
if (mediaServerItem == null) {
return false;
}
@@ -84,13 +83,13 @@ public class ZLMMediaNodeServerService implements IMediaNodeServerService {
}
@Override
public void online(MediaServerItem mediaServerItem) {
public void online(MediaServer mediaServerItem) {
}
@Override
public MediaServerItem checkMediaServer(String ip, int port, String secret) {
MediaServerItem mediaServerItem = new MediaServerItem();
public MediaServer checkMediaServer(String ip, int port, String secret) {
MediaServer mediaServerItem = new MediaServer();
mediaServerItem.setIp(ip);
mediaServerItem.setHttpPort(port);
mediaServerItem.setSecret(secret);
@@ -121,7 +120,7 @@ public class ZLMMediaNodeServerService implements IMediaNodeServerService {
}
@Override
public boolean stopSendRtp(MediaServerItem mediaInfo, String app, String stream, String ssrc) {
public boolean stopSendRtp(MediaServer mediaInfo, String app, String stream, String ssrc) {
Map<String, Object> param = new HashMap<>();
param.put("vhost", "__defaultVhost__");
param.put("app", app);
@@ -135,7 +134,7 @@ public class ZLMMediaNodeServerService implements IMediaNodeServerService {
}
@Override
public boolean deleteRecordDirectory(MediaServerItem mediaServerItem, String app, String stream, String date, String fileName) {
public boolean deleteRecordDirectory(MediaServer mediaServerItem, String app, String stream, String date, String fileName) {
logger.info("[zlm-deleteRecordDirectory] 删除磁盘文件, server: {} {}:{}->{}/{}", mediaServerItem.getId(), app, stream, date, fileName);
JSONObject jsonObject = zlmresTfulUtils.deleteRecordDirectory(mediaServerItem, app,
stream, date, fileName);
@@ -148,7 +147,7 @@ public class ZLMMediaNodeServerService implements IMediaNodeServerService {
}
@Override
public List<StreamInfo> getMediaList(MediaServerItem mediaServerItem, String app, String stream, String callId) {
public List<StreamInfo> getMediaList(MediaServer mediaServerItem, String app, String stream, String callId) {
List<StreamInfo> streamInfoList = new ArrayList<>();
JSONObject mediaList = zlmresTfulUtils.getMediaList(mediaServerItem, app, stream);
if (mediaList != null) {
@@ -158,8 +157,8 @@ public class ZLMMediaNodeServerService implements IMediaNodeServerService {
return null;
}
JSONObject mediaJSON = data.getJSONObject(0);
Track track = Track.getInstance(mediaJSON);
StreamInfo streamInfo = getStreamInfoByAppAndStream(mediaServerItem, app, stream, track, callId, true);
MediaInfo mediaInfo = MediaInfo.getInstance(mediaJSON);
StreamInfo streamInfo = getStreamInfoByAppAndStream(mediaServerItem, app, stream, mediaInfo, callId, true);
if (streamInfo != null) {
streamInfoList.add(streamInfo);
}
@@ -168,23 +167,56 @@ public class ZLMMediaNodeServerService implements IMediaNodeServerService {
return streamInfoList;
}
public StreamInfo getStreamInfoByAppAndStream(MediaServerItem mediaInfo, String app, String stream, Track track, String callId, boolean isPlay) {
public StreamInfo getStreamInfoByAppAndStream(MediaServer mediaServerItem, String app, String stream, MediaInfo mediaInfo, String callId, boolean isPlay) {
StreamInfo streamInfoResult = new StreamInfo();
streamInfoResult.setStream(stream);
streamInfoResult.setApp(app);
String addr = mediaInfo.getStreamIp();
String addr = mediaServerItem.getStreamIp();
streamInfoResult.setIp(addr);
streamInfoResult.setMediaServerId(mediaInfo.getId());
streamInfoResult.setMediaServerId(mediaServerItem.getId());
String callIdParam = ObjectUtils.isEmpty(callId)?"":"?callId=" + callId;
streamInfoResult.setRtmp(addr, mediaInfo.getRtmpPort(),mediaInfo.getRtmpSSlPort(), app, stream, callIdParam);
streamInfoResult.setRtsp(addr, mediaInfo.getRtspPort(),mediaInfo.getRtspSSLPort(), app, stream, callIdParam);
streamInfoResult.setFlv(addr, mediaInfo.getHttpPort(),mediaInfo.getHttpSSlPort(), app, stream, callIdParam);
streamInfoResult.setFmp4(addr, mediaInfo.getHttpPort(),mediaInfo.getHttpSSlPort(), app, stream, callIdParam);
streamInfoResult.setHls(addr, mediaInfo.getHttpPort(),mediaInfo.getHttpSSlPort(), app, stream, callIdParam);
streamInfoResult.setTs(addr, mediaInfo.getHttpPort(),mediaInfo.getHttpSSlPort(), app, stream, callIdParam);
streamInfoResult.setRtc(addr, mediaInfo.getHttpPort(),mediaInfo.getHttpSSlPort(), app, stream, callIdParam, isPlay);
streamInfoResult.setRtmp(addr, mediaServerItem.getRtmpPort(),mediaServerItem.getRtmpSSlPort(), app, stream, callIdParam);
streamInfoResult.setRtsp(addr, mediaServerItem.getRtspPort(),mediaServerItem.getRtspSSLPort(), app, stream, callIdParam);
streamInfoResult.setFlv(addr, mediaServerItem.getHttpPort(),mediaServerItem.getHttpSSlPort(), app, stream, callIdParam);
streamInfoResult.setFmp4(addr, mediaServerItem.getHttpPort(),mediaServerItem.getHttpSSlPort(), app, stream, callIdParam);
streamInfoResult.setHls(addr, mediaServerItem.getHttpPort(),mediaServerItem.getHttpSSlPort(), app, stream, callIdParam);
streamInfoResult.setTs(addr, mediaServerItem.getHttpPort(),mediaServerItem.getHttpSSlPort(), app, stream, callIdParam);
streamInfoResult.setRtc(addr, mediaServerItem.getHttpPort(),mediaServerItem.getHttpSSlPort(), app, stream, callIdParam, isPlay);
streamInfoResult.setTrack(track);
streamInfoResult.setMediaInfo(mediaInfo);
return streamInfoResult;
}
@Override
public Boolean connectRtpServer(MediaServer mediaServerItem, String address, int port, String stream) {
JSONObject jsonObject = zlmresTfulUtils.connectRtpServer(mediaServerItem, address, port, stream);
logger.info("[TCP主动连接对方] 结果: {}", jsonObject);
return jsonObject.getInteger("code") == 0;
}
@Override
public void getSnap(MediaServer mediaServerItem, String streamUrl, int timeoutSec, int expireSec, String path, String fileName) {
zlmresTfulUtils.getSnap(mediaServerItem, streamUrl, timeoutSec, expireSec, path, fileName);
}
@Override
public MediaInfo getMediaInfo(MediaServer mediaServerItem, String app, String stream) {
JSONObject jsonObject = zlmresTfulUtils.getMediaInfo(mediaServerItem, app, "rtsp", stream);
if (jsonObject.getInteger("code") != 0) {
return null;
}
return MediaInfo.getInstance(jsonObject);
}
@Override
public Boolean pauseRtpCheck(MediaServer mediaServerItem, String streamKey) {
JSONObject jsonObject = zlmresTfulUtils.pauseRtpCheck(mediaServerItem, streamKey);
return jsonObject.getInteger("code") == 0;
}
@Override
public Boolean resumeRtpCheck(MediaServer mediaServerItem, String streamKey) {
JSONObject jsonObject = zlmresTfulUtils.resumeRtpCheck(mediaServerItem, streamKey);
return jsonObject.getInteger("code") == 0;
}
}

View File

@@ -8,7 +8,7 @@ import com.genersoft.iot.vmp.conf.UserSetting;
import com.genersoft.iot.vmp.media.event.MediaServerChangeEvent;
import com.genersoft.iot.vmp.media.event.MediaServerDeleteEvent;
import com.genersoft.iot.vmp.media.service.IMediaServerService;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServer;
import com.genersoft.iot.vmp.media.zlm.dto.ZLMServerConfig;
import com.genersoft.iot.vmp.media.zlm.event.HookZlmServerKeepaliveEvent;
import com.genersoft.iot.vmp.media.zlm.event.HookZlmServerStartEvent;
@@ -36,8 +36,8 @@ public class ZLMMediaServerStatusManger {
private final static Logger logger = LoggerFactory.getLogger(ZLMMediaServerStatusManger.class);
private final Map<Object, MediaServerItem> offlineZlmPrimaryMap = new ConcurrentHashMap<>();
private final Map<Object, MediaServerItem> offlineZlmsecondaryMap = new ConcurrentHashMap<>();
private final Map<Object, MediaServer> offlineZlmPrimaryMap = new ConcurrentHashMap<>();
private final Map<Object, MediaServer> offlineZlmsecondaryMap = new ConcurrentHashMap<>();
private final Map<Object, Long> offlineZlmTimeMap = new ConcurrentHashMap<>();
@Autowired
@@ -67,7 +67,7 @@ public class ZLMMediaServerStatusManger {
|| event.getMediaServerItemList().isEmpty()) {
return;
}
for (MediaServerItem mediaServerItem : event.getMediaServerItemList()) {
for (MediaServer mediaServerItem : event.getMediaServerItemList()) {
if (!type.equals(mediaServerItem.getType())) {
continue;
}
@@ -85,7 +85,7 @@ public class ZLMMediaServerStatusManger {
|| event.getMediaServerItem().isStatus()) {
return;
}
MediaServerItem serverItem = mediaServerService.getOne(event.getMediaServerItem().getId());
MediaServer serverItem = mediaServerService.getOne(event.getMediaServerItem().getId());
if (serverItem == null) {
return;
}
@@ -99,7 +99,7 @@ public class ZLMMediaServerStatusManger {
if (event.getMediaServerItem() == null) {
return;
}
MediaServerItem serverItem = mediaServerService.getOne(event.getMediaServerItem().getId());
MediaServer serverItem = mediaServerService.getOne(event.getMediaServerItem().getId());
if (serverItem == null) {
return;
}
@@ -126,7 +126,7 @@ public class ZLMMediaServerStatusManger {
return;
}
if (!offlineZlmPrimaryMap.isEmpty()) {
for (MediaServerItem mediaServerItem : offlineZlmPrimaryMap.values()) {
for (MediaServer mediaServerItem : offlineZlmPrimaryMap.values()) {
if (offlineZlmTimeMap.get(mediaServerItem.getId()) < System.currentTimeMillis() - 30*60*1000) {
offlineZlmsecondaryMap.put(mediaServerItem.getId(), mediaServerItem);
offlineZlmPrimaryMap.remove(mediaServerItem.getId());
@@ -150,7 +150,7 @@ public class ZLMMediaServerStatusManger {
}
}
if (!offlineZlmsecondaryMap.isEmpty()) {
for (MediaServerItem mediaServerItem : offlineZlmsecondaryMap.values()) {
for (MediaServer mediaServerItem : offlineZlmsecondaryMap.values()) {
if (offlineZlmTimeMap.get(mediaServerItem.getId()) < System.currentTimeMillis() - 30*60*1000) {
continue;
}
@@ -175,7 +175,7 @@ public class ZLMMediaServerStatusManger {
}
}
private void online(MediaServerItem mediaServerItem, ZLMServerConfig config) {
private void online(MediaServer mediaServerItem, ZLMServerConfig config) {
offlineZlmPrimaryMap.remove(mediaServerItem.getId());
offlineZlmsecondaryMap.remove(mediaServerItem.getId());
offlineZlmTimeMap.remove(mediaServerItem.getId());
@@ -209,7 +209,7 @@ public class ZLMMediaServerStatusManger {
mediaServerService.update(mediaServerItem);
}, (int)(mediaServerItem.getHookAliveInterval() * 2 * 1000));
}
private void initPort(MediaServerItem mediaServerItem, ZLMServerConfig zlmServerConfig) {
private void initPort(MediaServer mediaServerItem, ZLMServerConfig zlmServerConfig) {
if (mediaServerItem.getHttpSSlPort() == 0) {
mediaServerItem.setHttpSSlPort(zlmServerConfig.getHttpSSLport());
}
@@ -231,7 +231,7 @@ public class ZLMMediaServerStatusManger {
mediaServerItem.setHookAliveInterval(10F);
}
public void setZLMConfig(MediaServerItem mediaServerItem, boolean restart) {
public void setZLMConfig(MediaServer mediaServerItem, boolean restart) {
logger.info("[媒体服务节点] 正在设置 {} -> {}:{}",
mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort());
String protocol = sslEnabled ? "https" : "http";

View File

@@ -2,7 +2,7 @@ package com.genersoft.iot.vmp.media.zlm;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServer;
import okhttp3.*;
import okhttp3.logging.HttpLoggingInterceptor;
import org.jetbrains.annotations.NotNull;
@@ -60,12 +60,12 @@ public class ZLMRESTfulUtils {
}
public JSONObject sendPost(MediaServerItem mediaServerItem, String api, Map<String, Object> param, RequestCallback callback) {
public JSONObject sendPost(MediaServer mediaServerItem, String api, Map<String, Object> param, RequestCallback callback) {
return sendPost(mediaServerItem, api, param, callback, null);
}
public JSONObject sendPost(MediaServerItem mediaServerItem, String api, Map<String, Object> param, RequestCallback callback, Integer readTimeOut) {
public JSONObject sendPost(MediaServer mediaServerItem, String api, Map<String, Object> param, RequestCallback callback, Integer readTimeOut) {
OkHttpClient client = getClient(readTimeOut);
if (mediaServerItem == null) {
@@ -164,7 +164,7 @@ public class ZLMRESTfulUtils {
return responseJSON;
}
public void sendGetForImg(MediaServerItem 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) {
String url = String.format("http://%s:%s/index/api/%s", mediaServerItem.getIp(), mediaServerItem.getHttpPort(), api);
HttpUrl parseUrl = HttpUrl.parse(url);
if (parseUrl == null) {
@@ -216,7 +216,7 @@ public class ZLMRESTfulUtils {
}
}
public JSONObject isMediaOnline(MediaServerItem mediaServerItem, String app, String stream, String schema){
public JSONObject isMediaOnline(MediaServer mediaServerItem, String app, String stream, String schema){
Map<String, Object> param = new HashMap<>();
if (app != null) {
param.put("app",app);
@@ -231,7 +231,7 @@ public class ZLMRESTfulUtils {
return sendPost(mediaServerItem, "isMediaOnline", param, null);
}
public JSONObject getMediaList(MediaServerItem mediaServerItem, String app, String stream, String schema, RequestCallback callback){
public JSONObject getMediaList(MediaServer mediaServerItem, String app, String stream, String schema, RequestCallback callback){
Map<String, Object> param = new HashMap<>();
if (app != null) {
param.put("app",app);
@@ -246,15 +246,15 @@ public class ZLMRESTfulUtils {
return sendPost(mediaServerItem, "getMediaList",param, callback);
}
public JSONObject getMediaList(MediaServerItem mediaServerItem, String app, String stream){
public JSONObject getMediaList(MediaServer mediaServerItem, String app, String stream){
return getMediaList(mediaServerItem, app, stream,null, null);
}
public JSONObject getMediaList(MediaServerItem mediaServerItem, RequestCallback callback){
public JSONObject getMediaList(MediaServer mediaServerItem, RequestCallback callback){
return sendPost(mediaServerItem, "getMediaList",null, callback);
}
public JSONObject getMediaInfo(MediaServerItem mediaServerItem, String app, String schema, String stream){
public JSONObject getMediaInfo(MediaServer mediaServerItem, String app, String schema, String stream){
Map<String, Object> param = new HashMap<>();
param.put("app",app);
param.put("schema",schema);
@@ -263,13 +263,13 @@ public class ZLMRESTfulUtils {
return sendPost(mediaServerItem, "getMediaInfo",param, null);
}
public JSONObject getRtpInfo(MediaServerItem mediaServerItem, String stream_id){
public JSONObject getRtpInfo(MediaServer mediaServerItem, String stream_id){
Map<String, Object> param = new HashMap<>();
param.put("stream_id",stream_id);
return sendPost(mediaServerItem, "getRtpInfo",param, null);
}
public JSONObject addFFmpegSource(MediaServerItem mediaServerItem, String src_url, String dst_url, String timeout_ms,
public JSONObject addFFmpegSource(MediaServer mediaServerItem, String src_url, String dst_url, String timeout_ms,
boolean enable_audio, boolean enable_mp4, String ffmpeg_cmd_key){
logger.info(src_url);
logger.info(dst_url);
@@ -282,63 +282,63 @@ public class ZLMRESTfulUtils {
return sendPost(mediaServerItem, "addFFmpegSource",param, null);
}
public JSONObject delFFmpegSource(MediaServerItem mediaServerItem, String key){
public JSONObject delFFmpegSource(MediaServer mediaServerItem, String key){
Map<String, Object> param = new HashMap<>();
param.put("key", key);
return sendPost(mediaServerItem, "delFFmpegSource",param, null);
}
public JSONObject delStreamProxy(MediaServerItem mediaServerItem, String key){
public JSONObject delStreamProxy(MediaServer mediaServerItem, String key){
Map<String, Object> param = new HashMap<>();
param.put("key", key);
return sendPost(mediaServerItem, "delStreamProxy",param, null);
}
public JSONObject getMediaServerConfig(MediaServerItem mediaServerItem){
public JSONObject getMediaServerConfig(MediaServer mediaServerItem){
return sendPost(mediaServerItem, "getServerConfig",null, null);
}
public JSONObject setServerConfig(MediaServerItem mediaServerItem, Map<String, Object> param){
public JSONObject setServerConfig(MediaServer mediaServerItem, Map<String, Object> param){
return sendPost(mediaServerItem,"setServerConfig",param, null);
}
public JSONObject openRtpServer(MediaServerItem mediaServerItem, Map<String, Object> param){
public JSONObject openRtpServer(MediaServer mediaServerItem, Map<String, Object> param){
return sendPost(mediaServerItem, "openRtpServer",param, null);
}
public JSONObject closeRtpServer(MediaServerItem mediaServerItem, Map<String, Object> param) {
public JSONObject closeRtpServer(MediaServer mediaServerItem, Map<String, Object> param) {
return sendPost(mediaServerItem, "closeRtpServer",param, null);
}
public void closeRtpServer(MediaServerItem mediaServerItem, Map<String, Object> param, RequestCallback callback) {
public void closeRtpServer(MediaServer mediaServerItem, Map<String, Object> param, RequestCallback callback) {
sendPost(mediaServerItem, "closeRtpServer",param, callback);
}
public JSONObject listRtpServer(MediaServerItem mediaServerItem) {
public JSONObject listRtpServer(MediaServer mediaServerItem) {
return sendPost(mediaServerItem, "listRtpServer",null, null);
}
public JSONObject startSendRtp(MediaServerItem mediaServerItem, Map<String, Object> param) {
public JSONObject startSendRtp(MediaServer mediaServerItem, Map<String, Object> param) {
return sendPost(mediaServerItem, "startSendRtp",param, null);
}
public JSONObject startSendRtpPassive(MediaServerItem mediaServerItem, Map<String, Object> param) {
public JSONObject startSendRtpPassive(MediaServer mediaServerItem, Map<String, Object> param) {
return sendPost(mediaServerItem, "startSendRtpPassive",param, null);
}
public JSONObject startSendRtpPassive(MediaServerItem mediaServerItem, Map<String, Object> param, RequestCallback callback) {
public JSONObject startSendRtpPassive(MediaServer mediaServerItem, Map<String, Object> param, RequestCallback callback) {
return sendPost(mediaServerItem, "startSendRtpPassive",param, callback);
}
public JSONObject stopSendRtp(MediaServerItem mediaServerItem, Map<String, Object> param) {
public JSONObject stopSendRtp(MediaServer mediaServerItem, Map<String, Object> param) {
return sendPost(mediaServerItem, "stopSendRtp",param, null);
}
public JSONObject restartServer(MediaServerItem mediaServerItem) {
public JSONObject restartServer(MediaServer mediaServerItem) {
return sendPost(mediaServerItem, "restartServer",null, null);
}
public JSONObject addStreamProxy(MediaServerItem mediaServerItem, String app, String stream, String url, boolean enable_audio, boolean enable_mp4, String rtp_type) {
public JSONObject addStreamProxy(MediaServer mediaServerItem, String app, String stream, String url, boolean enable_audio, boolean enable_mp4, String rtp_type) {
Map<String, Object> param = new HashMap<>();
param.put("vhost", "__defaultVhost__");
param.put("app", app);
@@ -350,7 +350,7 @@ public class ZLMRESTfulUtils {
return sendPost(mediaServerItem, "addStreamProxy",param, null, 20);
}
public JSONObject closeStreams(MediaServerItem mediaServerItem, String app, String stream) {
public JSONObject closeStreams(MediaServer mediaServerItem, String app, String stream) {
Map<String, Object> param = new HashMap<>();
param.put("vhost", "__defaultVhost__");
param.put("app", app);
@@ -359,17 +359,17 @@ public class ZLMRESTfulUtils {
return sendPost(mediaServerItem, "close_streams",param, null);
}
public JSONObject getAllSession(MediaServerItem mediaServerItem) {
public JSONObject getAllSession(MediaServer mediaServerItem) {
return sendPost(mediaServerItem, "getAllSession",null, null);
}
public void kickSessions(MediaServerItem mediaServerItem, String localPortSStr) {
public void kickSessions(MediaServer mediaServerItem, String localPortSStr) {
Map<String, Object> param = new HashMap<>();
param.put("local_port", localPortSStr);
sendPost(mediaServerItem, "kick_sessions",param, null);
}
public void getSnap(MediaServerItem mediaServerItem, String streamUrl, int timeout_sec, int expire_sec, String targetPath, String fileName) {
public void getSnap(MediaServer mediaServerItem, String streamUrl, int timeout_sec, int expire_sec, String targetPath, String fileName) {
Map<String, Object> param = new HashMap<>(3);
param.put("url", streamUrl);
param.put("timeout_sec", timeout_sec);
@@ -377,19 +377,19 @@ public class ZLMRESTfulUtils {
sendGetForImg(mediaServerItem, "getSnap", param, targetPath, fileName);
}
public JSONObject pauseRtpCheck(MediaServerItem mediaServerItem, String streamId) {
public JSONObject pauseRtpCheck(MediaServer mediaServerItem, String streamId) {
Map<String, Object> param = new HashMap<>(1);
param.put("stream_id", streamId);
return sendPost(mediaServerItem, "pauseRtpCheck",param, null);
}
public JSONObject resumeRtpCheck(MediaServerItem mediaServerItem, String streamId) {
public JSONObject resumeRtpCheck(MediaServer mediaServerItem, String streamId) {
Map<String, Object> param = new HashMap<>(1);
param.put("stream_id", streamId);
return sendPost(mediaServerItem, "resumeRtpCheck",param, null);
}
public JSONObject connectRtpServer(MediaServerItem mediaServerItem, String dst_url, int dst_port, String stream_id) {
public JSONObject connectRtpServer(MediaServer mediaServerItem, String dst_url, int dst_port, String stream_id) {
Map<String, Object> param = new HashMap<>(1);
param.put("dst_url", dst_url);
param.put("dst_port", dst_port);
@@ -397,14 +397,14 @@ public class ZLMRESTfulUtils {
return sendPost(mediaServerItem, "connectRtpServer",param, null);
}
public JSONObject updateRtpServerSSRC(MediaServerItem mediaServerItem, String streamId, String ssrc) {
public JSONObject updateRtpServerSSRC(MediaServer mediaServerItem, String streamId, String ssrc) {
Map<String, Object> param = new HashMap<>(1);
param.put("ssrc", ssrc);
param.put("stream_id", streamId);
return sendPost(mediaServerItem, "updateRtpServerSSRC",param, null);
}
public JSONObject deleteRecordDirectory(MediaServerItem mediaServerItem, String app, String stream, String date, String fileName) {
public JSONObject deleteRecordDirectory(MediaServer mediaServerItem, String app, String stream, String date, String fileName) {
Map<String, Object> param = new HashMap<>(1);
param.put("vhost", "__defaultVhost__");
param.put("app", app);

View File

@@ -5,7 +5,7 @@ import com.alibaba.fastjson2.JSONObject;
import com.genersoft.iot.vmp.common.CommonCallback;
import com.genersoft.iot.vmp.conf.UserSetting;
import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -42,7 +42,7 @@ public class ZLMServerFactory {
* @param tcpMode 0/null udp 模式1 tcp 被动模式, 2 tcp 主动模式。
* @return
*/
public int createRTPServer(MediaServerItem mediaServerItem, String streamId, long ssrc, Integer port, Boolean onlyAuto, Boolean reUsePort, Integer tcpMode) {
public int createRTPServer(MediaServer mediaServerItem, String streamId, long ssrc, Integer port, Boolean onlyAuto, Boolean reUsePort, Integer tcpMode) {
int result = -1;
// 查询此rtp server 是否已经存在
JSONObject rtpInfo = zlmresTfulUtils.getRtpInfo(mediaServerItem, streamId);
@@ -108,7 +108,7 @@ public class ZLMServerFactory {
return result;
}
public boolean closeRtpServer(MediaServerItem serverItem, String streamId) {
public boolean closeRtpServer(MediaServer serverItem, String streamId) {
boolean result = false;
if (serverItem !=null){
Map<String, Object> param = new HashMap<>();
@@ -129,7 +129,7 @@ public class ZLMServerFactory {
return result;
}
public void closeRtpServer(MediaServerItem serverItem, String streamId, CommonCallback<Boolean> callback) {
public void closeRtpServer(MediaServer serverItem, String streamId, CommonCallback<Boolean> callback) {
if (serverItem == null) {
callback.run(false);
return;
@@ -165,7 +165,7 @@ public class ZLMServerFactory {
* @param tcp 是否为tcp
* @return SendRtpItem
*/
public SendRtpItem createSendRtpItem(MediaServerItem serverItem, String ip, int port, String ssrc, String platformId,
public SendRtpItem createSendRtpItem(MediaServer serverItem, String ip, int port, String ssrc, String platformId,
String deviceId, String channelId, boolean tcp, boolean rtcp){
int localPort = sendRtpPortManager.getNextPort(serverItem);
@@ -198,7 +198,7 @@ public class ZLMServerFactory {
* @param tcp 是否为tcp
* @return SendRtpItem
*/
public SendRtpItem createSendRtpItem(MediaServerItem serverItem, String ip, int port, String ssrc, String platformId,
public SendRtpItem createSendRtpItem(MediaServer serverItem, String ip, int port, String ssrc, String platformId,
String app, String stream, String channelId, boolean tcp, boolean rtcp){
int localPort = sendRtpPortManager.getNextPort(serverItem);
@@ -224,25 +224,25 @@ public class ZLMServerFactory {
/**
* 调用zlm RESTFUL API —— startSendRtp
*/
public JSONObject startSendRtpStream(MediaServerItem mediaServerItem, Map<String, Object>param) {
public JSONObject startSendRtpStream(MediaServer mediaServerItem, Map<String, Object>param) {
return zlmresTfulUtils.startSendRtp(mediaServerItem, param);
}
/**
* 调用zlm RESTFUL API —— startSendRtpPassive
*/
public JSONObject startSendRtpPassive(MediaServerItem mediaServerItem, Map<String, Object>param) {
public JSONObject startSendRtpPassive(MediaServer mediaServerItem, Map<String, Object>param) {
return zlmresTfulUtils.startSendRtpPassive(mediaServerItem, param);
}
public JSONObject startSendRtpPassive(MediaServerItem mediaServerItem, Map<String, Object>param, ZLMRESTfulUtils.RequestCallback callback) {
public JSONObject startSendRtpPassive(MediaServer mediaServerItem, Map<String, Object>param, ZLMRESTfulUtils.RequestCallback callback) {
return zlmresTfulUtils.startSendRtpPassive(mediaServerItem, param, callback);
}
/**
* 查询待转推的流是否就绪
*/
public Boolean isRtpReady(MediaServerItem mediaServerItem, String streamId) {
public Boolean isRtpReady(MediaServer mediaServerItem, String streamId) {
JSONObject mediaInfo = zlmresTfulUtils.getMediaInfo(mediaServerItem,"rtp", "rtsp", streamId);
if (mediaInfo.getInteger("code") == -2) {
return null;
@@ -253,7 +253,7 @@ public class ZLMServerFactory {
/**
* 查询待转推的流是否就绪
*/
public Boolean isStreamReady(MediaServerItem mediaServerItem, String app, String streamId) {
public Boolean isStreamReady(MediaServer mediaServerItem, String app, String streamId) {
JSONObject mediaInfo = zlmresTfulUtils.getMediaList(mediaServerItem, app, streamId);
if (mediaInfo == null || (mediaInfo.getInteger("code") == -2)) {
return null;
@@ -268,7 +268,7 @@ public class ZLMServerFactory {
* @param streamId
* @return
*/
public int totalReaderCount(MediaServerItem mediaServerItem, String app, String streamId) {
public int totalReaderCount(MediaServer mediaServerItem, String app, String streamId) {
JSONObject mediaInfo = zlmresTfulUtils.getMediaInfo(mediaServerItem, app, "rtsp", streamId);
if (mediaInfo == null) {
return 0;
@@ -288,7 +288,7 @@ public class ZLMServerFactory {
/**
* 调用zlm RESTful API —— stopSendRtp
*/
public Boolean stopSendRtpStream(MediaServerItem mediaServerItem, Map<String, Object>param) {
public Boolean stopSendRtpStream(MediaServer mediaServerItem, Map<String, Object>param) {
if (mediaServerItem == null) {
logger.error("[停止RTP推流] 失败: 媒体节点为NULL");
return false;
@@ -306,7 +306,7 @@ public class ZLMServerFactory {
return result;
}
public JSONObject startSendRtp(MediaServerItem mediaInfo, SendRtpItem sendRtpItem) {
public JSONObject startSendRtp(MediaServer mediaInfo, SendRtpItem sendRtpItem) {
String is_Udp = sendRtpItem.isTcp() ? "0" : "1";
logger.info("rtp/{}开始推流, 目标={}:{}SSRC={}", sendRtpItem.getStream(), sendRtpItem.getIp(), sendRtpItem.getPort(), sendRtpItem.getSsrc());
Map<String, Object> param = new HashMap<>(12);
@@ -351,7 +351,7 @@ public class ZLMServerFactory {
return startSendRtpStreamResult;
}
public Boolean updateRtpServerSSRC(MediaServerItem mediaServerItem, String streamId, String ssrc) {
public Boolean updateRtpServerSSRC(MediaServer mediaServerItem, String streamId, String ssrc) {
boolean result = false;
JSONObject jsonObject = zlmresTfulUtils.updateRtpServerSSRC(mediaServerItem, streamId, ssrc);
if (jsonObject == null) {

View File

@@ -3,7 +3,7 @@ package com.genersoft.iot.vmp.media.zlm;
import com.alibaba.fastjson2.JSONObject;
import com.genersoft.iot.vmp.media.zlm.dto.HookType;
import com.genersoft.iot.vmp.media.zlm.dto.IHookSubscribe;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServer;
import com.genersoft.iot.vmp.media.zlm.dto.hook.HookParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -27,7 +27,7 @@ public class ZlmHttpHookSubscribe {
@FunctionalInterface
public interface Event{
void response(MediaServerItem mediaServerItem, HookParam hookParam);
void response(MediaServer mediaServerItem, HookParam hookParam);
}
private Map<HookType, Map<IHookSubscribe, ZlmHttpHookSubscribe.Event>> allSubscribes = new ConcurrentHashMap<>();

View File

@@ -5,7 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
import org.springframework.util.ObjectUtils;
@Schema(description = "流媒体服务信息")
public class MediaServerItem{
public class MediaServer {
@Schema(description = "ID")
private String id;
@@ -87,10 +87,10 @@ public class MediaServerItem{
@Schema(description = "类型: zlm/abl")
private String type;
public MediaServerItem() {
public MediaServer() {
}
public MediaServerItem(ZLMServerConfig zlmServerConfig, String sipIp) {
public MediaServer(ZLMServerConfig zlmServerConfig, String sipIp) {
id = zlmServerConfig.getGeneralMediaServerId();
ip = zlmServerConfig.getIp();
hookIp = ObjectUtils.isEmpty(zlmServerConfig.getHookIp())? sipIp: zlmServerConfig.getHookIp();

View File

@@ -36,7 +36,7 @@ public class MediaServerItemLite {
public MediaServerItemLite(MediaServerItem mediaServerItem) {
public MediaServerItemLite(MediaServer mediaServerItem) {
this.id = mediaServerItem.getId();
this.ip = mediaServerItem.getIp();
this.hookIp = mediaServerItem.getHookIp();

View File

@@ -1,6 +1,6 @@
package com.genersoft.iot.vmp.media.zlm.event;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServer;
import org.springframework.context.ApplicationEvent;
/**
@@ -12,13 +12,13 @@ public class HookZlmServerKeepaliveEvent extends ApplicationEvent {
super(source);
}
private MediaServerItem mediaServerItem;
private MediaServer mediaServerItem;
public MediaServerItem getMediaServerItem() {
public MediaServer getMediaServerItem() {
return mediaServerItem;
}
public void setMediaServerItem(MediaServerItem mediaServerItem) {
public void setMediaServerItem(MediaServer mediaServerItem) {
this.mediaServerItem = mediaServerItem;
}
}

View File

@@ -1,6 +1,6 @@
package com.genersoft.iot.vmp.media.zlm.event;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServer;
import org.springframework.context.ApplicationEvent;
/**
@@ -12,13 +12,13 @@ public class HookZlmServerStartEvent extends ApplicationEvent {
super(source);
}
private MediaServerItem mediaServerItem;
private MediaServer mediaServerItem;
public MediaServerItem getMediaServerItem() {
public MediaServer getMediaServerItem() {
return mediaServerItem;
}
public void setMediaServerItem(MediaServerItem mediaServerItem) {
public void setMediaServerItem(MediaServer mediaServerItem) {
this.mediaServerItem = mediaServerItem;
}
}