summaryrefslogtreecommitdiff
path: root/ext/webrtc/transportreceivebin.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/webrtc/transportreceivebin.c')
-rw-r--r--ext/webrtc/transportreceivebin.c58
1 files changed, 41 insertions, 17 deletions
diff --git a/ext/webrtc/transportreceivebin.c b/ext/webrtc/transportreceivebin.c
index 6730b1fb7..4038cda0d 100644
--- a/ext/webrtc/transportreceivebin.c
+++ b/ext/webrtc/transportreceivebin.c
@@ -25,23 +25,24 @@
#include "utils.h"
/*
- * ,----------------------------transport_receive_%u-----------------------------,
- * ; (rtp) ;
- * ; ,---nicesrc----, ,-capsfilter-, ,----dtlssrtpdec----, ,--funnel--, ;
- * ; ; src o--o sink src o--o sink rtp_src o------o sink_0 ; ;
- * ; '--------------' '------------' ; ; ; src o--o rtp_src
- * ; ; rtcp_src o-, ,--o sink_1 ; ;
- * ; '-------------------' ; ; '----------' ;
- * ; ; ; ,--funnel--, ;
- * ; '-+--o sink_0 ; ;
- * ; ,-' ; src o--o rtcp_src
- * ; (rtcp) ; ,-o sink_1 ; ;
- * ; ,---nicesrc----, ,-capsfilter-, ,----dtlssrtpdec----, ; ; '----------' ;
- * ; ; src o--o sink src o--o sink rtp_src o-' ; ;
- * ; '--------------' '------------' ; ; ; ;
- * ; ; rtcp_src o----' ;
- * ; '-------------------' ;
- * '-----------------------------------------------------------------------------'
+ * ,----------------------------transport_receive_%u----------------------------,
+ * ; (rtp/data) ;
+ * ; ,---nicesrc----, ,-capsfilter-, ,---dtlssrtpdec---, ,--funnel--, ;
+ * ; ; src o--o sink src o--o sink rtp_src o-------o sink_0 ; ;
+ * ; '--------------' '------------' ; ; ; src o--o rtp_src
+ * ; ; rtcp_src o---, ,-o sink_1 ; ;
+ * ; ; ; ; ; '----------' ;
+ * ; ; data_src o-, ; ; ,--funnel--, ;
+ * ; '-----------------' ; '-+-o sink_0 ; ;
+ * ; ,---dtlssrtpdec---, ; ,-' ; src o--o rtcp_src
+ * ; (rtcp) ; rtp_src o-+-' ,-o sink_1 ; ;
+ * ; ,---nicesrc----, ,-capsfilter-, ; ; ; ; '----------' ;
+ * ; ; src o--o sink src o--o sink rtcp_src o-+---' ,--funnel--, ;
+ * ; '--------------' '------------' ; ; '-----o sink_0 ; ;
+ * ; ; data_src o-, ; src o--o data_src
+ * ; '-----------------' '-----o sink_1 ; ;
+ * ; '----------' ;
+ * '----------------------------------------------------------------------------'
*
* Do we really wnat to be *that* permissive in what we accept?
*
@@ -70,6 +71,12 @@ GST_STATIC_PAD_TEMPLATE ("rtcp_src",
GST_PAD_ALWAYS,
GST_STATIC_CAPS ("application/x-rtp"));
+static GstStaticPadTemplate data_sink_template =
+GST_STATIC_PAD_TEMPLATE ("data_src",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS_ANY);
+
enum
{
PROP_0,
@@ -336,6 +343,21 @@ transport_receive_bin_constructed (GObject * object)
gst_element_add_pad (GST_ELEMENT (receive), ghost);
gst_object_unref (pad);
+ /* create funnel for data_src */
+ funnel = gst_element_factory_make ("funnel", NULL);
+ gst_bin_add (GST_BIN (receive), funnel);
+ if (!gst_element_link_pads (receive->stream->transport->dtlssrtpdec,
+ "data_src", funnel, "sink_0"))
+ g_warn_if_reached ();
+ if (!gst_element_link_pads (receive->stream->rtcp_transport->dtlssrtpdec,
+ "data_src", funnel, "sink_1"))
+ g_warn_if_reached ();
+
+ pad = gst_element_get_static_pad (funnel, "src");
+ ghost = gst_ghost_pad_new ("data_src", pad);
+ gst_element_add_pad (GST_ELEMENT (receive), ghost);
+ gst_object_unref (pad);
+
G_OBJECT_CLASS (parent_class)->constructed (object);
}
@@ -350,6 +372,8 @@ transport_receive_bin_class_init (TransportReceiveBinClass * klass)
gst_element_class_add_static_pad_template (element_class, &rtp_sink_template);
gst_element_class_add_static_pad_template (element_class,
&rtcp_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &data_sink_template);
gst_element_class_set_metadata (element_class, "WebRTC Transport Receive Bin",
"Filter/Network/WebRTC", "A bin for webrtc connections",