From c7ca9703c196c5ac39de5594049171f3a1bf067c Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期三, 20 三月 2024 23:50:30 +0800 Subject: [PATCH] 优化媒体节点服务的代码结构 --- src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java | 11 - src/main/java/com/genersoft/iot/vmp/gb28181/task/SipRunner.java | 12 - src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaNodeServerService.java | 86 ++++++++++++ src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java | 37 +++++ src/main/java/com/genersoft/iot/vmp/media/service/impl/MediaServerServiceImpl.java | 31 ++++ src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java | 11 src/main/java/com/genersoft/iot/vmp/media/zlm/dto/hook/OnStreamChangedHookParam.java | 6 src/main/java/com/genersoft/iot/vmp/vmanager/bean/StreamContent.java | 5 src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java | 32 +-- src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java | 37 +++++ src/main/java/com/genersoft/iot/vmp/media/service/IMediaServerService.java | 7 + src/main/java/com/genersoft/iot/vmp/media/bean/Track.java | 80 +++++++++++ src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java | 7 - src/main/java/com/genersoft/iot/vmp/conf/CloudRecordTimer.java | 9 src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMServerFactory.java | 2 src/main/java/com/genersoft/iot/vmp/service/IMediaService.java | 5 src/main/java/com/genersoft/iot/vmp/media/service/IMediaNodeServerService.java | 9 + 17 files changed, 320 insertions(+), 67 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java b/src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java index 979f54a..1cd09bb 100644 --- a/src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java +++ b/src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java @@ -1,5 +1,6 @@ package com.genersoft.iot.vmp.common; +import com.genersoft.iot.vmp.media.bean.Track; import com.genersoft.iot.vmp.service.bean.DownloadFileInfo; import io.swagger.v3.oas.annotations.media.Schema; @@ -70,7 +71,7 @@ @Schema(description = "娴佸獟浣揑D") private String mediaServerId; @Schema(description = "娴佺紪鐮佷俊鎭�") - private Object tracks; + private Track track; @Schema(description = "寮�濮嬫椂闂�") private String startTime; @Schema(description = "缁撴潫鏃堕棿") @@ -473,12 +474,12 @@ this.mediaServerId = mediaServerId; } - public Object getTracks() { - return tracks; + public Track getTrack() { + return track; } - public void setTracks(Object tracks) { - this.tracks = tracks; + public void setTrack(Track track) { + this.track = track; } public String getStartTime() { diff --git a/src/main/java/com/genersoft/iot/vmp/conf/CloudRecordTimer.java b/src/main/java/com/genersoft/iot/vmp/conf/CloudRecordTimer.java index e5ab4cf..496e639 100644 --- a/src/main/java/com/genersoft/iot/vmp/conf/CloudRecordTimer.java +++ b/src/main/java/com/genersoft/iot/vmp/conf/CloudRecordTimer.java @@ -32,9 +32,6 @@ @Autowired private CloudRecordServiceMapper cloudRecordServiceMapper; - @Autowired - private ZLMRESTfulUtils zlmresTfulUtils; - /** * 瀹氭椂鏌ヨ寰呭垹闄ょ殑褰曞儚鏂囦欢 */ @@ -66,10 +63,10 @@ // TODO 鍚庣画鍙互鍒犻櫎绌轰簡鐨勮繃鏈熸棩鏈熸枃浠跺す for (CloudRecordItem cloudRecordItem : cloudRecordItemList) { String date = new File(cloudRecordItem.getFilePath()).getParentFile().getName(); - JSONObject jsonObject = zlmresTfulUtils.deleteRecordDirectory(mediaServerItem, cloudRecordItem.getApp(), + boolean deleteResult = mediaServerService.deleteRecordDirectory(mediaServerItem, cloudRecordItem.getApp(), cloudRecordItem.getStream(), date, cloudRecordItem.getFileName()); - if (jsonObject.getInteger("code") != 0) { - logger.warn("[褰曞儚鏂囦欢瀹氭椂娓呯悊] 鍒犻櫎纾佺洏鏂囦欢閿欒锛� {}:{}", cloudRecordItem.getFilePath(), jsonObject); + if (deleteResult) { + logger.warn("[褰曞儚鏂囦欢瀹氭椂娓呯悊] 鍒犻櫎纾佺洏鏂囦欢鎴愬姛锛� {}", cloudRecordItem.getFilePath()); } } result += cloudRecordServiceMapper.deleteList(cloudRecordItemList); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/task/SipRunner.java b/src/main/java/com/genersoft/iot/vmp/gb28181/task/SipRunner.java index 852db42..495c8fe 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/task/SipRunner.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/task/SipRunner.java @@ -54,9 +54,6 @@ private IDeviceService deviceService; @Autowired - private ZLMRESTfulUtils zlmresTfulUtils; - - @Autowired private IMediaServerService mediaServerService; @Autowired @@ -109,13 +106,8 @@ redisCatchStorage.deleteSendRTPServer(sendRtpItem.getPlatformId(),sendRtpItem.getChannelId(), sendRtpItem.getCallId(),sendRtpItem.getStream()); if (mediaServerItem != null) { ssrcFactory.releaseSsrc(sendRtpItem.getMediaServerId(), sendRtpItem.getSsrc()); - Map<String, Object> param = new HashMap<>(); - param.put("vhost","__defaultVhost__"); - param.put("app",sendRtpItem.getApp()); - param.put("stream",sendRtpItem.getStream()); - param.put("ssrc",sendRtpItem.getSsrc()); - JSONObject jsonObject = zlmresTfulUtils.stopSendRtp(mediaServerItem, param); - if (jsonObject != null && jsonObject.getInteger("code") == 0) { + boolean stopResult = mediaServerService.stopSendRtp(mediaServerItem, sendRtpItem.getApp(), sendRtpItem.getStream(), sendRtpItem.getSsrc()); + if (stopResult) { ParentPlatform platform = platformService.queryPlatformByServerGBId(sendRtpItem.getPlatformId()); if (platform != null) { try { diff --git a/src/main/java/com/genersoft/iot/vmp/media/bean/Track.java b/src/main/java/com/genersoft/iot/vmp/media/bean/Track.java new file mode 100644 index 0000000..e95e795 --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/media/bean/Track.java @@ -0,0 +1,80 @@ +package com.genersoft.iot.vmp.media.bean; + +import io.swagger.v3.oas.annotations.media.Schema; + +/** + * 瑙嗛淇℃伅 + */ +@Schema(description = "瑙嗛淇℃伅") +public class Track { + @Schema(description = "瑙傜湅浜烘暟") + private Integer readerCount; + @Schema(description = "瑙嗛缂栫爜绫诲瀷") + private String videoCodec; + @Schema(description = "瑙嗛瀹藉害") + private Integer width; + @Schema(description = "瑙嗛楂樺害") + private Integer height; + @Schema(description = "闊抽缂栫爜绫诲瀷") + private String audioCodec; + @Schema(description = "闊抽閫氶亾鏁�") + private Integer audioChannels; + @Schema(description = "闊抽閲囨牱鐜�") + private Integer audioSampleRate; + + public Integer getReaderCount() { + return readerCount; + } + + public void setReaderCount(Integer readerCount) { + this.readerCount = readerCount; + } + + public String getVideoCodec() { + return videoCodec; + } + + public void setVideoCodec(String videoCodec) { + this.videoCodec = videoCodec; + } + + public Integer getWidth() { + return width; + } + + public void setWidth(Integer width) { + this.width = width; + } + + public Integer getHeight() { + return height; + } + + public void setHeight(Integer height) { + this.height = height; + } + + public String getAudioCodec() { + return audioCodec; + } + + public void setAudioCodec(String audioCodec) { + this.audioCodec = audioCodec; + } + + public Integer getAudioChannels() { + return audioChannels; + } + + public void setAudioChannels(Integer audioChannels) { + this.audioChannels = audioChannels; + } + + public Integer getAudioSampleRate() { + return audioSampleRate; + } + + public void setAudioSampleRate(Integer audioSampleRate) { + this.audioSampleRate = audioSampleRate; + } +} diff --git a/src/main/java/com/genersoft/iot/vmp/media/service/IMediaNodeServerService.java b/src/main/java/com/genersoft/iot/vmp/media/service/IMediaNodeServerService.java index 43f9fc5..971f48a 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/service/IMediaNodeServerService.java +++ b/src/main/java/com/genersoft/iot/vmp/media/service/IMediaNodeServerService.java @@ -1,7 +1,10 @@ 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 java.util.List; public interface IMediaNodeServerService { int createRTPServer(MediaServerItem mediaServerItem, String streamId, long ssrc, Integer port, Boolean onlyAuto, Boolean reUsePort, Integer tcpMode); @@ -19,4 +22,10 @@ void online(MediaServerItem mediaServerItem); MediaServerItem checkMediaServer(String ip, int port, String secret); + + boolean stopSendRtp(MediaServerItem mediaInfo, String app, String stream, String ssrc); + + boolean deleteRecordDirectory(MediaServerItem mediaServerItem, String app, String stream, String date, String fileName); + + List<StreamInfo> getMediaList(MediaServerItem mediaServerItem, String app, String stream); } diff --git a/src/main/java/com/genersoft/iot/vmp/media/service/IMediaServerService.java b/src/main/java/com/genersoft/iot/vmp/media/service/IMediaServerService.java index d6015e0..ceaafc4 100755 --- a/src/main/java/com/genersoft/iot/vmp/media/service/IMediaServerService.java +++ b/src/main/java/com/genersoft/iot/vmp/media/service/IMediaServerService.java @@ -1,6 +1,7 @@ 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.service.bean.MediaServerLoad; import com.genersoft.iot.vmp.service.bean.SSRCInfo; @@ -69,4 +70,10 @@ List<MediaServerItem> getAllWithAssistPort(); MediaServerItem getOneFromDatabase(String id); + + boolean stopSendRtp(MediaServerItem mediaInfo, String app, String stream, String ssrc); + + boolean deleteRecordDirectory(MediaServerItem mediaServerItem, String app, String stream, String date, String fileName); + + List<StreamInfo> getMediaList(MediaServerItem mediaInfo, String app, String stream); } diff --git a/src/main/java/com/genersoft/iot/vmp/media/service/impl/MediaServerServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/media/service/impl/MediaServerServiceImpl.java index a959de7..54e3330 100755 --- a/src/main/java/com/genersoft/iot/vmp/media/service/impl/MediaServerServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/media/service/impl/MediaServerServiceImpl.java @@ -1,7 +1,9 @@ package com.genersoft.iot.vmp.media.service.impl; +import com.alibaba.fastjson2.JSONObject; import com.baomidou.dynamic.datasource.annotation.DS; import com.genersoft.iot.vmp.common.CommonCallback; +import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.common.VideoManagerConstants; import com.genersoft.iot.vmp.conf.UserSetting; import com.genersoft.iot.vmp.conf.exception.ControllerException; @@ -533,4 +535,33 @@ } + @Override + public boolean stopSendRtp(MediaServerItem mediaInfo, String app, String stream, String ssrc) { + IMediaNodeServerService mediaNodeServerService = nodeServerServiceMap.get(mediaInfo.getType()); + if (mediaNodeServerService == null) { + logger.info("[stopSendRtp] 澶辫触, mediaServerItem鐨勭被鍨嬶細 {}锛屾湭鎵惧埌瀵瑰簲鐨勫疄鐜扮被", mediaInfo.getType()); + return false; + } + return mediaNodeServerService.stopSendRtp(mediaInfo, app, stream, ssrc); + } + + @Override + public boolean deleteRecordDirectory(MediaServerItem mediaServerItem, String app, String stream, String date, String fileName) { + IMediaNodeServerService mediaNodeServerService = nodeServerServiceMap.get(mediaServerItem.getType()); + if (mediaNodeServerService == null) { + logger.info("[stopSendRtp] 澶辫触, mediaServerItem鐨勭被鍨嬶細 {}锛屾湭鎵惧埌瀵瑰簲鐨勫疄鐜扮被", mediaServerItem.getType()); + return false; + } + return mediaNodeServerService.deleteRecordDirectory(mediaServerItem, app, stream, date, fileName); + } + + @Override + public List<StreamInfo> getMediaList(MediaServerItem mediaServerItem, String app, String stream) { + IMediaNodeServerService mediaNodeServerService = nodeServerServiceMap.get(mediaServerItem.getType()); + if (mediaNodeServerService == null) { + logger.info("[getMediaList] 澶辫触, mediaServerItem鐨勭被鍨嬶細 {}锛屾湭鎵惧埌瀵瑰簲鐨勫疄鐜扮被", mediaServerItem.getType()); + return new ArrayList<>(); + } + return mediaNodeServerService.getMediaList(mediaServerItem, app, stream); + } } diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java index 4b2557d..3ecfc6c 100755 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java @@ -18,6 +18,7 @@ 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.service.IMediaServerService; import com.genersoft.iot.vmp.media.zlm.dto.*; import com.genersoft.iot.vmp.media.zlm.dto.hook.*; @@ -33,6 +34,7 @@ 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; @@ -368,6 +370,39 @@ } List<OnStreamChangedHookParam.MediaTrack> tracks = param.getTracks(); + Track track = new Track(); + track.setReaderCount(param.getTotalReaderCount()); + for (OnStreamChangedHookParam.MediaTrack mediaTrack : tracks) { + switch (mediaTrack.getCodec_id()) { + case 0: + track.setVideoCodec("H264"); + break; + case 1: + track.setVideoCodec("H265"); + break; + case 2: + track.setAudioCodec("AAC"); + break; + case 3: + track.setAudioCodec("G711A"); + break; + case 4: + track.setAudioCodec("G711U"); + break; + } + if (mediaTrack.getSample_rate() > 0) { + track.setAudioSampleRate(mediaTrack.getSample_rate()); + } + if (mediaTrack.getChannels() > 0) { + track.setAudioChannels(mediaTrack.getChannels()); + } + if (mediaTrack.getHeight() > 0) { + track.setHeight(mediaTrack.getHeight()); + } + if (mediaTrack.getWidth() > 0) { + track.setWidth(mediaTrack.getWidth()); + } + } // TODO 閲嶆瀯姝ゅ閫昏緫 if (param.isRegist()) { // 澶勭悊娴佹敞鍐岀殑閴存潈淇℃伅锛� 娴佹敞閿�杩欓噷涓嶅啀鍒犻櫎閴存潈淇℃伅锛屼笅娆℃潵浜嗘柊鐨勯壌鏉冧俊鎭細瀵瑰氨鐨勮繘琛岃鐩� @@ -471,7 +506,7 @@ callId = streamAuthorityInfo.getCallId(); } StreamInfo streamInfoByAppAndStream = mediaService.getStreamInfoByAppAndStream(mediaInfo, - param.getApp(), param.getStream(), tracks, callId); + param.getApp(), param.getStream(), track, callId); param.setStreamInfo(new StreamContent(streamInfoByAppAndStream)); redisCatchStorage.addStream(mediaInfo, type, param.getApp(), param.getStream(), param); if (param.getOriginType() == OriginType.RTSP_PUSH.ordinal() diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java index 0c15be1..0a0b607 100755 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java @@ -7,7 +7,6 @@ import com.genersoft.iot.vmp.media.service.IMediaServerService; import com.genersoft.iot.vmp.service.IStreamProxyService; import com.genersoft.iot.vmp.service.IStreamPushService; -import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IVideoManagerStorage; import com.genersoft.iot.vmp.storager.dao.GbStreamMapper; import com.genersoft.iot.vmp.storager.dao.PlatformGbStreamMapper; @@ -29,12 +28,6 @@ public class ZLMMediaListManager { private Logger logger = LoggerFactory.getLogger("ZLMMediaListManager"); - - @Autowired - private ZLMRESTfulUtils zlmresTfulUtils; - - @Autowired - private IRedisCatchStorage redisCatchStorage; @Autowired private IVideoManagerStorage storager; diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaNodeServerService.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaNodeServerService.java index de330c3..55161a9 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaNodeServerService.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaNodeServerService.java @@ -4,17 +4,30 @@ import com.alibaba.fastjson2.JSONArray; 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.service.IMediaNodeServerService; import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; 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; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; 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; @Service("zlm") public class ZLMMediaNodeServerService implements IMediaNodeServerService { + + private final static Logger logger = LoggerFactory.getLogger(ZLMMediaNodeServerService.class); @Autowired private ZLMRESTfulUtils zlmresTfulUtils; @@ -106,4 +119,77 @@ mediaServerItem.setType("zlm"); return mediaServerItem; } + + @Override + public boolean stopSendRtp(MediaServerItem mediaInfo, String app, String stream, String ssrc) { + Map<String, Object> param = new HashMap<>(); + param.put("vhost", "__defaultVhost__"); + param.put("app", app); + param.put("stream", stream); + if (!ObjectUtils.isEmpty(ssrc)) { + param.put("ssrc", ssrc); + } + JSONObject jsonObject = zlmresTfulUtils.stopSendRtp(mediaInfo, param); + return (jsonObject != null && jsonObject.getInteger("code") == 0); + + } + + @Override + public boolean deleteRecordDirectory(MediaServerItem 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); + if (jsonObject.getInteger("code") == 0) { + return true; + }else { + logger.info("[zlm-deleteRecordDirectory] 鍒犻櫎纾佺洏鏂囦欢閿欒, server: {} {}:{}->{}/{}, 缁撴灉锛� {}", mediaServerItem.getId(), app, stream, date, fileName, jsonObject); + return false; + } + } + + @Override + public List<StreamInfo> getMediaList(MediaServerItem mediaServerItem, String app, String stream) { + List<StreamInfo> streamInfoList = new ArrayList<>(); + JSONObject mediaList = zlmresTfulUtils.getMediaList(mediaServerItem, app, stream); + if (mediaList != null) { + if (mediaList.getInteger("code") == 0) { + JSONArray data = mediaList.getJSONArray("data"); + if (data == null) { + return null; + } + JSONObject mediaJSON = data.getJSONObject(0); + JSONArray tracks = mediaJSON.getJSONArray("tracks"); + + if (authority) { + streamInfo = getStreamInfoByAppAndStream(mediaServerItem, app, stream, tracks, null, calld, true); + }else { + streamInfo = getStreamInfoByAppAndStream(mediaServerItem, app, stream, tracks, null,null, true); + } + } + } + return streamInfoList; + } + + public StreamInfo getStreamInfoByAppAndStream(MediaServerItem mediaInfo, String app, String stream, Track track, String addr, String callId, boolean isPlay) { + StreamInfo streamInfoResult = new StreamInfo(); + streamInfoResult.setStream(stream); + streamInfoResult.setApp(app); + if (addr == null) { + addr = mediaInfo.getStreamIp(); + } + + streamInfoResult.setIp(addr); + streamInfoResult.setMediaServerId(mediaInfo.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.setTrack(track); + return streamInfoResult; + } } diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMServerFactory.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMServerFactory.java index 2422206..15a1d7d 100755 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMServerFactory.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMServerFactory.java @@ -17,7 +17,7 @@ @Component public class ZLMServerFactory { - private Logger logger = LoggerFactory.getLogger("ZLMRTPServerFactory"); + private Logger logger = LoggerFactory.getLogger("ZLMServerFactory"); @Autowired private ZLMRESTfulUtils zlmresTfulUtils; diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/hook/OnStreamChangedHookParam.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/hook/OnStreamChangedHookParam.java index ffca0d5..efd1454 100755 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/hook/OnStreamChangedHookParam.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/hook/OnStreamChangedHookParam.java @@ -32,7 +32,7 @@ /** * 瑙傜湅鎬讳汉鏁帮紝鍖呮嫭hls/rtsp/rtmp/http-flv/ws-flv */ - private String totalReaderCount; + private int totalReaderCount; /** * 鍗忚 鍖呮嫭hls/rtsp/rtmp/http-flv/ws-flv @@ -374,11 +374,11 @@ this.stream = stream; } - public String getTotalReaderCount() { + public int getTotalReaderCount() { return totalReaderCount; } - public void setTotalReaderCount(String totalReaderCount) { + public void setTotalReaderCount(int totalReaderCount) { this.totalReaderCount = totalReaderCount; } diff --git a/src/main/java/com/genersoft/iot/vmp/service/IMediaService.java b/src/main/java/com/genersoft/iot/vmp/service/IMediaService.java index 82de3bb..b1261c7 100755 --- a/src/main/java/com/genersoft/iot/vmp/service/IMediaService.java +++ b/src/main/java/com/genersoft/iot/vmp/service/IMediaService.java @@ -2,6 +2,7 @@ import com.alibaba.fastjson2.JSONArray; import com.genersoft.iot.vmp.common.StreamInfo; +import com.genersoft.iot.vmp.media.bean.Track; import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; /** @@ -32,7 +33,7 @@ * @param stream * @return */ - StreamInfo getStreamInfoByAppAndStream(MediaServerItem mediaServerItem, String app, String stream, Object tracks, String callId); + StreamInfo getStreamInfoByAppAndStream(MediaServerItem mediaServerItem, String app, String stream, Track track, String callId); /** * 鏍规嵁搴旂敤鍚嶅拰娴両D鑾峰彇鎾斁鍦板潃, 鍙槸鍦板潃鎷兼帴锛岃繑鍥炵殑ip浣跨敤杩滅▼璁块棶ip锛岄�傜敤涓巣lm涓巜vp鍦ㄤ竴鍙颁富鏈虹殑鎯呭喌 @@ -40,5 +41,5 @@ * @param stream * @return */ - StreamInfo getStreamInfoByAppAndStream(MediaServerItem mediaInfo, String app, String stream, Object tracks, String addr, String callId, boolean isPlay); + StreamInfo getStreamInfoByAppAndStream(MediaServerItem mediaInfo, String app, String stream, Track track, String addr, String callId, boolean isPlay); } diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java index 616c762..65bd9f5 100755 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java @@ -14,7 +14,6 @@ import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander; import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.cmd.CatalogResponseMessageHandler; -import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils; import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; import com.genersoft.iot.vmp.service.IDeviceChannelService; import com.genersoft.iot.vmp.service.IDeviceService; @@ -54,6 +53,7 @@ @Autowired private SIPCommander cmder; + @Autowired private DynamicTask dynamicTask; @@ -101,9 +101,6 @@ @Autowired private AudioBroadcastManager audioBroadcastManager; - - @Autowired - private ZLMRESTfulUtils zlmresTfulUtils; @Override public void online(Device device, SipTransactionInfo sipTransactionInfo) { @@ -245,11 +242,7 @@ if (sendRtpItem != null) { redisCatchStorage.deleteSendRTPServer(deviceId, sendRtpItem.getChannelId(), null, null); MediaServerItem mediaInfo = mediaServerService.getOne(sendRtpItem.getMediaServerId()); - Map<String, Object> param = new HashMap<>(); - param.put("vhost", "__defaultVhost__"); - param.put("app", sendRtpItem.getApp()); - param.put("stream", sendRtpItem.getStream()); - zlmresTfulUtils.stopSendRtp(mediaInfo, param); + mediaServerService.stopSendRtp(mediaInfo, sendRtpItem.getApp(), sendRtpItem.getStream()); } audioBroadcastManager.del(deviceId, audioBroadcastCatch.getChannelId()); diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java index 65fbfe0..67c46b3 100755 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson2.JSONObject; import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.conf.MediaConfig; +import com.genersoft.iot.vmp.media.bean.Track; import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils; import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; import com.genersoft.iot.vmp.media.zlm.dto.StreamAuthorityInfo; @@ -13,6 +14,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; + +import java.util.List; @Service public class MediaServiceImpl implements IMediaService { @@ -31,8 +34,8 @@ @Override - public StreamInfo getStreamInfoByAppAndStream(MediaServerItem mediaInfo, String app, String stream, Object tracks, String callId) { - return getStreamInfoByAppAndStream(mediaInfo, app, stream, tracks, null, callId, true); + public StreamInfo getStreamInfoByAppAndStream(MediaServerItem mediaInfo, String app, String stream, Track track, String callId) { + return getStreamInfoByAppAndStream(mediaInfo, app, stream, track, null, callId, true); } @Override @@ -50,23 +53,12 @@ if (streamAuthorityInfo != null) { calld = streamAuthorityInfo.getCallId(); } - JSONObject mediaList = zlmresTfulUtils.getMediaList(mediaInfo, app, stream); - if (mediaList != null) { - if (mediaList.getInteger("code") == 0) { - JSONArray data = mediaList.getJSONArray("data"); - if (data == null) { - return null; - } - JSONObject mediaJSON = data.getJSONObject(0); - JSONArray tracks = mediaJSON.getJSONArray("tracks"); - if (authority) { - streamInfo = getStreamInfoByAppAndStream(mediaInfo, app, stream, tracks, addr, calld, true); - }else { - streamInfo = getStreamInfoByAppAndStream(mediaInfo, app, stream, tracks, addr,null, true); - } - } + List<StreamInfo> streamInfoList = mediaServerService.getMediaList(mediaInfo, app, stream); + if (streamInfoList.isEmpty()) { + return null; + }else { + return streamInfoList.get(0); } - return streamInfo; } @@ -77,7 +69,7 @@ } @Override - public StreamInfo getStreamInfoByAppAndStream(MediaServerItem mediaInfo, String app, String stream, Object tracks, String addr, String callId, boolean isPlay) { + public StreamInfo getStreamInfoByAppAndStream(MediaServerItem mediaInfo, String app, String stream, Track track, String addr, String callId, boolean isPlay) { StreamInfo streamInfoResult = new StreamInfo(); streamInfoResult.setStream(stream); streamInfoResult.setApp(app); @@ -96,7 +88,7 @@ streamInfoResult.setTs(addr, mediaInfo.getHttpPort(),mediaInfo.getHttpSSlPort(), app, stream, callIdParam); streamInfoResult.setRtc(addr, mediaInfo.getHttpPort(),mediaInfo.getHttpSSlPort(), app, stream, callIdParam, isPlay); - streamInfoResult.setTracks(tracks); + streamInfoResult.setTrack(track); return streamInfoResult; } } diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java index 48910ef..eae1dde 100755 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java @@ -18,6 +18,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander; import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform; import com.genersoft.iot.vmp.gb28181.utils.SipUtils; +import com.genersoft.iot.vmp.media.bean.Track; import com.genersoft.iot.vmp.media.service.IMediaServerService; import com.genersoft.iot.vmp.media.zlm.SendRtpPortManager; import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils; @@ -1048,7 +1049,41 @@ public StreamInfo onPublishHandler(MediaServerItem mediaServerItem, OnStreamChangedHookParam hookParam, String deviceId, String channelId) { - StreamInfo streamInfo = mediaService.getStreamInfoByAppAndStream(mediaServerItem, "rtp", hookParam.getStream(), hookParam.getTracks(), null); + List<OnStreamChangedHookParam.MediaTrack> tracks = hookParam.getTracks(); + Track track = new Track(); + track.setReaderCount(hookParam.getTotalReaderCount()); + for (OnStreamChangedHookParam.MediaTrack mediaTrack : tracks) { + switch (mediaTrack.getCodec_id()) { + case 0: + track.setVideoCodec("H264"); + break; + case 1: + track.setVideoCodec("H265"); + break; + case 2: + track.setAudioCodec("AAC"); + break; + case 3: + track.setAudioCodec("G711A"); + break; + case 4: + track.setAudioCodec("G711U"); + break; + } + if (mediaTrack.getSample_rate() > 0) { + track.setAudioSampleRate(mediaTrack.getSample_rate()); + } + if (mediaTrack.getChannels() > 0) { + track.setAudioChannels(mediaTrack.getChannels()); + } + if (mediaTrack.getHeight() > 0) { + track.setHeight(mediaTrack.getHeight()); + } + if (mediaTrack.getWidth() > 0) { + track.setWidth(mediaTrack.getWidth()); + } + } + StreamInfo streamInfo = mediaService.getStreamInfoByAppAndStream(mediaServerItem, "rtp", hookParam.getStream(), track, null); streamInfo.setDeviceID(deviceId); streamInfo.setChannelId(channelId); return streamInfo; diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/StreamContent.java b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/StreamContent.java index 4974209..2252a25 100755 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/StreamContent.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/StreamContent.java @@ -1,6 +1,7 @@ package com.genersoft.iot.vmp.vmanager.bean; import com.genersoft.iot.vmp.common.StreamInfo; +import com.genersoft.iot.vmp.media.bean.Track; import com.genersoft.iot.vmp.service.bean.DownloadFileInfo; import io.swagger.v3.oas.annotations.media.Schema; @@ -86,7 +87,7 @@ private String mediaServerId; @Schema(description = "娴佺紪鐮佷俊鎭�") - private Object tracks; + private Track track; @Schema(description = "寮�濮嬫椂闂�") private String startTime; @@ -170,7 +171,7 @@ } this.mediaServerId = streamInfo.getMediaServerId(); - this.tracks = streamInfo.getTracks(); + this.track = streamInfo.getTracks(); this.startTime = streamInfo.getStartTime(); this.endTime = streamInfo.getEndTime(); this.progress = streamInfo.getProgress(); -- Gitblit v1.8.0