diff --git a/docs/plugins/gst-plugins-good-plugins.signals b/docs/plugins/gst-plugins-good-plugins.signals
index f0df275c1a..b0dd425f1c 100644
--- a/docs/plugins/gst-plugins-good-plugins.signals
+++ b/docs/plugins/gst-plugins-good-plugins.signals
@@ -374,14 +374,6 @@ GstRtpBin *gstrtpbin
guint arg1
-
-GstRtpBin::on-bundled-ssrc
-guint
-l
-GstRtpBin *gstrtpbin
-guint arg1
-
-
GstRtpBin::get-internal-storage
GObject*
diff --git a/gst/rtpmanager/gstrtpbin.c b/gst/rtpmanager/gstrtpbin.c
index 1e08d93872..6bcc7f8d1c 100644
--- a/gst/rtpmanager/gstrtpbin.c
+++ b/gst/rtpmanager/gstrtpbin.c
@@ -53,13 +53,6 @@
* SSRC in the RTP packets to its own SSRC and wil forward the packets on the
* send_rtp_src_\%u pad after updating its internal state.
*
- * #GstRtpBin can also demultiplex incoming bundled streams. The first
- * #GstRtpSession will have a #GstRtpSsrcDemux element splitting the streams
- * based on their SSRC and potentially dispatched to a different #GstRtpSession.
- * Because retransmission SSRCs need to be merged with the corresponding media
- * stream the #GstRtpBin::on-bundled-ssrc signal is emitted so that the
- * application can find out to which session the SSRC belongs.
- *
* The session manager needs the clock-rate of the payload types it is handling
* and will signal the #GstRtpSession::request-pt-map signal when it needs such a
* mapping. One can clear the cached values with the #GstRtpSession::clear-pt-map
@@ -384,12 +377,12 @@ static void free_client (GstRtpBinClient * client, GstRtpBin * bin);
static void free_stream (GstRtpBinStream * stream, GstRtpBin * bin);
static GstRtpBinSession *create_session (GstRtpBin * rtpbin, gint id);
static GstPad *complete_session_sink (GstRtpBin * rtpbin,
- GstRtpBinSession * session, gboolean bundle_demuxer_needed);
+ GstRtpBinSession * session);
static void
complete_session_receiver (GstRtpBin * rtpbin, GstRtpBinSession * session,
guint sessid);
static GstPad *complete_session_rtcp (GstRtpBin * rtpbin,
- GstRtpBinSession * session, guint sessid, gboolean bundle_demuxer_needed);
+ GstRtpBinSession * session, guint sessid);
/* Manages the RTP stream for one SSRC.
*
@@ -462,12 +455,6 @@ struct _GstRtpBinSession
/* Fec support */
GstElement *storage;
- /* Bundling support */
- GstElement *rtp_funnel;
- GstElement *rtcp_funnel;
- GstElement *bundle_demux;
- gulong bundle_demux_newpad_sig;
-
GMutex lock;
/* list of GstRtpBinStream */
@@ -668,102 +655,6 @@ ssrc_demux_pad_removed (GstElement * element, guint ssrc, GstPad * pad,
GST_RTP_BIN_UNLOCK (rtpbin);
}
-static void
-new_bundled_ssrc_pad_found (GstElement * element, guint ssrc, GstPad * pad,
- GstRtpBinSession * session)
-{
- GValue result = G_VALUE_INIT;
- GValue params[2] = { G_VALUE_INIT, G_VALUE_INIT };
- guint session_id = 0;
- GstRtpBinSession *target_session = NULL;
- GstRtpBin *rtpbin = session->bin;
- gchar *name;
- GstPad *src_pad;
- GstPad *recv_rtp_sink = NULL;
- GstPad *recv_rtcp_sink = NULL;
- GstPadLinkReturn ret;
-
- GST_RTP_BIN_DYN_LOCK (rtpbin);
- GST_DEBUG_OBJECT (rtpbin, "new bundled SSRC pad %08x, %s:%s", ssrc,
- GST_DEBUG_PAD_NAME (pad));
-
- g_value_init (&result, G_TYPE_UINT);
- g_value_init (¶ms[0], GST_TYPE_ELEMENT);
- g_value_set_object (¶ms[0], rtpbin);
- g_value_init (¶ms[1], G_TYPE_UINT);
- g_value_set_uint (¶ms[1], ssrc);
-
- g_signal_emitv (params,
- gst_rtp_bin_signals[SIGNAL_ON_BUNDLED_SSRC], 0, &result);
- g_value_unset (¶ms[0]);
-
- session_id = g_value_get_uint (&result);
- if (session_id == 0) {
- target_session = session;
- } else {
- target_session = find_session_by_id (rtpbin, (gint) session_id);
- if (!target_session) {
- target_session = create_session (rtpbin, session_id);
- }
- if (!target_session) {
- /* create_session() warned already */
- GST_RTP_BIN_DYN_UNLOCK (rtpbin);
- return;
- }
-
- if (!target_session->recv_rtp_sink) {
- recv_rtp_sink = complete_session_sink (rtpbin, target_session, FALSE);
- }
-
- if (!target_session->recv_rtp_src)
- complete_session_receiver (rtpbin, target_session, session_id);
-
- if (!target_session->recv_rtcp_sink) {
- recv_rtcp_sink =
- complete_session_rtcp (rtpbin, target_session, session_id, FALSE);
- }
- }
-
- GST_DEBUG_OBJECT (rtpbin, "Assigning bundled ssrc %u to session %u", ssrc,
- session_id);
-
- if (!recv_rtp_sink) {
- recv_rtp_sink =
- gst_element_get_request_pad (target_session->rtp_funnel, "sink_%u");
- }
-
- if (!recv_rtcp_sink) {
- recv_rtcp_sink =
- gst_element_get_request_pad (target_session->rtcp_funnel, "sink_%u");
- }
-
- name = g_strdup_printf ("src_%u", ssrc);
- src_pad = gst_element_get_static_pad (element, name);
- ret = gst_pad_link (src_pad, recv_rtp_sink);
- g_free (name);
- gst_object_unref (src_pad);
- gst_object_unref (recv_rtp_sink);
- if (ret != GST_PAD_LINK_OK) {
- g_warning
- ("rtpbin: failed to link bundle demuxer to receive rtp funnel for session %u",
- session_id);
- }
-
- name = g_strdup_printf ("rtcp_src_%u", ssrc);
- src_pad = gst_element_get_static_pad (element, name);
- gst_pad_link (src_pad, recv_rtcp_sink);
- g_free (name);
- gst_object_unref (src_pad);
- gst_object_unref (recv_rtcp_sink);
- if (ret != GST_PAD_LINK_OK) {
- g_warning
- ("rtpbin: failed to link bundle demuxer to receive rtcp sink pad for session %u",
- session_id);
- }
-
- GST_RTP_BIN_DYN_UNLOCK (rtpbin);
-}
-
/* create a session with the given id. Must be called with RTP_BIN_LOCK */
static GstRtpBinSession *
create_session (GstRtpBin * rtpbin, gint id)
@@ -796,9 +687,6 @@ create_session (GstRtpBin * rtpbin, gint id)
sess->demux = demux;
sess->storage = storage;
- sess->rtp_funnel = gst_element_factory_make ("funnel", NULL);
- sess->rtcp_funnel = gst_element_factory_make ("funnel", NULL);
-
sess->ptmap = g_hash_table_new_full (NULL, NULL, NULL,
(GDestroyNotify) gst_caps_unref);
rtpbin->sessions = g_slist_prepend (rtpbin->sessions, sess);
@@ -846,8 +734,6 @@ create_session (GstRtpBin * rtpbin, gint id)
gst_bin_add (GST_BIN_CAST (rtpbin), session);
gst_bin_add (GST_BIN_CAST (rtpbin), demux);
- gst_bin_add (GST_BIN_CAST (rtpbin), sess->rtp_funnel);
- gst_bin_add (GST_BIN_CAST (rtpbin), sess->rtcp_funnel);
gst_bin_add (GST_BIN_CAST (rtpbin), storage);
/* unref the storage again, the bin has a reference now and
@@ -861,8 +747,6 @@ create_session (GstRtpBin * rtpbin, gint id)
/* change state only to what's needed */
gst_element_set_state (demux, target);
gst_element_set_state (session, target);
- gst_element_set_state (sess->rtp_funnel, target);
- gst_element_set_state (sess->rtcp_funnel, target);
gst_element_set_state (storage, target);
return sess;
@@ -2511,29 +2395,6 @@ gst_rtp_bin_class_init (GstRtpBinClass * klass)
on_sender_ssrc_active), NULL, NULL, g_cclosure_marshal_generic,
G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT);
-
- /**
- * GstRtpBin::on-bundled-ssrc:
- * @rtpbin: the object which received the signal
- * @ssrc: the bundled SSRC
- *
- * Notify of a new incoming bundled SSRC. If no handler is connected to the
- * signal then the #GstRtpSession created for the recv_rtp_sink_\%u
- * request pad will be managing this new SSRC. However if there is a handler
- * connected then the application can decided to dispatch this new stream to
- * another session by providing its ID as return value of the handler. This
- * can be particularly useful to keep retransmission SSRCs grouped with the
- * session for which they handle retransmission.
- *
- * Since: 1.12
- */
- gst_rtp_bin_signals[SIGNAL_ON_BUNDLED_SSRC] =
- g_signal_new ("on-bundled-ssrc", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRtpBinClass,
- on_bundled_ssrc), NULL, NULL,
- g_cclosure_marshal_generic, G_TYPE_UINT, 1, G_TYPE_UINT);
-
-
g_object_class_install_property (gobject_class, PROP_SDES,
g_param_spec_boxed ("sdes", "SDES",
"The SDES items of this session",
@@ -3733,39 +3594,11 @@ no_stream:
}
}
-static void
-session_maybe_create_bundle_demuxer (GstRtpBinSession * session)
-{
- GstRtpBin *rtpbin;
-
- if (session->bundle_demux)
- return;
-
- rtpbin = session->bin;
- if (g_signal_has_handler_pending (rtpbin,
- gst_rtp_bin_signals[SIGNAL_ON_BUNDLED_SSRC], 0, TRUE)) {
- GST_DEBUG_OBJECT (rtpbin, "Adding a bundle SSRC demuxer to session %u",
- session->id);
- session->bundle_demux = gst_element_factory_make ("rtpssrcdemux", NULL);
- session->bundle_demux_newpad_sig = g_signal_connect (session->bundle_demux,
- "new-ssrc-pad", (GCallback) new_bundled_ssrc_pad_found, session);
-
- gst_bin_add (GST_BIN_CAST (rtpbin), session->bundle_demux);
- gst_element_sync_state_with_parent (session->bundle_demux);
- } else {
- GST_DEBUG_OBJECT (rtpbin,
- "No handler for the on-bundled-ssrc signal so no need for a bundle SSRC demuxer in session %u",
- session->id);
- }
-}
-
static GstPad *
-complete_session_sink (GstRtpBin * rtpbin, GstRtpBinSession * session,
- gboolean bundle_demuxer_needed)
+complete_session_sink (GstRtpBin * rtpbin, GstRtpBinSession * session)
{
guint sessid = session->id;
GstPad *recv_rtp_sink;
- GstPad *funnel_src;
GstElement *decoder;
g_assert (!session->recv_rtp_sink);
@@ -3779,9 +3612,6 @@ complete_session_sink (GstRtpBin * rtpbin, GstRtpBinSession * session,
g_signal_connect (session->recv_rtp_sink, "notify::caps",
(GCallback) caps_changed, session);
- if (bundle_demuxer_needed)
- session_maybe_create_bundle_demuxer (session);
-
GST_DEBUG_OBJECT (rtpbin, "requesting RTP decoder");
decoder = session_request_element (session, SIGNAL_REQUEST_RTP_DECODER);
if (decoder) {
@@ -3799,14 +3629,8 @@ complete_session_sink (GstRtpBin * rtpbin, GstRtpBinSession * session,
if (decsrc == NULL)
goto dec_src_failed;
- if (session->bundle_demux) {
- GstPad *demux_sink;
- demux_sink = gst_element_get_static_pad (session->bundle_demux, "sink");
- ret = gst_pad_link (decsrc, demux_sink);
- gst_object_unref (demux_sink);
- } else {
- ret = gst_pad_link (decsrc, session->recv_rtp_sink);
- }
+ ret = gst_pad_link (decsrc, session->recv_rtp_sink);
+
gst_object_unref (decsrc);
if (ret != GST_PAD_LINK_OK)
@@ -3814,19 +3638,9 @@ complete_session_sink (GstRtpBin * rtpbin, GstRtpBinSession * session,
} else {
GST_DEBUG_OBJECT (rtpbin, "no RTP decoder given");
- if (session->bundle_demux) {
- recv_rtp_sink =
- gst_element_get_static_pad (session->bundle_demux, "sink");
- } else {
- recv_rtp_sink =
- gst_element_get_request_pad (session->rtp_funnel, "sink_%u");
- }
+ recv_rtp_sink = gst_object_ref (session->recv_rtp_sink);
}
- funnel_src = gst_element_get_static_pad (session->rtp_funnel, "src");
- gst_pad_link (funnel_src, session->recv_rtp_sink);
- gst_object_unref (funnel_src);
-
return recv_rtp_sink;
/* ERRORS */
@@ -3984,11 +3798,10 @@ create_recv_rtp (GstRtpBin * rtpbin, GstPadTemplate * templ, const gchar * name)
return session->recv_rtp_sink_ghost;
/* setup the session sink pad */
- recv_rtp_sink = complete_session_sink (rtpbin, session, TRUE);
+ recv_rtp_sink = complete_session_sink (rtpbin, session);
if (!recv_rtp_sink)
goto session_sink_failed;
-
GST_DEBUG_OBJECT (rtpbin, "ghosting session sink pad");
session->recv_rtp_sink_ghost =
gst_ghost_pad_new_from_template (name, recv_rtp_sink, templ);
@@ -4029,11 +3842,6 @@ remove_recv_rtp (GstRtpBin * rtpbin, GstRtpBinSession * session)
g_signal_handler_disconnect (session->demux, session->demux_padremoved_sig);
session->demux_padremoved_sig = 0;
}
- if (session->bundle_demux_newpad_sig) {
- g_signal_handler_disconnect (session->bundle_demux,
- session->bundle_demux_newpad_sig);
- session->bundle_demux_newpad_sig = 0;
- }
if (session->recv_rtp_src) {
gst_object_unref (session->recv_rtp_src);
session->recv_rtp_src = NULL;
@@ -4053,12 +3861,11 @@ remove_recv_rtp (GstRtpBin * rtpbin, GstRtpBinSession * session)
static GstPad *
complete_session_rtcp (GstRtpBin * rtpbin, GstRtpBinSession * session,
- guint sessid, gboolean bundle_demuxer_needed)
+ guint sessid)
{
GstElement *decoder;
GstPad *sinkdpad;
GstPad *decsink = NULL;
- GstPad *funnel_src;
/* get recv_rtp pad and store */
GST_DEBUG_OBJECT (rtpbin, "getting RTCP sink pad");
@@ -4067,9 +3874,6 @@ complete_session_rtcp (GstRtpBin * rtpbin, GstRtpBinSession * session,
if (session->recv_rtcp_sink == NULL)
goto pad_failed;
- if (bundle_demuxer_needed)
- session_maybe_create_bundle_demuxer (session);
-
GST_DEBUG_OBJECT (rtpbin, "getting RTCP decoder");
decoder = session_request_element (session, SIGNAL_REQUEST_RTCP_DECODER);
if (decoder) {
@@ -4086,26 +3890,15 @@ complete_session_rtcp (GstRtpBin * rtpbin, GstRtpBinSession * session,
if (decsrc == NULL)
goto dec_src_failed;
- if (session->bundle_demux) {
- GstPad *demux_sink;
- demux_sink =
- gst_element_get_static_pad (session->bundle_demux, "rtcp_sink");
- ret = gst_pad_link (decsrc, demux_sink);
- gst_object_unref (demux_sink);
- } else {
- ret = gst_pad_link (decsrc, session->recv_rtcp_sink);
- }
+ ret = gst_pad_link (decsrc, session->recv_rtcp_sink);
+
gst_object_unref (decsrc);
if (ret != GST_PAD_LINK_OK)
goto dec_link_failed;
} else {
GST_DEBUG_OBJECT (rtpbin, "no RTCP decoder given");
- if (session->bundle_demux) {
- decsink = gst_element_get_static_pad (session->bundle_demux, "rtcp_sink");
- } else {
- decsink = gst_element_get_request_pad (session->rtcp_funnel, "sink_%u");
- }
+ decsink = gst_object_ref (session->recv_rtcp_sink);
}
/* get srcpad, link to SSRCDemux */
@@ -4119,10 +3912,6 @@ complete_session_rtcp (GstRtpBin * rtpbin, GstRtpBinSession * session,
gst_pad_link_full (session->sync_src, sinkdpad, GST_PAD_LINK_CHECK_NOTHING);
gst_object_unref (sinkdpad);
- funnel_src = gst_element_get_static_pad (session->rtcp_funnel, "src");
- gst_pad_link (funnel_src, session->recv_rtcp_sink);
- gst_object_unref (funnel_src);
-
return decsink;
pad_failed:
@@ -4186,7 +3975,7 @@ create_recv_rtcp (GstRtpBin * rtpbin, GstPadTemplate * templ,
if (session->recv_rtcp_sink_ghost != NULL)
return session->recv_rtcp_sink_ghost;
- decsink = complete_session_rtcp (rtpbin, session, sessid, TRUE);
+ decsink = complete_session_rtcp (rtpbin, session, sessid);
if (!decsink)
goto create_error;
diff --git a/gst/rtpmanager/gstrtpbin.h b/gst/rtpmanager/gstrtpbin.h
index 00f76545c0..c3c1fb572e 100644
--- a/gst/rtpmanager/gstrtpbin.h
+++ b/gst/rtpmanager/gstrtpbin.h
@@ -137,8 +137,6 @@ struct _GstRtpBinClass {
void (*on_new_sender_ssrc) (GstRtpBin *rtpbin, guint session, guint32 ssrc);
void (*on_sender_ssrc_active) (GstRtpBin *rtpbin, guint session, guint32 ssrc);
-
- guint (*on_bundled_ssrc) (GstRtpBin *rtpbin, guint ssrc);
};
GType gst_rtp_bin_get_type (void);
diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am
index 0760d5fb27..4b02b675b3 100644
--- a/tests/check/Makefile.am
+++ b/tests/check/Makefile.am
@@ -246,7 +246,6 @@ if USE_PLUGIN_RTPMANAGER
check_rtpmanager = \
elements/rtpbin \
elements/rtpbin_buffer_list \
- elements/rtpbundle \
elements/rtpcollision \
elements/rtpjitterbuffer \
elements/rtpmux \
@@ -619,9 +618,6 @@ elements_rtpfunnel_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstrtp-$(GST_API_VERSION)
elements_rtpcollision_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
elements_rtpcollision_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_NET_LIBS) -lgstrtp-$(GST_API_VERSION) $(GIO_LIBS) $(LDADD)
-elements_rtpbundle_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
-elements_rtpbundle_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstrtp-$(GST_API_VERSION) $(LDADD)
-
elements_rtpstorage_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
elements_rtpstorage_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_NET_LIBS) -lgstrtp-$(GST_API_VERSION) $(GIO_LIBS) $(LDADD)
diff --git a/tests/check/elements/.gitignore b/tests/check/elements/.gitignore
index 64cd89d006..1a226cacc1 100644
--- a/tests/check/elements/.gitignore
+++ b/tests/check/elements/.gitignore
@@ -54,7 +54,6 @@ rgvolume
rtp-payloading
rtpbin
rtpbin_buffer_list
-rtpbundle
rtpcollision
rtph261
rtph263
diff --git a/tests/check/elements/rtpbundle.c b/tests/check/elements/rtpbundle.c
deleted file mode 100644
index 9b477e1a06..0000000000
--- a/tests/check/elements/rtpbundle.c
+++ /dev/null
@@ -1,390 +0,0 @@
-/* GStreamer
- *
- * Copyright (C) 2016 Igalia S.L.
- * @author Philippe Normand
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include
-#include
-#include
-#include
-
-static GMainLoop *main_loop;
-
-static void
-message_received (GstBus * bus, GstMessage * message, GstPipeline * bin)
-{
- GST_INFO ("bus message from \"%" GST_PTR_FORMAT "\": %" GST_PTR_FORMAT,
- GST_MESSAGE_SRC (message), message);
-
- switch (message->type) {
- case GST_MESSAGE_EOS:
- g_main_loop_quit (main_loop);
- break;
- case GST_MESSAGE_WARNING:{
- GError *gerror;
- gchar *debug;
-
- gst_message_parse_warning (message, &gerror, &debug);
- gst_object_default_error (GST_MESSAGE_SRC (message), gerror, debug);
- g_error_free (gerror);
- g_free (debug);
- break;
- }
- case GST_MESSAGE_ERROR:{
- GError *gerror;
- gchar *debug;
-
- gst_message_parse_error (message, &gerror, &debug);
- gst_object_default_error (GST_MESSAGE_SRC (message), gerror, debug);
- g_error_free (gerror);
- g_free (debug);
- fail ("Error!");
- break;
- }
- default:
- break;
- }
-}
-
-static void
-on_rtpbinreceive_pad_added (GstElement * element, GstPad * new_pad,
- gpointer data)
-{
- GstElement *pipeline = GST_ELEMENT (data);
- gchar *pad_name = gst_pad_get_name (new_pad);
-
- if (g_str_has_prefix (pad_name, "recv_rtp_src_")) {
- GstCaps *caps = gst_pad_get_current_caps (new_pad);
- GstStructure *s = gst_caps_get_structure (caps, 0);
- const gchar *media_type = gst_structure_get_string (s, "media");
- gchar *depayloader_name = g_strdup_printf ("%s_rtpdepayloader", media_type);
- GstElement *rtpdepayloader =
- gst_bin_get_by_name (GST_BIN (pipeline), depayloader_name);
- GstPad *sinkpad;
-
- g_free (depayloader_name);
- fail_unless (rtpdepayloader != NULL, NULL);
-
- sinkpad = gst_element_get_static_pad (rtpdepayloader, "sink");
- gst_pad_link (new_pad, sinkpad);
- gst_object_unref (sinkpad);
- gst_object_unref (rtpdepayloader);
-
- gst_caps_unref (caps);
- }
- g_free (pad_name);
-}
-
-static guint
-on_bundled_ssrc (GstElement * rtpbin, guint ssrc, gpointer user_data)
-{
- static gboolean create_session = FALSE;
- guint session_id = 0;
-
- if (create_session) {
- session_id = 1;
- } else {
- create_session = TRUE;
- /* use existing session 0, a new session will be created for the next discovered bundled SSRC */
- }
- return session_id;
-}
-
-static GstCaps *
-on_request_pt_map (GstElement * rtpbin, guint session_id, guint pt,
- gpointer user_data)
-{
- GstCaps *caps = NULL;
- if (pt == 96) {
- caps =
- gst_caps_from_string
- ("application/x-rtp,media=(string)audio,encoding-name=(string)PCMA,clock-rate=(int)8000");
- } else if (pt == 100) {
- caps =
- gst_caps_from_string
- ("application/x-rtp,media=(string)video,encoding-name=(string)RAW,clock-rate=(int)90000,sampling=(string)\"YCbCr-4:2:0\",depth=(string)8,width=(string)320,height=(string)240");
- }
- return caps;
-}
-
-
-static GstElement *
-create_pipeline (gboolean send)
-{
- GstElement *pipeline, *rtpbin, *audiosrc, *audio_encoder,
- *audio_rtppayloader, *sendrtp_udpsink, *recv_rtp_udpsrc,
- *send_rtcp_udpsink, *recv_rtcp_udpsrc, *sendrtcp_funnel, *sendrtp_funnel;
- GstElement *audio_rtpdepayloader, *audio_decoder, *audio_sink;
- GstElement *videosrc, *video_rtppayloader, *video_rtpdepayloader, *video_sink;
- gboolean res;
- GstPad *funnel_pad, *rtp_src_pad;
- GstCaps *rtpcaps;
- gint rtp_udp_port = 5001;
- gint rtcp_udp_port = 5002;
-
- pipeline = gst_pipeline_new (send ? "pipeline_send" : "pipeline_receive");
-
- rtpbin =
- gst_element_factory_make ("rtpbin",
- send ? "rtpbin_send" : "rtpbin_receive");
- g_object_set (rtpbin, "latency", 200, NULL);
-
- if (!send) {
- g_signal_connect (rtpbin, "on-bundled-ssrc",
- G_CALLBACK (on_bundled_ssrc), NULL);
- g_signal_connect (rtpbin, "request-pt-map",
- G_CALLBACK (on_request_pt_map), NULL);
- }
-
- g_signal_connect (rtpbin, "pad-added",
- G_CALLBACK (on_rtpbinreceive_pad_added), pipeline);
-
- gst_bin_add (GST_BIN (pipeline), rtpbin);
-
- if (send) {
- audiosrc = gst_element_factory_make ("audiotestsrc", NULL);
- audio_encoder = gst_element_factory_make ("alawenc", NULL);
- audio_rtppayloader = gst_element_factory_make ("rtppcmapay", NULL);
- g_object_set (audio_rtppayloader, "pt", 96, NULL);
- g_object_set (audio_rtppayloader, "seqnum-offset", 1, NULL);
-
- videosrc = gst_element_factory_make ("videotestsrc", NULL);
- video_rtppayloader = gst_element_factory_make ("rtpvrawpay", NULL);
- g_object_set (video_rtppayloader, "pt", 100, "seqnum-offset", 1, NULL);
-
- g_object_set (audiosrc, "num-buffers", 5, NULL);
- g_object_set (videosrc, "num-buffers", 5, NULL);
-
- /* muxed rtcp */
- sendrtcp_funnel = gst_element_factory_make ("funnel", "send_rtcp_funnel");
- send_rtcp_udpsink = gst_element_factory_make ("udpsink", NULL);
- g_object_set (send_rtcp_udpsink, "host", "127.0.0.1", NULL);
- g_object_set (send_rtcp_udpsink, "port", rtcp_udp_port, NULL);
- g_object_set (send_rtcp_udpsink, "sync", FALSE, NULL);
- g_object_set (send_rtcp_udpsink, "async", FALSE, NULL);
-
- /* outgoing bundled stream */
- sendrtp_funnel = gst_element_factory_make ("funnel", "send_rtp_funnel");
- sendrtp_udpsink = gst_element_factory_make ("udpsink", NULL);
- g_object_set (sendrtp_udpsink, "host", "127.0.0.1", NULL);
- g_object_set (sendrtp_udpsink, "port", rtp_udp_port, NULL);
-
- gst_bin_add_many (GST_BIN (pipeline), audiosrc, audio_encoder,
- audio_rtppayloader, sendrtp_udpsink, send_rtcp_udpsink,
- sendrtp_funnel, sendrtcp_funnel, videosrc, video_rtppayloader, NULL);
-
- res = gst_element_link (audiosrc, audio_encoder);
- fail_unless (res == TRUE, NULL);
- res = gst_element_link (audio_encoder, audio_rtppayloader);
- fail_unless (res == TRUE, NULL);
- res =
- gst_element_link_pads_full (audio_rtppayloader, "src", rtpbin,
- "send_rtp_sink_0", GST_PAD_LINK_CHECK_NOTHING);
- fail_unless (res == TRUE, NULL);
-
- res = gst_element_link (videosrc, video_rtppayloader);
- fail_unless (res == TRUE, NULL);
- res =
- gst_element_link_pads_full (video_rtppayloader, "src", rtpbin,
- "send_rtp_sink_1", GST_PAD_LINK_CHECK_NOTHING);
- fail_unless (res == TRUE, NULL);
-
- res =
- gst_element_link_pads_full (sendrtp_funnel, "src", sendrtp_udpsink,
- "sink", GST_PAD_LINK_CHECK_NOTHING);
- fail_unless (res == TRUE, NULL);
-
- funnel_pad = gst_element_get_request_pad (sendrtp_funnel, "sink_%u");
- rtp_src_pad = gst_element_get_static_pad (rtpbin, "send_rtp_src_0");
- res = gst_pad_link (rtp_src_pad, funnel_pad);
- gst_object_unref (funnel_pad);
- gst_object_unref (rtp_src_pad);
-
- funnel_pad = gst_element_get_request_pad (sendrtp_funnel, "sink_%u");
- rtp_src_pad = gst_element_get_static_pad (rtpbin, "send_rtp_src_1");
- res = gst_pad_link (rtp_src_pad, funnel_pad);
- gst_object_unref (funnel_pad);
- gst_object_unref (rtp_src_pad);
-
- res =
- gst_element_link_pads_full (sendrtcp_funnel, "src", send_rtcp_udpsink,
- "sink", GST_PAD_LINK_CHECK_NOTHING);
- fail_unless (res == TRUE, NULL);
-
- funnel_pad = gst_element_get_request_pad (sendrtcp_funnel, "sink_%u");
- rtp_src_pad = gst_element_get_request_pad (rtpbin, "send_rtcp_src_0");
- res =
- gst_pad_link_full (rtp_src_pad, funnel_pad, GST_PAD_LINK_CHECK_NOTHING);
- gst_object_unref (funnel_pad);
- gst_object_unref (rtp_src_pad);
-
- funnel_pad = gst_element_get_request_pad (sendrtcp_funnel, "sink_%u");
- rtp_src_pad = gst_element_get_request_pad (rtpbin, "send_rtcp_src_1");
- res =
- gst_pad_link_full (rtp_src_pad, funnel_pad, GST_PAD_LINK_CHECK_NOTHING);
- gst_object_unref (funnel_pad);
- gst_object_unref (rtp_src_pad);
-
- } else {
- recv_rtp_udpsrc = gst_element_factory_make ("udpsrc", NULL);
- g_object_set (recv_rtp_udpsrc, "port", rtp_udp_port, NULL);
- rtpcaps = gst_caps_from_string ("application/x-rtp");
- g_object_set (recv_rtp_udpsrc, "caps", rtpcaps, NULL);
- gst_caps_unref (rtpcaps);
-
- recv_rtcp_udpsrc = gst_element_factory_make ("udpsrc", NULL);
- g_object_set (recv_rtcp_udpsrc, "port", rtcp_udp_port, NULL);
-
- audio_rtpdepayloader =
- gst_element_factory_make ("rtppcmadepay", "audio_rtpdepayloader");
- audio_decoder = gst_element_factory_make ("alawdec", NULL);
- audio_sink = gst_element_factory_make ("fakesink", NULL);
- g_object_set (audio_sink, "sync", TRUE, NULL);
-
- video_rtpdepayloader =
- gst_element_factory_make ("rtpvrawdepay", "video_rtpdepayloader");
- video_sink = gst_element_factory_make ("fakesink", NULL);
- g_object_set (video_sink, "sync", TRUE, NULL);
-
- gst_bin_add_many (GST_BIN (pipeline), recv_rtp_udpsrc, recv_rtcp_udpsrc,
- audio_rtpdepayloader, audio_decoder, audio_sink, video_rtpdepayloader,
- video_sink, NULL);
-
- res =
- gst_element_link_pads_full (audio_rtpdepayloader, "src", audio_decoder,
- "sink", GST_PAD_LINK_CHECK_NOTHING);
- fail_unless (res == TRUE, NULL);
- res = gst_element_link (audio_decoder, audio_sink);
- fail_unless (res == TRUE, NULL);
-
- res =
- gst_element_link_pads_full (video_rtpdepayloader, "src", video_sink,
- "sink", GST_PAD_LINK_CHECK_NOTHING);
- fail_unless (res == TRUE, NULL);
-
- /* request a single receiving RTP session. */
- res =
- gst_element_link_pads_full (recv_rtcp_udpsrc, "src", rtpbin,
- "recv_rtcp_sink_0", GST_PAD_LINK_CHECK_NOTHING);
- fail_unless (res == TRUE, NULL);
- res =
- gst_element_link_pads_full (recv_rtp_udpsrc, "src", rtpbin,
- "recv_rtp_sink_0", GST_PAD_LINK_CHECK_NOTHING);
- fail_unless (res == TRUE, NULL);
- }
-
- return pipeline;
-}
-
-GST_START_TEST (test_simple_rtpbin_bundle)
-{
- GstElement *send_pipeline, *recv_pipeline;
- GstBus *send_bus, *recv_bus;
- GstStateChangeReturn state_res = GST_STATE_CHANGE_FAILURE;
- GstElement *rtpbin_receive;
- GObject *rtp_session;
-
- main_loop = g_main_loop_new (NULL, FALSE);
-
- send_pipeline = create_pipeline (TRUE);
- recv_pipeline = create_pipeline (FALSE);
-
- send_bus = gst_element_get_bus (send_pipeline);
- gst_bus_add_signal_watch_full (send_bus, G_PRIORITY_HIGH);
-
- g_signal_connect (send_bus, "message::error", (GCallback) message_received,
- send_pipeline);
- g_signal_connect (send_bus, "message::warning", (GCallback) message_received,
- send_pipeline);
- g_signal_connect (send_bus, "message::eos", (GCallback) message_received,
- send_pipeline);
-
- recv_bus = gst_element_get_bus (recv_pipeline);
- gst_bus_add_signal_watch_full (recv_bus, G_PRIORITY_HIGH);
-
- g_signal_connect (recv_bus, "message::error", (GCallback) message_received,
- recv_pipeline);
- g_signal_connect (recv_bus, "message::warning", (GCallback) message_received,
- recv_pipeline);
- g_signal_connect (recv_bus, "message::eos", (GCallback) message_received,
- recv_pipeline);
-
- state_res = gst_element_set_state (recv_pipeline, GST_STATE_PLAYING);
- ck_assert_int_ne (state_res, GST_STATE_CHANGE_FAILURE);
-
- state_res = gst_element_set_state (send_pipeline, GST_STATE_PLAYING);
- ck_assert_int_ne (state_res, GST_STATE_CHANGE_FAILURE);
-
- GST_INFO ("enter mainloop");
- g_main_loop_run (main_loop);
- GST_INFO ("exit mainloop");
-
- rtpbin_receive =
- gst_bin_get_by_name (GST_BIN (recv_pipeline), "rtpbin_receive");
- fail_if (rtpbin_receive == NULL, NULL);
-
- /* Check that 2 RTP sessions where created while only one was explicitely requested. */
- g_signal_emit_by_name (rtpbin_receive, "get-internal-session", 0,
- &rtp_session);
- fail_if (rtp_session == NULL, NULL);
- g_object_unref (rtp_session);
- g_signal_emit_by_name (rtpbin_receive, "get-internal-session", 1,
- &rtp_session);
- fail_if (rtp_session == NULL, NULL);
- g_object_unref (rtp_session);
-
- gst_object_unref (rtpbin_receive);
-
- state_res = gst_element_set_state (send_pipeline, GST_STATE_NULL);
- ck_assert_int_ne (state_res, GST_STATE_CHANGE_FAILURE);
-
- state_res = gst_element_set_state (recv_pipeline, GST_STATE_NULL);
- ck_assert_int_ne (state_res, GST_STATE_CHANGE_FAILURE);
-
- /* cleanup */
- g_main_loop_unref (main_loop);
-
- gst_bus_remove_signal_watch (send_bus);
- gst_object_unref (send_bus);
- gst_object_unref (send_pipeline);
-
- gst_bus_remove_signal_watch (recv_bus);
- gst_object_unref (recv_bus);
- gst_object_unref (recv_pipeline);
-
-}
-
-GST_END_TEST;
-
-static Suite *
-rtpbundle_suite (void)
-{
- Suite *s = suite_create ("rtpbundle");
- TCase *tc_chain = tcase_create ("general");
-
- tcase_set_timeout (tc_chain, 10000);
-
- suite_add_tcase (s, tc_chain);
-
- tcase_add_test (tc_chain, test_simple_rtpbin_bundle);
-
- return s;
-}
-
-GST_CHECK_MAIN (rtpbundle);
diff --git a/tests/check/meson.build b/tests/check/meson.build
index 2998a66aa4..7769fb141d 100644
--- a/tests/check/meson.build
+++ b/tests/check/meson.build
@@ -53,7 +53,6 @@ good_tests = [
[ 'elements/rtpvp9' ],
[ 'elements/rtpbin' ],
[ 'elements/rtpbin_buffer_list' ],
- [ 'elements/rtpbundle' ],
[ 'elements/rtpcollision' ],
[ 'elements/rtpfunnel' ],
[ 'elements/rtpjitterbuffer' ],
diff --git a/tests/examples/rtp/.gitignore b/tests/examples/rtp/.gitignore
index 8c3c6d3ff8..02f551f12a 100644
--- a/tests/examples/rtp/.gitignore
+++ b/tests/examples/rtp/.gitignore
@@ -2,5 +2,3 @@ client-PCMA
server-alsasrc-PCMA
client-rtpaux
server-rtpaux
-client-rtpbundle
-server-rtpbundle
diff --git a/tests/examples/rtp/Makefile.am b/tests/examples/rtp/Makefile.am
index 4d7f7c1f8d..40ab2c55e6 100644
--- a/tests/examples/rtp/Makefile.am
+++ b/tests/examples/rtp/Makefile.am
@@ -1,5 +1,5 @@
noinst_PROGRAMS = server-alsasrc-PCMA client-PCMA \
- client-rtpaux server-rtpaux client-rtpbundle server-rtpbundle
+ client-rtpaux server-rtpaux
# FIXME 0.11: ignore GValueArray warnings for now until this is sorted
ERROR_CFLAGS=
@@ -12,14 +12,6 @@ client_rtpaux_SOURCES = client-rtpaux.c
client_rtpaux_CFLAGS = $(GST_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS)
client_rtpaux_LDADD = $(GST_LIBS)
-server_rtpbundle_SOURCES = server-rtpbundle.c
-server_rtpbundle_CFLAGS = $(GST_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS)
-server_rtpbundle_LDADD = $(GST_LIBS)
-
-client_rtpbundle_SOURCES = client-rtpbundle.c
-client_rtpbundle_CFLAGS = $(GST_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS)
-client_rtpbundle_LDADD = $(GST_LIBS)
-
server_alsasrc_PCMA_SOURCES = server-alsasrc-PCMA.c
server_alsasrc_PCMA_CFLAGS = $(GST_CFLAGS)
server_alsasrc_PCMA_LDADD = $(GST_LIBS) $(LIBM)
diff --git a/tests/examples/rtp/client-rtpbundle.c b/tests/examples/rtp/client-rtpbundle.c
deleted file mode 100644
index cd3a737f82..0000000000
--- a/tests/examples/rtp/client-rtpbundle.c
+++ /dev/null
@@ -1,266 +0,0 @@
-/* GStreamer
- * Copyright (C) 2016 Igalia S.L
- * @author Philippe Normand
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include
-
-/*
- * RTP bundle receiver
- *
- * In this example we initially create one RTP session but the incoming RTP
- * and RTCP streams actually bundle 2 different media type, one audio stream
- * and one video stream. We are notified of the discovery of the streams by
- * the on-bundled-ssrc rtpbin signal. In the handler we decide to assign the
- * first SSRC to the (existing) audio session and the second SSRC to a new
- * session (id: 1).
- *
- * .-------. .----------. .-----------. .-------. .-------------.
- * RTP |udpsrc | | rtpbin | | pcmadepay | |alawdec| |autoaudiosink|
- * port=5001 | src->recv_rtp_0 recv_rtp_0->sink src->sink src->sink |
- * '-------' | | '-----------' '-------' '-------------'
- * | |
- * | | .-------.
- * | | |udpsink| RTCP
- * | send_rtcp_0->sink | port=5003
- * .-------. | | '-------' sync=false
- * RTCP |udpsrc | | | async=false
- * port=5002 | src->recv_rtcp_0 |
- * '-------' | |
- * | |
- * | | .---------. .-------------.
- * | | |vrawdepay| |autovideosink|
- * | recv_rtp_1->sink src->sink |
- * | | '---------' '-------------'
- * | |
- * | | .-------.
- * | | |udpsink| RTCP
- * | send_rtcp_1->sink | port=5004
- * | | '-------' sync=false
- * | | async=false
- * | |
- * '----------'
- *
- */
-
-static gboolean
-plug_video_rtcp_sender (gpointer user_data)
-{
- gint send_video_rtcp_port = 5004;
- GstElement *rtpbin = GST_ELEMENT_CAST (user_data);
- GstElement *send_video_rtcp_udpsink;
- GstElement *pipeline =
- GST_ELEMENT_CAST (gst_object_get_parent (GST_OBJECT (rtpbin)));
-
- send_video_rtcp_udpsink = gst_element_factory_make ("udpsink", NULL);
- g_object_set (send_video_rtcp_udpsink, "host", "127.0.0.1", NULL);
- g_object_set (send_video_rtcp_udpsink, "port", send_video_rtcp_port, NULL);
- g_object_set (send_video_rtcp_udpsink, "sync", FALSE, NULL);
- g_object_set (send_video_rtcp_udpsink, "async", FALSE, NULL);
- gst_bin_add (GST_BIN (pipeline), send_video_rtcp_udpsink);
- gst_element_link_pads (rtpbin, "send_rtcp_src_1", send_video_rtcp_udpsink,
- "sink");
- gst_element_sync_state_with_parent (send_video_rtcp_udpsink);
-
- gst_object_unref (pipeline);
- gst_object_unref (rtpbin);
- return G_SOURCE_REMOVE;
-}
-
-static void
-on_rtpbinreceive_pad_added (GstElement * rtpbin, GstPad * new_pad,
- gpointer data)
-{
- GstElement *pipeline = GST_ELEMENT (data);
- gchar *pad_name = gst_pad_get_name (new_pad);
-
- if (g_str_has_prefix (pad_name, "recv_rtp_src_")) {
- GstCaps *caps = gst_pad_get_current_caps (new_pad);
- GstStructure *s = gst_caps_get_structure (caps, 0);
- const gchar *media_type = gst_structure_get_string (s, "media");
- gchar *depayloader_name = g_strdup_printf ("%s_rtpdepayloader", media_type);
- GstElement *rtpdepayloader =
- gst_bin_get_by_name (GST_BIN (pipeline), depayloader_name);
- GstPad *sinkpad;
-
- g_free (depayloader_name);
-
- sinkpad = gst_element_get_static_pad (rtpdepayloader, "sink");
- gst_pad_link (new_pad, sinkpad);
- gst_object_unref (sinkpad);
- gst_object_unref (rtpdepayloader);
-
- gst_caps_unref (caps);
-
- if (g_str_has_prefix (pad_name, "recv_rtp_src_1")) {
- g_timeout_add (0, plug_video_rtcp_sender, gst_object_ref (rtpbin));
- }
- }
- g_free (pad_name);
-}
-
-static guint
-on_bundled_ssrc (GstElement * rtpbin, guint ssrc, gpointer user_data)
-{
- static gboolean create_session = FALSE;
- guint session_id = 0;
-
- if (create_session) {
- session_id = 1;
- } else {
- create_session = TRUE;
- /* use existing session 0, a new session will be created for the next discovered bundled SSRC */
- }
- return session_id;
-}
-
-static GstCaps *
-on_request_pt_map (GstElement * rtpbin, guint session_id, guint pt,
- gpointer user_data)
-{
- GstCaps *caps = NULL;
- if (pt == 96) {
- caps =
- gst_caps_from_string
- ("application/x-rtp,media=(string)audio,encoding-name=(string)PCMA,clock-rate=(int)8000");
- } else if (pt == 100) {
- caps =
- gst_caps_from_string
- ("application/x-rtp,media=(string)video,encoding-name=(string)RAW,clock-rate=(int)90000,sampling=(string)\"YCbCr-4:2:0\",depth=(string)8,width=(string)320,height=(string)240");
- }
- return caps;
-}
-
-static GstElement *
-create_pipeline (void)
-{
- GstElement *pipeline, *rtpbin, *recv_rtp_udpsrc, *recv_rtcp_udpsrc,
- *audio_rtpdepayloader, *audio_decoder, *audio_sink, *video_rtpdepayloader,
- *video_sink, *send_audio_rtcp_udpsink;
- GstCaps *rtpcaps;
- gint rtp_udp_port = 5001;
- gint rtcp_udp_port = 5002;
- gint send_audio_rtcp_port = 5003;
-
- pipeline = gst_pipeline_new (NULL);
-
- rtpbin = gst_element_factory_make ("rtpbin", NULL);
- g_object_set (rtpbin, "latency", 200, NULL);
-
- g_signal_connect (rtpbin, "on-bundled-ssrc",
- G_CALLBACK (on_bundled_ssrc), NULL);
- g_signal_connect (rtpbin, "request-pt-map",
- G_CALLBACK (on_request_pt_map), NULL);
-
- g_signal_connect (rtpbin, "pad-added",
- G_CALLBACK (on_rtpbinreceive_pad_added), pipeline);
-
- gst_bin_add (GST_BIN (pipeline), rtpbin);
-
- recv_rtp_udpsrc = gst_element_factory_make ("udpsrc", NULL);
- g_object_set (recv_rtp_udpsrc, "port", rtp_udp_port, NULL);
- rtpcaps = gst_caps_from_string ("application/x-rtp");
- g_object_set (recv_rtp_udpsrc, "caps", rtpcaps, NULL);
- gst_caps_unref (rtpcaps);
-
- recv_rtcp_udpsrc = gst_element_factory_make ("udpsrc", NULL);
- g_object_set (recv_rtcp_udpsrc, "port", rtcp_udp_port, NULL);
-
- audio_rtpdepayloader =
- gst_element_factory_make ("rtppcmadepay", "audio_rtpdepayloader");
- audio_decoder = gst_element_factory_make ("alawdec", NULL);
- audio_sink = gst_element_factory_make ("autoaudiosink", NULL);
-
- video_rtpdepayloader =
- gst_element_factory_make ("rtpvrawdepay", "video_rtpdepayloader");
- video_sink = gst_element_factory_make ("autovideosink", NULL);
-
- gst_bin_add_many (GST_BIN (pipeline), recv_rtp_udpsrc, recv_rtcp_udpsrc,
- audio_rtpdepayloader, audio_decoder, audio_sink, video_rtpdepayloader,
- video_sink, NULL);
-
- gst_element_link_pads (audio_rtpdepayloader, "src", audio_decoder, "sink");
- gst_element_link (audio_decoder, audio_sink);
-
- gst_element_link_pads (video_rtpdepayloader, "src", video_sink, "sink");
-
- /* request a single receiving RTP session. */
- gst_element_link_pads (recv_rtcp_udpsrc, "src", rtpbin, "recv_rtcp_sink_0");
- gst_element_link_pads (recv_rtp_udpsrc, "src", rtpbin, "recv_rtp_sink_0");
-
- send_audio_rtcp_udpsink = gst_element_factory_make ("udpsink", NULL);
- g_object_set (send_audio_rtcp_udpsink, "host", "127.0.0.1", NULL);
- g_object_set (send_audio_rtcp_udpsink, "port", send_audio_rtcp_port, NULL);
- g_object_set (send_audio_rtcp_udpsink, "sync", FALSE, NULL);
- g_object_set (send_audio_rtcp_udpsink, "async", FALSE, NULL);
- gst_bin_add (GST_BIN (pipeline), send_audio_rtcp_udpsink);
- gst_element_link_pads (rtpbin, "send_rtcp_src_0", send_audio_rtcp_udpsink,
- "sink");
-
- return pipeline;
-}
-
-/*
- * Used to generate informative messages during pipeline startup
- */
-static void
-cb_state (GstBus * bus, GstMessage * message, gpointer data)
-{
- GstObject *pipe = GST_OBJECT (data);
- GstState old, new, pending;
- gst_message_parse_state_changed (message, &old, &new, &pending);
- if (message->src == pipe) {
- g_print ("Pipeline %s changed state from %s to %s\n",
- GST_OBJECT_NAME (message->src),
- gst_element_state_get_name (old), gst_element_state_get_name (new));
- if (old == GST_STATE_PAUSED && new == GST_STATE_PLAYING)
- GST_DEBUG_BIN_TO_DOT_FILE (GST_BIN (pipe), GST_DEBUG_GRAPH_SHOW_ALL,
- GST_OBJECT_NAME (message->src));
- }
-}
-
-int
-main (int argc, char **argv)
-{
- GstElement *pipe;
- GstBus *bus;
- GMainLoop *loop;
-
- gst_init (&argc, &argv);
-
- loop = g_main_loop_new (NULL, FALSE);
-
- pipe = create_pipeline ();
- bus = gst_element_get_bus (pipe);
- g_signal_connect (bus, "message::state-changed", G_CALLBACK (cb_state), pipe);
- gst_bus_add_signal_watch (bus);
- gst_object_unref (bus);
-
- g_print ("starting server pipeline\n");
- gst_element_set_state (pipe, GST_STATE_PLAYING);
-
- g_main_loop_run (loop);
-
- g_print ("stopping server pipeline\n");
- gst_element_set_state (pipe, GST_STATE_NULL);
-
- gst_object_unref (pipe);
- g_main_loop_unref (loop);
-
- return 0;
-}
diff --git a/tests/examples/rtp/meson.build b/tests/examples/rtp/meson.build
index f728a128d7..ef77e6ef44 100644
--- a/tests/examples/rtp/meson.build
+++ b/tests/examples/rtp/meson.build
@@ -3,8 +3,6 @@ rtp_progs = [
'client-PCMA',
'client-rtpaux',
'server-rtpaux',
- 'client-rtpbundle',
- 'server-rtpbundle',
]
foreach prog : rtp_progs
diff --git a/tests/examples/rtp/server-rtpbundle.c b/tests/examples/rtp/server-rtpbundle.c
deleted file mode 100644
index 1f6d01bef1..0000000000
--- a/tests/examples/rtp/server-rtpbundle.c
+++ /dev/null
@@ -1,179 +0,0 @@
-/* GStreamer
- * Copyright (C) 2016 Igalia S.L
- * @author Philippe Normand
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-#include
-
-/*
- * An bundling RTP server
- * creates two sessions and streams audio on one, video on the other, with RTCP
- * on both sessions. The destination is 127.0.0.1.
- *
- * The RTP streams are bundled to a single outgoing connection. Same for the RTCP streams.
- *
- * .-------. .-------. .-------. .------------. .------.
- * |audiots| |alawenc| |pcmapay| | rtpbin | |funnel|
- * | src->sink src->sink src->send_rtp_0 send_rtp_0--->sink_0 | .-------.
- * '-------' '-------' '-------' | | | | |udpsink|
- * | | | src->sink |
- * .-------. .---------. | | | | '-------'
- * |videots| | vrawpay | | | | |
- * | src------------>sink src->send_rtp_1 send_rtp_1--->sink_1 |
- * '-------' '---------' | | '------'
- * | |
- * .------. | |
- * |udpsrc| | | .------.
- * | src->recv_rtcp_0 | |funnel|
- * '------' | send_rtcp_0-->sink_0 | .-------.
- * | | | | |udpsink|
- * .------. | | | src->sink |
- * |udpsrc| | | | | '-------'
- * | src->recv_rtcp_1 | | |
- * '------' | send_rtcp_1-->sink_1 |
- * '------------' '------'
- *
- */
-
-static GstElement *
-create_pipeline (void)
-{
- GstElement *pipeline, *rtpbin, *audiosrc, *audio_encoder,
- *audio_rtppayloader, *sendrtp_udpsink,
- *send_rtcp_udpsink, *sendrtcp_funnel, *sendrtp_funnel;
- GstElement *videosrc, *video_rtppayloader, *time_overlay;
- gint rtp_udp_port = 5001;
- gint rtcp_udp_port = 5002;
- gint recv_audio_rtcp_port = 5003;
- gint recv_video_rtcp_port = 5004;
- GstElement *audio_rtcp_udpsrc, *video_rtcp_udpsrc;
-
- pipeline = gst_pipeline_new (NULL);
-
- rtpbin = gst_element_factory_make ("rtpbin", NULL);
-
- audiosrc = gst_element_factory_make ("audiotestsrc", NULL);
- g_object_set (audiosrc, "is-live", TRUE, NULL);
- audio_encoder = gst_element_factory_make ("alawenc", NULL);
- audio_rtppayloader = gst_element_factory_make ("rtppcmapay", NULL);
- g_object_set (audio_rtppayloader, "pt", 96, NULL);
-
- videosrc = gst_element_factory_make ("videotestsrc", NULL);
- g_object_set (videosrc, "is-live", TRUE, NULL);
- time_overlay = gst_element_factory_make ("timeoverlay", NULL);
- video_rtppayloader = gst_element_factory_make ("rtpvrawpay", NULL);
- g_object_set (video_rtppayloader, "pt", 100, NULL);
-
- /* muxed rtcp */
- sendrtcp_funnel = gst_element_factory_make ("funnel", "send_rtcp_funnel");
- send_rtcp_udpsink = gst_element_factory_make ("udpsink", NULL);
- g_object_set (send_rtcp_udpsink, "host", "127.0.0.1", NULL);
- g_object_set (send_rtcp_udpsink, "port", rtcp_udp_port, NULL);
- g_object_set (send_rtcp_udpsink, "sync", FALSE, NULL);
- g_object_set (send_rtcp_udpsink, "async", FALSE, NULL);
-
- /* outgoing bundled stream */
- sendrtp_funnel = gst_element_factory_make ("funnel", "send_rtp_funnel");
- sendrtp_udpsink = gst_element_factory_make ("udpsink", NULL);
- g_object_set (sendrtp_udpsink, "host", "127.0.0.1", NULL);
- g_object_set (sendrtp_udpsink, "port", rtp_udp_port, NULL);
- g_object_set (sendrtp_udpsink, "sync", FALSE, NULL);
- g_object_set (sendrtp_udpsink, "async", FALSE, NULL);
-
- gst_bin_add_many (GST_BIN (pipeline), rtpbin, audiosrc, audio_encoder,
- audio_rtppayloader, sendrtp_udpsink, send_rtcp_udpsink,
- sendrtp_funnel, sendrtcp_funnel, videosrc, video_rtppayloader, NULL);
-
- if (time_overlay)
- gst_bin_add (GST_BIN (pipeline), time_overlay);
-
- gst_element_link_many (audiosrc, audio_encoder, audio_rtppayloader, NULL);
- gst_element_link_pads (audio_rtppayloader, "src", rtpbin, "send_rtp_sink_0");
-
- if (time_overlay) {
- gst_element_link_many (videosrc, time_overlay, video_rtppayloader, NULL);
- } else {
- gst_element_link (videosrc, video_rtppayloader);
- }
-
- gst_element_link_pads (video_rtppayloader, "src", rtpbin, "send_rtp_sink_1");
-
- gst_element_link_pads (sendrtp_funnel, "src", sendrtp_udpsink, "sink");
- gst_element_link_pads (rtpbin, "send_rtp_src_0", sendrtp_funnel, "sink_%u");
- gst_element_link_pads (rtpbin, "send_rtp_src_1", sendrtp_funnel, "sink_%u");
- gst_element_link_pads (sendrtcp_funnel, "src", send_rtcp_udpsink, "sink");
- gst_element_link_pads (rtpbin, "send_rtcp_src_0", sendrtcp_funnel, "sink_%u");
- gst_element_link_pads (rtpbin, "send_rtcp_src_1", sendrtcp_funnel, "sink_%u");
-
- audio_rtcp_udpsrc = gst_element_factory_make ("udpsrc", NULL);
- g_object_set (audio_rtcp_udpsrc, "port", recv_audio_rtcp_port, NULL);
- video_rtcp_udpsrc = gst_element_factory_make ("udpsrc", NULL);
- g_object_set (video_rtcp_udpsrc, "port", recv_video_rtcp_port, NULL);
- gst_bin_add_many (GST_BIN (pipeline), audio_rtcp_udpsrc, video_rtcp_udpsrc,
- NULL);
- gst_element_link_pads (audio_rtcp_udpsrc, "src", rtpbin, "recv_rtcp_sink_0");
- gst_element_link_pads (video_rtcp_udpsrc, "src", rtpbin, "recv_rtcp_sink_1");
-
- return pipeline;
-}
-
-/*
- * Used to generate informative messages during pipeline startup
- */
-static void
-cb_state (GstBus * bus, GstMessage * message, gpointer data)
-{
- GstObject *pipe = GST_OBJECT (data);
- GstState old, new, pending;
- gst_message_parse_state_changed (message, &old, &new, &pending);
- if (message->src == pipe) {
- g_print ("Pipeline %s changed state from %s to %s\n",
- GST_OBJECT_NAME (message->src),
- gst_element_state_get_name (old), gst_element_state_get_name (new));
- }
-}
-
-int
-main (int argc, char **argv)
-{
- GstElement *pipe;
- GstBus *bus;
- GMainLoop *loop;
-
- gst_init (&argc, &argv);
-
- loop = g_main_loop_new (NULL, FALSE);
-
- pipe = create_pipeline ();
- bus = gst_element_get_bus (pipe);
- g_signal_connect (bus, "message::state-changed", G_CALLBACK (cb_state), pipe);
- gst_bus_add_signal_watch (bus);
- gst_object_unref (bus);
-
- g_print ("starting server pipeline\n");
- gst_element_set_state (pipe, GST_STATE_PLAYING);
-
- g_main_loop_run (loop);
-
- g_print ("stopping server pipeline\n");
- gst_element_set_state (pipe, GST_STATE_NULL);
-
- gst_object_unref (pipe);
- g_main_loop_unref (loop);
-
- return 0;
-}