package com.ard.gb28181.session; import com.ard.gb28181.common.VideoManagerConstants; import com.ard.gb28181.config.UserSetting; import com.ard.gb28181.api.domain.SsrcTransaction; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; /** * 视频流session管理器,管理视频预览、预览回放的通信句柄 */ @Component public class SipInviteSessionManager { @Autowired private UserSetting userSetting; @Autowired private RedisTemplate redisTemplate; /** * 添加一个点播/回放的事务信息 */ public void put(SsrcTransaction ssrcTransaction){ redisTemplate.opsForHash().put(VideoManagerConstants.SIP_INVITE_SESSION_STREAM + userSetting.getServerId() , ssrcTransaction.getApp() + ssrcTransaction.getStream(), ssrcTransaction); redisTemplate.opsForHash().put(VideoManagerConstants.SIP_INVITE_SESSION_CALL_ID + userSetting.getServerId() , ssrcTransaction.getCallId(), ssrcTransaction); } public SsrcTransaction getSsrcTransactionByStream(String app, String stream){ String key = VideoManagerConstants.SIP_INVITE_SESSION_STREAM + userSetting.getServerId(); return (SsrcTransaction)redisTemplate.opsForHash().get(key, app + stream); } public SsrcTransaction getSsrcTransactionByCallId(String callId){ String key = VideoManagerConstants.SIP_INVITE_SESSION_CALL_ID + userSetting.getServerId(); return (SsrcTransaction)redisTemplate.opsForHash().get(key, callId); } public List getSsrcTransactionByDeviceId(String deviceId){ String key = VideoManagerConstants.SIP_INVITE_SESSION_CALL_ID + userSetting.getServerId(); List values = redisTemplate.opsForHash().values(key); List result = new ArrayList<>(); for (Object value : values) { SsrcTransaction ssrcTransaction = (SsrcTransaction) value; if (ssrcTransaction != null && deviceId.equals(ssrcTransaction.getDeviceId())) { result.add(ssrcTransaction); } } return result; } public void removeByStream(String app, String stream) { SsrcTransaction ssrcTransaction = getSsrcTransactionByStream(app, stream); if (ssrcTransaction == null ) { return; } redisTemplate.opsForHash().delete(VideoManagerConstants.SIP_INVITE_SESSION_STREAM + userSetting.getServerId(), app + stream); if (ssrcTransaction.getCallId() != null) { redisTemplate.opsForHash().delete(VideoManagerConstants.SIP_INVITE_SESSION_CALL_ID + userSetting.getServerId(), ssrcTransaction.getCallId()); } } public void removeByCallId(String callId) { SsrcTransaction ssrcTransaction = getSsrcTransactionByCallId(callId); if (ssrcTransaction == null ) { return; } redisTemplate.opsForHash().delete(VideoManagerConstants.SIP_INVITE_SESSION_CALL_ID + userSetting.getServerId(), callId); if (ssrcTransaction.getStream() != null) { redisTemplate.opsForHash().delete(VideoManagerConstants.SIP_INVITE_SESSION_STREAM + userSetting.getServerId(), ssrcTransaction.getApp() + ssrcTransaction.getStream()); } } public List getAll() { String key = VideoManagerConstants.SIP_INVITE_SESSION_CALL_ID + userSetting.getServerId(); List values = redisTemplate.opsForHash().values(key); List result = new ArrayList<>(); for (Object value : values) { result.add((SsrcTransaction) value); } return result; } }