package com.genersoft.iot.vmp.media.zlm; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; import com.genersoft.iot.vmp.common.RealVideo; import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem; import com.genersoft.iot.vmp.gb28181.session.SsrcUtil; import com.genersoft.iot.vmp.media.zlm.dto.MediaItem; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.impl.RedisCatchStorageImpl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.util.*; @Component public class ZLMMediaListManager { private Logger logger = LoggerFactory.getLogger("ZLMMediaListManager"); @Autowired private ZLMRESTfulUtils zlmresTfulUtils; @Autowired private IRedisCatchStorage redisCatchStorage; public void updateMediaList() { JSONObject mediaList = zlmresTfulUtils.getMediaList(); if (mediaList == null) return; String dataStr = mediaList.getString("data"); Integer code = mediaList.getInteger("code"); Map result = new HashMap<>(); if (code == 0 ) { if (dataStr != null) { List mediaItems = JSON.parseObject(dataStr, new TypeReference>() {}); for (MediaItem item : mediaItems) { if ("rtp".equals(item.getApp())) { continue; } String key = item.getApp() + "_" + item.getStream(); RealVideo realVideo = result.get(key); if (realVideo == null) { realVideo = new RealVideo(); realVideo.setApp(item.getApp()); realVideo.setStream(item.getStream()); realVideo.setAliveSecond(item.getAliveSecond()); realVideo.setCreateStamp(item.getCreateStamp()); realVideo.setOriginSock(item.getOriginSock()); realVideo.setTotalReaderCount(item.getTotalReaderCount()); realVideo.setOriginType(item.getOriginType()); realVideo.setOriginTypeStr(item.getOriginTypeStr()); realVideo.setOriginUrl(item.getOriginUrl()); realVideo.setCreateStamp(item.getCreateStamp()); realVideo.setAliveSecond(item.getAliveSecond()); ArrayList mediaSchemas = new ArrayList<>(); realVideo.setSchemas(mediaSchemas); realVideo.setTracks(item.getTracks()); realVideo.setVhost(item.getVhost()); result.put(key, realVideo); } RealVideo.MediaSchema mediaSchema = new RealVideo.MediaSchema(); mediaSchema.setSchema(item.getSchema()); mediaSchema.setBytesSpeed(item.getBytesSpeed()); realVideo.getSchemas().add(mediaSchema); } } }else { logger.warn("更新视频流失败,错误code: " + code); } List realVideos = new ArrayList<>(result.values()); Collections.sort(realVideos); redisCatchStorage.updateMediaList(realVideos); } }