From 4134c73745ff63d44186ed608735ea432b244755 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期四, 21 三月 2024 22:38:56 +0800
Subject: [PATCH] 优化Track的构建
---
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java | 36 -----------
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaNodeServerService.java | 12 +--
src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaNodeServerService.java | 18 ++++++
src/main/java/com/genersoft/iot/vmp/media/bean/Track.java | 96 ++++++++++++++++++++++++++++++++
src/main/resources/application.yml | 2
5 files changed, 120 insertions(+), 44 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaNodeServerService.java b/src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaNodeServerService.java
index 445e1e6..bd2a7be 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaNodeServerService.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaNodeServerService.java
@@ -1,9 +1,12 @@
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.service.IMediaNodeServerService;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
import org.springframework.stereotype.Service;
+
+import java.util.List;
@Service("abl")
public class ABLMediaNodeServerService implements IMediaNodeServerService {
@@ -47,4 +50,19 @@
public MediaServerItem checkMediaServer(String ip, int port, String secret) {
return null;
}
+
+ @Override
+ public boolean stopSendRtp(MediaServerItem mediaInfo, String app, String stream, String ssrc) {
+ return false;
+ }
+
+ @Override
+ public boolean deleteRecordDirectory(MediaServerItem mediaServerItem, String app, String stream, String date, String fileName) {
+ return false;
+ }
+
+ @Override
+ public List<StreamInfo> getMediaList(MediaServerItem mediaServerItem, String app, String stream, String callId) {
+ return null;
+ }
}
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
index e95e795..963474e 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/bean/Track.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/bean/Track.java
@@ -1,6 +1,11 @@
package com.genersoft.iot.vmp.media.bean;
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
+import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamChangedHookParam;
import io.swagger.v3.oas.annotations.media.Schema;
+
+import java.util.List;
/**
* 瑙嗛淇℃伅
@@ -22,6 +27,97 @@
@Schema(description = "闊抽閲囨牱鐜�")
private Integer audioSampleRate;
+ public static Track getInstance(JSONObject jsonObject) {
+ Track track = new Track();
+ Integer totalReaderCount = jsonObject.getInteger("totalReaderCount");
+ if (totalReaderCount != null) {
+ track.setReaderCount(totalReaderCount);
+ }
+ JSONArray jsonArray = jsonObject.getJSONArray("tracks");
+ if (jsonArray.isEmpty()) {
+ return null;
+ }
+ for (int i = 0; i < jsonArray.size(); i++) {
+ JSONObject trackJson = jsonArray.getJSONObject(i);
+ Integer channels = trackJson.getInteger("channels");
+ Integer codecId = trackJson.getInteger("codec_id");
+ Integer codecType = trackJson.getInteger("codec_type");
+ Integer sampleRate = trackJson.getInteger("sample_rate");
+ Integer height = trackJson.getInteger("height");
+ Integer width = trackJson.getInteger("height");
+ if (channels != null) {
+ track.setAudioChannels(channels);
+ }
+ if (sampleRate != null) {
+ track.setAudioSampleRate(sampleRate);
+ }
+ if (height != null) {
+ track.setHeight(height);
+ }
+ if (width != null) {
+ track.setWidth(width);
+ }
+ if (codecId != null) {
+ switch (codecId) {
+ 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;
+ }
+ }
+ }
+ return track;
+ }
+
+ public static Track getInstance(OnStreamChangedHookParam param) {
+ 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());
+ }
+ }
+ return track;
+ }
+
public Integer getReaderCount() {
return readerCount;
}
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 ac68bfe..f5d664a 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
@@ -369,40 +369,6 @@
subscribe.response(mediaInfo, param);
}
- 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()) {
// 澶勭悊娴佹敞鍐岀殑閴存潈淇℃伅锛� 娴佹敞閿�杩欓噷涓嶅啀鍒犻櫎閴存潈淇℃伅锛屼笅娆℃潵浜嗘柊鐨勯壌鏉冧俊鎭細瀵瑰氨鐨勮繘琛岃鐩�
@@ -506,7 +472,7 @@
callId = streamAuthorityInfo.getCallId();
}
StreamInfo streamInfoByAppAndStream = mediaService.getStreamInfoByAppAndStream(mediaInfo,
- param.getApp(), param.getStream(), track, callId);
+ param.getApp(), param.getStream(), Track.getInstance(param), 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/ZLMMediaNodeServerService.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaNodeServerService.java
index 6d55ac0..686981e 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
@@ -158,9 +158,8 @@
return null;
}
JSONObject mediaJSON = data.getJSONObject(0);
- JSONArray tracks = mediaJSON.getJSONArray("tracks");
-
- StreamInfo streamInfo = getStreamInfoByAppAndStream(mediaServerItem, app, stream, tracks, null, callId, true);
+ Track track = Track.getInstance(mediaJSON);
+ StreamInfo streamInfo = getStreamInfoByAppAndStream(mediaServerItem, app, stream, track, callId, true);
if (streamInfo != null) {
streamInfoList.add(streamInfo);
}
@@ -169,14 +168,11 @@
return streamInfoList;
}
- public StreamInfo getStreamInfoByAppAndStream(MediaServerItem mediaInfo, String app, String stream, Track track, String addr, String callId, boolean isPlay) {
+ public StreamInfo getStreamInfoByAppAndStream(MediaServerItem mediaInfo, String app, String stream, Track track, String callId, boolean isPlay) {
StreamInfo streamInfoResult = new StreamInfo();
streamInfoResult.setStream(stream);
streamInfoResult.setApp(app);
- if (addr == null) {
- addr = mediaInfo.getStreamIp();
- }
-
+ String addr = mediaInfo.getStreamIp();
streamInfoResult.setIp(addr);
streamInfoResult.setMediaServerId(mediaInfo.getId());
String callIdParam = ObjectUtils.isEmpty(callId)?"":"?callId=" + callId;
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 3f47844..3d36b84 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -2,4 +2,4 @@
application:
name: wvp
profiles:
- active: local
\ No newline at end of file
+ active: abl
\ No newline at end of file
--
Gitblit v1.8.0