diff --git a/assets/ffplayout.yml b/assets/ffplayout.yml index 70e5ec0b..21e5b65b 100644 --- a/assets/ffplayout.yml +++ b/assets/ffplayout.yml @@ -50,10 +50,11 @@ processing: scaling. With 'logo_opacity' logo can become transparent. With 'audio_tracks' it is possible to configure how many audio tracks should be processed. With 'logo_filter' 'overlay=W-w-12:12' you can modify the logo position. With 'use_loudnorm' - you can activate single pass EBU R128 loudness normalization. 'loud_*' can - adjust the loudnorm filter. With 'custom_filter' it is possible, to apply further - filters. The filter outputs should end with [c_v_out] for video filter, - and [c_a_out] for audio filter. + you can activate single pass EBU R128 loudness normalization, 'loudnorm_ingest' + allows normalization only on ingest stream. 'loud_*' can adjust the loudnorm + filter. With 'custom_filter' it is possible, to apply further filters. + The filter outputs should end with [c_v_out] for video filter, and [c_a_out] + for audio filter. mode: playlist width: 1024 height: 576 diff --git a/ffplayout-engine/src/output/hls.rs b/ffplayout-engine/src/output/hls.rs index 4cc57152..1d1e5f9d 100644 --- a/ffplayout-engine/src/output/hls.rs +++ b/ffplayout-engine/src/output/hls.rs @@ -64,22 +64,6 @@ fn ingest_to_hls_server( loop { let filters = filter_chains(&config, &mut dummy_media, &playout_stat.chain); - - if filters.len() > 1 { - // get correct filter index from drawtext node for zmq - let filter_chain = filters[1] - .split_terminator([',', ';']) - .collect::>(); - - for (i, link) in filter_chain.iter().enumerate() { - if link.contains("drawtext") { - playout_stat - .drawtext_server_index - .store(i, Ordering::SeqCst); - } - } - } - let server_cmd = prepare_output_cmd(server_prefix.clone(), filters, &config); debug!( diff --git a/ffplayout-engine/src/rpc/mod.rs b/ffplayout-engine/src/rpc/mod.rs index ad41bda7..175e0d50 100644 --- a/ffplayout-engine/src/rpc/mod.rs +++ b/ffplayout-engine/src/rpc/mod.rs @@ -92,10 +92,7 @@ pub fn json_rpc_server( if config.out.mode == HLS { if proc.server_is_running.load(Ordering::SeqCst) { - let filter_server = format!( - "Parsed_drawtext_{} reinit {filter}", - playout_stat.drawtext_server_index.load(Ordering::SeqCst) - ); + let filter_server = format!("drawtext@dyntext reinit {filter}"); if let Ok(reply) = block_on(zmq_send( &filter_server, @@ -109,10 +106,7 @@ pub fn json_rpc_server( } if config.out.mode != HLS || !proc.server_is_running.load(Ordering::SeqCst) { - let filter_stream = format!( - "Parsed_drawtext_{} reinit {filter}", - playout_stat.drawtext_stream_index.load(Ordering::SeqCst) - ); + let filter_stream = format!("drawtext@dyntext reinit {filter}"); if let Ok(reply) = block_on(zmq_send( &filter_stream, diff --git a/lib/src/filter/mod.rs b/lib/src/filter/mod.rs index 63b655ea..32cf101f 100644 --- a/lib/src/filter/mod.rs +++ b/lib/src/filter/mod.rs @@ -324,8 +324,10 @@ fn extend_audio(node: &mut Media, chain: &mut Filters, nr: i32) { } /// Add single pass loudnorm filter to audio line. -fn add_loudnorm(chain: &mut Filters, config: &PlayoutConfig, nr: i32) { - if config.processing.add_loudnorm { +fn add_loudnorm(node: &Media, chain: &mut Filters, config: &PlayoutConfig, nr: i32) { + if config.processing.add_loudnorm + || (node.is_live.unwrap_or_default() && config.processing.loudnorm_ingest) + { let loud_filter = a_loudnorm::filter_node(config); chain.add_filter(&loud_filter, nr, Audio); } @@ -443,7 +445,7 @@ pub fn filter_chains( // is important for split filter in HLS mode filters.add_filter("anull", i, Audio); - add_loudnorm(&mut filters, config, i); + add_loudnorm(node, &mut filters, config, i); fade(node, &mut filters, i, Audio); audio_volume(&mut filters, config, i); diff --git a/lib/src/filter/v_drawtext.rs b/lib/src/filter/v_drawtext.rs index 88c551f6..0b3a3eea 100644 --- a/lib/src/filter/v_drawtext.rs +++ b/lib/src/filter/v_drawtext.rs @@ -52,7 +52,7 @@ pub fn filter_node( } filter = format!( - "zmq=b=tcp\\\\://'{}',drawtext={filter_cmd}", + "zmq=b=tcp\\\\://'{}',drawtext@dyntext={filter_cmd}", socket.replace(':', "\\:") ) } diff --git a/lib/src/utils/controller.rs b/lib/src/utils/controller.rs index 494162b9..2b20e6ce 100644 --- a/lib/src/utils/controller.rs +++ b/lib/src/utils/controller.rs @@ -187,8 +187,6 @@ pub struct PlayoutStatus { pub date: Arc>, pub list_init: Arc, pub time_shift: Arc>, - pub drawtext_server_index: Arc, - pub drawtext_stream_index: Arc, } impl PlayoutStatus { @@ -199,8 +197,6 @@ impl PlayoutStatus { date: Arc::new(Mutex::new(String::new())), list_init: Arc::new(AtomicBool::new(true)), time_shift: Arc::new(Mutex::new(0.0)), - drawtext_server_index: Arc::new(AtomicUsize::new(2)), - drawtext_stream_index: Arc::new(AtomicUsize::new(2)), } } } diff --git a/tests/src/engine_cmd.rs b/tests/src/engine_cmd.rs index ce78874c..5bbda21b 100644 --- a/tests/src/engine_cmd.rs +++ b/tests/src/engine_cmd.rs @@ -329,7 +329,7 @@ fn video_dual_audio_filter_stream() { "-i", "pipe:0", "-filter_complex", - format!("[0:v]null,zmq=b=tcp\\\\://'{socket}',drawtext=text=''[v_out1]"), + format!("[0:v]null,zmq=b=tcp\\\\://'{socket}',drawtext@dyntext=text=''[v_out1]"), "-map", "[v_out1]", "-map", @@ -657,7 +657,7 @@ fn video_dual_audio_multi_filter_stream() { "-i", "pipe:0", "-filter_complex", - format!("[0:v]null,zmq=b=tcp\\\\://'{socket}',drawtext=text=''[v_out1]"), + format!("[0:v]null,zmq=b=tcp\\\\://'{socket}',drawtext@dyntext=text=''[v_out1]"), "-map", "[v_out1]", "-map",