1 /* GStreamer 2 * Copyright (C) 2017 Matthew Waters <matthew@centricular.com> 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Library General Public 6 * License as published by the Free Software Foundation; either 7 * version 2 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Library General Public License for more details. 13 * 14 * You should have received a copy of the GNU Library General Public 15 * License along with this library; if not, write to the 16 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, 17 * Boston, MA 02110-1301, USA. 18 */ 19 20 #ifndef __TRANSPORT_STREAM_H__ 21 #define __TRANSPORT_STREAM_H__ 22 23 #include "fwd.h" 24 #include <gst/webrtc/rtptransceiver.h> 25 26 G_BEGIN_DECLS 27 28 GType transport_stream_get_type(void); 29 #define GST_TYPE_WEBRTC_TRANSPORT_STREAM (transport_stream_get_type()) 30 #define TRANSPORT_STREAM(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_WEBRTC_TRANSPORT_STREAM,TransportStream)) 31 #define TRANSPORT_STREAM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass) ,GST_TYPE_WEBRTC_TRANSPORT_STREAM,TransportStreamClass)) 32 #define TRANSPORT_STREAM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj) ,GST_TYPE_WEBRTC_TRANSPORT_STREAM,TransportStreamClass)) 33 34 typedef struct 35 { 36 guint8 pt; 37 guint media_idx; 38 GstCaps *caps; 39 } PtMapItem; 40 41 typedef struct 42 { 43 guint32 ssrc; 44 guint media_idx; 45 GWeakRef rtpjitterbuffer; /* for stats */ 46 } SsrcMapItem; 47 48 SsrcMapItem * ssrcmap_item_new (guint32 ssrc, 49 guint media_idx); 50 51 struct _TransportStream 52 { 53 GstObject parent; 54 55 guint session_id; /* session_id */ 56 gboolean dtls_client; 57 gboolean active; /* TRUE if any mline in the bundle/transport is active */ 58 TransportSendBin *send_bin; /* bin containing all the sending transport elements */ 59 TransportReceiveBin *receive_bin; /* bin containing all the receiving transport elements */ 60 GstWebRTCICEStream *stream; 61 62 GstWebRTCDTLSTransport *transport; 63 64 GArray *ptmap; /* array of PtMapItem's */ 65 GPtrArray *remote_ssrcmap; /* array of SsrcMapItem's */ 66 gboolean output_connected; /* whether receive bin is connected to rtpbin */ 67 68 GstElement *rtxsend; 69 GstElement *rtxreceive; 70 }; 71 72 struct _TransportStreamClass 73 { 74 GstObjectClass parent_class; 75 }; 76 77 TransportStream * transport_stream_new (GstWebRTCBin * webrtc, 78 guint session_id); 79 int transport_stream_get_pt (TransportStream * stream, 80 const gchar * encoding_name, 81 guint media_idx); 82 int * transport_stream_get_all_pt (TransportStream * stream, 83 const gchar * encoding_name, 84 gsize * pt_len); 85 GstCaps * transport_stream_get_caps_for_pt (TransportStream * stream, 86 guint pt); 87 88 G_END_DECLS 89 90 #endif /* __TRANSPORT_STREAM_H__ */ 91