mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-20 13:06:23 +00:00
rtpsession: Implement sending of reduced size RTCP packets
https://bugzilla.gnome.org/show_bug.cgi?id=750456
This commit is contained in:
parent
82de6384dd
commit
f09da189aa
2 changed files with 22 additions and 2 deletions
|
@ -73,6 +73,7 @@ enum
|
||||||
#define DEFAULT_MAX_DROPOUT_TIME 60000
|
#define DEFAULT_MAX_DROPOUT_TIME 60000
|
||||||
#define DEFAULT_MAX_MISORDER_TIME 2000
|
#define DEFAULT_MAX_MISORDER_TIME 2000
|
||||||
#define DEFAULT_RTP_PROFILE GST_RTP_PROFILE_AVP
|
#define DEFAULT_RTP_PROFILE GST_RTP_PROFILE_AVP
|
||||||
|
#define DEFAULT_RTCP_REDUCED_SIZE FALSE
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
|
@ -96,7 +97,8 @@ enum
|
||||||
PROP_MAX_DROPOUT_TIME,
|
PROP_MAX_DROPOUT_TIME,
|
||||||
PROP_MAX_MISORDER_TIME,
|
PROP_MAX_MISORDER_TIME,
|
||||||
PROP_STATS,
|
PROP_STATS,
|
||||||
PROP_RTP_PROFILE
|
PROP_RTP_PROFILE,
|
||||||
|
PROP_RTCP_REDUCED_SIZE
|
||||||
};
|
};
|
||||||
|
|
||||||
/* update average packet size */
|
/* update average packet size */
|
||||||
|
@ -553,6 +555,12 @@ rtp_session_class_init (RTPSessionClass * klass)
|
||||||
"RTP profile to use for this session", GST_TYPE_RTP_PROFILE,
|
"RTP profile to use for this session", GST_TYPE_RTP_PROFILE,
|
||||||
DEFAULT_RTP_PROFILE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
DEFAULT_RTP_PROFILE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
|
|
||||||
|
g_object_class_install_property (gobject_class, PROP_RTCP_REDUCED_SIZE,
|
||||||
|
g_param_spec_boolean ("rtcp-reduced-size", "RTCP Reduced Size",
|
||||||
|
"Use Reduced Size RTCP for feedback packets",
|
||||||
|
DEFAULT_RTCP_REDUCED_SIZE,
|
||||||
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
|
|
||||||
klass->get_source_by_ssrc =
|
klass->get_source_by_ssrc =
|
||||||
GST_DEBUG_FUNCPTR (rtp_session_get_source_by_ssrc);
|
GST_DEBUG_FUNCPTR (rtp_session_get_source_by_ssrc);
|
||||||
klass->send_rtcp = GST_DEBUG_FUNCPTR (rtp_session_send_rtcp);
|
klass->send_rtcp = GST_DEBUG_FUNCPTR (rtp_session_send_rtcp);
|
||||||
|
@ -632,6 +640,7 @@ rtp_session_init (RTPSession * sess)
|
||||||
sess->rtcp_immediate_feedback_threshold =
|
sess->rtcp_immediate_feedback_threshold =
|
||||||
DEFAULT_RTCP_IMMEDIATE_FEEDBACK_THRESHOLD;
|
DEFAULT_RTCP_IMMEDIATE_FEEDBACK_THRESHOLD;
|
||||||
sess->rtp_profile = DEFAULT_RTP_PROFILE;
|
sess->rtp_profile = DEFAULT_RTP_PROFILE;
|
||||||
|
sess->reduced_size_rtcp = DEFAULT_RTCP_REDUCED_SIZE;
|
||||||
|
|
||||||
sess->last_keyframe_request = GST_CLOCK_TIME_NONE;
|
sess->last_keyframe_request = GST_CLOCK_TIME_NONE;
|
||||||
|
|
||||||
|
@ -787,6 +796,9 @@ rtp_session_set_property (GObject * object, guint prop_id,
|
||||||
if (sess->callbacks.reconsider)
|
if (sess->callbacks.reconsider)
|
||||||
sess->callbacks.reconsider (sess, sess->reconsider_user_data);
|
sess->callbacks.reconsider (sess, sess->reconsider_user_data);
|
||||||
break;
|
break;
|
||||||
|
case PROP_RTCP_REDUCED_SIZE:
|
||||||
|
sess->reduced_size_rtcp = g_value_get_boolean (value);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
|
@ -860,6 +872,9 @@ rtp_session_get_property (GObject * object, guint prop_id,
|
||||||
case PROP_RTP_PROFILE:
|
case PROP_RTP_PROFILE:
|
||||||
g_value_set_enum (value, sess->rtp_profile);
|
g_value_set_enum (value, sess->rtp_profile);
|
||||||
break;
|
break;
|
||||||
|
case PROP_RTCP_REDUCED_SIZE:
|
||||||
|
g_value_set_boolean (value, sess->reduced_size_rtcp);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
|
@ -3208,6 +3223,9 @@ session_start_rtcp (RTPSession * sess, ReportData * data)
|
||||||
|
|
||||||
gst_rtcp_buffer_map (data->rtcp, GST_MAP_READWRITE, rtcp);
|
gst_rtcp_buffer_map (data->rtcp, GST_MAP_READWRITE, rtcp);
|
||||||
|
|
||||||
|
if (data->is_early && sess->reduced_size_rtcp)
|
||||||
|
return;
|
||||||
|
|
||||||
if (RTP_SOURCE_IS_SENDER (own)) {
|
if (RTP_SOURCE_IS_SENDER (own)) {
|
||||||
guint64 ntptime;
|
guint64 ntptime;
|
||||||
guint32 rtptime;
|
guint32 rtptime;
|
||||||
|
@ -3804,7 +3822,7 @@ generate_rtcp (const gchar * key, RTPSource * source, ReportData * data)
|
||||||
g_hash_table_foreach (sess->ssrcs[sess->mask_idx],
|
g_hash_table_foreach (sess->ssrcs[sess->mask_idx],
|
||||||
(GHFunc) session_report_blocks, data);
|
(GHFunc) session_report_blocks, data);
|
||||||
}
|
}
|
||||||
if (!data->has_sdes)
|
if (!data->has_sdes && (!data->is_early || !sess->reduced_size_rtcp))
|
||||||
session_sdes (sess, data);
|
session_sdes (sess, data);
|
||||||
|
|
||||||
if (data->have_fir)
|
if (data->have_fir)
|
||||||
|
|
|
@ -224,6 +224,8 @@ struct _RTPSession {
|
||||||
|
|
||||||
GstRTPProfile rtp_profile;
|
GstRTPProfile rtp_profile;
|
||||||
|
|
||||||
|
gboolean reduced_size_rtcp;
|
||||||
|
|
||||||
/* bandwidths */
|
/* bandwidths */
|
||||||
gboolean recalc_bandwidth;
|
gboolean recalc_bandwidth;
|
||||||
guint bandwidth;
|
guint bandwidth;
|
||||||
|
|
Loading…
Reference in a new issue