Commit 6afcd5176b89e213fed5d5904279c4095bfada9a

Authored by wangyimeng
1 parent 2d2832db

请求历史媒体下载增加回复事件处理ssrc与下级不一致情况

src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java
@@ -15,26 +15,26 @@ import javax.sip.InvalidArgumentException; @@ -15,26 +15,26 @@ import javax.sip.InvalidArgumentException;
15 import javax.sip.SipException; 15 import javax.sip.SipException;
16 import java.text.ParseException; 16 import java.text.ParseException;
17 17
18 -/**  
19 - * @description:设备能力接口,用于定义设备的控制、查询能力 18 +/**
  19 + * @description:设备能力接口,用于定义设备的控制、查询能力
20 * @author: swwheihei 20 * @author: swwheihei
21 - * @date: 2020年5月3日 下午9:16:34 21 + * @date: 2020年5月3日 下午9:16:34
22 */ 22 */
23 public interface ISIPCommander { 23 public interface ISIPCommander {
24 24
25 /** 25 /**
26 * 云台方向放控制,使用配置文件中的默认镜头移动速度 26 * 云台方向放控制,使用配置文件中的默认镜头移动速度
27 - * 27 + *
28 * @param device 控制设备 28 * @param device 控制设备
29 * @param channelId 预览通道 29 * @param channelId 预览通道
30 * @param leftRight 镜头左移右移 0:停止 1:左移 2:右移 30 * @param leftRight 镜头左移右移 0:停止 1:左移 2:右移
31 * @param upDown 镜头上移下移 0:停止 1:上移 2:下移 31 * @param upDown 镜头上移下移 0:停止 1:上移 2:下移
32 */ 32 */
33 void ptzdirectCmd(Device device,String channelId,int leftRight, int upDown) throws InvalidArgumentException, ParseException, SipException; 33 void ptzdirectCmd(Device device,String channelId,int leftRight, int upDown) throws InvalidArgumentException, ParseException, SipException;
34 - 34 +
35 /** 35 /**
36 * 云台方向放控制 36 * 云台方向放控制
37 - * 37 + *
38 * @param device 控制设备 38 * @param device 控制设备
39 * @param channelId 预览通道 39 * @param channelId 预览通道
40 * @param leftRight 镜头左移右移 0:停止 1:左移 2:右移 40 * @param leftRight 镜头左移右移 0:停止 1:左移 2:右移
@@ -42,28 +42,28 @@ public interface ISIPCommander { @@ -42,28 +42,28 @@ public interface ISIPCommander {
42 * @param moveSpeed 镜头移动速度 42 * @param moveSpeed 镜头移动速度
43 */ 43 */
44 void ptzdirectCmd(Device device,String channelId,int leftRight, int upDown, int moveSpeed) throws InvalidArgumentException, ParseException, SipException; 44 void ptzdirectCmd(Device device,String channelId,int leftRight, int upDown, int moveSpeed) throws InvalidArgumentException, ParseException, SipException;
45 - 45 +
46 /** 46 /**
47 * 云台缩放控制,使用配置文件中的默认镜头缩放速度 47 * 云台缩放控制,使用配置文件中的默认镜头缩放速度
48 - * 48 + *
49 * @param device 控制设备 49 * @param device 控制设备
50 * @param channelId 预览通道 50 * @param channelId 预览通道
51 * @param inOut 镜头放大缩小 0:停止 1:缩小 2:放大 51 * @param inOut 镜头放大缩小 0:停止 1:缩小 2:放大
52 */ 52 */
53 void ptzZoomCmd(Device device,String channelId,int inOut) throws InvalidArgumentException, ParseException, SipException; 53 void ptzZoomCmd(Device device,String channelId,int inOut) throws InvalidArgumentException, ParseException, SipException;
54 - 54 +
55 /** 55 /**
56 * 云台缩放控制 56 * 云台缩放控制
57 - * 57 + *
58 * @param device 控制设备 58 * @param device 控制设备
59 * @param channelId 预览通道 59 * @param channelId 预览通道
60 * @param inOut 镜头放大缩小 0:停止 1:缩小 2:放大 60 * @param inOut 镜头放大缩小 0:停止 1:缩小 2:放大
61 */ 61 */
62 void ptzZoomCmd(Device device,String channelId,int inOut, int moveSpeed) throws InvalidArgumentException, ParseException, SipException; 62 void ptzZoomCmd(Device device,String channelId,int inOut, int moveSpeed) throws InvalidArgumentException, ParseException, SipException;
63 - 63 +
64 /** 64 /**
65 * 云台控制,支持方向与缩放控制 65 * 云台控制,支持方向与缩放控制
66 - * 66 + *
67 * @param device 控制设备 67 * @param device 控制设备
68 * @param channelId 预览通道 68 * @param channelId 预览通道
69 * @param leftRight 镜头左移右移 0:停止 1:左移 2:右移 69 * @param leftRight 镜头左移右移 0:停止 1:左移 2:右移
@@ -73,10 +73,10 @@ public interface ISIPCommander { @@ -73,10 +73,10 @@ public interface ISIPCommander {
73 * @param zoomSpeed 镜头缩放速度 73 * @param zoomSpeed 镜头缩放速度
74 */ 74 */
75 void ptzCmd(Device device,String channelId,int leftRight, int upDown, int inOut, int moveSpeed, int zoomSpeed) throws InvalidArgumentException, SipException, ParseException; 75 void ptzCmd(Device device,String channelId,int leftRight, int upDown, int inOut, int moveSpeed, int zoomSpeed) throws InvalidArgumentException, SipException, ParseException;
76 - 76 +
77 /** 77 /**
78 * 前端控制,包括PTZ指令、FI指令、预置位指令、巡航指令、扫描指令和辅助开关指令 78 * 前端控制,包括PTZ指令、FI指令、预置位指令、巡航指令、扫描指令和辅助开关指令
79 - * 79 + *
80 * @param device 控制设备 80 * @param device 控制设备
81 * @param channelId 预览通道 81 * @param channelId 预览通道
82 * @param cmdCode 指令码 82 * @param cmdCode 指令码
@@ -85,7 +85,7 @@ public interface ISIPCommander { @@ -85,7 +85,7 @@ public interface ISIPCommander {
85 * @param combineCode2 组合码2 85 * @param combineCode2 组合码2
86 */ 86 */
87 void frontEndCmd(Device device, String channelId, int cmdCode, int parameter1, int parameter2, int combineCode2) throws SipException, InvalidArgumentException, ParseException; 87 void frontEndCmd(Device device, String channelId, int cmdCode, int parameter1, int parameter2, int combineCode2) throws SipException, InvalidArgumentException, ParseException;
88 - 88 +
89 /** 89 /**
90 * 前端控制指令(用于转发上级指令) 90 * 前端控制指令(用于转发上级指令)
91 * @param device 控制设备 91 * @param device 控制设备
@@ -103,7 +103,7 @@ public interface ISIPCommander { @@ -103,7 +103,7 @@ public interface ISIPCommander {
103 103
104 /** 104 /**
105 * 请求回放视频流 105 * 请求回放视频流
106 - * 106 + *
107 * @param device 视频设备 107 * @param device 视频设备
108 * @param channelId 预览通道 108 * @param channelId 预览通道
109 * @param startTime 开始时间,格式要求:yyyy-MM-dd HH:mm:ss 109 * @param startTime 开始时间,格式要求:yyyy-MM-dd HH:mm:ss
@@ -113,16 +113,16 @@ public interface ISIPCommander { @@ -113,16 +113,16 @@ public interface ISIPCommander {
113 113
114 /** 114 /**
115 * 请求历史媒体下载 115 * 请求历史媒体下载
116 - * 116 + *
117 * @param device 视频设备 117 * @param device 视频设备
118 * @param channelId 预览通道 118 * @param channelId 预览通道
119 * @param startTime 开始时间,格式要求:yyyy-MM-dd HH:mm:ss 119 * @param startTime 开始时间,格式要求:yyyy-MM-dd HH:mm:ss
120 * @param endTime 结束时间,格式要求:yyyy-MM-dd HH:mm:ss 120 * @param endTime 结束时间,格式要求:yyyy-MM-dd HH:mm:ss
121 * @param downloadSpeed 下载倍速参数 121 * @param downloadSpeed 下载倍速参数
122 - */ 122 + */
123 void downloadStreamCmd(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, Device device, String channelId, 123 void downloadStreamCmd(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, Device device, String channelId,
124 String startTime, String endTime, int downloadSpeed, InviteStreamCallback inviteStreamCallback, InviteStreamCallback hookEvent, 124 String startTime, String endTime, int downloadSpeed, InviteStreamCallback inviteStreamCallback, InviteStreamCallback hookEvent,
125 - SipSubscribe.Event errorEvent) throws InvalidArgumentException, SipException, ParseException; 125 + SipSubscribe.Event errorEvent,SipSubscribe.Event okEvent) throws InvalidArgumentException, SipException, ParseException;
126 126
127 /** 127 /**
128 * 视频流停止 128 * 视频流停止
@@ -150,7 +150,7 @@ public interface ISIPCommander { @@ -150,7 +150,7 @@ public interface ISIPCommander {
150 * 回放倍速播放 150 * 回放倍速播放
151 */ 151 */
152 void playSpeedCmd(Device device, StreamInfo streamInfo, Double speed) throws InvalidArgumentException, ParseException, SipException; 152 void playSpeedCmd(Device device, StreamInfo streamInfo, Double speed) throws InvalidArgumentException, ParseException, SipException;
153 - 153 +
154 /** 154 /**
155 * 回放控制 155 * 回放控制
156 * @param device 156 * @param device
@@ -162,55 +162,55 @@ public interface ISIPCommander { @@ -162,55 +162,55 @@ public interface ISIPCommander {
162 162
163 /** 163 /**
164 * 语音广播 164 * 语音广播
165 - * 165 + *
166 * @param device 视频设备 166 * @param device 视频设备
167 * @param channelId 预览通道 167 * @param channelId 预览通道
168 */ 168 */
169 void audioBroadcastCmd(Device device,String channelId); 169 void audioBroadcastCmd(Device device,String channelId);
170 - 170 +
171 /** 171 /**
172 * 语音广播 172 * 语音广播
173 - * 173 + *
174 * @param device 视频设备 174 * @param device 视频设备
175 */ 175 */
176 void audioBroadcastCmd(Device device, SipSubscribe.Event okEvent) throws InvalidArgumentException, SipException, ParseException; 176 void audioBroadcastCmd(Device device, SipSubscribe.Event okEvent) throws InvalidArgumentException, SipException, ParseException;
177 void audioBroadcastCmd(Device device) throws InvalidArgumentException, SipException, ParseException; 177 void audioBroadcastCmd(Device device) throws InvalidArgumentException, SipException, ParseException;
178 - 178 +
179 /** 179 /**
180 * 音视频录像控制 180 * 音视频录像控制
181 - * 181 + *
182 * @param device 视频设备 182 * @param device 视频设备
183 * @param channelId 预览通道 183 * @param channelId 预览通道
184 * @param recordCmdStr 录像命令:Record / StopRecord 184 * @param recordCmdStr 录像命令:Record / StopRecord
185 */ 185 */
186 void recordCmd(Device device, String channelId, String recordCmdStr, SipSubscribe.Event errorEvent, SipSubscribe.Event okEvent) throws InvalidArgumentException, SipException, ParseException; 186 void recordCmd(Device device, String channelId, String recordCmdStr, SipSubscribe.Event errorEvent, SipSubscribe.Event okEvent) throws InvalidArgumentException, SipException, ParseException;
187 - 187 +
188 /** 188 /**
189 * 远程启动控制命令 189 * 远程启动控制命令
190 - * 190 + *
191 * @param device 视频设备 191 * @param device 视频设备
192 */ 192 */
193 void teleBootCmd(Device device) throws InvalidArgumentException, SipException, ParseException; 193 void teleBootCmd(Device device) throws InvalidArgumentException, SipException, ParseException;
194 194
195 /** 195 /**
196 * 报警布防/撤防命令 196 * 报警布防/撤防命令
197 - * 197 + *
198 * @param device 视频设备 198 * @param device 视频设备
199 */ 199 */
200 void guardCmd(Device device, String guardCmdStr, SipSubscribe.Event errorEvent, SipSubscribe.Event okEvent) throws InvalidArgumentException, SipException, ParseException; 200 void guardCmd(Device device, String guardCmdStr, SipSubscribe.Event errorEvent, SipSubscribe.Event okEvent) throws InvalidArgumentException, SipException, ParseException;
201 - 201 +
202 /** 202 /**
203 * 报警复位命令 203 * 报警复位命令
204 - * 204 + *
205 * @param device 视频设备 205 * @param device 视频设备
206 * @param alarmMethod 报警方式(可选) 206 * @param alarmMethod 报警方式(可选)
207 * @param alarmType 报警类型(可选) 207 * @param alarmType 报警类型(可选)
208 */ 208 */
209 void alarmCmd(Device device, String alarmMethod, String alarmType, SipSubscribe.Event errorEvent, SipSubscribe.Event okEvent) throws InvalidArgumentException, SipException, ParseException; 209 void alarmCmd(Device device, String alarmMethod, String alarmType, SipSubscribe.Event errorEvent, SipSubscribe.Event okEvent) throws InvalidArgumentException, SipException, ParseException;
210 - 210 +
211 /** 211 /**
212 * 强制关键帧命令,设备收到此命令应立刻发送一个IDR帧 212 * 强制关键帧命令,设备收到此命令应立刻发送一个IDR帧
213 - * 213 + *
214 * @param device 视频设备 214 * @param device 视频设备
215 * @param channelId 预览通道 215 * @param channelId 预览通道
216 */ 216 */
@@ -230,58 +230,58 @@ public interface ISIPCommander { @@ -230,58 +230,58 @@ public interface ISIPCommander {
230 230
231 /** 231 /**
232 * 设备配置命令 232 * 设备配置命令
233 - * 233 + *
234 * @param device 视频设备 234 * @param device 视频设备
235 */ 235 */
236 void deviceConfigCmd(Device device); 236 void deviceConfigCmd(Device device);
237 - 237 +
238 /** 238 /**
239 * 设备配置命令:basicParam 239 * 设备配置命令:basicParam
240 - * 240 + *
241 * @param device 视频设备 241 * @param device 视频设备
242 * @param channelId 通道编码(可选) 242 * @param channelId 通道编码(可选)
243 * @param name 设备/通道名称(可选) 243 * @param name 设备/通道名称(可选)
244 * @param expiration 注册过期时间(可选) 244 * @param expiration 注册过期时间(可选)
245 * @param heartBeatInterval 心跳间隔时间(可选) 245 * @param heartBeatInterval 心跳间隔时间(可选)
246 * @param heartBeatCount 心跳超时次数(可选) 246 * @param heartBeatCount 心跳超时次数(可选)
247 - */ 247 + */
248 void deviceBasicConfigCmd(Device device, String channelId, String name, String expiration, String heartBeatInterval, String heartBeatCount, SipSubscribe.Event errorEvent) throws InvalidArgumentException, SipException, ParseException; 248 void deviceBasicConfigCmd(Device device, String channelId, String name, String expiration, String heartBeatInterval, String heartBeatCount, SipSubscribe.Event errorEvent) throws InvalidArgumentException, SipException, ParseException;
249 249
250 /** 250 /**
251 * 查询设备状态 251 * 查询设备状态
252 - * 252 + *
253 * @param device 视频设备 253 * @param device 视频设备
254 */ 254 */
255 void deviceStatusQuery(Device device, SipSubscribe.Event errorEvent) throws InvalidArgumentException, SipException, ParseException; 255 void deviceStatusQuery(Device device, SipSubscribe.Event errorEvent) throws InvalidArgumentException, SipException, ParseException;
256 - 256 +
257 /** 257 /**
258 * 查询设备信息 258 * 查询设备信息
259 - * 259 + *
260 * @param device 视频设备 260 * @param device 视频设备
261 - * @return 261 + * @return
262 */ 262 */
263 void deviceInfoQuery(Device device) throws InvalidArgumentException, SipException, ParseException; 263 void deviceInfoQuery(Device device) throws InvalidArgumentException, SipException, ParseException;
264 - 264 +
265 /** 265 /**
266 * 查询目录列表 266 * 查询目录列表
267 - * 267 + *
268 * @param device 视频设备 268 * @param device 视频设备
269 */ 269 */
270 void catalogQuery(Device device, int sn, SipSubscribe.Event errorEvent) throws SipException, InvalidArgumentException, ParseException; 270 void catalogQuery(Device device, int sn, SipSubscribe.Event errorEvent) throws SipException, InvalidArgumentException, ParseException;
271 - 271 +
272 /** 272 /**
273 * 查询录像信息 273 * 查询录像信息
274 - * 274 + *
275 * @param device 视频设备 275 * @param device 视频设备
276 * @param startTime 开始时间,格式要求:yyyy-MM-dd HH:mm:ss 276 * @param startTime 开始时间,格式要求:yyyy-MM-dd HH:mm:ss
277 * @param endTime 结束时间,格式要求:yyyy-MM-dd HH:mm:ss 277 * @param endTime 结束时间,格式要求:yyyy-MM-dd HH:mm:ss
278 * @param sn 278 * @param sn
279 */ 279 */
280 void recordInfoQuery(Device device, String channelId, String startTime, String endTime, int sn, Integer Secrecy, String type, SipSubscribe.Event okEvent, SipSubscribe.Event errorEvent) throws InvalidArgumentException, SipException, ParseException; 280 void recordInfoQuery(Device device, String channelId, String startTime, String endTime, int sn, Integer Secrecy, String type, SipSubscribe.Event okEvent, SipSubscribe.Event errorEvent) throws InvalidArgumentException, SipException, ParseException;
281 - 281 +
282 /** 282 /**
283 * 查询报警信息 283 * 查询报警信息
284 - * 284 + *
285 * @param device 视频设备 285 * @param device 视频设备
286 * @param startPriority 报警起始级别(可选) 286 * @param startPriority 报警起始级别(可选)
287 * @param endPriority 报警终止级别(可选) 287 * @param endPriority 报警终止级别(可选)
@@ -293,33 +293,33 @@ public interface ISIPCommander { @@ -293,33 +293,33 @@ public interface ISIPCommander {
293 */ 293 */
294 void alarmInfoQuery(Device device, String startPriority, String endPriority, String alarmMethod, 294 void alarmInfoQuery(Device device, String startPriority, String endPriority, String alarmMethod,
295 String alarmType, String startTime, String endTime, SipSubscribe.Event errorEvent) throws InvalidArgumentException, SipException, ParseException; 295 String alarmType, String startTime, String endTime, SipSubscribe.Event errorEvent) throws InvalidArgumentException, SipException, ParseException;
296 - 296 +
297 /** 297 /**
298 * 查询设备配置 298 * 查询设备配置
299 - * 299 + *
300 * @param device 视频设备 300 * @param device 视频设备
301 * @param channelId 通道编码(可选) 301 * @param channelId 通道编码(可选)
302 * @param configType 配置类型: 302 * @param configType 配置类型:
303 */ 303 */
304 void deviceConfigQuery(Device device, String channelId, String configType, SipSubscribe.Event errorEvent) throws InvalidArgumentException, SipException, ParseException; 304 void deviceConfigQuery(Device device, String channelId, String configType, SipSubscribe.Event errorEvent) throws InvalidArgumentException, SipException, ParseException;
305 - 305 +
306 /** 306 /**
307 * 查询设备预置位置 307 * 查询设备预置位置
308 - * 308 + *
309 * @param device 视频设备 309 * @param device 视频设备
310 */ 310 */
311 void presetQuery(Device device, String channelId, SipSubscribe.Event errorEvent) throws InvalidArgumentException, SipException, ParseException; 311 void presetQuery(Device device, String channelId, SipSubscribe.Event errorEvent) throws InvalidArgumentException, SipException, ParseException;
312 - 312 +
313 /** 313 /**
314 * 查询移动设备位置数据 314 * 查询移动设备位置数据
315 - * 315 + *
316 * @param device 视频设备 316 * @param device 视频设备
317 */ 317 */
318 void mobilePostitionQuery(Device device, SipSubscribe.Event errorEvent) throws InvalidArgumentException, SipException, ParseException; 318 void mobilePostitionQuery(Device device, SipSubscribe.Event errorEvent) throws InvalidArgumentException, SipException, ParseException;
319 319
320 /** 320 /**
321 * 订阅、取消订阅移动位置 321 * 订阅、取消订阅移动位置
322 - * 322 + *
323 * @param device 视频设备 323 * @param device 视频设备
324 * @return true = 命令发送成功 324 * @return true = 命令发送成功
325 */ 325 */
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
@@ -29,7 +29,6 @@ import org.springframework.beans.factory.annotation.Autowired; @@ -29,7 +29,6 @@ import org.springframework.beans.factory.annotation.Autowired;
29 import org.springframework.context.annotation.DependsOn; 29 import org.springframework.context.annotation.DependsOn;
30 import org.springframework.stereotype.Component; 30 import org.springframework.stereotype.Component;
31 import org.springframework.util.ObjectUtils; 31 import org.springframework.util.ObjectUtils;
32 -import org.springframework.util.StringUtils;  
33 32
34 import javax.sip.InvalidArgumentException; 33 import javax.sip.InvalidArgumentException;
35 import javax.sip.ResponseEvent; 34 import javax.sip.ResponseEvent;
@@ -57,7 +56,7 @@ public class SIPCommander implements ISIPCommander { @@ -57,7 +56,7 @@ public class SIPCommander implements ISIPCommander {
57 56
58 @Autowired 57 @Autowired
59 private SIPSender sipSender; 58 private SIPSender sipSender;
60 - 59 +
61 @Autowired 60 @Autowired
62 private SIPRequestHeaderProvider headerProvider; 61 private SIPRequestHeaderProvider headerProvider;
63 62
@@ -181,7 +180,7 @@ public class SIPCommander implements ISIPCommander { @@ -181,7 +180,7 @@ public class SIPCommander implements ISIPCommander {
181 ptzXml.append("<ControlPriority>5</ControlPriority>\r\n"); 180 ptzXml.append("<ControlPriority>5</ControlPriority>\r\n");
182 ptzXml.append("</Info>\r\n"); 181 ptzXml.append("</Info>\r\n");
183 ptzXml.append("</Control>\r\n"); 182 ptzXml.append("</Control>\r\n");
184 - 183 +
185 Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport())); 184 Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
186 185
187 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()),request); 186 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()),request);
@@ -244,8 +243,8 @@ public class SIPCommander implements ISIPCommander { @@ -244,8 +243,8 @@ public class SIPCommander implements ISIPCommander {
244 ptzXml.append("<ControlPriority>5</ControlPriority>\r\n"); 243 ptzXml.append("<ControlPriority>5</ControlPriority>\r\n");
245 ptzXml.append("</Info>\r\n"); 244 ptzXml.append("</Info>\r\n");
246 ptzXml.append("</Control>\r\n"); 245 ptzXml.append("</Control>\r\n");
247 -  
248 - 246 +
  247 +
249 Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport())); 248 Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
250 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()),request, errorEvent, okEvent); 249 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()),request, errorEvent, okEvent);
251 250
@@ -365,7 +364,8 @@ public class SIPCommander implements ISIPCommander { @@ -365,7 +364,8 @@ public class SIPCommander implements ISIPCommander {
365 */ 364 */
366 @Override 365 @Override
367 public void playbackStreamCmd(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, Device device, String channelId, 366 public void playbackStreamCmd(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, Device device, String channelId,
368 - String startTime, String endTime, InviteStreamCallback inviteStreamCallback, InviteStreamCallback hookEvent, 367 + String startTime, String endTime,
  368 + InviteStreamCallback inviteStreamCallback, InviteStreamCallback hookEvent,
369 SipSubscribe.Event okEvent, SipSubscribe.Event errorEvent) throws InvalidArgumentException, SipException, ParseException { 369 SipSubscribe.Event okEvent, SipSubscribe.Event errorEvent) throws InvalidArgumentException, SipException, ParseException {
370 370
371 371
@@ -411,7 +411,8 @@ public class SIPCommander implements ISIPCommander { @@ -411,7 +411,8 @@ public class SIPCommander implements ISIPCommander {
411 content.append("a=setup:active\r\n"); 411 content.append("a=setup:active\r\n");
412 content.append("a=connection:new\r\n"); 412 content.append("a=connection:new\r\n");
413 } 413 }
414 - } else { 414 + } else
  415 + {
415 if ("TCP-PASSIVE".equalsIgnoreCase(streamMode)) { 416 if ("TCP-PASSIVE".equalsIgnoreCase(streamMode)) {
416 content.append("m=video " + ssrcInfo.getPort() + " TCP/RTP/AVP 96 97 98 99\r\n"); 417 content.append("m=video " + ssrcInfo.getPort() + " TCP/RTP/AVP 96 97 98 99\r\n");
417 } else if ("TCP-ACTIVE".equalsIgnoreCase(streamMode)) { 418 } else if ("TCP-ACTIVE".equalsIgnoreCase(streamMode)) {
@@ -471,8 +472,9 @@ public class SIPCommander implements ISIPCommander { @@ -471,8 +472,9 @@ public class SIPCommander implements ISIPCommander {
471 */ 472 */
472 @Override 473 @Override
473 public void downloadStreamCmd(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, Device device, String channelId, 474 public void downloadStreamCmd(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, Device device, String channelId,
474 - String startTime, String endTime, int downloadSpeed, InviteStreamCallback inviteStreamCallback, InviteStreamCallback hookEvent,  
475 - SipSubscribe.Event errorEvent) throws InvalidArgumentException, SipException, ParseException { 475 + String startTime, String endTime, int downloadSpeed,
  476 + InviteStreamCallback inviteStreamCallback, InviteStreamCallback hookEvent,
  477 + SipSubscribe.Event errorEvent,SipSubscribe.Event okEvent) throws InvalidArgumentException, SipException, ParseException {
476 478
477 logger.info("{} 分配的ZLM为: {} [{}:{}]", ssrcInfo.getStream(), mediaServerItem.getId(), mediaServerItem.getIp(), ssrcInfo.getPort()); 479 logger.info("{} 分配的ZLM为: {} [{}:{}]", ssrcInfo.getStream(), mediaServerItem.getId(), mediaServerItem.getIp(), ssrcInfo.getPort());
478 String sdpIp; 480 String sdpIp;
@@ -541,10 +543,11 @@ public class SIPCommander implements ISIPCommander { @@ -541,10 +543,11 @@ public class SIPCommander implements ISIPCommander {
541 content.append("a=downloadspeed:" + downloadSpeed + "\r\n"); 543 content.append("a=downloadspeed:" + downloadSpeed + "\r\n");
542 544
543 content.append("y=" + ssrcInfo.getSsrc() + "\r\n");//ssrc 545 content.append("y=" + ssrcInfo.getSsrc() + "\r\n");//ssrc
544 - 546 +
545 HookSubscribeForStreamChange hookSubscribe = HookSubscribeFactory.on_stream_changed("rtp", ssrcInfo.getStream(), true, null, mediaServerItem.getId()); 547 HookSubscribeForStreamChange hookSubscribe = HookSubscribeFactory.on_stream_changed("rtp", ssrcInfo.getStream(), true, null, mediaServerItem.getId());
546 // 添加订阅 548 // 添加订阅
547 - subscribe.addSubscribe(hookSubscribe, (MediaServerItem mediaServerItemInUse, JSONObject json) -> { 549 + subscribe.addSubscribe(hookSubscribe, (MediaServerItem mediaServerItemInUse, JSONObject json) ->
  550 + {
548 hookEvent.call(new InviteStreamInfo(mediaServerItem, json,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()).getCallId(), "rtp", ssrcInfo.getStream())); 551 hookEvent.call(new InviteStreamInfo(mediaServerItem, json,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()).getCallId(), "rtp", ssrcInfo.getStream()));
549 subscribe.removeSubscribe(hookSubscribe); 552 subscribe.removeSubscribe(hookSubscribe);
550 hookSubscribe.getContent().put("regist", false); 553 hookSubscribe.getContent().put("regist", false);
@@ -567,10 +570,11 @@ public class SIPCommander implements ISIPCommander { @@ -567,10 +570,11 @@ public class SIPCommander implements ISIPCommander {
567 inviteStreamCallback.call(new InviteStreamInfo(mediaServerItem, null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()).getCallId(), "rtp", ssrcInfo.getStream())); 570 inviteStreamCallback.call(new InviteStreamInfo(mediaServerItem, null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()).getCallId(), "rtp", ssrcInfo.getStream()));
568 } 571 }
569 572
570 - sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent, okEvent -> {  
571 - ResponseEvent responseEvent = (ResponseEvent) okEvent.event; 573 + sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent, event -> {
  574 + ResponseEvent responseEvent = (ResponseEvent) event.event;
572 SIPResponse response = (SIPResponse) responseEvent.getResponse(); 575 SIPResponse response = (SIPResponse) responseEvent.getResponse();
573 streamSession.put(device.getDeviceId(), channelId, response.getCallIdHeader().getCallId(), ssrcInfo.getStream(), ssrcInfo.getSsrc(), mediaServerItem.getId(), response, VideoStreamSessionManager.SessionType.download); 576 streamSession.put(device.getDeviceId(), channelId, response.getCallIdHeader().getCallId(), ssrcInfo.getStream(), ssrcInfo.getSsrc(), mediaServerItem.getId(), response, VideoStreamSessionManager.SessionType.download);
  577 + okEvent.response(event);
574 }); 578 });
575 } 579 }
576 580
@@ -628,7 +632,7 @@ public class SIPCommander implements ISIPCommander { @@ -628,7 +632,7 @@ public class SIPCommander implements ISIPCommander {
628 broadcastXml.append("<TargetID>" + device.getDeviceId() + "</TargetID>\r\n"); 632 broadcastXml.append("<TargetID>" + device.getDeviceId() + "</TargetID>\r\n");
629 broadcastXml.append("</Notify>\r\n"); 633 broadcastXml.append("</Notify>\r\n");
630 634
631 - 635 +
632 636
633 Request request = headerProvider.createMessageRequest(device, broadcastXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport())); 637 Request request = headerProvider.createMessageRequest(device, broadcastXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
634 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request); 638 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request);
@@ -648,7 +652,7 @@ public class SIPCommander implements ISIPCommander { @@ -648,7 +652,7 @@ public class SIPCommander implements ISIPCommander {
648 broadcastXml.append("<TargetID>" + device.getDeviceId() + "</TargetID>\r\n"); 652 broadcastXml.append("<TargetID>" + device.getDeviceId() + "</TargetID>\r\n");
649 broadcastXml.append("</Notify>\r\n"); 653 broadcastXml.append("</Notify>\r\n");
650 654
651 - 655 +
652 656
653 Request request = headerProvider.createMessageRequest(device, broadcastXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport())); 657 Request request = headerProvider.createMessageRequest(device, broadcastXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
654 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent); 658 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
@@ -679,7 +683,7 @@ public class SIPCommander implements ISIPCommander { @@ -679,7 +683,7 @@ public class SIPCommander implements ISIPCommander {
679 cmdXml.append("<RecordCmd>" + recordCmdStr + "</RecordCmd>\r\n"); 683 cmdXml.append("<RecordCmd>" + recordCmdStr + "</RecordCmd>\r\n");
680 cmdXml.append("</Control>\r\n"); 684 cmdXml.append("</Control>\r\n");
681 685
682 - 686 +
683 687
684 Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport())); 688 Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
685 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent,okEvent); 689 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent,okEvent);
@@ -703,7 +707,7 @@ public class SIPCommander implements ISIPCommander { @@ -703,7 +707,7 @@ public class SIPCommander implements ISIPCommander {
703 cmdXml.append("<TeleBoot>Boot</TeleBoot>\r\n"); 707 cmdXml.append("<TeleBoot>Boot</TeleBoot>\r\n");
704 cmdXml.append("</Control>\r\n"); 708 cmdXml.append("</Control>\r\n");
705 709
706 - 710 +
707 711
708 Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport())); 712 Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
709 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request); 713 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request);
@@ -762,7 +766,7 @@ public class SIPCommander implements ISIPCommander { @@ -762,7 +766,7 @@ public class SIPCommander implements ISIPCommander {
762 } 766 }
763 cmdXml.append("</Control>\r\n"); 767 cmdXml.append("</Control>\r\n");
764 768
765 - 769 +
766 770
767 Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport())); 771 Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
768 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent,okEvent); 772 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent,okEvent);
@@ -791,7 +795,7 @@ public class SIPCommander implements ISIPCommander { @@ -791,7 +795,7 @@ public class SIPCommander implements ISIPCommander {
791 cmdXml.append("<IFameCmd>Send</IFameCmd>\r\n"); 795 cmdXml.append("<IFameCmd>Send</IFameCmd>\r\n");
792 cmdXml.append("</Control>\r\n"); 796 cmdXml.append("</Control>\r\n");
793 797
794 - 798 +
795 799
796 Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport())); 800 Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
797 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request); 801 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request);
@@ -802,7 +806,6 @@ public class SIPCommander implements ISIPCommander { @@ -802,7 +806,6 @@ public class SIPCommander implements ISIPCommander {
802 * 806 *
803 * @param device 视频设备 807 * @param device 视频设备
804 * @param channelId 通道id,非通道则是设备本身 808 * @param channelId 通道id,非通道则是设备本身
805 - * @param frontCmd 上级平台的指令,如果存在则直接下发  
806 * @param enabled 看守位使能:1 = 开启,0 = 关闭 809 * @param enabled 看守位使能:1 = 开启,0 = 关闭
807 * @param resetTime 自动归位时间间隔,开启看守位时使用,单位:秒(s) 810 * @param resetTime 自动归位时间间隔,开启看守位时使用,单位:秒(s)
808 * @param presetIndex 调用预置位编号,开启看守位时使用,取值范围0~255 811 * @param presetIndex 调用预置位编号,开启看守位时使用,取值范围0~255
@@ -840,7 +843,7 @@ public class SIPCommander implements ISIPCommander { @@ -840,7 +843,7 @@ public class SIPCommander implements ISIPCommander {
840 cmdXml.append("</HomePosition>\r\n"); 843 cmdXml.append("</HomePosition>\r\n");
841 cmdXml.append("</Control>\r\n"); 844 cmdXml.append("</Control>\r\n");
842 845
843 - 846 +
844 847
845 Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport())); 848 Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
846 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent,okEvent); 849 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent,okEvent);
@@ -903,7 +906,7 @@ public class SIPCommander implements ISIPCommander { @@ -903,7 +906,7 @@ public class SIPCommander implements ISIPCommander {
903 cmdXml.append("</BasicParam>\r\n"); 906 cmdXml.append("</BasicParam>\r\n");
904 cmdXml.append("</Control>\r\n"); 907 cmdXml.append("</Control>\r\n");
905 908
906 - 909 +
907 910
908 Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport())); 911 Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
909 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent); 912 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
@@ -926,7 +929,7 @@ public class SIPCommander implements ISIPCommander { @@ -926,7 +929,7 @@ public class SIPCommander implements ISIPCommander {
926 catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n"); 929 catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
927 catalogXml.append("</Query>\r\n"); 930 catalogXml.append("</Query>\r\n");
928 931
929 - 932 +
930 933
931 Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport())); 934 Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
932 935
@@ -950,7 +953,7 @@ public class SIPCommander implements ISIPCommander { @@ -950,7 +953,7 @@ public class SIPCommander implements ISIPCommander {
950 catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n"); 953 catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
951 catalogXml.append("</Query>\r\n"); 954 catalogXml.append("</Query>\r\n");
952 955
953 - 956 +
954 957
955 Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport())); 958 Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
956 959
@@ -975,7 +978,7 @@ public class SIPCommander implements ISIPCommander { @@ -975,7 +978,7 @@ public class SIPCommander implements ISIPCommander {
975 catalogXml.append(" <DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n"); 978 catalogXml.append(" <DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
976 catalogXml.append("</Query>\r\n"); 979 catalogXml.append("</Query>\r\n");
977 980
978 - 981 +
979 982
980 Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport())); 983 Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
981 984
@@ -1020,7 +1023,7 @@ public class SIPCommander implements ISIPCommander { @@ -1020,7 +1023,7 @@ public class SIPCommander implements ISIPCommander {
1020 } 1023 }
1021 recordInfoXml.append("</Query>\r\n"); 1024 recordInfoXml.append("</Query>\r\n");
1022 1025
1023 - 1026 +
1024 1027
1025 Request request = headerProvider.createMessageRequest(device, recordInfoXml.toString(), 1028 Request request = headerProvider.createMessageRequest(device, recordInfoXml.toString(),
1026 SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport())); 1029 SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
@@ -1071,7 +1074,7 @@ public class SIPCommander implements ISIPCommander { @@ -1071,7 +1074,7 @@ public class SIPCommander implements ISIPCommander {
1071 } 1074 }
1072 cmdXml.append("</Query>\r\n"); 1075 cmdXml.append("</Query>\r\n");
1073 1076
1074 - 1077 +
1075 1078
1076 Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport())); 1079 Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
1077 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent); 1080 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
@@ -1101,7 +1104,7 @@ public class SIPCommander implements ISIPCommander { @@ -1101,7 +1104,7 @@ public class SIPCommander implements ISIPCommander {
1101 cmdXml.append("<ConfigType>" + configType + "</ConfigType>\r\n"); 1104 cmdXml.append("<ConfigType>" + configType + "</ConfigType>\r\n");
1102 cmdXml.append("</Query>\r\n"); 1105 cmdXml.append("</Query>\r\n");
1103 1106
1104 - 1107 +
1105 1108
1106 Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport())); 1109 Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
1107 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent); 1110 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
@@ -1128,7 +1131,7 @@ public class SIPCommander implements ISIPCommander { @@ -1128,7 +1131,7 @@ public class SIPCommander implements ISIPCommander {
1128 } 1131 }
1129 cmdXml.append("</Query>\r\n"); 1132 cmdXml.append("</Query>\r\n");
1130 1133
1131 - 1134 +
1132 1135
1133 Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport())); 1136 Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
1134 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent); 1137 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
@@ -1152,7 +1155,7 @@ public class SIPCommander implements ISIPCommander { @@ -1152,7 +1155,7 @@ public class SIPCommander implements ISIPCommander {
1152 mobilePostitionXml.append("<Interval>60</Interval>\r\n"); 1155 mobilePostitionXml.append("<Interval>60</Interval>\r\n");
1153 mobilePostitionXml.append("</Query>\r\n"); 1156 mobilePostitionXml.append("</Query>\r\n");
1154 1157
1155 - 1158 +
1156 1159
1157 Request request = headerProvider.createMessageRequest(device, mobilePostitionXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport())); 1160 Request request = headerProvider.createMessageRequest(device, mobilePostitionXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
1158 1161
@@ -1237,7 +1240,7 @@ public class SIPCommander implements ISIPCommander { @@ -1237,7 +1240,7 @@ public class SIPCommander implements ISIPCommander {
1237 } 1240 }
1238 cmdXml.append("</Query>\r\n"); 1241 cmdXml.append("</Query>\r\n");
1239 1242
1240 - 1243 +
1241 1244
1242 Request request = headerProvider.createSubscribeRequest(device, cmdXml.toString(), null, expires, "presence",sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport())); 1245 Request request = headerProvider.createSubscribeRequest(device, cmdXml.toString(), null, expires, "presence",sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
1243 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request); 1246 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request);
@@ -1287,14 +1290,14 @@ public class SIPCommander implements ISIPCommander { @@ -1287,14 +1290,14 @@ public class SIPCommander implements ISIPCommander {
1287 } 1290 }
1288 dragXml.append(cmdString); 1291 dragXml.append(cmdString);
1289 dragXml.append("</Control>\r\n"); 1292 dragXml.append("</Control>\r\n");
1290 - 1293 +
1291 Request request = headerProvider.createMessageRequest(device, dragXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport())); 1294 Request request = headerProvider.createMessageRequest(device, dragXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
1292 logger.debug("拉框信令: " + request.toString()); 1295 logger.debug("拉框信令: " + request.toString());
1293 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()),request); 1296 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()),request);
1294 } 1297 }
1295 1298
1296 1299
1297 - 1300 +
1298 1301
1299 1302
1300 /** 1303 /**
@@ -1398,7 +1401,7 @@ public class SIPCommander implements ISIPCommander { @@ -1398,7 +1401,7 @@ public class SIPCommander implements ISIPCommander {
1398 deviceStatusXml.append("</info>\r\n"); 1401 deviceStatusXml.append("</info>\r\n");
1399 deviceStatusXml.append("</Notify>\r\n"); 1402 deviceStatusXml.append("</Notify>\r\n");
1400 1403
1401 - 1404 +
1402 Request request = headerProvider.createMessageRequest(device, deviceStatusXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport())); 1405 Request request = headerProvider.createMessageRequest(device, deviceStatusXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
1403 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()),request); 1406 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()),request);
1404 1407
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
@@ -258,7 +258,8 @@ public class PlayServiceImpl implements IPlayService { @@ -258,7 +258,8 @@ public class PlayServiceImpl implements IPlayService {
258 return; 258 return;
259 } 259 }
260 try { 260 try {
261 - cmder.playStreamCmd(mediaServerItem, ssrcInfo, device, channelId, (MediaServerItem mediaServerItemInuse, JSONObject response) -> { 261 + cmder.playStreamCmd(mediaServerItem, ssrcInfo, device, channelId, (MediaServerItem mediaServerItemInuse, JSONObject response) ->
  262 + {
262 logger.info("收到订阅消息: " + response.toJSONString()); 263 logger.info("收到订阅消息: " + response.toJSONString());
263 dynamicTask.stop(timeOutTaskKey); 264 dynamicTask.stop(timeOutTaskKey);
264 265
@@ -273,7 +274,8 @@ public class PlayServiceImpl implements IPlayService { @@ -273,7 +274,8 @@ public class PlayServiceImpl implements IPlayService {
273 logger.info("[请求截图]: " + fileName); 274 logger.info("[请求截图]: " + fileName);
274 zlmresTfulUtils.getSnap(mediaServerItemInuse, streamUrl, 15, 1, path, fileName); 275 zlmresTfulUtils.getSnap(mediaServerItemInuse, streamUrl, 15, 1, path, fileName);
275 276
276 - }, (event) -> { 277 + }, (event) ->
  278 + {
277 ResponseEvent responseEvent = (ResponseEvent) event.event; 279 ResponseEvent responseEvent = (ResponseEvent) event.event;
278 String contentString = new String(responseEvent.getResponse().getRawContent()); 280 String contentString = new String(responseEvent.getResponse().getRawContent());
279 // 获取ssrc 281 // 获取ssrc
@@ -322,7 +324,8 @@ public class PlayServiceImpl implements IPlayService { @@ -322,7 +324,8 @@ public class PlayServiceImpl implements IPlayService {
322 324
323 } 325 }
324 } 326 }
325 - }, (event) -> { 327 + }, (event) ->
  328 + {
326 dynamicTask.stop(timeOutTaskKey); 329 dynamicTask.stop(timeOutTaskKey);
327 mediaServerService.closeRTPServer(mediaServerItem, ssrcInfo.getStream()); 330 mediaServerService.closeRTPServer(mediaServerItem, ssrcInfo.getStream());
328 // 释放ssrc 331 // 释放ssrc
@@ -513,7 +516,8 @@ public class PlayServiceImpl implements IPlayService { @@ -513,7 +516,8 @@ public class PlayServiceImpl implements IPlayService {
513 516
514 try { 517 try {
515 cmder.playbackStreamCmd(mediaServerItem, ssrcInfo, device, channelId, startTime, endTime, infoCallBack, 518 cmder.playbackStreamCmd(mediaServerItem, ssrcInfo, device, channelId, startTime, endTime, infoCallBack,
516 - hookEvent, eventResult -> { 519 + hookEvent, eventResult ->
  520 + {
517 if (eventResult.type == SipSubscribe.EventResultType.response) { 521 if (eventResult.type == SipSubscribe.EventResultType.response) {
518 ResponseEvent responseEvent = (ResponseEvent) eventResult.event; 522 ResponseEvent responseEvent = (ResponseEvent) eventResult.event;
519 String contentString = new String(responseEvent.getResponse().getRawContent()); 523 String contentString = new String(responseEvent.getResponse().getRawContent());
@@ -582,6 +586,7 @@ public class PlayServiceImpl implements IPlayService { @@ -582,6 +586,7 @@ public class PlayServiceImpl implements IPlayService {
582 if (device == null) { 586 if (device == null) {
583 return; 587 return;
584 } 588 }
  589 + //获取录像下载的服务,配置文件中的record-assist-port不为0
585 MediaServerItem newMediaServerItem = getNewMediaServerItemHasAssist(device); 590 MediaServerItem newMediaServerItem = getNewMediaServerItemHasAssist(device);
586 if (newMediaServerItem == null) { 591 if (newMediaServerItem == null) {
587 PlayBackResult<StreamInfo> downloadResult = new PlayBackResult<>(); 592 PlayBackResult<StreamInfo> downloadResult = new PlayBackResult<>();
@@ -651,7 +656,59 @@ public class PlayServiceImpl implements IPlayService { @@ -651,7 +656,59 @@ public class PlayServiceImpl implements IPlayService {
651 downloadResult.setMediaServerItem(inviteStreamInfo.getMediaServerItem()); 656 downloadResult.setMediaServerItem(inviteStreamInfo.getMediaServerItem());
652 downloadResult.setResponse(inviteStreamInfo.getResponse()); 657 downloadResult.setResponse(inviteStreamInfo.getResponse());
653 hookCallBack.call(downloadResult); 658 hookCallBack.call(downloadResult);
654 - }, errorEvent); 659 + }, errorEvent, eventResult ->
  660 + {
  661 + if (eventResult.type == SipSubscribe.EventResultType.response) {
  662 + ResponseEvent responseEvent = (ResponseEvent) eventResult.event;
  663 + String contentString = new String(responseEvent.getResponse().getRawContent());
  664 + // 获取ssrc
  665 + int ssrcIndex = contentString.indexOf("y=");
  666 + // 检查是否有y字段
  667 + if (ssrcIndex >= 0) {
  668 + //ssrc规定长度为10字节,不取余下长度以避免后续还有“f=”字段 TODO 后续对不规范的非10位ssrc兼容
  669 + String ssrcInResponse = contentString.substring(ssrcIndex + 2, ssrcIndex + 12);
  670 + // 查询到ssrc不一致且开启了ssrc校验则需要针对处理
  671 + if (ssrcInfo.getSsrc().equals(ssrcInResponse)) {
  672 + return;
  673 + }
  674 + logger.info("[回放消息] 收到invite 200, 发现下级自定义了ssrc: {}", ssrcInResponse);
  675 + if (!mediaServerItem.isRtpEnable() || device.isSsrcCheck()) {
  676 + logger.info("[回放消息] SSRC修正 {}->{}", ssrcInfo.getSsrc(), ssrcInResponse);
  677 +
  678 + if (!mediaServerItem.getSsrcConfig().checkSsrc(ssrcInResponse)) {
  679 + // ssrc 不可用
  680 + // 释放ssrc
  681 + mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
  682 + streamSession.remove(device.getDeviceId(), channelId, ssrcInfo.getStream());
  683 + eventResult.msg = "下级自定义了ssrc,但是此ssrc不可用";
  684 + eventResult.statusCode = 400;
  685 + errorEvent.response(eventResult);
  686 + return;
  687 + }
  688 +
  689 + // 单端口模式streamId也有变化,需要重新设置监听
  690 + if (!mediaServerItem.isRtpEnable()) {
  691 + // 添加订阅
  692 + HookSubscribeForStreamChange hookSubscribe = HookSubscribeFactory.on_stream_changed("rtp", ssrcInfo.getStream(), true, "rtsp", mediaServerItem.getId());
  693 + subscribe.removeSubscribe(hookSubscribe);
  694 + hookSubscribe.getContent().put("stream", String.format("%08x", Integer.parseInt(ssrcInResponse)).toUpperCase());
  695 + subscribe.addSubscribe(hookSubscribe, (MediaServerItem mediaServerItemInUse, JSONObject response) -> {
  696 + logger.info("[ZLM HOOK] ssrc修正后收到订阅消息: " + response.toJSONString());
  697 + dynamicTask.stop(downLoadTimeOutTaskKey);
  698 + // hook响应,TODO 此处待处理
  699 +// onPublishHandlerForPlayback(mediaServerItemInUse, response, device.getDeviceId(), channelId, playBackCallback);
  700 +// hookCallBack.call(new InviteStreamInfo(mediaServerItem, null, eventResult.callId, "rtp", ssrcInfo.getStream()));
  701 + });
  702 + }
  703 + // 关闭rtp server
  704 + mediaServerService.closeRTPServer(mediaServerItem, ssrcInfo.getStream());
  705 + // 重新开启ssrc server
  706 + mediaServerService.openRTPServer(mediaServerItem, ssrcInfo.getStream(), ssrcInResponse, device.isSsrcCheck(), true, ssrcInfo.getPort());
  707 + }
  708 + }
  709 + }
  710 +
  711 + });
655 } catch (InvalidArgumentException | SipException | ParseException e) { 712 } catch (InvalidArgumentException | SipException | ParseException e) {
656 logger.error("[命令发送失败] 录像下载: {}", e.getMessage()); 713 logger.error("[命令发送失败] 录像下载: {}", e.getMessage());
657 714