Skip to content

Commit 2843e56

Browse files
InterLinked1Friendly Automation
authored andcommitted
app_confbridge: Always set minimum video update interval.
Currently, if multiple video-enabled ConfBridges are conferenced together, we immediately get into a scenario where an infinite sequence of video updates fills up the taskprocessor queue and causes memory consumption to climb unabated until Asterisk is killed. This is due to the core bridging mechanism that provides video updates (softmix_bridge_write_control in bridge_softmix.c) continously updating all the channels in the bridge with video updates. The logic to do so in the core is that the video updates should be provided if the video_update_discard property for the bridge is 0, or if enough time has elapsed since the last video update. Thus, we already have a safeguard built in to ensure the scenario described above does not happen. Currently, however, this safeguard is not being adequately ensured. In app_confbridge, the video_update_discard property defaults to 2000, which is a healthy value that should completely prevent this issue. However, this value is only set onto the bridge in the SFU video mode. This leaves video modes such as follow_talker completely vulnerable, since video_update_discard will actually be 0, since the default or set value was never applied. As a result, the core bridging mechanism will always try to provide video updates regardless of when the last one was sent. To prevent this issue from happening, we now always set the video_update_discard property on the bridge with the value from the bridge profile. The app_confbridge defaults will thus ensure that infinite video updates no longer happen in any video mode. ASTERISK-29907 #close Change-Id: I4accb2536ac62797950468e9930f12ef7dd486b2
1 parent d25bf55 commit 2843e56

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

apps/app_confbridge.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1804,7 +1804,6 @@ static struct confbridge_conference *join_conference_bridge(const char *conferen
18041804
ast_bridge_set_talker_src_video_mode(conference->bridge);
18051805
} else if (ast_test_flag(&conference->b_profile, BRIDGE_OPT_VIDEO_SRC_SFU)) {
18061806
ast_bridge_set_sfu_video_mode(conference->bridge);
1807-
ast_bridge_set_video_update_discard(conference->bridge, conference->b_profile.video_update_discard);
18081807
ast_bridge_set_remb_send_interval(conference->bridge, conference->b_profile.remb_send_interval);
18091808
if (ast_test_flag(&conference->b_profile, BRIDGE_OPT_REMB_BEHAVIOR_AVERAGE)) {
18101809
ast_brige_set_remb_behavior(conference->bridge, AST_BRIDGE_VIDEO_SFU_REMB_AVERAGE);
@@ -1824,6 +1823,9 @@ static struct confbridge_conference *join_conference_bridge(const char *conferen
18241823
}
18251824
}
18261825

1826+
/* Always set the minimum interval between video updates, to avoid infinite video updates. */
1827+
ast_bridge_set_video_update_discard(conference->bridge, conference->b_profile.video_update_discard);
1828+
18271829
if (ast_test_flag(&conference->b_profile, BRIDGE_OPT_ENABLE_EVENTS)) {
18281830
ast_bridge_set_send_sdp_label(conference->bridge, 1);
18291831
}

0 commit comments

Comments
 (0)