648540858
2022-03-04 cadd0ee0387c7c4af4b6d8eb10641ef006174837
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
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
package com.genersoft.iot.vmp.gb28181.transmit.cmd;
 
import com.genersoft.iot.vmp.common.StreamInfo;
import com.genersoft.iot.vmp.gb28181.bean.Device;
import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
import com.genersoft.iot.vmp.media.zlm.ZLMHttpHookSubscribe;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
import com.genersoft.iot.vmp.service.bean.SSRCInfo;
 
/**    
 * @description:设备能力接口,用于定义设备的控制、查询能力   
 * @author: swwheihei
 * @date:   2020年5月3日 下午9:16:34     
 */
public interface ISIPCommander {
 
    /**
     * 云台方向放控制,使用配置文件中的默认镜头移动速度
     * 
     * @param device  控制设备
     * @param channelId  预览通道
     * @param leftRight  镜头左移右移 0:停止 1:左移 2:右移
     * @param upDown     镜头上移下移 0:停止 1:上移 2:下移
     * @param moveSpeed  镜头移动速度
     */
    boolean ptzdirectCmd(Device device,String channelId,int leftRight, int upDown);
    
    /**
     * 云台方向放控制
     * 
     * @param device  控制设备
     * @param channelId  预览通道
     * @param leftRight  镜头左移右移 0:停止 1:左移 2:右移
     * @param upDown     镜头上移下移 0:停止 1:上移 2:下移
     * @param moveSpeed  镜头移动速度
     */
    boolean ptzdirectCmd(Device device,String channelId,int leftRight, int upDown, int moveSpeed);
    
    /**
     * 云台缩放控制,使用配置文件中的默认镜头缩放速度
     * 
     * @param device  控制设备
     * @param channelId  预览通道
     * @param inOut      镜头放大缩小 0:停止 1:缩小 2:放大
     */
    boolean ptzZoomCmd(Device device,String channelId,int inOut);
    
    /**
     * 云台缩放控制
     * 
     * @param device  控制设备
     * @param channelId  预览通道
     * @param inOut      镜头放大缩小 0:停止 1:缩小 2:放大
     * @param zoomSpeed  镜头缩放速度
     */
    boolean ptzZoomCmd(Device device,String channelId,int inOut, int moveSpeed);
    
    /**
     * 云台控制,支持方向与缩放控制
     * 
     * @param device  控制设备
     * @param channelId  预览通道
     * @param leftRight  镜头左移右移 0:停止 1:左移 2:右移
     * @param upDown     镜头上移下移 0:停止 1:上移 2:下移
     * @param inOut      镜头放大缩小 0:停止 1:缩小 2:放大
     * @param moveSpeed  镜头移动速度
     * @param zoomSpeed  镜头缩放速度
     */
    boolean ptzCmd(Device device,String channelId,int leftRight, int upDown, int inOut, int moveSpeed, int zoomSpeed);
    
    /**
     * 前端控制,包括PTZ指令、FI指令、预置位指令、巡航指令、扫描指令和辅助开关指令
     * 
     * @param device          控制设备
     * @param channelId        预览通道
     * @param cmdCode        指令码
     * @param parameter1    数据1
     * @param parameter2    数据2
     * @param combineCode2    组合码2
     */
    boolean frontEndCmd(Device device, String channelId, int cmdCode, int parameter1, int parameter2, int combineCode2);
    
    /**
     * 前端控制指令(用于转发上级指令)
     * @param device        控制设备
     * @param channelId        预览通道
     * @param cmdString        前端控制指令串
     */
    boolean fronEndCmd(Device device, String channelId, String cmdString);
 
    /**
     * 请求预览视频流
     * @param device  视频设备
     * @param channelId  预览通道
     */
    void playStreamCmd(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, Device device, String channelId, ZLMHttpHookSubscribe.Event event, SipSubscribe.Event errorEvent);
    
    /**
     * 请求回放视频流
     * 
     * @param device  视频设备
     * @param channelId  预览通道
     * @param startTime 开始时间,格式要求:yyyy-MM-dd HH:mm:ss
     * @param endTime 结束时间,格式要求:yyyy-MM-dd HH:mm:ss
     */
    void playbackStreamCmd(MediaServerItem mediaServerItem, SSRCInfo ssrcInf, Device device, String channelId, String startTime, String endTime, ZLMHttpHookSubscribe.Event event, SipSubscribe.Event errorEvent);
 
    /**
     * 请求历史媒体下载
     * 
     * @param device  视频设备
     * @param channelId  预览通道
     * @param startTime 开始时间,格式要求:yyyy-MM-dd HH:mm:ss
     * @param endTime 结束时间,格式要求:yyyy-MM-dd HH:mm:ss
     * @param downloadSpeed 下载倍速参数
     */ 
    void downloadStreamCmd(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, Device device, String channelId, String startTime, String endTime, String downloadSpeed, ZLMHttpHookSubscribe.Event event, SipSubscribe.Event errorEvent);
 
    /**
     * 视频流停止
     */
    void streamByeCmd(String deviceId, String channelId, String stream, SipSubscribe.Event okEvent);
    void streamByeCmd(String deviceId, String channelId, String stream);
 
    /**
     * 回放暂停
     */
    void playPauseCmd(Device device, StreamInfo streamInfo);
 
    /**
     * 回放恢复
     */
    void playResumeCmd(Device device, StreamInfo streamInfo);
 
    /**
     * 回放拖动播放
     */
    void playSeekCmd(Device device, StreamInfo streamInfo, long seekTime);
 
    /**
     * 回放倍速播放
     */
    void playSpeedCmd(Device device, StreamInfo streamInfo, Double speed);
 
    /**
     * 语音广播
     * 
     * @param device  视频设备
     * @param channelId  预览通道
     */
    boolean audioBroadcastCmd(Device device,String channelId);
    
    /**
     * 语音广播
     * 
     * @param device  视频设备
     */
    void audioBroadcastCmd(Device device, SipSubscribe.Event okEvent);
    boolean audioBroadcastCmd(Device device);
    
    /**
     * 音视频录像控制
     * 
     * @param device          视频设备
     * @param channelId      预览通道
     * @param recordCmdStr    录像命令:Record / StopRecord
     */
    boolean recordCmd(Device device, String channelId, String recordCmdStr, SipSubscribe.Event errorEvent);
    
    /**
     * 远程启动控制命令
     * 
     * @param device    视频设备
     */
    boolean teleBootCmd(Device device);
 
    /**
     * 报警布防/撤防命令
     * 
     * @param device      视频设备
     * @param setGuard    true: SetGuard, false: ResetGuard
     */
    boolean guardCmd(Device device, String guardCmdStr, SipSubscribe.Event errorEvent);
    
    /**
     * 报警复位命令
     * 
     * @param device        视频设备
     * @param alarmMethod    报警方式(可选)
     * @param alarmType        报警类型(可选)
     */
    boolean alarmCmd(Device device, String alarmMethod, String alarmType, SipSubscribe.Event errorEvent);
    
    /**
     * 强制关键帧命令,设备收到此命令应立刻发送一个IDR帧
     * 
     * @param device  视频设备
     * @param channelId  预览通道
     */
    boolean iFrameCmd(Device device, String channelId);
    
    /**
     * 看守位控制命令
     * 
     * @param device        视频设备
     * @param enabled        看守位使能:1 = 开启,0 = 关闭
     * @param resetTime        自动归位时间间隔,开启看守位时使用,单位:秒(s)
     * @param presetIndex    调用预置位编号,开启看守位时使用,取值范围0~255
     */
    boolean homePositionCmd(Device device, String channelId, String enabled, String resetTime, String presetIndex, SipSubscribe.Event errorEvent);
    
    /**
     * 设备配置命令
     * 
     * @param device  视频设备
     */
    boolean deviceConfigCmd(Device device);
    
        /**
     * 设备配置命令:basicParam
     * 
     * @param device              视频设备
     * @param channelId            通道编码(可选)
     * @param name                设备/通道名称(可选)
     * @param expiration        注册过期时间(可选)
     * @param heartBeatInterval    心跳间隔时间(可选)
     * @param heartBeatCount    心跳超时次数(可选)
     */  
    boolean deviceBasicConfigCmd(Device device, String channelId, String name, String expiration, String heartBeatInterval, String heartBeatCount, SipSubscribe.Event errorEvent);
    
    /**
     * 查询设备状态
     * 
     * @param device 视频设备
     */
    boolean deviceStatusQuery(Device device, SipSubscribe.Event errorEvent);
    
    /**
     * 查询设备信息
     * 
     * @param device 视频设备
     * @return 
     */
    boolean deviceInfoQuery(Device device);
    
    /**
     * 查询目录列表
     * 
     * @param device 视频设备
     */
    boolean catalogQuery(Device device, SipSubscribe.Event errorEvent);
    
    /**
     * 查询录像信息
     * 
     * @param device 视频设备
     * @param startTime 开始时间,格式要求:yyyy-MM-dd HH:mm:ss
     * @param endTime 结束时间,格式要求:yyyy-MM-dd HH:mm:ss
     * @param sn
     */
    boolean recordInfoQuery(Device device, String channelId, String startTime, String endTime, int sn,  Integer Secrecy, String type, SipSubscribe.Event okEvent, SipSubscribe.Event errorEvent);
    
    /**
     * 查询报警信息
     * 
     * @param device        视频设备
     * @param startPriority    报警起始级别(可选)
     * @param endPriority    报警终止级别(可选)
     * @param alarmMethod    报警方式条件(可选)
     * @param alarmType        报警类型
     * @param startTime        报警发生起始时间(可选)
     * @param endTime        报警发生终止时间(可选)
     * @return                true = 命令发送成功
     */
    boolean alarmInfoQuery(Device device, String startPriority, String endPriority, String alarmMethod,
                            String alarmType, String startTime, String endTime, SipSubscribe.Event errorEvent);    
    
    /**
     * 查询设备配置
     * 
     * @param device         视频设备
     * @param channelId        通道编码(可选)
     * @param configType    配置类型:
     */
    boolean deviceConfigQuery(Device device, String channelId, String configType,  SipSubscribe.Event errorEvent);
    
    /**
     * 查询设备预置位置
     * 
     * @param device 视频设备
     */
    boolean presetQuery(Device device, String channelId, SipSubscribe.Event errorEvent);
    
    /**
     * 查询移动设备位置数据
     * 
     * @param device 视频设备
     */
    boolean mobilePostitionQuery(Device device, SipSubscribe.Event errorEvent);
 
    /**
     * 订阅、取消订阅移动位置
     * 
     * @param device    视频设备
     * @param expires    订阅超时时间(值=0时为取消订阅)
     * @param interval    上报时间间隔
     * @return            true = 命令发送成功
     */
    boolean mobilePositionSubscribe(Device device, int expires, int interval);
 
    /**
     * 订阅、取消订阅报警信息
     * @param device        视频设备
     * @param expires        订阅过期时间(0 = 取消订阅)
     * @param startPriority    报警起始级别(可选)
     * @param endPriority    报警终止级别(可选)
     * @param alarmMethods    报警方式条件(可选)
     * @param alarmType        报警类型
     * @param startTime        报警发生起始时间(可选)
     * @param endTime        报警发生终止时间(可选)
     * @return                true = 命令发送成功
     */
    boolean alarmSubscribe(Device device, int expires, String startPriority, String endPriority, String alarmMethod, String alarmType, String startTime, String endTime);
 
    /**
     * 订阅、取消订阅目录信息
     * @param device        视频设备
     * @return                true = 命令发送成功
     */
    boolean catalogSubscribe(Device device, SipSubscribe.Event okEvent ,SipSubscribe.Event errorEvent);
 
    /**
     * 拉框控制命令
     *
     * @param device    控制设备
     * @param channelId 通道id
     * @param cmdString 前端控制指令串
     */
    boolean dragZoomCmd(Device device, String channelId, String cmdString);
}