From 57fd18cd7c842a821bd03fafe2a954c605e387f6 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期三, 30 九月 2020 17:59:11 +0800 Subject: [PATCH] 增加分页,搜索,等 --- src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java | 695 ++++++++++++++++++++++++++++++++++----------------------- 1 files changed, 417 insertions(+), 278 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java index 8ea9f7e..e1411ab 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java @@ -1,278 +1,417 @@ -package com.genersoft.iot.vmp.storager.redis; - -import java.util.ArrayList; -import java.util.List; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.genersoft.iot.vmp.common.PageResult; -import com.genersoft.iot.vmp.common.StreamInfo; -import com.genersoft.iot.vmp.conf.MediaServerConfig; -import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import com.genersoft.iot.vmp.common.VideoManagerConstants; -import com.genersoft.iot.vmp.gb28181.bean.Device; -import com.genersoft.iot.vmp.storager.IVideoManagerStorager; -import com.genersoft.iot.vmp.utils.redis.RedisUtil; - -/** - * @Description:瑙嗛璁惧鏁版嵁瀛樺偍-redis瀹炵幇 - * @author: swwheihei - * @date: 2020骞�5鏈�6鏃� 涓嬪崍2:31:42 - */ -@Component("redisStorager") -public class VideoManagerRedisStoragerImpl implements IVideoManagerStorager { - - @Autowired - private RedisUtil redis; - - - /** - * 鏍规嵁璁惧ID鍒ゆ柇璁惧鏄惁瀛樺湪 - * - * @param deviceId 璁惧ID - * @return true:瀛樺湪 false锛氫笉瀛樺湪 - */ - @Override - public boolean exists(String deviceId) { - return redis.hasKey(VideoManagerConstants.DEVICE_PREFIX+deviceId); - } - - /** - * 瑙嗛璁惧鍒涘缓 - * - * @param device 璁惧瀵硅薄 - * @return true锛氬垱寤烘垚鍔� false锛氬垱寤哄け璐� - */ - @Override - public boolean create(Device device) { - return redis.set(VideoManagerConstants.DEVICE_PREFIX+device.getDeviceId(), device); - } - - - - /** - * 瑙嗛璁惧鏇存柊 - * - * @param device 璁惧瀵硅薄 - * @return true锛氭洿鏂版垚鍔� false锛氭洿鏂板け璐� - */ - @Override - public boolean updateDevice(Device device) { - List<Object> deviceChannelList = redis.keys(VideoManagerConstants.CACHEKEY_PREFIX + device.getDeviceId() + "_" + "*"); - // 鏇存柊device涓殑閫氶亾鏁伴噺 - device.setChannelCount(deviceChannelList.size()); - // 瀛樺偍device - return redis.set(VideoManagerConstants.DEVICE_PREFIX+device.getDeviceId(), device); - - - } - - @Override - public void updateChannel(String deviceId, DeviceChannel channel) { - // 瀛樺偍閫氶亾 - redis.set(VideoManagerConstants.CACHEKEY_PREFIX+deviceId + "_" + channel.getChannelId(), - channel); - List<Object> deviceChannelList = redis.keys(VideoManagerConstants.CACHEKEY_PREFIX + deviceId + "_" + "*"); - // 鏇存柊device涓殑閫氶亾鏁伴噺 - Device device = (Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceId); - device.setChannelCount(deviceChannelList.size()); - redis.set(VideoManagerConstants.DEVICE_PREFIX+device.getDeviceId(), device); - } - - /** - * 鑾峰彇璁惧 - * - * @param deviceId 璁惧ID - * @return Device 璁惧瀵硅薄 - */ - @Override - public Device queryVideoDevice(String deviceId) { - return (Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceId); - } - - @Override - public PageResult queryChannelsByDeviceId(String deviceId, int page, int count) { - List<DeviceChannel> result = new ArrayList<>(); - PageResult pageResult = new PageResult<DeviceChannel>(); - List<Object> deviceChannelList = redis.keys(VideoManagerConstants.CACHEKEY_PREFIX + deviceId + "_" + "*"); - pageResult.setPage(page); - pageResult.setCount(count); - pageResult.setTotal(deviceChannelList.size()); - int maxCount = (page + 1 ) * count; - if (deviceChannelList != null && deviceChannelList.size() > 0 ) { - for (int i = page * count; i < (pageResult.getTotal() > maxCount ? maxCount : pageResult.getTotal() ); i++) { - result.add((DeviceChannel)redis.get((String)deviceChannelList.get(i))); - } - pageResult.setData(result); - } - - return pageResult; - } - - @Override - public List<DeviceChannel> queryChannelsByDeviceId(String deviceId) { - List<DeviceChannel> result = new ArrayList<>(); - List<Object> deviceChannelList = redis.keys(VideoManagerConstants.CACHEKEY_PREFIX + deviceId + "_" + "*"); - if (deviceChannelList != null && deviceChannelList.size() > 0 ) { - for (int i = 0; i < deviceChannelList.size(); i++) { - result.add((DeviceChannel)redis.get((String)deviceChannelList.get(i))); - } - } - return result; - } - - @Override - public DeviceChannel queryChannel(String deviceId, String channelId) { - return (DeviceChannel)redis.get(VideoManagerConstants.CACHEKEY_PREFIX + deviceId + "_" + channelId); - } - - - /** - * 鑾峰彇澶氫釜璁惧 - * - * @param deviceIds 璁惧ID鏁扮粍 - * @return List<Device> 璁惧瀵硅薄鏁扮粍 - */ - @Override - public PageResult<Device> queryVideoDeviceList(String[] deviceIds, int page, int count) { - List<Device> devices = new ArrayList<>(); - PageResult pageResult = new PageResult<Device>(); - pageResult.setPage(page); - pageResult.setCount(count); - - if (deviceIds == null || deviceIds.length == 0) { - - List<Object> deviceIdList = redis.keys(VideoManagerConstants.DEVICE_PREFIX+"*"); - pageResult.setTotal(deviceIdList.size()); - int maxCount = (page + 1)* count; - for (int i = page * count; i < (pageResult.getTotal() > maxCount ? maxCount : pageResult.getTotal() ); i++) { - devices.add((Device)redis.get((String)deviceIdList.get(i))); - } - } else { - for (int i = 0; i < deviceIds.length; i++) { - devices.add((Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceIds[i])); - } - } - pageResult.setData(devices); - return pageResult; - } - - /** - * 鑾峰彇澶氫釜璁惧 - * - * @param deviceIds 璁惧ID鏁扮粍 - * @return List<Device> 璁惧瀵硅薄鏁扮粍 - */ - @Override - public List<Device> queryVideoDeviceList(String[] deviceIds) { - List<Device> devices = new ArrayList<>(); - - if (deviceIds == null || deviceIds.length == 0) { - List<Object> deviceIdList = redis.keys(VideoManagerConstants.DEVICE_PREFIX+"*"); - for (int i = 0; i < deviceIdList.size(); i++) { - devices.add((Device)redis.get((String)deviceIdList.get(i))); - } - } else { - for (int i = 0; i < deviceIds.length; i++) { - devices.add((Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceIds[i])); - } - } - return devices; - } - - /** - * 鍒犻櫎璁惧 - * - * @param deviceId 璁惧ID - * @return true锛氬垹闄ゆ垚鍔� false锛氬垹闄ゅけ璐� - */ - @Override - public boolean delete(String deviceId) { - return redis.del(VideoManagerConstants.DEVICE_PREFIX+deviceId); - } - - /** - * 鏇存柊璁惧鍦ㄧ嚎 - * - * @param deviceId 璁惧ID - * @return true锛氭洿鏂版垚鍔� false锛氭洿鏂板け璐� - */ - @Override - public boolean online(String deviceId) { - Device device = (Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceId); - device.setOnline(1); - return redis.set(VideoManagerConstants.DEVICE_PREFIX+device.getDeviceId(), device); - } - - /** - * 鏇存柊璁惧绂荤嚎 - * - * @param deviceId 璁惧ID - * @return true锛氭洿鏂版垚鍔� false锛氭洿鏂板け璐� - */ - @Override - public boolean outline(String deviceId) { - Device device = (Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceId); - if (device == null) return false; - device.setOnline(0); - return redis.set(VideoManagerConstants.DEVICE_PREFIX+device.getDeviceId(), device); - } - - /** - * 寮�濮嬫挱鏀炬椂灏嗘祦瀛樺叆redis - * - * @param deviceId 璁惧ID - * @param channelId 閫氶亾ID - * @return - */ - @Override - public boolean startPlay(String deviceId, String channelId, StreamInfo stream) { - return redis.set(String.format("%S_%s_%s", VideoManagerConstants.PLAYER_PREFIX, deviceId, channelId), - stream); - } - - /** - * 鍋滄鎾斁鏃朵粠redis鍒犻櫎 - * - * @param deviceId 璁惧ID - * @param channelId 閫氶亾ID - * @return - */ - @Override - public boolean stopPlay(String deviceId, String channelId) { - return redis.del(String.format("%S_%s_%s", VideoManagerConstants.PLAYER_PREFIX, deviceId, channelId)); - } - - /** - * 鏌ヨ鎾斁鍒楄〃 - * @param deviceId 璁惧ID - * @param channelId 閫氶亾ID - * @return - */ - @Override - public StreamInfo queryPlay(String deviceId, String channelId) { - return (StreamInfo)redis.get(String.format("%S_%s_%s", VideoManagerConstants.PLAYER_PREFIX, deviceId, channelId)); - } - - /** - * 鏇存柊娴佸獟浣撲俊鎭� - * @param mediaServerConfig - * @return - */ - @Override - public boolean updateMediaInfo(MediaServerConfig mediaServerConfig) { - return redis.set(VideoManagerConstants.MEDIA_SERVER_PREFIX,mediaServerConfig); - } - - /** - * 鑾峰彇娴佸獟浣撲俊鎭� - * @return - */ - @Override - public MediaServerConfig getMediaInfo() { - return (MediaServerConfig)redis.get(VideoManagerConstants.MEDIA_SERVER_PREFIX); - } -} +package com.genersoft.iot.vmp.storager.redis; + +import java.util.*; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.genersoft.iot.vmp.common.PageResult; +import com.genersoft.iot.vmp.common.StreamInfo; +import com.genersoft.iot.vmp.conf.MediaServerConfig; +import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.genersoft.iot.vmp.common.VideoManagerConstants; +import com.genersoft.iot.vmp.gb28181.bean.Device; +import com.genersoft.iot.vmp.storager.IVideoManagerStorager; +import com.genersoft.iot.vmp.utils.redis.RedisUtil; +import org.springframework.util.StringUtils; + +/** + * @Description:瑙嗛璁惧鏁版嵁瀛樺偍-redis瀹炵幇 + * @author: swwheihei + * @date: 2020骞�5鏈�6鏃� 涓嬪崍2:31:42 + */ +@Component("redisStorager") +public class VideoManagerRedisStoragerImpl implements IVideoManagerStorager { + + @Autowired + private RedisUtil redis; + + private HashMap<String, HashMap<String, HashSet<String>>> deviceMap = new HashMap<>(); + + + /** + * 鏍规嵁璁惧ID鍒ゆ柇璁惧鏄惁瀛樺湪 + * + * @param deviceId 璁惧ID + * @return true:瀛樺湪 false锛氫笉瀛樺湪 + */ + @Override + public boolean exists(String deviceId) { + return redis.hasKey(VideoManagerConstants.DEVICE_PREFIX+deviceId); + } + + /** + * 瑙嗛璁惧鍒涘缓 + * + * @param device 璁惧瀵硅薄 + * @return true锛氬垱寤烘垚鍔� false锛氬垱寤哄け璐� + */ + @Override + public boolean create(Device device) { + return redis.set(VideoManagerConstants.DEVICE_PREFIX+device.getDeviceId(), device); + } + + + + /** + * 瑙嗛璁惧鏇存柊 + * + * @param device 璁惧瀵硅薄 + * @return true锛氭洿鏂版垚鍔� false锛氭洿鏂板け璐� + */ + @Override + public boolean updateDevice(Device device) { + if (deviceMap.get(device.getDeviceId()) == null) { + deviceMap.put(device.getDeviceId(), new HashMap<String, HashSet<String>>()); + } +// List<Object> deviceChannelList = redis.keys(VideoManagerConstants.CACHEKEY_PREFIX + device.getDeviceId() + "_" + "*"); + // 鏇存柊device涓殑閫氶亾鏁伴噺 + device.setChannelCount(deviceMap.get(device.getDeviceId()).size()); + // 瀛樺偍device + return redis.set(VideoManagerConstants.DEVICE_PREFIX+device.getDeviceId(), device); + + + } + + @Override + public void updateChannel(String deviceId, DeviceChannel channel) { + String channelId = channel.getChannelId(); + HashMap<String, HashSet<String>> channelMap = deviceMap.get(deviceId); + if (channelMap == null) return; + + // 浣滀负鐖惰澶�, 纭畾鑷繁鐨勫瓙鑺傜偣鏁� + if (channelMap.get(channelId) == null) { + channelMap.put(channelId, new HashSet<String>()); + }else if (channelMap.get(channelId).size()> 0) { + channel.setSubCount(channelMap.get(channelId).size()); + } + + // 瀛樺偍閫氶亾 + redis.set(VideoManagerConstants.CACHEKEY_PREFIX + deviceId + + "_" + channel.getChannelId() + + ":" + channel.getName() + + "_" + (channel.getStatus() == 1 ? "on":"off") + + "_" + (channelMap.get(channelId).size() > 0)+ + "_" + channel.getParentId(), + channel); + // 鏇存柊device涓殑閫氶亾鏁伴噺 + Device device = (Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceId); + device.setChannelCount(deviceMap.get(deviceId).size()); + redis.set(VideoManagerConstants.DEVICE_PREFIX+device.getDeviceId(), device); + + + // 濡傛灉鏈夌埗璁惧,鏇存柊鐖惰澶囧唴瀛愯妭鐐规暟 + String parentId = channel.getParentId(); + if (!StringUtils.isEmpty(parentId)) { + + if (channelMap.get(parentId) == null) { + channelMap.put(parentId, new HashSet<>()); + } + channelMap.get(parentId).add(channelId); + + DeviceChannel deviceChannel = queryChannel(deviceId, parentId); + if (deviceChannel != null) { + deviceChannel.setSubCount(channelMap.get(parentId).size()); + redis.set(VideoManagerConstants.CACHEKEY_PREFIX+deviceId + "_" + deviceChannel.getChannelId(), + deviceChannel); + + } + } + + } + + /** + * 鑾峰彇璁惧 + * + * @param deviceId 璁惧ID + * @return Device 璁惧瀵硅薄 + */ + @Override + public Device queryVideoDevice(String deviceId) { + return (Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceId); + } + + @Override + public PageResult queryChannelsByDeviceId(String deviceId, String query, Boolean hasSubChannel, String online, int page, int count) { + List<DeviceChannel> result = new ArrayList<>(); + PageResult pageResult = new PageResult<DeviceChannel>(); + String queryContent = "*"; + if (!StringUtils.isEmpty(query)) queryContent = String.format("*%S*",query); + String queryHasSubChannel = "*"; + if (hasSubChannel != null) queryHasSubChannel = hasSubChannel?"true":"false"; + String queryOnline = "*"; + if (!StringUtils.isEmpty(online)) queryOnline = online; + String queryStr = VideoManagerConstants.CACHEKEY_PREFIX + deviceId + + "_" + queryContent + // 鎼滅储缂栧彿鍜屽悕绉� + "_" + queryOnline + // 鎼滅储鏄惁鍦ㄧ嚎 + "_" + queryHasSubChannel + // 鎼滅储鏄惁鍚湁瀛愯妭鐐� + "_" + "*"; + List<Object> deviceChannelList = redis.keys(queryStr); + pageResult.setPage(page); + pageResult.setCount(count); + pageResult.setTotal(deviceChannelList.size()); + int maxCount = (page + 1 ) * count; + if (deviceChannelList != null && deviceChannelList.size() > 0 ) { + for (int i = page * count; i < (pageResult.getTotal() > maxCount ? maxCount : pageResult.getTotal() ); i++) { + result.add((DeviceChannel)redis.get((String)deviceChannelList.get(i))); + } + pageResult.setData(result); + } + + return pageResult; + } + + @Override + public List<DeviceChannel> queryChannelsByDeviceId(String deviceId) { + List<DeviceChannel> result = new ArrayList<>(); + List<Object> deviceChannelList = redis.keys(VideoManagerConstants.CACHEKEY_PREFIX + deviceId + "_" + "*"); + if (deviceChannelList != null && deviceChannelList.size() > 0 ) { + for (int i = 0; i < deviceChannelList.size(); i++) { + result.add((DeviceChannel)redis.get((String)deviceChannelList.get(i))); + } + } + return result; + } + + @Override + public PageResult querySubChannels(String deviceId, String parentChannelId, String query, Boolean hasSubChannel, String online, int page, int count) { + List<DeviceChannel> allDeviceChannels = new ArrayList<>(); + String queryContent = "*"; + if (!StringUtils.isEmpty(query)) queryContent = String.format("*%S*",query); + String queryHasSubChannel = "*"; + if (hasSubChannel != null) queryHasSubChannel = hasSubChannel?"true":"false"; + String queryOnline = "*"; + if (!StringUtils.isEmpty(online)) queryOnline = online; + String queryStr = VideoManagerConstants.CACHEKEY_PREFIX + deviceId + + "_" + queryContent + // 鎼滅储缂栧彿鍜屽悕绉� + "_" + queryOnline + // 鎼滅储鏄惁鍦ㄧ嚎 + "_" + queryHasSubChannel + // 鎼滅储鏄惁鍚湁瀛愯妭鐐� + "_" + parentChannelId; + + List<Object> deviceChannelList = redis.keys(queryStr); + + if (deviceChannelList != null && deviceChannelList.size() > 0 ) { + for (int i = 0; i < deviceChannelList.size(); i++) { + DeviceChannel deviceChannel = (DeviceChannel)redis.get((String)deviceChannelList.get(i)); + if (deviceChannel.getParentId() != null && deviceChannel.getParentId().equals(parentChannelId)) { + allDeviceChannels.add(deviceChannel); + } + } + } + int maxCount = (page + 1 ) * count; + PageResult pageResult = new PageResult<DeviceChannel>(); + pageResult.setPage(page); + pageResult.setCount(count); + pageResult.setTotal(allDeviceChannels.size()); + + if (allDeviceChannels.size() > 0) { + pageResult.setData(allDeviceChannels.subList( + page * count, pageResult.getTotal() > maxCount ? maxCount : pageResult.getTotal() + )); + } + return pageResult; + } + + public List<DeviceChannel> querySubChannels(String deviceId, String parentChannelId) { + List<DeviceChannel> allDeviceChannels = new ArrayList<>(); + List<Object> deviceChannelList = redis.keys(VideoManagerConstants.CACHEKEY_PREFIX + deviceId + "_" + "*"); + + if (deviceChannelList != null && deviceChannelList.size() > 0 ) { + for (int i = 0; i < deviceChannelList.size(); i++) { + DeviceChannel deviceChannel = (DeviceChannel)redis.get((String)deviceChannelList.get(i)); + if (deviceChannel.getParentId() != null && deviceChannel.getParentId().equals(parentChannelId)) { + allDeviceChannels.add(deviceChannel); + } + } + } + + return allDeviceChannels; + } + + @Override + public DeviceChannel queryChannel(String deviceId, String channelId) { + return (DeviceChannel)redis.get(VideoManagerConstants.CACHEKEY_PREFIX + deviceId + "_" + channelId + "_"); + } + + + /** + * 鑾峰彇澶氫釜璁惧 + * + * @param deviceIds 璁惧ID鏁扮粍 + * @return List<Device> 璁惧瀵硅薄鏁扮粍 + */ + @Override + public PageResult<Device> queryVideoDeviceList(String[] deviceIds, int page, int count) { + List<Device> devices = new ArrayList<>(); + PageResult pageResult = new PageResult<Device>(); + pageResult.setPage(page); + pageResult.setCount(count); + + if (deviceIds == null || deviceIds.length == 0) { + + List<Object> deviceIdList = redis.keys(VideoManagerConstants.DEVICE_PREFIX+"*"); + pageResult.setTotal(deviceIdList.size()); + int maxCount = (page + 1)* count; + for (int i = page * count; i < (pageResult.getTotal() > maxCount ? maxCount : pageResult.getTotal() ); i++) { + devices.add((Device)redis.get((String)deviceIdList.get(i))); + } + } else { + for (int i = 0; i < deviceIds.length; i++) { + devices.add((Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceIds[i])); + } + } + pageResult.setData(devices); + return pageResult; + } + + /** + * 鑾峰彇澶氫釜璁惧 + * + * @param deviceIds 璁惧ID鏁扮粍 + * @return List<Device> 璁惧瀵硅薄鏁扮粍 + */ + @Override + public List<Device> queryVideoDeviceList(String[] deviceIds) { + List<Device> devices = new ArrayList<>(); + + if (deviceIds == null || deviceIds.length == 0) { + List<Object> deviceIdList = redis.keys(VideoManagerConstants.DEVICE_PREFIX+"*"); + for (int i = 0; i < deviceIdList.size(); i++) { + devices.add((Device)redis.get((String)deviceIdList.get(i))); + } + } else { + for (int i = 0; i < deviceIds.length; i++) { + devices.add((Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceIds[i])); + } + } + return devices; + } + + /** + * 鍒犻櫎璁惧 + * + * @param deviceId 璁惧ID + * @return true锛氬垹闄ゆ垚鍔� false锛氬垹闄ゅけ璐� + */ + @Override + public boolean delete(String deviceId) { + return redis.del(VideoManagerConstants.DEVICE_PREFIX+deviceId); + } + + /** + * 鏇存柊璁惧鍦ㄧ嚎 + * + * @param deviceId 璁惧ID + * @return true锛氭洿鏂版垚鍔� false锛氭洿鏂板け璐� + */ + @Override + public boolean online(String deviceId) { + Device device = (Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceId); + device.setOnline(1); + return redis.set(VideoManagerConstants.DEVICE_PREFIX+device.getDeviceId(), device); + } + + /** + * 鏇存柊璁惧绂荤嚎 + * + * @param deviceId 璁惧ID + * @return true锛氭洿鏂版垚鍔� false锛氭洿鏂板け璐� + */ + @Override + public boolean outline(String deviceId) { + Device device = (Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceId); + if (device == null) return false; + device.setOnline(0); + return redis.set(VideoManagerConstants.DEVICE_PREFIX+device.getDeviceId(), device); + } + + /** + * 寮�濮嬫挱鏀炬椂灏嗘祦瀛樺叆redis + * + * @param deviceId 璁惧ID + * @param channelId 閫氶亾ID + * @return + */ + @Override + public boolean startPlay(String deviceId, String channelId, StreamInfo stream) { + return redis.set(String.format("%S_%s_%s", VideoManagerConstants.PLAYER_PREFIX, deviceId, channelId), + stream); + } + + /** + * 鍋滄鎾斁鏃朵粠redis鍒犻櫎 + * + * @param deviceId 璁惧ID + * @param channelId 閫氶亾ID + * @return + */ + @Override + public boolean stopPlay(String deviceId, String channelId) { + return redis.del(String.format("%S_%s_%s", VideoManagerConstants.PLAYER_PREFIX, deviceId, channelId)); + } + + /** + * 鏌ヨ鎾斁鍒楄〃 + * @param deviceId 璁惧ID + * @param channelId 閫氶亾ID + * @return + */ + @Override + public StreamInfo queryPlay(String deviceId, String channelId) { + return (StreamInfo)redis.get(String.format("%S_%s_%s", VideoManagerConstants.PLAYER_PREFIX, deviceId, channelId)); + } + + + + /** + * 鏇存柊娴佸獟浣撲俊鎭� + * @param mediaServerConfig + * @return + */ + @Override + public boolean updateMediaInfo(MediaServerConfig mediaServerConfig) { + return redis.set(VideoManagerConstants.MEDIA_SERVER_PREFIX,mediaServerConfig); + } + + /** + * 鑾峰彇娴佸獟浣撲俊鎭� + * @return + */ + @Override + public MediaServerConfig getMediaInfo() { + return (MediaServerConfig)redis.get(VideoManagerConstants.MEDIA_SERVER_PREFIX); + } + + @Override + public void updateCatch() { + deviceMap = new HashMap<>(); + // 鏇存柊璁惧 + List<Device> devices = queryVideoDeviceList(null); + if (devices == null && devices.size() == 0) return; + for (Device device : devices) { + // 鏇存柊璁惧涓嬬殑閫氶亾 + HashMap<String, HashSet<String>> channelMap = new HashMap<String, HashSet<String>>(); + List<Object> deviceChannelList = redis.keys(VideoManagerConstants.CACHEKEY_PREFIX + + device.getDeviceId() + "_" + "*"); + if (deviceChannelList != null && deviceChannelList.size() > 0 ) { + for (int i = 0; i < deviceChannelList.size(); i++) { + String key = (String)deviceChannelList.get(i); + String[] s = key.split("_"); + String channelId = s[3]; + HashSet<String> subChannel = channelMap.get(channelId); + if (subChannel == null) { + subChannel = new HashSet<>(); + } + if (s.length > 4) { + subChannel.add(s[4]); + } + channelMap.put(channelId, subChannel); + System.out.println(); + } + } + deviceMap.put(device.getDeviceId(),channelMap); + } + } +} -- Gitblit v1.8.0