mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-03-30 20:59:44 +00:00
rtsp-server: port some more to 0.11
Fix caps. Remove bufferlist stuff Update for new API. Add queue before appsink now that preroll-queue-len is gone. Update for request pad changes.
This commit is contained in:
parent
d098205996
commit
fde25cd9c3
7 changed files with 51 additions and 78 deletions
|
@ -80,9 +80,9 @@ main (int argc, char *argv[])
|
||||||
* element with pay%d names will be a stream */
|
* element with pay%d names will be a stream */
|
||||||
factory = gst_rtsp_media_factory_new ();
|
factory = gst_rtsp_media_factory_new ();
|
||||||
gst_rtsp_media_factory_set_launch (factory, "( "
|
gst_rtsp_media_factory_set_launch (factory, "( "
|
||||||
"videotestsrc ! video/x-raw-yuv,width=352,height=288,framerate=15/1 ! "
|
"videotestsrc ! video/x-raw,width=352,height=288,framerate=15/1 ! "
|
||||||
"x264enc ! rtph264pay name=pay0 pt=96 "
|
"x264enc ! rtph264pay name=pay0 pt=96 "
|
||||||
"audiotestsrc ! audio/x-raw-int,rate=8000 ! "
|
"audiotestsrc ! audio/x-raw,rate=8000 ! "
|
||||||
"alawenc ! rtppcmapay name=pay1 pt=97 " ")");
|
"alawenc ! rtppcmapay name=pay1 pt=97 " ")");
|
||||||
|
|
||||||
/* attach the test factory to the /test url */
|
/* attach the test factory to the /test url */
|
||||||
|
|
|
@ -445,8 +445,7 @@ link_stream (GstRTSPClient * client, GstRTSPSession * session,
|
||||||
{
|
{
|
||||||
GST_DEBUG ("client %p: linking stream %p", client, stream);
|
GST_DEBUG ("client %p: linking stream %p", client, stream);
|
||||||
gst_rtsp_session_stream_set_callbacks (stream, (GstRTSPSendFunc) do_send_data,
|
gst_rtsp_session_stream_set_callbacks (stream, (GstRTSPSendFunc) do_send_data,
|
||||||
(GstRTSPSendFunc) do_send_data, (GstRTSPSendListFunc) do_send_data_list,
|
(GstRTSPSendFunc) do_send_data, client, NULL);
|
||||||
(GstRTSPSendListFunc) do_send_data_list, client, NULL);
|
|
||||||
client->streams = g_list_prepend (client->streams, stream);
|
client->streams = g_list_prepend (client->streams, stream);
|
||||||
/* make sure our session can't expire */
|
/* make sure our session can't expire */
|
||||||
gst_rtsp_session_prevent_expire (session);
|
gst_rtsp_session_prevent_expire (session);
|
||||||
|
@ -457,8 +456,7 @@ unlink_stream (GstRTSPClient * client, GstRTSPSession * session,
|
||||||
GstRTSPSessionStream * stream)
|
GstRTSPSessionStream * stream)
|
||||||
{
|
{
|
||||||
GST_DEBUG ("client %p: unlinking stream %p", client, stream);
|
GST_DEBUG ("client %p: unlinking stream %p", client, stream);
|
||||||
gst_rtsp_session_stream_set_callbacks (stream, NULL, NULL, NULL, NULL, NULL,
|
gst_rtsp_session_stream_set_callbacks (stream, NULL, NULL, NULL, NULL);
|
||||||
NULL);
|
|
||||||
client->streams = g_list_remove (client->streams, stream);
|
client->streams = g_list_remove (client->streams, stream);
|
||||||
/* our session can now expire */
|
/* our session can now expire */
|
||||||
gst_rtsp_session_allow_expire (session);
|
gst_rtsp_session_allow_expire (session);
|
||||||
|
|
|
@ -394,7 +394,7 @@ pad_added_cb (GstElement * uribin, GstPad * pad, GstElement * element)
|
||||||
|
|
||||||
/* get pad caps first, then call get_caps, then fail */
|
/* get pad caps first, then call get_caps, then fail */
|
||||||
if ((caps = gst_pad_get_current_caps (pad)) == NULL)
|
if ((caps = gst_pad_get_current_caps (pad)) == NULL)
|
||||||
if ((caps = gst_pad_get_caps (pad, NULL)) == NULL)
|
if ((caps = gst_pad_query_caps (pad, NULL)) == NULL)
|
||||||
goto no_caps;
|
goto no_caps;
|
||||||
|
|
||||||
/* check for raw caps */
|
/* check for raw caps */
|
||||||
|
@ -422,7 +422,7 @@ pad_added_cb (GstElement * uribin, GstPad * pad, GstElement * element)
|
||||||
/* continue with new pad and caps */
|
/* continue with new pad and caps */
|
||||||
pad = gst_element_get_static_pad (convert, "src");
|
pad = gst_element_get_static_pad (convert, "src");
|
||||||
if ((caps = gst_pad_get_current_caps (pad)) == NULL)
|
if ((caps = gst_pad_get_current_caps (pad)) == NULL)
|
||||||
if ((caps = gst_pad_get_caps (pad, NULL)) == NULL)
|
if ((caps = gst_pad_query_caps (pad, NULL)) == NULL)
|
||||||
goto no_caps;
|
goto no_caps;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1197,17 +1197,19 @@ on_timeout (GObject * session, GObject * source, GstRTSPMediaStream * stream)
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstFlowReturn
|
static GstFlowReturn
|
||||||
handle_new_buffer (GstAppSink * sink, gpointer user_data)
|
handle_new_sample (GstAppSink * sink, gpointer user_data)
|
||||||
{
|
{
|
||||||
GList *walk;
|
GList *walk;
|
||||||
|
GstSample *sample;
|
||||||
GstBuffer *buffer;
|
GstBuffer *buffer;
|
||||||
GstRTSPMediaStream *stream;
|
GstRTSPMediaStream *stream;
|
||||||
|
|
||||||
buffer = gst_app_sink_pull_buffer (sink);
|
sample = gst_app_sink_pull_sample (sink);
|
||||||
if (!buffer)
|
if (!sample)
|
||||||
return GST_FLOW_OK;
|
return GST_FLOW_OK;
|
||||||
|
|
||||||
stream = (GstRTSPMediaStream *) user_data;
|
stream = (GstRTSPMediaStream *) user_data;
|
||||||
|
buffer = gst_sample_get_buffer (sample);
|
||||||
|
|
||||||
for (walk = stream->transports; walk; walk = g_list_next (walk)) {
|
for (walk = stream->transports; walk; walk = g_list_next (walk)) {
|
||||||
GstRTSPMediaTrans *tr = (GstRTSPMediaTrans *) walk->data;
|
GstRTSPMediaTrans *tr = (GstRTSPMediaTrans *) walk->data;
|
||||||
|
@ -1220,47 +1222,15 @@ handle_new_buffer (GstAppSink * sink, gpointer user_data)
|
||||||
tr->send_rtcp (buffer, tr->transport->interleaved.max, tr->user_data);
|
tr->send_rtcp (buffer, tr->transport->interleaved.max, tr->user_data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
gst_buffer_unref (buffer);
|
gst_sample_unref (sample);
|
||||||
|
|
||||||
return GST_FLOW_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
static GstFlowReturn
|
|
||||||
handle_new_buffer_list (GstAppSink * sink, gpointer user_data)
|
|
||||||
{
|
|
||||||
GList *walk;
|
|
||||||
GstBufferList *blist;
|
|
||||||
GstRTSPMediaStream *stream;
|
|
||||||
|
|
||||||
blist = gst_app_sink_pull_buffer_list (sink);
|
|
||||||
if (!blist)
|
|
||||||
return GST_FLOW_OK;
|
|
||||||
|
|
||||||
stream = (GstRTSPMediaStream *) user_data;
|
|
||||||
|
|
||||||
for (walk = stream->transports; walk; walk = g_list_next (walk)) {
|
|
||||||
GstRTSPMediaTrans *tr = (GstRTSPMediaTrans *) walk->data;
|
|
||||||
|
|
||||||
if (GST_ELEMENT_CAST (sink) == stream->appsink[0]) {
|
|
||||||
if (tr->send_rtp_list)
|
|
||||||
tr->send_rtp_list (blist, tr->transport->interleaved.min,
|
|
||||||
tr->user_data);
|
|
||||||
} else {
|
|
||||||
if (tr->send_rtcp_list)
|
|
||||||
tr->send_rtcp_list (blist, tr->transport->interleaved.max,
|
|
||||||
tr->user_data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
gst_buffer_list_unref (blist);
|
|
||||||
|
|
||||||
return GST_FLOW_OK;
|
return GST_FLOW_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstAppSinkCallbacks sink_cb = {
|
static GstAppSinkCallbacks sink_cb = {
|
||||||
NULL, /* not interested in EOS */
|
NULL, /* not interested in EOS */
|
||||||
NULL, /* not interested in preroll buffers */
|
NULL, /* not interested in preroll samples */
|
||||||
handle_new_buffer,
|
handle_new_sample,
|
||||||
handle_new_buffer_list
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* prepare the pipeline objects to handle @stream in @media */
|
/* prepare the pipeline objects to handle @stream in @media */
|
||||||
|
@ -1268,7 +1238,7 @@ static gboolean
|
||||||
setup_stream (GstRTSPMediaStream * stream, guint idx, GstRTSPMedia * media)
|
setup_stream (GstRTSPMediaStream * stream, guint idx, GstRTSPMedia * media)
|
||||||
{
|
{
|
||||||
gchar *name;
|
gchar *name;
|
||||||
GstPad *pad, *teepad, *selpad;
|
GstPad *pad, *teepad, *queuepad, *selpad;
|
||||||
GstPadLinkReturn ret;
|
GstPadLinkReturn ret;
|
||||||
gint i;
|
gint i;
|
||||||
|
|
||||||
|
@ -1287,10 +1257,11 @@ setup_stream (GstRTSPMediaStream * stream, guint idx, GstRTSPMedia * media)
|
||||||
/* create elements for the TCP transfer */
|
/* create elements for the TCP transfer */
|
||||||
for (i = 0; i < 2; i++) {
|
for (i = 0; i < 2; i++) {
|
||||||
stream->appsrc[i] = gst_element_factory_make ("appsrc", NULL);
|
stream->appsrc[i] = gst_element_factory_make ("appsrc", NULL);
|
||||||
|
stream->appqueue[i] = gst_element_factory_make ("queue", NULL);
|
||||||
stream->appsink[i] = gst_element_factory_make ("appsink", NULL);
|
stream->appsink[i] = gst_element_factory_make ("appsink", NULL);
|
||||||
g_object_set (stream->appsink[i], "async", FALSE, "sync", FALSE, NULL);
|
g_object_set (stream->appsink[i], "async", FALSE, "sync", FALSE, NULL);
|
||||||
g_object_set (stream->appsink[i], "emit-signals", FALSE, NULL);
|
g_object_set (stream->appsink[i], "emit-signals", FALSE, NULL);
|
||||||
g_object_set (stream->appsink[i], "preroll-queue-len", 1, NULL);
|
gst_bin_add (GST_BIN_CAST (media->pipeline), stream->appqueue[i]);
|
||||||
gst_bin_add (GST_BIN_CAST (media->pipeline), stream->appsink[i]);
|
gst_bin_add (GST_BIN_CAST (media->pipeline), stream->appsink[i]);
|
||||||
gst_bin_add (GST_BIN_CAST (media->pipeline), stream->appsrc[i]);
|
gst_bin_add (GST_BIN_CAST (media->pipeline), stream->appsrc[i]);
|
||||||
gst_app_sink_set_callbacks (GST_APP_SINK_CAST (stream->appsink[i]),
|
gst_app_sink_set_callbacks (GST_APP_SINK_CAST (stream->appsink[i]),
|
||||||
|
@ -1298,19 +1269,19 @@ setup_stream (GstRTSPMediaStream * stream, guint idx, GstRTSPMedia * media)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* hook up the stream to the RTP session elements. */
|
/* hook up the stream to the RTP session elements. */
|
||||||
name = g_strdup_printf ("send_rtp_sink_%d", idx);
|
name = g_strdup_printf ("send_rtp_sink_%u", idx);
|
||||||
stream->send_rtp_sink = gst_element_get_request_pad (media->rtpbin, name);
|
stream->send_rtp_sink = gst_element_get_request_pad (media->rtpbin, name);
|
||||||
g_free (name);
|
g_free (name);
|
||||||
name = g_strdup_printf ("send_rtp_src_%d", idx);
|
name = g_strdup_printf ("send_rtp_src_%u", idx);
|
||||||
stream->send_rtp_src = gst_element_get_static_pad (media->rtpbin, name);
|
stream->send_rtp_src = gst_element_get_static_pad (media->rtpbin, name);
|
||||||
g_free (name);
|
g_free (name);
|
||||||
name = g_strdup_printf ("send_rtcp_src_%d", idx);
|
name = g_strdup_printf ("send_rtcp_src_%u", idx);
|
||||||
stream->send_rtcp_src = gst_element_get_request_pad (media->rtpbin, name);
|
stream->send_rtcp_src = gst_element_get_request_pad (media->rtpbin, name);
|
||||||
g_free (name);
|
g_free (name);
|
||||||
name = g_strdup_printf ("recv_rtcp_sink_%d", idx);
|
name = g_strdup_printf ("recv_rtcp_sink_%u", idx);
|
||||||
stream->recv_rtcp_sink = gst_element_get_request_pad (media->rtpbin, name);
|
stream->recv_rtcp_sink = gst_element_get_request_pad (media->rtpbin, name);
|
||||||
g_free (name);
|
g_free (name);
|
||||||
name = g_strdup_printf ("recv_rtp_sink_%d", idx);
|
name = g_strdup_printf ("recv_rtp_sink_%u", idx);
|
||||||
stream->recv_rtp_sink = gst_element_get_request_pad (media->rtpbin, name);
|
stream->recv_rtp_sink = gst_element_get_request_pad (media->rtpbin, name);
|
||||||
g_free (name);
|
g_free (name);
|
||||||
|
|
||||||
|
@ -1345,18 +1316,24 @@ setup_stream (GstRTSPMediaStream * stream, guint idx, GstRTSPMedia * media)
|
||||||
gst_object_unref (pad);
|
gst_object_unref (pad);
|
||||||
|
|
||||||
/* link RTP sink, we're pretty sure this will work. */
|
/* link RTP sink, we're pretty sure this will work. */
|
||||||
teepad = gst_element_get_request_pad (stream->tee[0], "src%d");
|
teepad = gst_element_get_request_pad (stream->tee[0], "src_%u");
|
||||||
pad = gst_element_get_static_pad (stream->udpsink[0], "sink");
|
pad = gst_element_get_static_pad (stream->udpsink[0], "sink");
|
||||||
gst_pad_link (teepad, pad);
|
gst_pad_link (teepad, pad);
|
||||||
gst_object_unref (pad);
|
gst_object_unref (pad);
|
||||||
gst_object_unref (teepad);
|
gst_object_unref (teepad);
|
||||||
|
|
||||||
teepad = gst_element_get_request_pad (stream->tee[0], "src%d");
|
teepad = gst_element_get_request_pad (stream->tee[0], "src_%u");
|
||||||
pad = gst_element_get_static_pad (stream->appsink[0], "sink");
|
pad = gst_element_get_static_pad (stream->appqueue[0], "sink");
|
||||||
gst_pad_link (teepad, pad);
|
gst_pad_link (teepad, pad);
|
||||||
gst_object_unref (pad);
|
gst_object_unref (pad);
|
||||||
gst_object_unref (teepad);
|
gst_object_unref (teepad);
|
||||||
|
|
||||||
|
queuepad = gst_element_get_static_pad (stream->appqueue[0], "src");
|
||||||
|
pad = gst_element_get_static_pad (stream->appsink[0], "sink");
|
||||||
|
gst_pad_link (queuepad, pad);
|
||||||
|
gst_object_unref (pad);
|
||||||
|
gst_object_unref (queuepad);
|
||||||
|
|
||||||
/* make tee for RTCP */
|
/* make tee for RTCP */
|
||||||
stream->tee[1] = gst_element_factory_make ("tee", NULL);
|
stream->tee[1] = gst_element_factory_make ("tee", NULL);
|
||||||
gst_bin_add (GST_BIN_CAST (media->pipeline), stream->tee[1]);
|
gst_bin_add (GST_BIN_CAST (media->pipeline), stream->tee[1]);
|
||||||
|
@ -1366,18 +1343,24 @@ setup_stream (GstRTSPMediaStream * stream, guint idx, GstRTSPMedia * media)
|
||||||
gst_object_unref (pad);
|
gst_object_unref (pad);
|
||||||
|
|
||||||
/* link RTCP elements */
|
/* link RTCP elements */
|
||||||
teepad = gst_element_get_request_pad (stream->tee[1], "src%d");
|
teepad = gst_element_get_request_pad (stream->tee[1], "src_%u");
|
||||||
pad = gst_element_get_static_pad (stream->udpsink[1], "sink");
|
pad = gst_element_get_static_pad (stream->udpsink[1], "sink");
|
||||||
gst_pad_link (teepad, pad);
|
gst_pad_link (teepad, pad);
|
||||||
gst_object_unref (pad);
|
gst_object_unref (pad);
|
||||||
gst_object_unref (teepad);
|
gst_object_unref (teepad);
|
||||||
|
|
||||||
teepad = gst_element_get_request_pad (stream->tee[1], "src%d");
|
teepad = gst_element_get_request_pad (stream->tee[1], "src_%u");
|
||||||
pad = gst_element_get_static_pad (stream->appsink[1], "sink");
|
pad = gst_element_get_static_pad (stream->appqueue[1], "sink");
|
||||||
gst_pad_link (teepad, pad);
|
gst_pad_link (teepad, pad);
|
||||||
gst_object_unref (pad);
|
gst_object_unref (pad);
|
||||||
gst_object_unref (teepad);
|
gst_object_unref (teepad);
|
||||||
|
|
||||||
|
queuepad = gst_element_get_static_pad (stream->appqueue[1], "src");
|
||||||
|
pad = gst_element_get_static_pad (stream->appsink[1], "sink");
|
||||||
|
gst_pad_link (queuepad, pad);
|
||||||
|
gst_object_unref (pad);
|
||||||
|
gst_object_unref (queuepad);
|
||||||
|
|
||||||
/* make selector for the RTP receivers */
|
/* make selector for the RTP receivers */
|
||||||
stream->selector[0] = gst_element_factory_make ("funnel", NULL);
|
stream->selector[0] = gst_element_factory_make ("funnel", NULL);
|
||||||
gst_bin_add (GST_BIN_CAST (media->pipeline), stream->selector[0]);
|
gst_bin_add (GST_BIN_CAST (media->pipeline), stream->selector[0]);
|
||||||
|
@ -1386,13 +1369,13 @@ setup_stream (GstRTSPMediaStream * stream, guint idx, GstRTSPMedia * media)
|
||||||
gst_pad_link (pad, stream->recv_rtp_sink);
|
gst_pad_link (pad, stream->recv_rtp_sink);
|
||||||
gst_object_unref (pad);
|
gst_object_unref (pad);
|
||||||
|
|
||||||
selpad = gst_element_get_request_pad (stream->selector[0], "sink%d");
|
selpad = gst_element_get_request_pad (stream->selector[0], "sink_%u");
|
||||||
pad = gst_element_get_static_pad (stream->udpsrc[0], "src");
|
pad = gst_element_get_static_pad (stream->udpsrc[0], "src");
|
||||||
gst_pad_link (pad, selpad);
|
gst_pad_link (pad, selpad);
|
||||||
gst_object_unref (pad);
|
gst_object_unref (pad);
|
||||||
gst_object_unref (selpad);
|
gst_object_unref (selpad);
|
||||||
|
|
||||||
selpad = gst_element_get_request_pad (stream->selector[0], "sink%d");
|
selpad = gst_element_get_request_pad (stream->selector[0], "sink_%u");
|
||||||
pad = gst_element_get_static_pad (stream->appsrc[0], "src");
|
pad = gst_element_get_static_pad (stream->appsrc[0], "src");
|
||||||
gst_pad_link (pad, selpad);
|
gst_pad_link (pad, selpad);
|
||||||
gst_object_unref (pad);
|
gst_object_unref (pad);
|
||||||
|
@ -1406,13 +1389,13 @@ setup_stream (GstRTSPMediaStream * stream, guint idx, GstRTSPMedia * media)
|
||||||
gst_pad_link (pad, stream->recv_rtcp_sink);
|
gst_pad_link (pad, stream->recv_rtcp_sink);
|
||||||
gst_object_unref (pad);
|
gst_object_unref (pad);
|
||||||
|
|
||||||
selpad = gst_element_get_request_pad (stream->selector[1], "sink%d");
|
selpad = gst_element_get_request_pad (stream->selector[1], "sink_%u");
|
||||||
pad = gst_element_get_static_pad (stream->udpsrc[1], "src");
|
pad = gst_element_get_static_pad (stream->udpsrc[1], "src");
|
||||||
gst_pad_link (pad, selpad);
|
gst_pad_link (pad, selpad);
|
||||||
gst_object_unref (pad);
|
gst_object_unref (pad);
|
||||||
gst_object_unref (selpad);
|
gst_object_unref (selpad);
|
||||||
|
|
||||||
selpad = gst_element_get_request_pad (stream->selector[1], "sink%d");
|
selpad = gst_element_get_request_pad (stream->selector[1], "sink_%u");
|
||||||
pad = gst_element_get_static_pad (stream->appsrc[1], "src");
|
pad = gst_element_get_static_pad (stream->appsrc[1], "src");
|
||||||
gst_pad_link (pad, selpad);
|
gst_pad_link (pad, selpad);
|
||||||
gst_object_unref (pad);
|
gst_object_unref (pad);
|
||||||
|
@ -1701,9 +1684,9 @@ gst_rtsp_media_prepare (GstRTSPMedia * media)
|
||||||
if (!media->reusable && media->reused)
|
if (!media->reusable && media->reused)
|
||||||
goto is_reused;
|
goto is_reused;
|
||||||
|
|
||||||
media->rtpbin = gst_element_factory_make ("gstrtpbin", NULL);
|
media->rtpbin = gst_element_factory_make ("rtpbin", NULL);
|
||||||
if (media->rtpbin == NULL)
|
if (media->rtpbin == NULL)
|
||||||
goto no_gstrtpbin;
|
goto no_rtpbin;
|
||||||
|
|
||||||
GST_INFO ("preparing media %p", media);
|
GST_INFO ("preparing media %p", media);
|
||||||
|
|
||||||
|
@ -1804,10 +1787,10 @@ is_reused:
|
||||||
GST_WARNING ("can not reuse media %p", media);
|
GST_WARNING ("can not reuse media %p", media);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
no_gstrtpbin:
|
no_rtpbin:
|
||||||
{
|
{
|
||||||
GST_WARNING ("no gstrtpbin element");
|
GST_WARNING ("no rtpbin element");
|
||||||
g_warning ("failed to create element 'gstrtpbin', check your installation");
|
g_warning ("failed to create element 'rtpbin', check your installation");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
state_failed:
|
state_failed:
|
||||||
|
|
|
@ -42,7 +42,6 @@ typedef struct _GstRTSPMediaClass GstRTSPMediaClass;
|
||||||
typedef struct _GstRTSPMediaTrans GstRTSPMediaTrans;
|
typedef struct _GstRTSPMediaTrans GstRTSPMediaTrans;
|
||||||
|
|
||||||
typedef gboolean (*GstRTSPSendFunc) (GstBuffer *buffer, guint8 channel, gpointer user_data);
|
typedef gboolean (*GstRTSPSendFunc) (GstBuffer *buffer, guint8 channel, gpointer user_data);
|
||||||
typedef gboolean (*GstRTSPSendListFunc) (GstBufferList *blist, guint8 channel, gpointer user_data);
|
|
||||||
typedef void (*GstRTSPKeepAliveFunc) (gpointer user_data);
|
typedef void (*GstRTSPKeepAliveFunc) (gpointer user_data);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -69,8 +68,6 @@ struct _GstRTSPMediaTrans {
|
||||||
|
|
||||||
GstRTSPSendFunc send_rtp;
|
GstRTSPSendFunc send_rtp;
|
||||||
GstRTSPSendFunc send_rtcp;
|
GstRTSPSendFunc send_rtcp;
|
||||||
GstRTSPSendListFunc send_rtp_list;
|
|
||||||
GstRTSPSendListFunc send_rtcp_list;
|
|
||||||
gpointer user_data;
|
gpointer user_data;
|
||||||
GDestroyNotify notify;
|
GDestroyNotify notify;
|
||||||
|
|
||||||
|
@ -128,6 +125,7 @@ struct _GstRTSPMediaStream {
|
||||||
GstElement *udpsink[2];
|
GstElement *udpsink[2];
|
||||||
/* for TCP transport */
|
/* for TCP transport */
|
||||||
GstElement *appsrc[2];
|
GstElement *appsrc[2];
|
||||||
|
GstElement *appqueue[2];
|
||||||
GstElement *appsink[2];
|
GstElement *appsink[2];
|
||||||
|
|
||||||
GstElement *tee[2];
|
GstElement *tee[2];
|
||||||
|
|
|
@ -82,8 +82,7 @@ gst_rtsp_session_free_stream (GstRTSPSessionStream * stream)
|
||||||
GST_INFO ("free session stream %p", stream);
|
GST_INFO ("free session stream %p", stream);
|
||||||
|
|
||||||
/* remove callbacks now */
|
/* remove callbacks now */
|
||||||
gst_rtsp_session_stream_set_callbacks (stream, NULL, NULL, NULL, NULL, NULL,
|
gst_rtsp_session_stream_set_callbacks (stream, NULL, NULL, NULL, NULL);
|
||||||
NULL);
|
|
||||||
gst_rtsp_session_stream_set_keepalive (stream, NULL, NULL, NULL);
|
gst_rtsp_session_stream_set_keepalive (stream, NULL, NULL, NULL);
|
||||||
|
|
||||||
gst_rtsp_media_trans_cleanup (&stream->trans);
|
gst_rtsp_media_trans_cleanup (&stream->trans);
|
||||||
|
@ -564,13 +563,10 @@ gst_rtsp_session_stream_set_transport (GstRTSPSessionStream * stream,
|
||||||
void
|
void
|
||||||
gst_rtsp_session_stream_set_callbacks (GstRTSPSessionStream * stream,
|
gst_rtsp_session_stream_set_callbacks (GstRTSPSessionStream * stream,
|
||||||
GstRTSPSendFunc send_rtp, GstRTSPSendFunc send_rtcp,
|
GstRTSPSendFunc send_rtp, GstRTSPSendFunc send_rtcp,
|
||||||
GstRTSPSendListFunc send_rtp_list, GstRTSPSendListFunc send_rtcp_list,
|
|
||||||
gpointer user_data, GDestroyNotify notify)
|
gpointer user_data, GDestroyNotify notify)
|
||||||
{
|
{
|
||||||
stream->trans.send_rtp = send_rtp;
|
stream->trans.send_rtp = send_rtp;
|
||||||
stream->trans.send_rtcp = send_rtcp;
|
stream->trans.send_rtcp = send_rtcp;
|
||||||
stream->trans.send_rtp_list = send_rtp_list;
|
|
||||||
stream->trans.send_rtcp_list = send_rtcp_list;
|
|
||||||
if (stream->trans.notify)
|
if (stream->trans.notify)
|
||||||
stream->trans.notify (stream->trans.user_data);
|
stream->trans.notify (stream->trans.user_data);
|
||||||
stream->trans.user_data = user_data;
|
stream->trans.user_data = user_data;
|
||||||
|
|
|
@ -154,8 +154,6 @@ GstRTSPTransport * gst_rtsp_session_stream_set_transport (GstRTSPSessionStre
|
||||||
void gst_rtsp_session_stream_set_callbacks (GstRTSPSessionStream *stream,
|
void gst_rtsp_session_stream_set_callbacks (GstRTSPSessionStream *stream,
|
||||||
GstRTSPSendFunc send_rtp,
|
GstRTSPSendFunc send_rtp,
|
||||||
GstRTSPSendFunc send_rtcp,
|
GstRTSPSendFunc send_rtcp,
|
||||||
GstRTSPSendListFunc send_rtp_list,
|
|
||||||
GstRTSPSendListFunc send_rtcp_list,
|
|
||||||
gpointer user_data,
|
gpointer user_data,
|
||||||
GDestroyNotify notify);
|
GDestroyNotify notify);
|
||||||
void gst_rtsp_session_stream_set_keepalive (GstRTSPSessionStream *stream,
|
void gst_rtsp_session_stream_set_keepalive (GstRTSPSessionStream *stream,
|
||||||
|
|
Loading…
Reference in a new issue