|
|
@ -332,17 +332,17 @@ public class SIPCommander implements ISIPCommander { |
|
|
|
|
|
|
|
/** |
|
|
|
* 请求预览视频流 |
|
|
|
* @param device 视频设备 |
|
|
|
* @param channelId 预览通道 |
|
|
|
* @param event hook订阅 |
|
|
|
* @param errorEvent sip错误订阅 |
|
|
|
*/ |
|
|
|
* @param device 视频设备 |
|
|
|
* @param channelId 预览通道 |
|
|
|
* @param event hook订阅 |
|
|
|
* @param errorEvent sip错误订阅 |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public void playStreamCmd(Device device, String channelId, ZLMHttpHookSubscribe.Event event, SipSubscribe.Event errorEvent) { |
|
|
|
String streamId = null; |
|
|
|
try { |
|
|
|
if (device == null) return; |
|
|
|
String ssrc = streamSession.createPlaySsrc(); |
|
|
|
String streamId = null; |
|
|
|
if (rtpEnable) { |
|
|
|
streamId = String.format("gb_play_%s_%s", device.getDeviceId(), channelId); |
|
|
|
}else { |
|
|
@ -444,9 +444,12 @@ public class SIPCommander implements ISIPCommander { |
|
|
|
|
|
|
|
Request request = headerProvider.createInviteRequest(device, channelId, content.toString(), null, "FromInvt" + tm, null, ssrc, callIdHeader); |
|
|
|
|
|
|
|
ClientTransaction transaction = transmitRequest(device, request, errorEvent); |
|
|
|
streamSession.put(streamId,ssrc, transaction); |
|
|
|
|
|
|
|
ClientTransaction transaction = transmitRequest(device, request, (e -> { |
|
|
|
streamSession.remove(device.getDeviceId(), channelId); |
|
|
|
errorEvent.response(e); |
|
|
|
})); |
|
|
|
streamSession.put(device.getDeviceId(), channelId ,ssrc,streamId, transaction); |
|
|
|
|
|
|
|
} catch ( SipException | ParseException | InvalidArgumentException e) { |
|
|
|
e.printStackTrace(); |
|
|
|
} |
|
|
@ -552,7 +555,7 @@ public class SIPCommander implements ISIPCommander { |
|
|
|
Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, "fromplybck" + tm, null, callIdHeader); |
|
|
|
|
|
|
|
ClientTransaction transaction = transmitRequest(device, request, errorEvent); |
|
|
|
streamSession.put(streamId, ssrc, transaction); |
|
|
|
streamSession.put(device.getDeviceId(), channelId, ssrc, streamId, transaction); |
|
|
|
|
|
|
|
} catch ( SipException | ParseException | InvalidArgumentException e) { |
|
|
|
e.printStackTrace(); |
|
|
@ -566,17 +569,17 @@ public class SIPCommander implements ISIPCommander { |
|
|
|
* |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public void streamByeCmd(String ssrc) { |
|
|
|
streamByeCmd(ssrc, null); |
|
|
|
public void streamByeCmd(String deviceId, String channelId) { |
|
|
|
streamByeCmd(deviceId, channelId, null); |
|
|
|
} |
|
|
|
@Override |
|
|
|
public void streamByeCmd(String streamId, SipSubscribe.Event okEvent) { |
|
|
|
public void streamByeCmd(String deviceId, String channelId, SipSubscribe.Event okEvent) { |
|
|
|
|
|
|
|
try { |
|
|
|
ClientTransaction transaction = streamSession.get(streamId); |
|
|
|
ClientTransaction transaction = streamSession.getTransaction(deviceId, channelId); |
|
|
|
// 服务重启后
|
|
|
|
if (transaction == null) { |
|
|
|
StreamInfo streamInfo = redisCatchStorage.queryPlayByStreamId(streamId); |
|
|
|
StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(deviceId, channelId); |
|
|
|
if (streamInfo != null) { |
|
|
|
|
|
|
|
} |
|
|
@ -613,14 +616,9 @@ public class SIPCommander implements ISIPCommander { |
|
|
|
} |
|
|
|
|
|
|
|
dialog.sendRequest(clientTransaction); |
|
|
|
|
|
|
|
streamSession.remove(streamId); |
|
|
|
zlmrtpServerFactory.closeRTPServer(streamId); |
|
|
|
} catch (TransactionDoesNotExistException e) { |
|
|
|
e.printStackTrace(); |
|
|
|
} catch (SipException e) { |
|
|
|
e.printStackTrace(); |
|
|
|
} catch (ParseException e) { |
|
|
|
zlmrtpServerFactory.closeRTPServer(streamSession.getStreamId(deviceId, channelId)); |
|
|
|
streamSession.remove(deviceId, channelId); |
|
|
|
} catch (SipException | ParseException e) { |
|
|
|
e.printStackTrace(); |
|
|
|
} |
|
|
|
} |
|
|
@ -641,7 +639,6 @@ public class SIPCommander implements ISIPCommander { |
|
|
|
* 语音广播 |
|
|
|
* |
|
|
|
* @param device 视频设备 |
|
|
|
* @param channelId 预览通道 |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public boolean audioBroadcastCmd(Device device) { |
|
|
@ -1140,7 +1137,7 @@ public class SIPCommander implements ISIPCommander { |
|
|
|
* @param device 视频设备 |
|
|
|
* @param startPriority 报警起始级别(可选) |
|
|
|
* @param endPriority 报警终止级别(可选) |
|
|
|
* @param alarmMethods 报警方式条件(可选) |
|
|
|
* @param alarmMethod 报警方式条件(可选) |
|
|
|
* @param alarmType 报警类型 |
|
|
|
* @param startTime 报警发生起始时间(可选) |
|
|
|
* @param endTime 报警发生终止时间(可选) |
|
|
@ -1428,5 +1425,6 @@ public class SIPCommander implements ISIPCommander { |
|
|
|
String streamId = String.format("gb_play_%s_%s", device.getDeviceId(), channelId); |
|
|
|
zlmrtpServerFactory.closeRTPServer(streamId); |
|
|
|
} |
|
|
|
streamSession.remove(device.getDeviceId(), channelId); |
|
|
|
} |
|
|
|
} |
|
|
|