package com.ard.zlm.api.domain; import lombok.Data; import java.io.Serializable; import java.util.Objects; /** * 流信息 */ @Data public class StreamInfo implements Serializable, Cloneable { /**应用名**/ private String app; /**流ID**/ private String stream; /**设备编号**/ private String deviceId; /**通道ID**/ private Integer channelId; /**IP**/ private String ip; /**HTTP-FLV流地址**/ private StreamURL flv; /**HTTPS-FLV流地址**/ private StreamURL https_flv; /**Websocket-FLV流地址**/ private StreamURL ws_flv; /**Websockets-FLV流地址**/ private StreamURL wss_flv; /**HTTP-FMP4流地址**/ private StreamURL fmp4; /**HTTPS-FMP4流地址**/ private StreamURL https_fmp4; /**Websocket-FMP4流地址**/ private StreamURL ws_fmp4; /**Websockets-FMP4流地址**/ private StreamURL wss_fmp4; /**HLS流地址**/ private StreamURL hls; /**HTTPS-HLS流地址**/ private StreamURL https_hls; /**Websocket-HLS流地址**/ private StreamURL ws_hls; /**Websockets-HLS流地址**/ private StreamURL wss_hls; /**HTTP-TS流地址**/ private StreamURL ts; /**HTTPS-TS流地址**/ private StreamURL https_ts; /**Websocket-TS流地址**/ private StreamURL ws_ts; /**Websockets-TS流地址**/ private StreamURL wss_ts; /**RTMP流地址**/ private StreamURL rtmp; /**RTMPS流地址**/ private StreamURL rtmps; /**RTSP流地址**/ private StreamURL rtsp; /**RTSPS流地址**/ private StreamURL rtsps; /**RTC流地址**/ private StreamURL rtc; /**RTCS流地址**/ private StreamURL rtcs; /**流媒体节点**/ private ZlmMediaServer mediaServer; /**流编码信息**/ private MediaInfo mediaInfo; /**开始时间**/ private String startTime; /**结束时间**/ private String endTime; /**时长(回放时使用)**/ private Double duration; /**进度(录像下载使用)**/ private double progress; /**文件下载地址(录像下载使用)**/ private DownloadFileInfo downLoadFilePath; /**点播请求的callId**/ private String callId; /**是否暂停(录像回放使用)**/ private boolean pause; /**产生源类型,包括 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; /**originType的文本描述**/ private String originTypeStr; /**转码后的视频流**/ private StreamInfo transcodeStream; /**使用的WVP ID**/ private String serverId; /**流绑定的流媒体操作key**/ private String key; public void setRtmp(String host, Integer port, Integer sslPort, String app, String stream, String callIdParam) { String file = String.format("%s/%s%s", app, stream, callIdParam); if (port != null && port > 0) { this.rtmp = new StreamURL("rtmp", host, port, file); } if (sslPort != null && sslPort > 0) { this.rtmps = new StreamURL("rtmps", host, sslPort, file); } } public void setRtsp(String host, Integer port, Integer sslPort, String app, String stream, String callIdParam) { String file = String.format("%s/%s%s", app, stream, callIdParam); if (port != null && port > 0) { this.rtsp = new StreamURL("rtsp", host, port, file); } if (sslPort != null && sslPort > 0) { this.rtsps = new StreamURL("rtsps", host, sslPort, file); } } public void setFlv(String host, Integer port, Integer sslPort, String file) { if (port != null && port > 0) { this.flv = new StreamURL("http", host, port, file); } if (sslPort != null && sslPort > 0) { this.https_flv = new StreamURL("https", host, sslPort, file); } } public void setWsFlv(String host, Integer port, Integer sslPort, String file) { if (port != null && port > 0) { this.ws_flv = new StreamURL("ws", host, port, file); } if (sslPort != null && sslPort > 0) { this.wss_flv = new StreamURL("wss", host, sslPort, file); } } public void setFmp4(String host, Integer port, Integer sslPort, String file) { if (port != null && port > 0) { this.fmp4 = new StreamURL("http", host, port, file); } if (sslPort != null && sslPort > 0) { this.https_fmp4 = new StreamURL("https", host, sslPort, file); } } public void setWsMp4(String host, Integer port, Integer sslPort, String file) { if (port != null && port > 0) { this.ws_fmp4 = new StreamURL("ws", host, port, file); } if (sslPort != null && sslPort > 0) { this.wss_fmp4 = new StreamURL("wss", host, sslPort, file); } } public void setHls(String host, Integer port, Integer sslPort, String app, String stream, String callIdParam) { String file = String.format("%s/%s/hls.m3u8%s", app, stream, callIdParam); if (port != null && port > 0) { this.hls = new StreamURL("http", host, port, file); } if (sslPort != null && sslPort > 0) { this.https_hls = new StreamURL("https", host, sslPort, file); } } public void setWsHls(String host, Integer port, Integer sslPort, String app, String stream, String callIdParam) { String file = String.format("%s/%s/hls.m3u8%s", app, stream, callIdParam); if (port != null && port > 0) { this.ws_hls = new StreamURL("ws", host, port, file); } if (sslPort != null && sslPort > 0) { this.wss_hls = new StreamURL("wss", host, sslPort, file); } } public void setTs(String host, Integer port, Integer sslPort, String app, String stream, String callIdParam) { String file = String.format("%s/%s.live.ts%s", app, stream, callIdParam); if (port != null && port > 0) { this.ts = new StreamURL("http", host, port, file); } if (sslPort != null && sslPort > 0) { this.https_ts = new StreamURL("https", host, sslPort, file); } } public void setWsTs(String host, Integer port, Integer sslPort, String app, String stream, String callIdParam) { String file = String.format("%s/%s.live.ts%s", app, stream, callIdParam); if (port != null && port > 0) { this.ws_ts = new StreamURL("ws", host, port, file); } if (sslPort != null && sslPort > 0) { this.wss_ts = new StreamURL("wss", host, sslPort, file); } } public void setRtc(String host, Integer port, Integer sslPort, String app, String stream, String callIdParam, boolean isPlay) { if (callIdParam != null) { callIdParam = Objects.equals(callIdParam, "") ? callIdParam : callIdParam.replace("?", "&"); } // String file = String.format("%s/%s?type=%s%s", app, stream, isPlay?"play":"push", callIdParam); 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 changeStreamIp(String 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); } if (this.rtsp != null) { this.rtsp.setHost(localAddr); } if (this.rtsps != null) { this.rtsps.setHost(localAddr); } if (this.rtmp != null) { this.rtmp.setHost(localAddr); } if (this.rtmps != null) { this.rtmps.setHost(localAddr); } } public static class TransactionInfo { public String callId; public String localTag; public String remoteTag; public String branch; } private TransactionInfo transactionInfo; @Override public StreamInfo clone() { 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; } }