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
@ -149,6 +149,7 @@ enum
|
|||||||
#define DEFAULT_NAT_METHOD GST_RTSP_NAT_DUMMY
|
#define DEFAULT_NAT_METHOD GST_RTSP_NAT_DUMMY
|
||||||
#define DEFAULT_DO_RTCP TRUE
|
#define DEFAULT_DO_RTCP TRUE
|
||||||
#define DEFAULT_PROXY NULL
|
#define DEFAULT_PROXY NULL
|
||||||
|
#define DEFAULT_RTP_BLOCKSIZE 0
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
@ -164,6 +165,7 @@ enum
|
|||||||
PROP_NAT_METHOD,
|
PROP_NAT_METHOD,
|
||||||
PROP_DO_RTCP,
|
PROP_DO_RTCP,
|
||||||
PROP_PROXY,
|
PROP_PROXY,
|
||||||
|
PROP_RTP_BLOCKSIZE,
|
||||||
PROP_LAST
|
PROP_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -239,6 +241,7 @@ static void gst_rtspsrc_loop (GstRTSPSrc * src);
|
|||||||
static void gst_rtspsrc_stream_push_event (GstRTSPSrc * src,
|
static void gst_rtspsrc_stream_push_event (GstRTSPSrc * src,
|
||||||
GstRTSPStream * stream, GstEvent * event);
|
GstRTSPStream * stream, GstEvent * event);
|
||||||
static void gst_rtspsrc_push_event (GstRTSPSrc * src, 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 */
|
/* commands we send to out loop to notify it of events */
|
||||||
#define CMD_WAIT 0
|
#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]",
|
"Proxy settings for HTTP tunneling. Format: [http://][user:passwd@]host[:port]",
|
||||||
DEFAULT_PROXY, G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
|
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;
|
gstelement_class->change_state = gst_rtspsrc_change_state;
|
||||||
|
|
||||||
gstbin_class->handle_message = gst_rtspsrc_handle_message;
|
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:
|
case PROP_PROXY:
|
||||||
gst_rtspsrc_set_proxy (rtspsrc, g_value_get_string (value));
|
gst_rtspsrc_set_proxy (rtspsrc, g_value_get_string (value));
|
||||||
break;
|
break;
|
||||||
|
case PROP_RTP_BLOCKSIZE:
|
||||||
|
rtspsrc->rtp_blocksize = g_value_get_uint (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;
|
||||||
@ -606,6 +625,9 @@ gst_rtspsrc_get_property (GObject * object, guint prop_id, GValue * value,
|
|||||||
g_value_take_string (value, str);
|
g_value_take_string (value, str);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case PROP_RTP_BLOCKSIZE:
|
||||||
|
g_value_set_uint (value, rtspsrc->rtp_blocksize);
|
||||||
|
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;
|
||||||
@ -4074,6 +4096,7 @@ gst_rtspsrc_setup_streams (GstRTSPSrc * src)
|
|||||||
gboolean unsupported_real = FALSE;
|
gboolean unsupported_real = FALSE;
|
||||||
gint rtpport, rtcpport;
|
gint rtpport, rtcpport;
|
||||||
GstRTSPUrl *url;
|
GstRTSPUrl *url;
|
||||||
|
gchar *hval;
|
||||||
|
|
||||||
url = gst_rtsp_connection_get_url (src->connection);
|
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);
|
gst_rtsp_message_add_header (&request, GST_RTSP_HDR_TRANSPORT, transports);
|
||||||
g_free (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 */
|
/* handle the code ourselves */
|
||||||
if ((res = gst_rtspsrc_send (src, &request, &response, &code) < 0))
|
if ((res = gst_rtspsrc_send (src, &request, &response, &code) < 0))
|
||||||
goto send_error;
|
goto send_error;
|
||||||
|
@ -193,6 +193,7 @@ struct _GstRTSPSrc {
|
|||||||
guint proxy_port;
|
guint proxy_port;
|
||||||
gchar *proxy_user;
|
gchar *proxy_user;
|
||||||
gchar *proxy_passwd;
|
gchar *proxy_passwd;
|
||||||
|
guint rtp_blocksize;
|
||||||
|
|
||||||
/* state */
|
/* state */
|
||||||
GstRTSPState state;
|
GstRTSPState state;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user