package com.ycl.platform.wvp;
|
|
import com.alibaba.fastjson2.JSONArray;
|
import com.alibaba.fastjson2.JSONObject;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
|
import java.util.List;
|
|
/**
|
* 视频信息
|
*/
|
@Schema(description = "视频信息")
|
public class MediaInfo {
|
@Schema(description = "应用名")
|
private String app;
|
@Schema(description = "流ID")
|
private String stream;
|
@Schema(description = "流媒体节点")
|
private MediaServer mediaServer;
|
@Schema(description = "协议")
|
private String schema;
|
|
@Schema(description = "观看人数")
|
private Integer readerCount;
|
@Schema(description = "视频编码类型")
|
private String videoCodec;
|
@Schema(description = "视频宽度")
|
private Integer width;
|
@Schema(description = "视频高度")
|
private Integer height;
|
@Schema(description = "音频编码类型")
|
private String audioCodec;
|
@Schema(description = "音频通道数")
|
private Integer audioChannels;
|
@Schema(description = "音频采样率")
|
private Integer audioSampleRate;
|
@Schema(description = "音频采样率")
|
private Long duration;
|
@Schema(description = "在线")
|
private Boolean online;
|
@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 Integer originType;
|
@Schema(description = "存活时间,单位秒")
|
private Long aliveSecond;
|
@Schema(description = "数据产生速度,单位byte/s")
|
private Long bytesSpeed;
|
@Schema(description = "鉴权参数")
|
private String callId;
|
|
public static MediaInfo getInstance(JSONObject jsonObject, MediaServer mediaServer) {
|
MediaInfo mediaInfo = new MediaInfo();
|
mediaInfo.setMediaServer(mediaServer);
|
String app = jsonObject.getString("app");
|
mediaInfo.setApp(app);
|
String stream = jsonObject.getString("stream");
|
mediaInfo.setStream(stream);
|
String schema = jsonObject.getString("schema");
|
mediaInfo.setSchema(schema);
|
Integer totalReaderCount = jsonObject.getInteger("totalReaderCount");
|
Boolean online = jsonObject.getBoolean("online");
|
Integer originType = jsonObject.getInteger("originType");
|
Long aliveSecond = jsonObject.getLong("aliveSecond");
|
Long bytesSpeed = jsonObject.getLong("bytesSpeed");
|
if (totalReaderCount != null) {
|
mediaInfo.setReaderCount(totalReaderCount);
|
}
|
if (online != null) {
|
mediaInfo.setOnline(online);
|
}
|
if (originType != null) {
|
mediaInfo.setOriginType(originType);
|
}
|
if (aliveSecond != null) {
|
mediaInfo.setAliveSecond(aliveSecond);
|
}
|
if (bytesSpeed != null) {
|
mediaInfo.setBytesSpeed(bytesSpeed);
|
}
|
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");
|
Long duration = trackJson.getLongValue("duration");
|
if (channels != null) {
|
mediaInfo.setAudioChannels(channels);
|
}
|
if (sampleRate != null) {
|
mediaInfo.setAudioSampleRate(sampleRate);
|
}
|
if (height != null) {
|
mediaInfo.setHeight(height);
|
}
|
if (width != null) {
|
mediaInfo.setWidth(width);
|
}
|
if (duration > 0L) {
|
mediaInfo.setDuration(duration);
|
}
|
if (codecId != null) {
|
switch (codecId) {
|
case 0:
|
mediaInfo.setVideoCodec("H264");
|
break;
|
case 1:
|
mediaInfo.setVideoCodec("H265");
|
break;
|
case 2:
|
mediaInfo.setAudioCodec("AAC");
|
break;
|
case 3:
|
mediaInfo.setAudioCodec("G711A");
|
break;
|
case 4:
|
mediaInfo.setAudioCodec("G711U");
|
break;
|
}
|
}
|
}
|
return mediaInfo;
|
}
|
|
public static MediaInfo getInstance(OnStreamChangedHookParam param, MediaServer mediaServer) {
|
|
MediaInfo mediaInfo = new MediaInfo();
|
mediaInfo.setApp(param.getApp());
|
mediaInfo.setStream(param.getStream());
|
mediaInfo.setSchema(param.getSchema());
|
mediaInfo.setMediaServer(mediaServer);
|
mediaInfo.setReaderCount(param.getTotalReaderCount());
|
mediaInfo.setOnline(param.isRegist());
|
mediaInfo.setOriginType(param.getOriginType());
|
mediaInfo.setAliveSecond(param.getAliveSecond());
|
mediaInfo.setBytesSpeed(param.getBytesSpeed());
|
List<OnStreamChangedHookParam.MediaTrack> tracks = param.getTracks();
|
if (tracks == null || tracks.isEmpty()) {
|
return mediaInfo;
|
}
|
for (OnStreamChangedHookParam.MediaTrack mediaTrack : tracks) {
|
switch (mediaTrack.getCodec_id()) {
|
case 0:
|
mediaInfo.setVideoCodec("H264");
|
break;
|
case 1:
|
mediaInfo.setVideoCodec("H265");
|
break;
|
case 2:
|
mediaInfo.setAudioCodec("AAC");
|
break;
|
case 3:
|
mediaInfo.setAudioCodec("G711A");
|
break;
|
case 4:
|
mediaInfo.setAudioCodec("G711U");
|
break;
|
}
|
if (mediaTrack.getSample_rate() > 0) {
|
mediaInfo.setAudioSampleRate(mediaTrack.getSample_rate());
|
}
|
if (mediaTrack.getChannels() > 0) {
|
mediaInfo.setAudioChannels(mediaTrack.getChannels());
|
}
|
if (mediaTrack.getHeight() > 0) {
|
mediaInfo.setHeight(mediaTrack.getHeight());
|
}
|
if (mediaTrack.getWidth() > 0) {
|
mediaInfo.setWidth(mediaTrack.getWidth());
|
}
|
}
|
return mediaInfo;
|
}
|
|
public Integer getReaderCount() {
|
return readerCount;
|
}
|
|
public void setReaderCount(Integer readerCount) {
|
this.readerCount = readerCount;
|
}
|
|
public String getVideoCodec() {
|
return videoCodec;
|
}
|
|
public void setVideoCodec(String videoCodec) {
|
this.videoCodec = videoCodec;
|
}
|
|
public Integer getWidth() {
|
return width;
|
}
|
|
public void setWidth(Integer width) {
|
this.width = width;
|
}
|
|
public Integer getHeight() {
|
return height;
|
}
|
|
public void setHeight(Integer height) {
|
this.height = height;
|
}
|
|
public String getAudioCodec() {
|
return audioCodec;
|
}
|
|
public void setAudioCodec(String audioCodec) {
|
this.audioCodec = audioCodec;
|
}
|
|
public Integer getAudioChannels() {
|
return audioChannels;
|
}
|
|
public void setAudioChannels(Integer audioChannels) {
|
this.audioChannels = audioChannels;
|
}
|
|
public Integer getAudioSampleRate() {
|
return audioSampleRate;
|
}
|
|
public void setAudioSampleRate(Integer audioSampleRate) {
|
this.audioSampleRate = audioSampleRate;
|
}
|
|
public Long getDuration() {
|
return duration;
|
}
|
|
public void setDuration(Long duration) {
|
this.duration = duration;
|
}
|
|
public Boolean getOnline() {
|
return online;
|
}
|
|
public void setOnline(Boolean online) {
|
this.online = online;
|
}
|
|
public Integer getOriginType() {
|
return originType;
|
}
|
|
public void setOriginType(Integer originType) {
|
this.originType = originType;
|
}
|
|
public Long getAliveSecond() {
|
return aliveSecond;
|
}
|
|
public void setAliveSecond(Long aliveSecond) {
|
this.aliveSecond = aliveSecond;
|
}
|
|
public Long getBytesSpeed() {
|
return bytesSpeed;
|
}
|
|
public void setBytesSpeed(Long bytesSpeed) {
|
this.bytesSpeed = bytesSpeed;
|
}
|
|
public String getApp() {
|
return app;
|
}
|
|
public void setApp(String app) {
|
this.app = app;
|
}
|
|
public String getStream() {
|
return stream;
|
}
|
|
public void setStream(String stream) {
|
this.stream = stream;
|
}
|
|
public MediaServer getMediaServer() {
|
return mediaServer;
|
}
|
|
public void setMediaServer(MediaServer mediaServer) {
|
this.mediaServer = mediaServer;
|
}
|
|
public String getSchema() {
|
return schema;
|
}
|
|
public void setSchema(String schema) {
|
this.schema = schema;
|
}
|
|
public String getCallId() {
|
return callId;
|
}
|
|
public void setCallId(String callId) {
|
this.callId = callId;
|
}
|
}
|