From 2dc1f434018f843b89b2c688e032a4fa4014bb40 Mon Sep 17 00:00:00 2001 From: shikong <919411476@qq.com> Date: Wed, 13 Mar 2024 12:14:25 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=20ffmpeg=20=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=E6=97=B6=E6=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gb28181/Gb28181DownloadService.java | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/service/gb28181/Gb28181DownloadService.java b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/service/gb28181/Gb28181DownloadService.java index 57ac72a..5f06bfd 100644 --- a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/service/gb28181/Gb28181DownloadService.java +++ b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/service/gb28181/Gb28181DownloadService.java @@ -592,14 +592,17 @@ public class Gb28181DownloadService { public void onNext(SIPResponse item) { int statusCode = item.getStatusCode(); log.debug("{} 收到订阅消息 {}", subscribeKey, item); - if (statusCode == Response.TRYING) { - log.info("订阅 {} {} 尝试连接流媒体服务", MessageProcessor.Method.INVITE, subscribeKey); - subscription.request(1); + if(statusCode == Response.OK){ String callId = item.getCallId().getCallId(); if(!isStart){ isStart = true; result.completeAsync(() -> new VideoInfo(streamId,videoRtmpUrl(streamId), callId, device), executor); } + } + + if (statusCode == Response.TRYING) { + log.info("订阅 {} {} 尝试连接流媒体服务", MessageProcessor.Method.INVITE, subscribeKey); + subscription.request(1); } else if (statusCode >= Response.OK && statusCode < Response.MULTIPLE_CHOICES) { log.info("订阅 {} {} 流媒体服务连接成功, 开始推送视频流", MessageProcessor.Method.INVITE, subscribeKey); log.info("收到响应状态 {}", statusCode); @@ -608,14 +611,16 @@ public class Gb28181DownloadService { isStart = true; result.completeAsync(() -> new VideoInfo(streamId,videoRtmpUrl(streamId), callId, device), executor); } - sender.sendRequest(((provider, ip, port) -> { - String fromTag = item.getFromTag(); - String toTag = item.getToTag(); - String key = GenericSubscribe.Helper.getKey(Request.BYE, callId); - subscribe.getByeSubscribe().addPublisher(key); - subscribe.getByeSubscribe().addSubscribe(key, byeSubscriber(key, device, cacheKey, streamId, time, unit)); - return SipRequestBuilder.createAckRequest(Response.OK, ip, port, docking, device.getGbDeviceChannelId(), fromTag, toTag, callId); - })); + scheduledExecutorService.schedule(()->{ + sender.sendRequest(((provider, ip, port) -> { + String fromTag = item.getFromTag(); + String toTag = item.getToTag(); + String key = GenericSubscribe.Helper.getKey(Request.BYE, callId); + subscribe.getByeSubscribe().addPublisher(key); + subscribe.getByeSubscribe().addSubscribe(key, byeSubscriber(key, device, cacheKey, streamId, time, unit)); + return SipRequestBuilder.createAckRequest(Response.OK, ip, port, docking, device.getGbDeviceChannelId(), fromTag, toTag, callId); + })); + },100, TimeUnit.MILLISECONDS); } else { log.info("订阅 {} {} 连接流媒体服务时出现异常, 终止订阅", MessageProcessor.Method.INVITE, subscribeKey); zlmMediaService.closeRtpServer(new CloseRtpServer(streamId));