下载 收流参数调整

修复 下载不完整问题
调整 Gb28181DownloadService.AsyncContext 默认超时时间
This commit is contained in:
shikong 2023-09-22 21:17:53 +08:00
parent bff7ad1b37
commit 0de97d39a8
5 changed files with 16 additions and 7 deletions

View File

@ -21,7 +21,7 @@ public class FfmpegSupportService {
public Executor downloadToStream(String input, long time, TimeUnit unit, ExecuteStreamHandler streamHandler, ExecuteResultHandler executeResultHandler) {
FfmpegConfig.Rtp rtp = ffmpegConfig.getRtp();
FfmpegConfig.Debug debug = ffmpegConfig.getDebug();
String inputParam = debug.getInput() ? rtp.getInput() : StringUtils.joinWith(" ", rtp.getInput(), input);
String inputParam = debug.getDownload() ? rtp.getDownload() : StringUtils.joinWith(" ", rtp.getDownload(), input);
log.info("视频输入参数 {}", inputParam);
String outputParam = debug.getOutput() ? rtp.getOutput() : StringUtils.joinWith(" ", rtp.getOutput(), "-");
@ -34,7 +34,7 @@ public class FfmpegSupportService {
public Executor ffmpegExecutor(String inputParam,String outputParam, long time, TimeUnit unit,ExecuteStreamHandler streamHandler,ExecuteResultHandler executeResultHandler){
FfmpegConfig.Rtp rtp = ffmpegConfig.getRtp();
String logLevelParam = StringUtils.joinWith(" ","-loglevel", rtp.getLogLevel());
String command = StringUtils.joinWith(" ", ffmpegConfig.getFfmpeg(), inputParam, outputParam, logLevelParam);
String command = StringUtils.joinWith(" ", ffmpegConfig.getFfmpeg(), logLevelParam, inputParam, outputParam);
CommandLine commandLine = CommandLine.parse(command);
log.info("{}", commandLine);
Executor executor = new DefaultExecutor();

View File

@ -125,6 +125,7 @@ public class Gb28181DownloadService {
@SneakyThrows
public void video(HttpServletRequest request, HttpServletResponse response, String deviceCode, Date startTime, Date endTime, Boolean fileHeader) {
AsyncContext asyncContext = request.startAsync();
asyncContext.setTimeout(0);
asyncContext.start(()->{
HttpServletResponse asyncResponse = (HttpServletResponse)asyncContext.getResponse();
try{

View File

@ -1,5 +1,8 @@
package cn.skcks.docking.gb28181.wvp.service.video;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.skcks.docking.gb28181.wvp.config.WvpProxyConfig;
import cn.skcks.docking.gb28181.wvp.service.ffmpeg.FfmpegSupportService;
import jakarta.servlet.AsyncContext;
@ -160,6 +163,7 @@ public class VideoService {
ByteArrayOutputStream errorStream = new ByteArrayOutputStream();
PumpStreamHandler streamHandler = new PumpStreamHandler(outputStream, errorStream);
DefaultExecuteResultHandler defaultExecuteResultHandler = new DefaultExecuteResultHandler();
DateTime startTime = DateUtil.date();
Executor executor = ffmpegSupportService.downloadToStream(url, time, TimeUnit.SECONDS,streamHandler,defaultExecuteResultHandler);
log.info("开始录制 {}", url);
ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
@ -169,6 +173,8 @@ public class VideoService {
log.info("结束录制 {}", url);
}, time, TimeUnit.SECONDS);
defaultExecuteResultHandler.waitFor();
DateTime endTime = DateUtil.date();
log.info("录制进程结束 {}, 录制耗时: {}", url, DateUtil.between(startTime,endTime, DateUnit.SECOND));
if(errorStream.size() > 0){
log.error("{}", errorStream);
}

View File

@ -60,12 +60,13 @@ proxy:
ffmpeg-support:
task:
max: 4
ffmpeg: C:\ffmpeg\bin\ffmpeg.exe
ffmpeg: D:\Soft\Captura\ffmpeg\ffmpeg.exe
ffprobe: D:\Soft\Captura\ffmpeg\ffprobe.exe
rtp:
# input: -i http://10.10.10.200:5080/live/test.live.flv
input: -re -i
output: -vcodec copy -acodec copy -movflags empty_moov+frag_keyframe+default_base_moof -f mp4 # -rtsp_transport tcp
output: -preset ultrafast -tune zerolatency -vcodec libx264 -acodec aac -movflags empty_moov+frag_keyframe+default_base_moof -f mp4 # -rtsp_transport tcp
download: -thread_queue_size 128 -i
debug:
download: false
input: false

View File

@ -24,8 +24,8 @@ spring:
username: root
password: 123456a
url: jdbc:mysql://192.168.1.241:3306/gb28181_docking_platform?createDatabaseIfNotExist=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
# profiles:
# active: local
profiles:
active: local
cloud:
openfeign:
httpclient:
@ -73,7 +73,8 @@ ffmpeg-support:
ffprobe: /usr/bin/ffmpeg/ffprobe
rtp:
input: -i
output: -vcodec h264 -acodec aac -movflags empty_moov+frag_keyframe+default_base_moof -f mp4 # -rtsp_transport tcp
output: -preset ultrafast -tune zerolatency -vcodec libx264 -acodec aac -movflags empty_moov+frag_keyframe+default_base_moof -f mp4 # -rtsp_transport tcp
download: -thread_queue_size 128 -i
debug:
download: false
input: false