mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-26 02:00:33 +00:00
rtpsession: Only put RRs and full SDES into regular RTCP packets
If we may suppress the packet due to the rules of RFC4585 (i.e. when below the t-rr-int), we can send a smaller RTCP packet without RRs and full SDES. In theory we could even send a minimal RTCP packet according to RFC5506, but we don't support that yet. https://bugzilla.gnome.org/show_bug.cgi?id=746543
This commit is contained in:
parent
6f830e5bd5
commit
0f7e80ed59
1 changed files with 11 additions and 5 deletions
|
@ -3462,7 +3462,7 @@ session_sdes (RTPSession * sess, ReportData * data)
|
||||||
type = gst_rtcp_sdes_name_to_type (field);
|
type = gst_rtcp_sdes_name_to_type (field);
|
||||||
|
|
||||||
/* Early packets are minimal and only include the CNAME */
|
/* Early packets are minimal and only include the CNAME */
|
||||||
if (data->is_early && type != GST_RTCP_SDES_CNAME)
|
if (data->may_suppress && type != GST_RTCP_SDES_CNAME)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (type > GST_RTCP_SDES_END && type < GST_RTCP_SDES_PRIV) {
|
if (type > GST_RTCP_SDES_END && type < GST_RTCP_SDES_PRIV) {
|
||||||
|
@ -3666,7 +3666,7 @@ generate_rtcp (const gchar * key, RTPSource * source, ReportData * data)
|
||||||
/* send BYE */
|
/* send BYE */
|
||||||
make_source_bye (sess, source, data);
|
make_source_bye (sess, source, data);
|
||||||
is_bye = TRUE;
|
is_bye = TRUE;
|
||||||
} else if (!data->is_early) {
|
} else if (!data->may_suppress) {
|
||||||
/* loop over all known sources and add report blocks. If we are early, we
|
/* loop over all known sources and add report blocks. If we are early, we
|
||||||
* just make a minimal RTCP packet and skip this step */
|
* just make a minimal RTCP packet and skip this step */
|
||||||
g_hash_table_foreach (sess->ssrcs[sess->mask_idx],
|
g_hash_table_foreach (sess->ssrcs[sess->mask_idx],
|
||||||
|
@ -3744,6 +3744,7 @@ rtp_session_on_timeout (RTPSession * sess, GstClockTime current_time,
|
||||||
ReportData data = { GST_RTCP_BUFFER_INIT };
|
ReportData data = { GST_RTCP_BUFFER_INIT };
|
||||||
GHashTable *table_copy;
|
GHashTable *table_copy;
|
||||||
ReportOutput *output;
|
ReportOutput *output;
|
||||||
|
gboolean must_not_suppress;
|
||||||
|
|
||||||
g_return_val_if_fail (RTP_IS_SESSION (sess), GST_FLOW_ERROR);
|
g_return_val_if_fail (RTP_IS_SESSION (sess), GST_FLOW_ERROR);
|
||||||
|
|
||||||
|
@ -3802,8 +3803,12 @@ rtp_session_on_timeout (RTPSession * sess, GstClockTime current_time,
|
||||||
if (!is_rtcp_time (sess, current_time, &data))
|
if (!is_rtcp_time (sess, current_time, &data))
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
GST_DEBUG ("doing RTCP generation %u for %u sources, early %d",
|
/* We need to send a full RTCP packet */
|
||||||
sess->generation, data.num_to_report, data.is_early);
|
must_not_suppress = !data.is_early && !data.may_suppress;
|
||||||
|
|
||||||
|
GST_DEBUG
|
||||||
|
("doing RTCP generation %u for %u sources, early %d, may suppress %d",
|
||||||
|
sess->generation, data.num_to_report, data.is_early, data.may_suppress);
|
||||||
|
|
||||||
/* generate RTCP for all internal sources */
|
/* generate RTCP for all internal sources */
|
||||||
g_hash_table_foreach (sess->ssrcs[sess->mask_idx],
|
g_hash_table_foreach (sess->ssrcs[sess->mask_idx],
|
||||||
|
@ -3815,8 +3820,9 @@ rtp_session_on_timeout (RTPSession * sess, GstClockTime current_time,
|
||||||
|
|
||||||
/* we keep track of the last report time in order to timeout inactive
|
/* we keep track of the last report time in order to timeout inactive
|
||||||
* receivers or senders */
|
* receivers or senders */
|
||||||
if (!data.is_early && !data.may_suppress)
|
if (must_not_suppress)
|
||||||
sess->last_rtcp_send_time = data.current_time;
|
sess->last_rtcp_send_time = data.current_time;
|
||||||
|
|
||||||
sess->last_rtcp_check_time = data.current_time;
|
sess->last_rtcp_check_time = data.current_time;
|
||||||
sess->first_rtcp = FALSE;
|
sess->first_rtcp = FALSE;
|
||||||
sess->next_early_rtcp_time = GST_CLOCK_TIME_NONE;
|
sess->next_early_rtcp_time = GST_CLOCK_TIME_NONE;
|
||||||
|
|
Loading…
Reference in a new issue