Merge pull request #208 from jb-alvarado/master

allow loudnorm on ingest only, use named drawtext, instead of indexed selection
This commit is contained in:
jb-alvarado 2022-10-15 22:16:32 +02:00 committed by GitHub
commit 5e923d4e06
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 15 additions and 38 deletions

View File

@ -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

View File

@ -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::<Vec<&str>>();
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!(

View File

@ -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,

View File

@ -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);

View File

@ -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(':', "\\:")
)
}

View File

@ -187,8 +187,6 @@ pub struct PlayoutStatus {
pub date: Arc<Mutex<String>>,
pub list_init: Arc<AtomicBool>,
pub time_shift: Arc<Mutex<f64>>,
pub drawtext_server_index: Arc<AtomicUsize>,
pub drawtext_stream_index: Arc<AtomicUsize>,
}
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)),
}
}
}

View File

@ -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",