liusuyi
2026-05-18 0b8c8d8986a35c3e36db1503125e2dff79d6d10e
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
package com.ard.gb28181.config;
 
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
 
import java.util.ArrayList;
import java.util.List;
 
/**
 * 配置文件 user-settings 映射的配置信息
 */
@Component
@ConfigurationProperties(prefix = "user-settings", ignoreInvalidFields = true)
@Order(0)
@Data
public class UserSetting {
 
    /**
     * 是否保存位置的历史记录(轨迹)
     */
    private Boolean savePositionHistory = Boolean.FALSE;
 
    /**
     * 是否开始自动点播: 请求流为未拉起的流时,自动开启点播, 需要rtp.enable=true
     */
    private Boolean autoApplyPlay = Boolean.FALSE;
 
    /**
     * [可选] 部分设备需要扩展SDP,需要打开此设置,一般设备无需打开
     */
    private Boolean seniorSdp = Boolean.FALSE;
 
    /**
     * 点播/录像回放 等待超时时间,单位:毫秒
     */
    private Integer playTimeout = 10000;
 
    /**
     * 获取设备录像数据超时时间,单位:毫秒
     */
    private Integer recordInfoTimeout = 15000;
 
    /**
     * 上级点播等待超时时间,单位:毫秒
     */
    private int platformPlayTimeout = 20000;
 
    /**
     * 是否开启接口鉴权
     */
    private Boolean interfaceAuthentication = Boolean.TRUE;
 
    /**
     * 接口鉴权例外的接口, 即不进行接口鉴权的接口,尽量详细书写,尽量不用/**,至少两级目录
     */
    private List<String> interfaceAuthenticationExcludes = new ArrayList<>();
 
    /**
     * 推流直播是否录制
     */
    private Boolean recordPushLive = Boolean.TRUE;
 
    /**
     * 国标是否录制
     */
    private Boolean recordSip = Boolean.TRUE;
 
    /**
     * 使用推流状态作为推流通道状态
     */
    private Boolean usePushingAsStatus = Boolean.FALSE;
 
    /**
     * 使用来源请求ip作为streamIp,当且仅当你只有zlm节点它与wvp在一起的情况下开启
     */
    private Boolean useSourceIpAsStreamIp = Boolean.FALSE;
 
    /**
     * 是否使用设备来源Ip作为回复IP, 不设置则为 false
     */
    private Boolean sipUseSourceIpAsRemoteAddress = Boolean.FALSE;
 
    /**
     * 国标点播 按需拉流, true:有人观看拉流,无人观看释放, false:拉起后不自动释放
     */
    private Boolean streamOnDemand = Boolean.TRUE;
 
    /**
     * 推流鉴权, 默认开启
     */
    private Boolean pushAuthority = Boolean.TRUE;
 
    /**
     * 设备上线时是否自动同步通道
     */
    private Boolean syncChannelOnDeviceOnline = Boolean.FALSE;
 
    /**
     * 是否开启sip日志
     */
    private Boolean sipLog = Boolean.FALSE;
 
    /**
     * 是否开启mybatis-sql日志
     */
    private Boolean sqlLog = Boolean.FALSE;
 
    /**
     * 消息通道功能-缺少国标ID是否给所有上级发送消息
     */
    private Boolean sendToPlatformsWhenIdLost = Boolean.FALSE;
 
    /**
     * 保持通道状态,不接受notify通道状态变化, 兼容海康平台发送错误消息
     */
    private Boolean refuseChannelStatusChannelFormNotify = Boolean.FALSE;
 
    /**
     * 设备/通道状态变化时发送消息
     */
    private Boolean deviceStatusNotify = Boolean.TRUE;
 
    /**
     * 上级平台点播时不使用上级平台指定的ssrc,使用自定义的ssrc,参考国标文档-点播外域设备媒体流SSRC处理方式
     */
    private Boolean useCustomSsrcForParentInvite = Boolean.TRUE;
 
    /**
     * 开启接口文档页面。 默认开启,生产环境建议关闭,遇到swagger相关的漏洞时也可以关闭
     */
    private Boolean docEnable = Boolean.TRUE;
 
    /**
     * 服务ID,不写则为000000
     */
    private String serverId = "000000";
 
 
    /**
     * 国标级联语音喊话发流模式 * UDP:udp传输 TCP-ACTIVE:tcp主动模式 TCP-PASSIVE:tcp被动模式
     */
    private String broadcastForPlatform = "UDP";
 
    /**
     * 行政区划信息文件,系统启动时会加载到系统里
     */
    private String civilCodeFile = "classpath:civilCode.csv";
 
    /**
     * 跨域配置,不配置此项则允许所有跨域请求,配置后则只允许配置的页面的地址请求, 可以配置多个
     */
    private List<String> allowedOrigins = new ArrayList<>();
 
    /**
     * 设置notify缓存队列最大长度,超过此长度的数据将返回486 BUSY_HERE,消息丢弃, 默认100000
     */
    private int maxNotifyCountQueue = 100000;
 
    /**
     * 国标级联离线后多久重试一次注册
     */
    private int registerAgainAfterTime = 60;
 
    /**
     * 国标续订方式,true为续订,每次注册在同一个会话里,false为重新注册,每次使用新的会话
     */
    private boolean registerKeepIntDialog = false;
 
    /**
     *     # 国标设备离线后的上线策略,
     *     # 0: 国标标准实现,设备离线后不回复心跳,直到设备重新注册上线,
     *     # 1(默认): 对于离线设备,收到心跳就把设备设置为上线,并更新注册时间为上次这次心跳的时间。防止过期时间判断异常
     */
    private int gbDeviceOnline = 1;
 
    /**
     *    登录超时时间(分钟),
     */
    private long loginTimeout = 60;
 
    /**
     * jwk文件路径,若不指定则使用resources目录下的jwk.json
     */
    private String jwkFile = "classpath:jwk.json";
 
    /**
     * wvp集群模式下如果注册向上级的wvp奔溃,则自动选择一个其他wvp继续注册到上级
     */
    private boolean autoRegisterPlatform = false;
 
    /**
     * 按需发送推流设备位置, 默认发送移动位置订阅时如果位置不变则不发送, 设置为false按照国标间隔持续发送
     */
    private boolean sendPositionOnDemand = true;
 
    /**
     * 部分设备会在短时间内发送大量注册, 导致协议栈内存溢出, 开启此项可以防止这部分设备注册, 避免服务崩溃,但是会降低系统性能, 描述如下
     * 默认值为 true。
     * 将此设置为 false 会使 Stack 在 Server Transaction 进入 TERMINATED 状态后关闭服务器套接字。
     * 这允许服务器防止客户端发起的基于 TCP 的拒绝服务攻击(即发起数百个客户端事务)。
     * 如果为 true(默认作),则堆栈将保持套接字打开,以便以牺牲线程和内存资源为代价来最大化性能 - 使自身容易受到 DOS 攻击。
     */
    private boolean sipCacheServerConnections = true;
 
    /**
     * 禁用date头,变相禁用了校时
     */
    private boolean disableDateHeader = false;
 
    /**
     * 同步业务分组时自动生成分组国标编号的模板,不配置则默认参考当前的sip域信息生成
     */
    private String groupSyncDeviceTemplate;
 
    /**
     * 与第三方进行分组同步时使用别名而不是分组ID, 如果没有设置此项为true,那么分组编号就是必须传递的。如果是设置为true则,自动为别名的分组生成新的编号
     */
    private boolean useAliasForGroupSync = false;
 
}