From da14c7f24c61cf9027a02d8e566ab89116136f19 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期五, 25 九月 2020 17:22:22 +0800 Subject: [PATCH] 拆分redis中device与channel的存储方式 支持分页 接口直接返回播放地址 --- src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java | 182 +++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 166 insertions(+), 16 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 d6e4603..8ea9f7e 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 @@ -3,6 +3,12 @@ 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; @@ -21,7 +27,8 @@ @Autowired private RedisUtil redis; - + + /** * 鏍规嵁璁惧ID鍒ゆ柇璁惧鏄惁瀛樺湪 * @@ -30,7 +37,7 @@ */ @Override public boolean exists(String deviceId) { - return redis.hasKey(VideoManagerConstants.CACHEKEY_PREFIX+deviceId); + return redis.hasKey(VideoManagerConstants.DEVICE_PREFIX+deviceId); } /** @@ -41,9 +48,11 @@ */ @Override public boolean create(Device device) { - return redis.set(VideoManagerConstants.CACHEKEY_PREFIX+device.getDeviceId(), device); + return redis.set(VideoManagerConstants.DEVICE_PREFIX+device.getDeviceId(), device); } - + + + /** * 瑙嗛璁惧鏇存柊 * @@ -51,8 +60,26 @@ * @return true锛氭洿鏂版垚鍔� false锛氭洿鏂板け璐� */ @Override - public boolean update(Device device) { - return redis.set(VideoManagerConstants.CACHEKEY_PREFIX+device.getDeviceId(), device); + 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); } /** @@ -63,26 +90,94 @@ */ @Override public Device queryVideoDevice(String deviceId) { - return (Device)redis.get(VideoManagerConstants.CACHEKEY_PREFIX+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.CACHEKEY_PREFIX+"*"); + 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.CACHEKEY_PREFIX+deviceIds[i])); + devices.add((Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceIds[i])); } } return devices; @@ -96,7 +191,7 @@ */ @Override public boolean delete(String deviceId) { - return redis.del(VideoManagerConstants.CACHEKEY_PREFIX+deviceId); + return redis.del(VideoManagerConstants.DEVICE_PREFIX+deviceId); } /** @@ -107,9 +202,9 @@ */ @Override public boolean online(String deviceId) { - Device device = (Device)redis.get(VideoManagerConstants.CACHEKEY_PREFIX+deviceId); + Device device = (Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceId); device.setOnline(1); - return redis.set(VideoManagerConstants.CACHEKEY_PREFIX+device.getDeviceId(), device); + return redis.set(VideoManagerConstants.DEVICE_PREFIX+device.getDeviceId(), device); } /** @@ -120,9 +215,64 @@ */ @Override public boolean outline(String deviceId) { - Device device = (Device)redis.get(VideoManagerConstants.CACHEKEY_PREFIX+deviceId); + Device device = (Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceId); + if (device == null) return false; device.setOnline(0); - return redis.set(VideoManagerConstants.CACHEKEY_PREFIX+device.getDeviceId(), device); + 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); + } } -- Gitblit v1.8.0