|
|
@@ -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);
|
|
|
}
|
|
|
}
|