mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 04:01:08 +00:00
rtspsrc: Add RTP blocksize functionality
Add property to make the client suggest a blocksize to the server. Fixes #585549
This commit is contained in:
parent
6f3c1728f3
commit
a95c049f76
2 changed files with 32 additions and 0 deletions
|
@ -149,6 +149,7 @@ enum
|
|||
#define DEFAULT_NAT_METHOD GST_RTSP_NAT_DUMMY
|
||||
#define DEFAULT_DO_RTCP TRUE
|
||||
#define DEFAULT_PROXY NULL
|
||||
#define DEFAULT_RTP_BLOCKSIZE 0
|
||||
|
||||
enum
|
||||
{
|
||||
|
@ -164,6 +165,7 @@ enum
|
|||
PROP_NAT_METHOD,
|
||||
PROP_DO_RTCP,
|
||||
PROP_PROXY,
|
||||
PROP_RTP_BLOCKSIZE,
|
||||
PROP_LAST
|
||||
};
|
||||
|
||||
|
@ -239,6 +241,7 @@ static void gst_rtspsrc_loop (GstRTSPSrc * src);
|
|||
static void gst_rtspsrc_stream_push_event (GstRTSPSrc * src,
|
||||
GstRTSPStream * stream, GstEvent * event);
|
||||
static void gst_rtspsrc_push_event (GstRTSPSrc * src, GstEvent * event);
|
||||
static gchar *gst_rtspsrc_dup_printf (const gchar * format, ...);
|
||||
|
||||
/* commands we send to out loop to notify it of events */
|
||||
#define CMD_WAIT 0
|
||||
|
@ -367,6 +370,19 @@ gst_rtspsrc_class_init (GstRTSPSrcClass * klass)
|
|||
"Proxy settings for HTTP tunneling. Format: [http://][user:passwd@]host[:port]",
|
||||
DEFAULT_PROXY, G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
|
||||
|
||||
/**
|
||||
* GstRTSPSrc::rtp_blocksize
|
||||
*
|
||||
* RTP package size to suggest to server.
|
||||
*
|
||||
* Since: 0.10.16
|
||||
*/
|
||||
g_object_class_install_property (gobject_class, PROP_RTP_BLOCKSIZE,
|
||||
g_param_spec_uint ("rtp-blocksize", "RTP Blocksize",
|
||||
"RTP package size to suggest to server (0 = disabled)",
|
||||
0, 65536, DEFAULT_RTP_BLOCKSIZE,
|
||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
|
||||
|
||||
gstelement_class->change_state = gst_rtspsrc_change_state;
|
||||
|
||||
gstbin_class->handle_message = gst_rtspsrc_handle_message;
|
||||
|
@ -542,6 +558,9 @@ gst_rtspsrc_set_property (GObject * object, guint prop_id, const GValue * value,
|
|||
case PROP_PROXY:
|
||||
gst_rtspsrc_set_proxy (rtspsrc, g_value_get_string (value));
|
||||
break;
|
||||
case PROP_RTP_BLOCKSIZE:
|
||||
rtspsrc->rtp_blocksize = g_value_get_uint (value);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
|
@ -606,6 +625,9 @@ gst_rtspsrc_get_property (GObject * object, guint prop_id, GValue * value,
|
|||
g_value_take_string (value, str);
|
||||
break;
|
||||
}
|
||||
case PROP_RTP_BLOCKSIZE:
|
||||
g_value_set_uint (value, rtspsrc->rtp_blocksize);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
|
@ -4074,6 +4096,7 @@ gst_rtspsrc_setup_streams (GstRTSPSrc * src)
|
|||
gboolean unsupported_real = FALSE;
|
||||
gint rtpport, rtcpport;
|
||||
GstRTSPUrl *url;
|
||||
gchar *hval;
|
||||
|
||||
url = gst_rtsp_connection_get_url (src->connection);
|
||||
|
||||
|
@ -4161,6 +4184,14 @@ gst_rtspsrc_setup_streams (GstRTSPSrc * src)
|
|||
gst_rtsp_message_add_header (&request, GST_RTSP_HDR_TRANSPORT, transports);
|
||||
g_free (transports);
|
||||
|
||||
/* if the user wants a non default RTP packet size we add the blocksize
|
||||
* parameter */
|
||||
if (src->rtp_blocksize > 0) {
|
||||
hval = gst_rtspsrc_dup_printf ("%d", src->rtp_blocksize);
|
||||
gst_rtsp_message_add_header (&request, GST_RTSP_HDR_BLOCKSIZE, hval);
|
||||
g_free (hval);
|
||||
}
|
||||
|
||||
/* handle the code ourselves */
|
||||
if ((res = gst_rtspsrc_send (src, &request, &response, &code) < 0))
|
||||
goto send_error;
|
||||
|
|
|
@ -193,6 +193,7 @@ struct _GstRTSPSrc {
|
|||
guint proxy_port;
|
||||
gchar *proxy_user;
|
||||
gchar *proxy_passwd;
|
||||
guint rtp_blocksize;
|
||||
|
||||
/* state */
|
||||
GstRTSPState state;
|
||||
|
|
Loading…
Reference in a new issue