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 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; } }