下载 收流参数调整
修复 下载不完整问题 调整 Gb28181DownloadService.AsyncContext 默认超时时间
This commit is contained in:
parent
bff7ad1b37
commit
0de97d39a8
@ -21,7 +21,7 @@ public class FfmpegSupportService {
|
|||||||
public Executor downloadToStream(String input, long time, TimeUnit unit, ExecuteStreamHandler streamHandler, ExecuteResultHandler executeResultHandler) {
|
public Executor downloadToStream(String input, long time, TimeUnit unit, ExecuteStreamHandler streamHandler, ExecuteResultHandler executeResultHandler) {
|
||||||
FfmpegConfig.Rtp rtp = ffmpegConfig.getRtp();
|
FfmpegConfig.Rtp rtp = ffmpegConfig.getRtp();
|
||||||
FfmpegConfig.Debug debug = ffmpegConfig.getDebug();
|
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);
|
log.info("视频输入参数 {}", inputParam);
|
||||||
|
|
||||||
String outputParam = debug.getOutput() ? rtp.getOutput() : StringUtils.joinWith(" ", rtp.getOutput(), "-");
|
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){
|
public Executor ffmpegExecutor(String inputParam,String outputParam, long time, TimeUnit unit,ExecuteStreamHandler streamHandler,ExecuteResultHandler executeResultHandler){
|
||||||
FfmpegConfig.Rtp rtp = ffmpegConfig.getRtp();
|
FfmpegConfig.Rtp rtp = ffmpegConfig.getRtp();
|
||||||
String logLevelParam = StringUtils.joinWith(" ","-loglevel", rtp.getLogLevel());
|
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);
|
CommandLine commandLine = CommandLine.parse(command);
|
||||||
log.info("{}", commandLine);
|
log.info("{}", commandLine);
|
||||||
Executor executor = new DefaultExecutor();
|
Executor executor = new DefaultExecutor();
|
||||||
|
@ -125,6 +125,7 @@ public class Gb28181DownloadService {
|
|||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
public void video(HttpServletRequest request, HttpServletResponse response, String deviceCode, Date startTime, Date endTime, Boolean fileHeader) {
|
public void video(HttpServletRequest request, HttpServletResponse response, String deviceCode, Date startTime, Date endTime, Boolean fileHeader) {
|
||||||
AsyncContext asyncContext = request.startAsync();
|
AsyncContext asyncContext = request.startAsync();
|
||||||
|
asyncContext.setTimeout(0);
|
||||||
asyncContext.start(()->{
|
asyncContext.start(()->{
|
||||||
HttpServletResponse asyncResponse = (HttpServletResponse)asyncContext.getResponse();
|
HttpServletResponse asyncResponse = (HttpServletResponse)asyncContext.getResponse();
|
||||||
try{
|
try{
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
package cn.skcks.docking.gb28181.wvp.service.video;
|
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.config.WvpProxyConfig;
|
||||||
import cn.skcks.docking.gb28181.wvp.service.ffmpeg.FfmpegSupportService;
|
import cn.skcks.docking.gb28181.wvp.service.ffmpeg.FfmpegSupportService;
|
||||||
import jakarta.servlet.AsyncContext;
|
import jakarta.servlet.AsyncContext;
|
||||||
@ -160,6 +163,7 @@ public class VideoService {
|
|||||||
ByteArrayOutputStream errorStream = new ByteArrayOutputStream();
|
ByteArrayOutputStream errorStream = new ByteArrayOutputStream();
|
||||||
PumpStreamHandler streamHandler = new PumpStreamHandler(outputStream, errorStream);
|
PumpStreamHandler streamHandler = new PumpStreamHandler(outputStream, errorStream);
|
||||||
DefaultExecuteResultHandler defaultExecuteResultHandler = new DefaultExecuteResultHandler();
|
DefaultExecuteResultHandler defaultExecuteResultHandler = new DefaultExecuteResultHandler();
|
||||||
|
DateTime startTime = DateUtil.date();
|
||||||
Executor executor = ffmpegSupportService.downloadToStream(url, time, TimeUnit.SECONDS,streamHandler,defaultExecuteResultHandler);
|
Executor executor = ffmpegSupportService.downloadToStream(url, time, TimeUnit.SECONDS,streamHandler,defaultExecuteResultHandler);
|
||||||
log.info("开始录制 {}", url);
|
log.info("开始录制 {}", url);
|
||||||
ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
|
ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
|
||||||
@ -169,6 +173,8 @@ public class VideoService {
|
|||||||
log.info("结束录制 {}", url);
|
log.info("结束录制 {}", url);
|
||||||
}, time, TimeUnit.SECONDS);
|
}, time, TimeUnit.SECONDS);
|
||||||
defaultExecuteResultHandler.waitFor();
|
defaultExecuteResultHandler.waitFor();
|
||||||
|
DateTime endTime = DateUtil.date();
|
||||||
|
log.info("录制进程结束 {}, 录制耗时: {}", url, DateUtil.between(startTime,endTime, DateUnit.SECOND));
|
||||||
if(errorStream.size() > 0){
|
if(errorStream.size() > 0){
|
||||||
log.error("{}", errorStream);
|
log.error("{}", errorStream);
|
||||||
}
|
}
|
||||||
|
@ -60,12 +60,13 @@ proxy:
|
|||||||
ffmpeg-support:
|
ffmpeg-support:
|
||||||
task:
|
task:
|
||||||
max: 4
|
max: 4
|
||||||
ffmpeg: C:\ffmpeg\bin\ffmpeg.exe
|
ffmpeg: D:\Soft\Captura\ffmpeg\ffmpeg.exe
|
||||||
ffprobe: D:\Soft\Captura\ffmpeg\ffprobe.exe
|
ffprobe: D:\Soft\Captura\ffmpeg\ffprobe.exe
|
||||||
rtp:
|
rtp:
|
||||||
# input: -i http://10.10.10.200:5080/live/test.live.flv
|
# input: -i http://10.10.10.200:5080/live/test.live.flv
|
||||||
input: -re -i
|
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:
|
debug:
|
||||||
download: false
|
download: false
|
||||||
input: false
|
input: false
|
||||||
|
@ -24,8 +24,8 @@ spring:
|
|||||||
username: root
|
username: root
|
||||||
password: 123456a
|
password: 123456a
|
||||||
url: jdbc:mysql://192.168.1.241:3306/gb28181_docking_platform?createDatabaseIfNotExist=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
|
url: jdbc:mysql://192.168.1.241:3306/gb28181_docking_platform?createDatabaseIfNotExist=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
|
||||||
# profiles:
|
profiles:
|
||||||
# active: local
|
active: local
|
||||||
cloud:
|
cloud:
|
||||||
openfeign:
|
openfeign:
|
||||||
httpclient:
|
httpclient:
|
||||||
@ -73,7 +73,8 @@ ffmpeg-support:
|
|||||||
ffprobe: /usr/bin/ffmpeg/ffprobe
|
ffprobe: /usr/bin/ffmpeg/ffprobe
|
||||||
rtp:
|
rtp:
|
||||||
input: -i
|
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:
|
debug:
|
||||||
download: false
|
download: false
|
||||||
input: false
|
input: false
|
||||||
|
Loading…
Reference in New Issue
Block a user