648540858
2024-03-21 4134c73745ff63d44186ed608735ea432b244755
优化Track的构建
5个文件已修改
164 ■■■■ 已修改文件
src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaNodeServerService.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/media/bean/Track.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaNodeServerService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
    }
}
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;
    }
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()
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;
src/main/resources/application.yml
@@ -2,4 +2,4 @@
  application:
    name: wvp
  profiles:
    active: local
    active: abl