|
|
@@ -470,8 +470,9 @@ public class SIPCommander implements ISIPCommander {
|
|
|
*/
|
|
|
@Override
|
|
|
public void downloadStreamCmd(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, Device device, String channelId,
|
|
|
- String startTime, String endTime, int downloadSpeed, InviteStreamCallback inviteStreamCallback, InviteStreamCallback hookEvent,
|
|
|
- SipSubscribe.Event errorEvent) throws InvalidArgumentException, SipException, ParseException {
|
|
|
+ String startTime, String endTime, int downloadSpeed,
|
|
|
+ InviteStreamCallback inviteStreamCallback, InviteStreamCallback hookEvent,
|
|
|
+ SipSubscribe.Event errorEvent,SipSubscribe.Event okEvent) throws InvalidArgumentException, SipException, ParseException {
|
|
|
|
|
|
logger.info("{} 分配的ZLM为: {} [{}:{}]", ssrcInfo.getStream(), mediaServerItem.getId(), mediaServerItem.getIp(), ssrcInfo.getPort());
|
|
|
String sdpIp;
|
|
|
@@ -540,11 +541,14 @@ public class SIPCommander implements ISIPCommander {
|
|
|
content.append("a=downloadspeed:" + downloadSpeed + "\r\n");
|
|
|
|
|
|
content.append("y=" + ssrcInfo.getSsrc() + "\r\n");//ssrc
|
|
|
-
|
|
|
+ logger.debug("此时请求下载信令的ssrc===>{}",ssrcInfo.getSsrc());
|
|
|
HookSubscribeForStreamChange hookSubscribe = HookSubscribeFactory.on_stream_changed("rtp", ssrcInfo.getStream(), true, null, mediaServerItem.getId());
|
|
|
// 添加订阅
|
|
|
+ CallIdHeader newCallIdHeader = sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()), device.getTransport());
|
|
|
+ String callId=newCallIdHeader.getCallId();
|
|
|
subscribe.addSubscribe(hookSubscribe, (MediaServerItem mediaServerItemInUse, JSONObject json) -> {
|
|
|
- hookEvent.call(new InviteStreamInfo(mediaServerItem, json,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()).getCallId(), "rtp", ssrcInfo.getStream()));
|
|
|
+ logger.debug("sipc 添加订阅===callId {}",callId);
|
|
|
+ hookEvent.call(new InviteStreamInfo(mediaServerItem, json,callId, "rtp", ssrcInfo.getStream()));
|
|
|
subscribe.removeSubscribe(hookSubscribe);
|
|
|
hookSubscribe.getContent().put("regist", false);
|
|
|
hookSubscribe.getContent().put("schema", "rtsp");
|
|
|
@@ -553,7 +557,7 @@ public class SIPCommander implements ISIPCommander {
|
|
|
(MediaServerItem mediaServerItemForEnd, JSONObject jsonForEnd) -> {
|
|
|
logger.info("[录像]下载结束, 发送BYE");
|
|
|
try {
|
|
|
- streamByeCmd(device, channelId, ssrcInfo.getStream(),sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()).getCallId());
|
|
|
+ streamByeCmd(device, channelId, ssrcInfo.getStream(),callId);
|
|
|
} catch (InvalidArgumentException | ParseException | SipException |
|
|
|
SsrcTransactionNotFoundException e) {
|
|
|
logger.error("[录像]下载结束, 发送BYE失败 {}", e.getMessage());
|
|
|
@@ -561,15 +565,24 @@ public class SIPCommander implements ISIPCommander {
|
|
|
});
|
|
|
});
|
|
|
|
|
|
- Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()), ssrcInfo.getSsrc());
|
|
|
+ Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, SipUtils.getNewFromTag(), null,newCallIdHeader, ssrcInfo.getSsrc());
|
|
|
if (inviteStreamCallback != null) {
|
|
|
- inviteStreamCallback.call(new InviteStreamInfo(mediaServerItem, null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()).getCallId(), "rtp", ssrcInfo.getStream()));
|
|
|
+ inviteStreamCallback.call(new InviteStreamInfo(mediaServerItem, null,callId, "rtp", ssrcInfo.getStream()));
|
|
|
}
|
|
|
|
|
|
- sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent, okEvent -> {
|
|
|
- ResponseEvent responseEvent = (ResponseEvent) okEvent.event;
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent, event -> {
|
|
|
+ ResponseEvent responseEvent = (ResponseEvent) event.event;
|
|
|
SIPResponse response = (SIPResponse) responseEvent.getResponse();
|
|
|
- streamSession.put(device.getDeviceId(), channelId, response.getCallIdHeader().getCallId(), ssrcInfo.getStream(), ssrcInfo.getSsrc(), mediaServerItem.getId(), response, VideoStreamSessionManager.SessionType.download);
|
|
|
+ String contentString =new String(response.getRawContent());
|
|
|
+ int ssrcIndex = contentString.indexOf("y=");
|
|
|
+ String ssrc=ssrcInfo.getSsrc();
|
|
|
+ if (ssrcIndex >= 0) {
|
|
|
+ ssrc = contentString.substring(ssrcIndex + 2, ssrcIndex + 12);
|
|
|
+ }
|
|
|
+ logger.debug("接收到的下载响应ssrc====>{}",ssrcInfo.getSsrc());
|
|
|
+ logger.debug("接收到的下载响应ssrc====>{}",ssrc);
|
|
|
+ streamSession.put(device.getDeviceId(), channelId, response.getCallIdHeader().getCallId(), ssrcInfo.getStream(), ssrc, mediaServerItem.getId(), response, VideoStreamSessionManager.SessionType.download);
|
|
|
+ okEvent.response(event);
|
|
|
});
|
|
|
}
|
|
|
|
|
|
@@ -801,7 +814,6 @@ public class SIPCommander implements ISIPCommander {
|
|
|
*
|
|
|
* @param device 视频设备
|
|
|
* @param channelId 通道id,非通道则是设备本身
|
|
|
- * @param frontCmd 上级平台的指令,如果存在则直接下发
|
|
|
* @param enabled 看守位使能:1 = 开启,0 = 关闭
|
|
|
* @param resetTime 自动归位时间间隔,开启看守位时使用,单位:秒(s)
|
|
|
* @param presetIndex 调用预置位编号,开启看守位时使用,取值范围0~255
|