From dcc461642169bf2c5db812c2a806e6d64baf8101 Mon Sep 17 00:00:00 2001 From: jb-alvarado Date: Sun, 2 Oct 2022 13:28:45 +0200 Subject: [PATCH] add at least anull filter --- ffplayout-engine/src/main.rs | 1 + lib/src/filter/mod.rs | 4 ++++ lib/src/utils/json_validate.rs | 28 ++++++++++++++-------------- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/ffplayout-engine/src/main.rs b/ffplayout-engine/src/main.rs index 4c9e099c..0de9e8c9 100644 --- a/ffplayout-engine/src/main.rs +++ b/ffplayout-engine/src/main.rs @@ -90,6 +90,7 @@ fn fake_time(args: &Args) { fn main() { let args = get_args(); + // use fake time function only in debugging mode #[cfg(debug_assertions)] fake_time(&args); diff --git a/lib/src/filter/mod.rs b/lib/src/filter/mod.rs index 251cea46..c4240733 100644 --- a/lib/src/filter/mod.rs +++ b/lib/src/filter/mod.rs @@ -364,6 +364,10 @@ pub fn filter_chains( overlay(node, &mut filters, config); realtime_filter(node, &mut filters, config); + // add at least anull filter, for correct filter construction, + // is important for split filter in HLS mode + filters.add_filter("anull", Audio); + add_loudnorm(&mut filters, config); fade(node, &mut filters, Audio); audio_volume(&mut filters, config); diff --git a/lib/src/utils/json_validate.rs b/lib/src/utils/json_validate.rs index 1a0a69a2..6a619724 100644 --- a/lib/src/utils/json_validate.rs +++ b/lib/src/utils/json_validate.rs @@ -11,7 +11,7 @@ use simplelog::*; use crate::utils::{ format_log_line, loop_image, sec_to_time, seek_and_length, valid_source, vec_strings, - JsonPlaylist, Media, PlayoutConfig, IMAGE_FORMAT, + JsonPlaylist, Media, PlayoutConfig, FFMPEG_IGNORE_ERRORS, IMAGE_FORMAT, }; /// check if ffmpeg can read the file and apply filter to it. @@ -58,9 +58,7 @@ fn check_media( let mut filter = node.filter.unwrap_or_default(); if filter.len() > 1 { - filter[1] = filter[1] - .replace("realtime=speed=1", "null") - .replace("arealtime=speed=1", "snull") + filter[1] = filter[1].replace("realtime=speed=1", "null") } enc_cmd.append(&mut node.cmd.unwrap_or_default()); @@ -81,24 +79,26 @@ fn check_media( for line in enc_err.lines() { let line = line?; - if line.contains("[error]") { - let log_line = format_log_line(line, "error"); + if !FFMPEG_IGNORE_ERRORS.iter().any(|i| line.contains(*i)) { + if line.contains("[error]") { + let log_line = format_log_line(line, "error"); - if !error_list.contains(&log_line) { - error_list.push(log_line); - } - } else if line.contains("[fatal]") { - let log_line = format_log_line(line, "fatal"); + if !error_list.contains(&log_line) { + error_list.push(log_line); + } + } else if line.contains("[fatal]") { + let log_line = format_log_line(line, "fatal"); - if !error_list.contains(&log_line) { - error_list.push(log_line); + if !error_list.contains(&log_line) { + error_list.push(log_line); + } } } } if !error_list.is_empty() { error!( - "[Validator] Compressing error on position {pos} {}: {}:\n{}", + "[Validator] ffmpeg error on position {pos} - {}: {}:\n{}", sec_to_time(begin), node.source, error_list.join("\n")