648540858
2024-05-29 764d04b497356ba6bcbb75fd42b51eca750f7223
src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java
@@ -1,8 +1,11 @@
package com.genersoft.iot.vmp.common;
import com.genersoft.iot.vmp.media.bean.MediaInfo;
import com.genersoft.iot.vmp.service.bean.DownloadFileInfo;
import io.swagger.v3.oas.annotations.media.Schema;
import java.io.Serializable;
import java.util.Objects;
@Schema(description = "流信息")
public class StreamInfo implements Serializable, Cloneable{
@@ -68,16 +71,21 @@
    @Schema(description = "流媒体ID")
    private String mediaServerId;
    @Schema(description = "流编码信息")
    private Object tracks;
    private MediaInfo mediaInfo;
    @Schema(description = "开始时间")
    private String startTime;
    @Schema(description = "结束时间")
    private String endTime;
    @Schema(description = "进度(录像下载使用)")
    private double progress;
    @Schema(description = "文件下载地址(录像下载使用)")
    private DownloadFileInfo downLoadFilePath;
    @Schema(description = "是否暂停(录像回放使用)")
    private boolean pause;
    @Schema(description = "产生源类型,包括 unknown = 0,rtmp_push=1,rtsp_push=2,rtp_push=3,pull=4,ffmpeg_pull=5,mp4_vod=6,device_chn=7")
    private int originType;
    public void setFlv(StreamURL flv) {
        this.flv = flv;
@@ -168,36 +176,52 @@
    }
    public void setRtmp(String host, int port, int sslPort, String app, String stream, String callIdParam) {
        String file = String.format("%s/%s/%s", app, stream, callIdParam);
        this.rtmp = new StreamURL("rtmp", host, port, file);
        if (sslPort != 0) {
        String file = String.format("%s/%s%s", app, stream, callIdParam);
        if (port > 0) {
            this.rtmp = new StreamURL("rtmp", host, port, file);
        }
        if (sslPort > 0) {
            this.rtmps = new StreamURL("rtmps", host, sslPort, file);
        }
    }
    public void setRtsp(String host, int port, int sslPort, String app, String stream, String callIdParam) {
        String file = String.format("%s/%s/%s", app, stream, callIdParam);
        this.rtsp = new StreamURL("rtsp", host, port, file);
        if (sslPort != 0) {
        String file = String.format("%s/%s%s", app, stream, callIdParam);
        if (port > 0) {
            this.rtsp = new StreamURL("rtsp", host, port, file);
        }
        if (sslPort > 0) {
            this.rtsps = new StreamURL("rtsps", host, sslPort, file);
        }
    }
    public void setFlv(String host, int port, int sslPort, String app, String stream, String callIdParam) {
        String file = String.format("%s/%s.live.flv%s", app, stream, callIdParam);
        this.flv = new StreamURL("http", host, port, file);
    public void setFlv(String host, int port, int sslPort, String file) {
        if (port > 0) {
            this.flv = new StreamURL("http", host, port, file);
        }
        this.ws_flv = new StreamURL("ws", host, port, file);
        if (sslPort != 0) {
        if (sslPort > 0) {
            this.https_flv = new StreamURL("https", host, sslPort, file);
            this.wss_flv = new StreamURL("wss", host, sslPort, file);
        }
    }
    public void setWsFlv(String host, int port, int sslPort, String file) {
        if (port > 0) {
            this.ws_flv = new StreamURL("ws", host, port, file);
        }
        if (sslPort > 0) {
            this.wss_flv = new StreamURL("wss", host, sslPort, file);
        }
    }
    public void setFmp4(String host, int port, int sslPort, String app, String stream, String callIdParam) {
        String file = String.format("%s/%s.live.mp4%s", app, stream, callIdParam);
        this.fmp4 = new StreamURL("http", host, port, file);
        this.ws_fmp4 = new StreamURL("ws", host, port, file);
        if (sslPort != 0) {
        if (port > 0) {
            this.fmp4 = new StreamURL("http", host, port, file);
            this.ws_fmp4 = new StreamURL("ws", host, port, file);
        }
        if (sslPort > 0) {
            this.https_fmp4 = new StreamURL("https", host, sslPort, file);
            this.wss_fmp4 = new StreamURL("wss", host, sslPort, file);
        }
@@ -205,9 +229,11 @@
    public void setHls(String host, int port, int sslPort, String app, String stream, String callIdParam) {
        String file = String.format("%s/%s/hls.m3u8%s", app, stream, callIdParam);
        this.hls = new StreamURL("http", host, port, file);
        this.ws_hls = new StreamURL("ws", host, port, file);
        if (sslPort != 0) {
        if (port > 0) {
            this.hls = new StreamURL("http", host, port, file);
            this.ws_hls = new StreamURL("ws", host, port, file);
        }
        if (sslPort > 0) {
            this.https_hls = new StreamURL("https", host, sslPort, file);
            this.wss_hls = new StreamURL("wss", host, sslPort, file);
        }
@@ -215,51 +241,94 @@
    public void setTs(String host, int port, int sslPort, String app, String stream, String callIdParam) {
        String file = String.format("%s/%s.live.ts%s", app, stream, callIdParam);
        this.ts = new StreamURL("http", host, port, file);
        this.ws_ts = new StreamURL("ws", host, port, file);
        if (sslPort != 0) {
        if (port > 0) {
            this.ts = new StreamURL("http", host, port, file);
            this.ws_ts = new StreamURL("ws", host, port, file);
        }
        if (sslPort > 0) {
            this.https_ts = new StreamURL("https", host, sslPort, file);
            this.wss_ts = new StreamURL("wss", host, sslPort, file);
        }
    }
    public void setRtc(String host, int port, int sslPort, String app, String stream, String callIdParam) {
        String file = String.format("index/api/webrtc?app=%s&stream=%s&type=play%s", app, stream, callIdParam);
        this.rtc = new StreamURL("http", host, port, file);
        if (sslPort != 0) {
    public void setRtc(String host, int port, int sslPort, String app, String stream, String callIdParam, boolean isPlay) {
        if (callIdParam != null) {
            callIdParam = Objects.equals(callIdParam, "") ? callIdParam : callIdParam.replace("?", "&");
        }
        String file = String.format("index/api/webrtc?app=%s&stream=%s&type=%s%s", app, stream, isPlay?"play":"push", callIdParam);
        if (port > 0) {
            this.rtc = new StreamURL("http", host, port, file);
        }
        if (sslPort > 0) {
            this.rtcs = new StreamURL("https", host, sslPort, file);
        }
    }
    public void channgeStreamIp(String localAddr) {
        this.flv.setHost(localAddr);
        this.ws_flv.setHost(localAddr);
        this.hls.setHost(localAddr);
        this.ws_hls.setHost(localAddr);
        this.ts.setHost(localAddr);
        this.ws_ts.setHost(localAddr);
        this.fmp4.setHost(localAddr);
        this.ws_fmp4.setHost(localAddr);
        this.rtc.setHost(localAddr);
        if (this.flv != null) {
            this.flv.setHost(localAddr);
        }
        if (this.ws_flv != null ){
            this.ws_flv.setHost(localAddr);
        }
        if (this.hls != null ) {
            this.hls.setHost(localAddr);
        }
        if (this.ws_hls != null ) {
            this.ws_hls.setHost(localAddr);
        }
        if (this.ts != null ) {
            this.ts.setHost(localAddr);
        }
        if (this.ws_ts != null ) {
            this.ws_ts.setHost(localAddr);
        }
        if (this.fmp4 != null ) {
            this.fmp4.setHost(localAddr);
        }
        if (this.ws_fmp4 != null ) {
            this.ws_fmp4.setHost(localAddr);
        }
        if (this.rtc != null ) {
            this.rtc.setHost(localAddr);
        }
        if (this.https_flv != null) {
            this.https_flv.setHost(localAddr);
        }
        if (this.wss_flv != null) {
            this.wss_flv.setHost(localAddr);
        }
        if (this.https_hls != null) {
            this.https_hls.setHost(localAddr);
        }
        if (this.wss_hls != null) {
            this.wss_hls.setHost(localAddr);
        }
        if (this.wss_ts != null) {
            this.wss_ts.setHost(localAddr);
        }
        if (this.https_fmp4 != null) {
            this.https_fmp4.setHost(localAddr);
        }
        if (this.wss_fmp4 != null) {
            this.wss_fmp4.setHost(localAddr);
        }
        if (this.rtcs != null) {
            this.rtcs.setHost(localAddr);
        }
        this.rtsp.setHost(localAddr);
        if (this.rtsp != null) {
            this.rtsp.setHost(localAddr);
        }
        if (this.rtsps != null) {
            this.rtsps.setHost(localAddr);
        }
        this.rtmp.setHost(localAddr);
        if (this.rtmp != null) {
            this.rtmp.setHost(localAddr);
        }
        if (this.rtmps != null) {
            this.rtmps.setHost(localAddr);
        }
    }
@@ -416,12 +485,12 @@
        this.mediaServerId = mediaServerId;
    }
    public Object getTracks() {
        return tracks;
    public MediaInfo getMediaInfo() {
        return mediaInfo;
    }
    public void setTracks(Object tracks) {
        this.tracks = tracks;
    public void setMediaInfo(MediaInfo mediaInfo) {
        this.mediaInfo = mediaInfo;
    }
    public String getStartTime() {
@@ -469,9 +538,101 @@
        StreamInfo instance = null;
        try{
            instance = (StreamInfo)super.clone();
            if (this.flv != null) {
                instance.flv=this.flv.clone();
            }
            if (this.ws_flv != null ){
                instance.ws_flv= this.ws_flv.clone();
            }
            if (this.hls != null ) {
                instance.hls= this.hls.clone();
            }
            if (this.ws_hls != null ) {
                instance.ws_hls= this.ws_hls.clone();
            }
            if (this.ts != null ) {
                instance.ts= this.ts.clone();
            }
            if (this.ws_ts != null ) {
                instance.ws_ts= this.ws_ts.clone();
            }
            if (this.fmp4 != null ) {
                instance.fmp4= this.fmp4.clone();
            }
            if (this.ws_fmp4 != null ) {
                instance.ws_fmp4= this.ws_fmp4.clone();
            }
            if (this.rtc != null ) {
                instance.rtc= this.rtc.clone();
            }
            if (this.https_flv != null) {
                instance.https_flv= this.https_flv.clone();
            }
            if (this.wss_flv != null) {
                instance.wss_flv= this.wss_flv.clone();
            }
            if (this.https_hls != null) {
                instance.https_hls= this.https_hls.clone();
            }
            if (this.wss_hls != null) {
                instance.wss_hls= this.wss_hls.clone();
            }
            if (this.wss_ts != null) {
                instance.wss_ts= this.wss_ts.clone();
            }
            if (this.https_fmp4 != null) {
                instance.https_fmp4= this.https_fmp4.clone();
            }
            if (this.wss_fmp4 != null) {
                instance.wss_fmp4= this.wss_fmp4.clone();
            }
            if (this.rtcs != null) {
                instance.rtcs= this.rtcs.clone();
            }
            if (this.rtsp != null) {
                instance.rtsp= this.rtsp.clone();
            }
            if (this.rtsps != null) {
                instance.rtsps= this.rtsps.clone();
            }
            if (this.rtmp != null) {
                instance.rtmp= this.rtmp.clone();
            }
            if (this.rtmps != null) {
                instance.rtmps= this.rtmps.clone();
            }
        }catch(CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return instance;
    }
    /*=========================设备主子码流逻辑START====================*/
    @Schema(description = "是否为子码流(true-是,false-主码流)")
    private boolean subStream;
    public boolean isSubStream() {
        return subStream;
    }
    public void setSubStream(boolean subStream) {
        this.subStream = subStream;
    }
    public DownloadFileInfo getDownLoadFilePath() {
        return downLoadFilePath;
    }
    public void setDownLoadFilePath(DownloadFileInfo downLoadFilePath) {
        this.downLoadFilePath = downLoadFilePath;
    }
    public int getOriginType() {
        return originType;
    }
    public void setOriginType(int originType) {
        this.originType = originType;
    }
}