| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 | package com.genersoft.iot.vmp.gb28181.task;import com.alibaba.fastjson2.JSONObject;import com.genersoft.iot.vmp.conf.UserSetting;import com.genersoft.iot.vmp.gb28181.bean.Device;import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem;import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform;import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils;import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;import com.genersoft.iot.vmp.service.IDeviceService;import com.genersoft.iot.vmp.service.IMediaServerService;import com.genersoft.iot.vmp.service.IPlatformService;import com.genersoft.iot.vmp.storager.IRedisCatchStorage;import com.genersoft.iot.vmp.storager.IVideoManagerStorage;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.CommandLineRunner;import org.springframework.core.annotation.Order;import org.springframework.stereotype.Component;import java.util.HashMap;import java.util.List;import java.util.Map;/** * 系统启动时控制设备 * @author lin */@Component@Order(value=14)public class SipRunner implements CommandLineRunner {    @Autowired    private IVideoManagerStorage storager;    @Autowired    private IRedisCatchStorage redisCatchStorage;    @Autowired    private UserSetting userSetting;    @Autowired    private IDeviceService deviceService;    @Autowired    private ZLMRESTfulUtils zlmresTfulUtils;    @Autowired    private IMediaServerService mediaServerService;    @Autowired    private IPlatformService platformService;    @Autowired    private ISIPCommanderForPlatform commanderForPlatform;    @Override    public void run(String... args) throws Exception {        List<Device> deviceList = deviceService.getAllOnlineDevice();        for (Device device : deviceList) {            if (deviceService.expire(device)){                deviceService.offline(device.getDeviceId());            }else {                deviceService.online(device);            }        }        // 重置cseq计数        redisCatchStorage.resetAllCSEQ();        // 清理redis        // 清理数据库不存在但是redis中存在的数据        List<Device> devicesInDb = deviceService.getAll();        if (devicesInDb.size() == 0) {            redisCatchStorage.removeAllDevice();        }else {            List<Device> devicesInRedis = redisCatchStorage.getAllDevices();            if (devicesInRedis.size() > 0) {                Map<String, Device> deviceMapInDb = new HashMap<>();                devicesInDb.parallelStream().forEach(device -> {                    deviceMapInDb.put(device.getDeviceId(), device);                });                devicesInRedis.parallelStream().forEach(device -> {                    if (deviceMapInDb.get(device.getDeviceId()) == null) {                        redisCatchStorage.removeDevice(device.getDeviceId());                    }                });            }        }        // 查找国标推流        List<SendRtpItem> sendRtpItems = redisCatchStorage.queryAllSendRTPServer();        if (sendRtpItems.size() > 0) {            for (SendRtpItem sendRtpItem : sendRtpItems) {                MediaServerItem mediaServerItem = mediaServerService.getOne(sendRtpItem.getMediaServerId());                redisCatchStorage.deleteSendRTPServer(sendRtpItem.getPlatformId(),sendRtpItem.getChannelId(), sendRtpItem.getCallId(),sendRtpItem.getStreamId());                if (mediaServerItem != null) {                    Map<String, Object> param = new HashMap<>();                    param.put("vhost","__defaultVhost__");                    param.put("app",sendRtpItem.getApp());                    param.put("stream",sendRtpItem.getStreamId());                    param.put("ssrc",sendRtpItem.getSsrc());                    JSONObject jsonObject = zlmresTfulUtils.stopSendRtp(mediaServerItem, param);                    if (jsonObject != null && jsonObject.getInteger("code") == 0) {                        ParentPlatform platform = platformService.queryPlatformByServerGBId(sendRtpItem.getPlatformId());                        if (platform != null) {                            commanderForPlatform.streamByeCmd(platform, sendRtpItem.getCallId());                        }                    }                }            }        }    }}
 |