panlinlin
2021-03-30 56859d09df8d4226882d43934acf32d60a3b51d7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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<String, RealVideo> result = new HashMap<>();
        if (code == 0 ) {
            if (dataStr != null) {
                List<MediaItem> mediaItems = JSON.parseObject(dataStr, new TypeReference<List<MediaItem>>() {});
                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<RealVideo.MediaSchema> 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<RealVideo> realVideos = new ArrayList<>(result.values());
        Collections.sort(realVideos);
        redisCatchStorage.updateMediaList(realVideos);
    }
 
 
 
}