From c75cffddcc3e3049ee0556616e5bc2002c41c43c Mon Sep 17 00:00:00 2001 From: Andrii Pogrebennyk Date: Tue, 5 Dec 2023 09:12:20 -0500 Subject: [PATCH] MT#55283 add config rtcp_interval used when generate-RTCP=on closes #1759 Change-Id: I09722106d42e25f4befa953d374fa96c344322b7 --- daemon/codec.c | 4 ++-- daemon/main.c | 5 +++++ include/main.h | 1 + 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/daemon/codec.c b/daemon/codec.c index 24fd850a5..d1fb26ac4 100644 --- a/daemon/codec.c +++ b/daemon/codec.c @@ -920,7 +920,7 @@ static void __codec_rtcp_timer_schedule(struct call_media *media) { rt->ct.timer_func = __rtcp_timer_run; } - timeval_add_usec(&rt->ct.next, 5000000 + (ssl_random() % 2000000)); + timeval_add_usec(&rt->ct.next, rtpe_config.rtcp_interval * 1000 + (ssl_random() % 1000000)); timerthread_obj_schedule_abs(&rt->ct.tt_obj, &rt->ct.next); } // no lock held @@ -939,7 +939,7 @@ static void __rtcp_timer_run(struct codec_timer *ct) { rwlock_unlock_w(&rt->call->master_lock); goto out; } - timeval_add_usec(&ct->next, 5000000 + (ssl_random() % 2000000)); + timeval_add_usec(&ct->next, rtpe_config.rtcp_interval * 1000 + (ssl_random() % 1000000)); __codec_rtcp_timer_schedule(media); // switch locks to be more graceful diff --git a/daemon/main.c b/daemon/main.c index 8b8b65c4a..e9e8d4575 100644 --- a/daemon/main.c +++ b/daemon/main.c @@ -644,6 +644,7 @@ static void options(int *argc, char ***argv) { { "socket-cpu-affinity",0,0,G_OPTION_ARG_INT, &rtpe_config.cpu_affinity,"CPU affinity for media sockets","INT"}, #endif { "janus-secret", 0,0, G_OPTION_ARG_STRING, &rtpe_config.janus_secret,"Admin secret for Janus protocol","STRING"}, + { "rtcp-interval", 0,0, G_OPTION_ARG_INT, &rtpe_config.rtcp_interval,"Delay in milliseconds between RTCP packets when generate-rtcp flag is on, where random dispersion < 1 sec is added on top","INT"}, { NULL, } }; @@ -801,6 +802,9 @@ static void options(int *argc, char ***argv) { if (rtpe_config.final_timeout <= 0) rtpe_config.final_timeout = 0; + if (rtpe_config.rtcp_interval <= 0) + rtpe_config.rtcp_interval = 5000; + if (redisps) if (redis_ep_parse(&rtpe_config.redis_ep, &rtpe_config.redis_db, &rtpe_config.redis_auth, "RTPENGINE_REDIS_AUTH_PW", redisps)) die("Invalid Redis endpoint [IP:PORT/INT] '%s' (--redis)", redisps); @@ -1085,6 +1089,7 @@ static void fill_initial_rtpe_cfg(struct rtpengine_config* ini_rtpe_cfg) { ini_rtpe_cfg->jb_length = rtpe_config.jb_length; ini_rtpe_cfg->jb_clock_drift = rtpe_config.jb_clock_drift; + ini_rtpe_cfg->rtcp_interval = rtpe_config.rtcp_interval; rwlock_unlock_w(&rtpe_config.config_lock); } diff --git a/include/main.h b/include/main.h index 316d3cf86..3cd6963e6 100644 --- a/include/main.h +++ b/include/main.h @@ -179,6 +179,7 @@ struct rtpengine_config { MOS_LQ, } mos; gboolean measure_rtp; + int rtcp_interval; int cpu_affinity; char *janus_secret; };