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