64850858
2021-07-14 e48ef997c03b49c8090970f5fbb29ce80b0ac6df
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
package com.genersoft.iot.vmp.gb28181.session;
 
import java.util.concurrent.ConcurrentHashMap;
 
import javax.sip.ClientTransaction;
 
import org.springframework.stereotype.Component;
 
/**    
 * @Description:视频流session管理器,管理视频预览、预览回放的通信句柄 
 * @author: swwheihei
 * @date:   2020年5月13日 下午4:03:02     
 */
@Component
public class VideoStreamSessionManager {
 
    private ConcurrentHashMap<String, ClientTransaction> sessionMap = new ConcurrentHashMap<>();
    private ConcurrentHashMap<String, String> ssrcMap = new ConcurrentHashMap<>();
    private ConcurrentHashMap<String, String> streamIdMap = new ConcurrentHashMap<>();
 
    public String createPlaySsrc(){
        return SsrcUtil.getPlaySsrc();
    }
    
    public String createPlayBackSsrc(){
        return SsrcUtil.getPlayBackSsrc();
    }
    
    public void put(String deviceId, String channelId ,String ssrc, String streamId, ClientTransaction transaction){
        sessionMap.put(deviceId + "_" + channelId, transaction);
        ssrcMap.put(deviceId + "_" + channelId, ssrc);
        streamIdMap.put(deviceId + "_" + channelId, streamId);
    }
    
    public ClientTransaction getTransaction(String deviceId, String channelId){
        return sessionMap.get(deviceId + "_" + channelId);
    }
 
    public String getStreamId(String deviceId, String channelId){
        return streamIdMap.get(deviceId + "_" + channelId);
    }
    
    public void remove(String deviceId, String channelId) {
        sessionMap.remove(deviceId + "_" + channelId);
        if (ssrcMap.get(deviceId + "_" + channelId) != null) {
            SsrcUtil.releaseSsrc(ssrcMap.get(deviceId + "_" + channelId));
        }
        ssrcMap.remove(deviceId + "_" + channelId);
        streamIdMap.remove(deviceId + "_" + channelId);
    }
 
    public ConcurrentHashMap<String, ClientTransaction> getSessionMap() {
        return sessionMap;
    }
 
    public ConcurrentHashMap<String, String> getSsrcMap() {
        return ssrcMap;
    }
 
    public ConcurrentHashMap<String, String> getStreamIdMap() {
        return streamIdMap;
    }
}