video update requests from clients.
</para></description>
</configOption>
+ <configOption name="remb_send_interval" default="0">
+ <synopsis>Sets the interval in milliseconds that a combined REMB frame will be sent to video sources</synopsis>
+ <description><para>
+ Sets the interval in milliseconds that a combined REMB frame will be sent
+ to video sources. This is done by taking all REMB frames that have been
+ received since the last REMB frame was sent, making a combined value,
+ and sending it to the source. A REMB frame contains receiver estimated
+ maximum bitrate information. By creating a combined REMB frame the
+ sender of video can be influenced on the bitrate they choose, allowing
+ better quality for all receivers.
+ </para></description>
+ </configOption>
<configOption name="template">
<synopsis>When using the CONFBRIDGE dialplan function, use a bridge profile as a template for creating a new temporary profile</synopsis>
</configOption>
}
ast_cli(a->fd,"Video Update Discard: %u\n", b_profile.video_update_discard);
+ ast_cli(a->fd,"REMB Send Interval: %u\n", b_profile.remb_send_interval);
ast_cli(a->fd,"sound_only_person: %s\n", conf_get_sound(CONF_SOUND_ONLY_PERSON, b_profile.sounds));
ast_cli(a->fd,"sound_only_one: %s\n", conf_get_sound(CONF_SOUND_ONLY_ONE, b_profile.sounds));
aco_option_register(&cfg_info, "language", ACO_EXACT, bridge_types, "en", OPT_CHAR_ARRAY_T, 0, CHARFLDSET(struct bridge_profile, language));
aco_option_register_custom(&cfg_info, "sound_", ACO_PREFIX, bridge_types, NULL, sound_option_handler, 0);
aco_option_register(&cfg_info, "video_update_discard", ACO_EXACT, bridge_types, "2000", OPT_UINT_T, 0, FLDSET(struct bridge_profile, video_update_discard));
+ aco_option_register(&cfg_info, "remb_send_interval", ACO_EXACT, bridge_types, "0", OPT_UINT_T, 0, FLDSET(struct bridge_profile, remb_send_interval));
/* This option should only be used with the CONFBRIDGE dialplan function */
aco_option_register_custom(&cfg_info, "template", ACO_EXACT, bridge_types, NULL, bridge_template_handler, 0);
; the video stream. Since a full frame can be large limiting how often they occur can
; reduce bandwidth usage at the cost of increasing how long it may take a newly joined
; channel to receive the video stream.
+;remb_send_interval=1000 ; Interval (in milliseconds) at which a combined REMB frame will be sent to sources of video.
+ ; A REMB frame contains receiver estimated maximum bitrate information. By creating a combined
+ ; frame and sending it to the sources of video the sender can be influenced on what bitrate
+ ; they choose allowing a better experience for the receivers. This defaults to 0, or disabled.
; All sounds in the conference are customizable using the bridge profile options below.
; Simply state the option followed by the filename or full path of the filename after
struct ast_bridge_video_talker_src_data talker_src_data;
} mode_data;
unsigned int video_update_discard;
+ unsigned int remb_send_interval;
};
/*!
*/
void ast_bridge_set_video_update_discard(struct ast_bridge *bridge, unsigned int video_update_discard);
+/*!
+ * \brief Set the interval at which a combined REMB frame will be sent to video sources
+ *
+ * \param bridge Bridge to set the REMB send interval on
+ * \param remb_send_interval The REMB send interval
+ */
+void ast_bridge_set_remb_send_interval(struct ast_bridge *bridge, unsigned int remb_send_interval);
+
/*!
* \brief Update information about talker energy for talker src video mode.
*/
ast_bridge_unlock(bridge);
}
+void ast_bridge_set_remb_send_interval(struct ast_bridge *bridge, unsigned int remb_send_interval)
+{
+ ast_bridge_lock(bridge);
+ bridge->softmix.video_mode.remb_send_interval = remb_send_interval;
+ ast_bridge_unlock(bridge);
+}
+
void ast_bridge_update_talker_src_video_mode(struct ast_bridge *bridge, struct ast_channel *chan, int talker_energy, int is_keyframe)
{
struct ast_bridge_video_talker_src_data *data;