| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- 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 com.genersoft.iot.vmp.utils.MediaServerUtils;
- import io.swagger.v3.oas.annotations.media.Schema;
- import lombok.Data;
- import java.util.List;
- import java.util.Map;
- /**
- * 视频信息
- */
- @Data
- @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 = "FPS")
- private Integer fps;
- @Schema(description = "丢包率")
- private Integer loss;
- @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 String originUrl;
- @Schema(description = "存活时间,单位秒")
- private Long aliveSecond;
- @Schema(description = "数据产生速度,单位byte/s")
- private Long bytesSpeed;
- @Schema(description = "鉴权参数")
- private String callId;
- @Schema(description = "额外参数")
- private Map<String, String> paramMap;
- @Schema(description = "服务ID")
- private String serverId;
- public static MediaInfo getInstance(JSONObject jsonObject, MediaServer mediaServer, String serverId) {
- MediaInfo mediaInfo = new MediaInfo();
- mediaInfo.setMediaServer(mediaServer);
- mediaInfo.setServerId(serverId);
- 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");
- String originUrl = jsonObject.getString("originUrl");
- Long aliveSecond = jsonObject.getLong("aliveSecond");
- String params = jsonObject.getString("params");
- Long bytesSpeed = jsonObject.getLong("bytesSpeed");
- if (totalReaderCount != null) {
- mediaInfo.setReaderCount(totalReaderCount);
- }
- if (online != null) {
- mediaInfo.setOnline(online);
- }
- if (originType != null) {
- mediaInfo.setOriginType(originType);
- }
- if (originUrl != null) {
- mediaInfo.setOriginUrl(originUrl);
- }
- if (aliveSecond != null) {
- mediaInfo.setAliveSecond(aliveSecond);
- }
- if (bytesSpeed != null) {
- mediaInfo.setBytesSpeed(bytesSpeed);
- }
- if (params != null) {
- mediaInfo.setParamMap(MediaServerUtils.urlParamToMap(params));
- if(mediaInfo.getCallId() == null) {
- mediaInfo.setCallId(mediaInfo.getParamMap().get("callId"));
- }
- }
- 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("width");
- Integer fps = trackJson.getInteger("fps");
- Integer loss = trackJson.getInteger("loss");
- Integer frames = trackJson.getInteger("frames");
- Long keyFrames = trackJson.getLongValue("key_frames");
- Integer gop_interval_ms = trackJson.getInteger("gop_interval_ms");
- Long gop_size = trackJson.getLongValue("gop_size");
- 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 (fps != null) {
- mediaInfo.setFps(fps);
- }
- if (loss != null) {
- mediaInfo.setLoss(loss);
- }
- 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, String serverId) {
- 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.setOriginUrl(param.getOriginUrl());
- mediaInfo.setAliveSecond(param.getAliveSecond());
- mediaInfo.setBytesSpeed(param.getBytesSpeed());
- mediaInfo.setParamMap(param.getParamMap());
- if(mediaInfo.getCallId() == null) {
- mediaInfo.setCallId(param.getParamMap().get("callId"));
- }
- mediaInfo.setServerId(serverId);
- 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;
- }
- }
|