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 __GST_WEBRTC_FWD_H__
21 #define __GST_WEBRTC_FWD_H__
22 
23 #ifndef GST_USE_UNSTABLE_API
24 #warning "The WebRTC library from gst-plugins-bad is unstable API and may change in future."
25 #warning "You can define GST_USE_UNSTABLE_API to avoid this warning."
26 #endif
27 
28 #include <gst/gst.h>
29 
30 #ifndef GST_WEBRTC_API
31 # ifdef BUILDING_GST_WEBRTC
32 #  define GST_WEBRTC_API GST_API_EXPORT         /* from config.h */
33 # else
34 #  define GST_WEBRTC_API GST_API_IMPORT
35 # endif
36 #endif
37 
38 #include <gst/webrtc/webrtc-enumtypes.h>
39 
40 typedef struct _GstWebRTCDTLSTransport GstWebRTCDTLSTransport;
41 typedef struct _GstWebRTCDTLSTransportClass GstWebRTCDTLSTransportClass;
42 
43 typedef struct _GstWebRTCICETransport GstWebRTCICETransport;
44 typedef struct _GstWebRTCICETransportClass GstWebRTCICETransportClass;
45 
46 typedef struct _GstWebRTCRTPReceiver GstWebRTCRTPReceiver;
47 typedef struct _GstWebRTCRTPReceiverClass GstWebRTCRTPReceiverClass;
48 
49 typedef struct _GstWebRTCRTPSender GstWebRTCRTPSender;
50 typedef struct _GstWebRTCRTPSenderClass GstWebRTCRTPSenderClass;
51 
52 typedef struct _GstWebRTCSessionDescription GstWebRTCSessionDescription;
53 
54 typedef struct _GstWebRTCRTPTransceiver GstWebRTCRTPTransceiver;
55 typedef struct _GstWebRTCRTPTransceiverClass GstWebRTCRTPTransceiverClass;
56 
57 /**
58  * GstWebRTCDTLSTransportState:
59  * GST_WEBRTC_DTLS_TRANSPORT_STATE_NEW: new
60  * GST_WEBRTC_DTLS_TRANSPORT_STATE_CLOSED: closed
61  * GST_WEBRTC_DTLS_TRANSPORT_STATE_FAILED: failed
62  * GST_WEBRTC_DTLS_TRANSPORT_STATE_CONNECTING: connecting
63  * GST_WEBRTC_DTLS_TRANSPORT_STATE_CONNECTED: connected
64  */
65 typedef enum /*< underscore_name=gst_webrtc_dtls_transport_state >*/
66 {
67   GST_WEBRTC_DTLS_TRANSPORT_STATE_NEW,
68   GST_WEBRTC_DTLS_TRANSPORT_STATE_CLOSED,
69   GST_WEBRTC_DTLS_TRANSPORT_STATE_FAILED,
70   GST_WEBRTC_DTLS_TRANSPORT_STATE_CONNECTING,
71   GST_WEBRTC_DTLS_TRANSPORT_STATE_CONNECTED,
72 } GstWebRTCDTLSTransportState;
73 
74 /**
75  * GstWebRTCICEGatheringState:
76  * GST_WEBRTC_ICE_GATHERING_STATE_NEW: new
77  * GST_WEBRTC_ICE_GATHERING_STATE_GATHERING: gathering
78  * GST_WEBRTC_ICE_GATHERING_STATE_COMPLETE: complete
79  *
80  * See <ulink url="http://w3c.github.io/webrtc-pc/#dom-rtcicegatheringstate">http://w3c.github.io/webrtc-pc/#dom-rtcicegatheringstate</ulink>
81  */
82 typedef enum /*< underscore_name=gst_webrtc_ice_gathering_state >*/
83 {
84   GST_WEBRTC_ICE_GATHERING_STATE_NEW,
85   GST_WEBRTC_ICE_GATHERING_STATE_GATHERING,
86   GST_WEBRTC_ICE_GATHERING_STATE_COMPLETE,
87 } GstWebRTCICEGatheringState; /*< underscore_name=gst_webrtc_ice_gathering_state >*/
88 
89 /**
90  * GstWebRTCICEConnectionState:
91  * GST_WEBRTC_ICE_CONNECTION_STATE_NEW: new
92  * GST_WEBRTC_ICE_CONNECTION_STATE_CHECKING: checking
93  * GST_WEBRTC_ICE_CONNECTION_STATE_CONNECTED: connected
94  * GST_WEBRTC_ICE_CONNECTION_STATE_COMPLETED: completed
95  * GST_WEBRTC_ICE_CONNECTION_STATE_FAILED: failed
96  * GST_WEBRTC_ICE_CONNECTION_STATE_DISCONNECTED: disconnected
97  * GST_WEBRTC_ICE_CONNECTION_STATE_CLOSED: closed
98  *
99  * See <ulink url="http://w3c.github.io/webrtc-pc/#dom-rtciceconnectionstate">http://w3c.github.io/webrtc-pc/#dom-rtciceconnectionstate</ulink>
100  */
101 typedef enum /*< underscore_name=gst_webrtc_ice_connection_state >*/
102 {
103   GST_WEBRTC_ICE_CONNECTION_STATE_NEW,
104   GST_WEBRTC_ICE_CONNECTION_STATE_CHECKING,
105   GST_WEBRTC_ICE_CONNECTION_STATE_CONNECTED,
106   GST_WEBRTC_ICE_CONNECTION_STATE_COMPLETED,
107   GST_WEBRTC_ICE_CONNECTION_STATE_FAILED,
108   GST_WEBRTC_ICE_CONNECTION_STATE_DISCONNECTED,
109   GST_WEBRTC_ICE_CONNECTION_STATE_CLOSED,
110 } GstWebRTCICEConnectionState;
111 
112 /**
113  * GstWebRTCSignalingState:
114  * GST_WEBRTC_SIGNALING_STATE_STABLE: stable
115  * GST_WEBRTC_SIGNALING_STATE_CLOSED: closed
116  * GST_WEBRTC_SIGNALING_STATE_HAVE_LOCAL_OFFER: have-local-offer
117  * GST_WEBRTC_SIGNALING_STATE_HAVE_REMOTE_OFFER: have-remote-offer
118  * GST_WEBRTC_SIGNALING_STATE_HAVE_LOCAL_PRANSWER: have-local-pranswer
119  * GST_WEBRTC_SIGNALING_STATE_HAVE_REMOTE_PRANSWER: have-remote-pranswer
120  *
121  * See <ulink url="http://w3c.github.io/webrtc-pc/#dom-rtcsignalingstate">http://w3c.github.io/webrtc-pc/#dom-rtcsignalingstate</ulink>
122  */
123 typedef enum /*< underscore_name=gst_webrtc_signaling_state >*/
124 {
125   GST_WEBRTC_SIGNALING_STATE_STABLE,
126   GST_WEBRTC_SIGNALING_STATE_CLOSED,
127   GST_WEBRTC_SIGNALING_STATE_HAVE_LOCAL_OFFER,
128   GST_WEBRTC_SIGNALING_STATE_HAVE_REMOTE_OFFER,
129   GST_WEBRTC_SIGNALING_STATE_HAVE_LOCAL_PRANSWER,
130   GST_WEBRTC_SIGNALING_STATE_HAVE_REMOTE_PRANSWER,
131 } GstWebRTCSignalingState;
132 
133 /**
134  * GstWebRTCPeerConnectionState:
135  * GST_WEBRTC_PEER_CONNECTION_STATE_NEW: new
136  * GST_WEBRTC_PEER_CONNECTION_STATE_CONNECTING: connecting
137  * GST_WEBRTC_PEER_CONNECTION_STATE_CONNECTED: connected
138  * GST_WEBRTC_PEER_CONNECTION_STATE_DISCONNECTED: disconnected
139  * GST_WEBRTC_PEER_CONNECTION_STATE_FAILED: failed
140  * GST_WEBRTC_PEER_CONNECTION_STATE_CLOSED: closed
141  *
142  * See <ulink url="http://w3c.github.io/webrtc-pc/#dom-rtcpeerconnectionstate">http://w3c.github.io/webrtc-pc/#dom-rtcpeerconnectionstate</ulink>
143  */
144 typedef enum /*< underscore_name=gst_webrtc_peer_connection_state >*/
145 {
146   GST_WEBRTC_PEER_CONNECTION_STATE_NEW,
147   GST_WEBRTC_PEER_CONNECTION_STATE_CONNECTING,
148   GST_WEBRTC_PEER_CONNECTION_STATE_CONNECTED,
149   GST_WEBRTC_PEER_CONNECTION_STATE_DISCONNECTED,
150   GST_WEBRTC_PEER_CONNECTION_STATE_FAILED,
151   GST_WEBRTC_PEER_CONNECTION_STATE_CLOSED,
152 } GstWebRTCPeerConnectionState;
153 
154 /**
155  * GstWebRTCICERole:
156  * GST_WEBRTC_ICE_ROLE_CONTROLLED: controlled
157  * GST_WEBRTC_ICE_ROLE_CONTROLLING: controlling
158  */
159 typedef enum /*< underscore_name=gst_webrtc_ice_role >*/
160 {
161   GST_WEBRTC_ICE_ROLE_CONTROLLED,
162   GST_WEBRTC_ICE_ROLE_CONTROLLING,
163 } GstWebRTCICERole;
164 
165 /**
166  * GstWebRTCICEComponent:
167  * GST_WEBRTC_ICE_COMPONENT_RTP,
168  * GST_WEBRTC_ICE_COMPONENT_RTCP,
169  */
170 typedef enum /*< underscore_name=gst_webrtc_ice_component >*/
171 {
172   GST_WEBRTC_ICE_COMPONENT_RTP,
173   GST_WEBRTC_ICE_COMPONENT_RTCP,
174 } GstWebRTCICEComponent;
175 
176 /**
177  * GstWebRTCSDPType:
178  * GST_WEBRTC_SDP_TYPE_OFFER: offer
179  * GST_WEBRTC_SDP_TYPE_PRANSWER: pranswer
180  * GST_WEBRTC_SDP_TYPE_ANSWER: answer
181  * GST_WEBRTC_SDP_TYPE_ROLLBACK: rollback
182  *
183  * See <ulink url="http://w3c.github.io/webrtc-pc/#rtcsdptype">http://w3c.github.io/webrtc-pc/#rtcsdptype</ulink>
184  */
185 typedef enum /*< underscore_name=gst_webrtc_sdp_type >*/
186 {
187   GST_WEBRTC_SDP_TYPE_OFFER = 1,
188   GST_WEBRTC_SDP_TYPE_PRANSWER,
189   GST_WEBRTC_SDP_TYPE_ANSWER,
190   GST_WEBRTC_SDP_TYPE_ROLLBACK,
191 } GstWebRTCSDPType;
192 
193 /**
194  * GstWebRTCRtpTransceiverDirection:
195  * GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_NONE: none
196  * GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_INACTIVE: inactive
197  * GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_SENDONLY: sendonly
198  * GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_RECVONLY: recvonly
199  * GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_SENDRECV: sendrecv
200  */
201 typedef enum /*< underscore_name=gst_webrtc_rtp_transceiver_direction >*/
202 {
203   GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_NONE,
204   GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_INACTIVE,
205   GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_SENDONLY,
206   GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_RECVONLY,
207   GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_SENDRECV,
208 } GstWebRTCRTPTransceiverDirection;
209 
210 /**
211  * GstWebRTCDTLSSetup:
212  * GST_WEBRTC_DTLS_SETUP_NONE: none
213  * GST_WEBRTC_DTLS_SETUP_ACTPASS: actpass
214  * GST_WEBRTC_DTLS_SETUP_ACTIVE: sendonly
215  * GST_WEBRTC_DTLS_SETUP_PASSIVE: recvonly
216  */
217 typedef enum /*< underscore_name=gst_webrtc_dtls_setup >*/
218 {
219   GST_WEBRTC_DTLS_SETUP_NONE,
220   GST_WEBRTC_DTLS_SETUP_ACTPASS,
221   GST_WEBRTC_DTLS_SETUP_ACTIVE,
222   GST_WEBRTC_DTLS_SETUP_PASSIVE,
223 } GstWebRTCDTLSSetup;
224 
225 /**
226  * GstWebRTCStatsType:
227  * GST_WEBRTC_STATS_CODEC: codec
228  * GST_WEBRTC_STATS_INBOUND_RTP: inbound-rtp
229  * GST_WEBRTC_STATS_OUTBOUND_RTP: outbound-rtp
230  * GST_WEBRTC_STATS_REMOTE_INBOUND_RTP: remote-inbound-rtp
231  * GST_WEBRTC_STATS_REMOTE_OUTBOUND_RTP: remote-outbound-rtp
232  * GST_WEBRTC_STATS_CSRC: csrc
233  * GST_WEBRTC_STATS_PEER_CONNECTION: peer-connectiion
234  * GST_WEBRTC_STATS_DATA_CHANNEL: data-channel
235  * GST_WEBRTC_STATS_STREAM: stream
236  * GST_WEBRTC_STATS_TRANSPORT: transport
237  * GST_WEBRTC_STATS_CANDIDATE_PAIR: candidate-pair
238  * GST_WEBRTC_STATS_LOCAL_CANDIDATE: local-candidate
239  * GST_WEBRTC_STATS_REMOTE_CANDIDATE: remote-candidate
240  * GST_WEBRTC_STATS_CERTIFICATE: certificate
241  */
242 typedef enum /*< underscore_name=gst_webrtc_stats_type >*/
243 {
244   GST_WEBRTC_STATS_CODEC = 1,
245   GST_WEBRTC_STATS_INBOUND_RTP,
246   GST_WEBRTC_STATS_OUTBOUND_RTP,
247   GST_WEBRTC_STATS_REMOTE_INBOUND_RTP,
248   GST_WEBRTC_STATS_REMOTE_OUTBOUND_RTP,
249   GST_WEBRTC_STATS_CSRC,
250   GST_WEBRTC_STATS_PEER_CONNECTION,
251   GST_WEBRTC_STATS_DATA_CHANNEL,
252   GST_WEBRTC_STATS_STREAM,
253   GST_WEBRTC_STATS_TRANSPORT,
254   GST_WEBRTC_STATS_CANDIDATE_PAIR,
255   GST_WEBRTC_STATS_LOCAL_CANDIDATE,
256   GST_WEBRTC_STATS_REMOTE_CANDIDATE,
257   GST_WEBRTC_STATS_CERTIFICATE,
258 } GstWebRTCStatsType;
259 
260 /**
261  * GstWebRTCFECType:
262  * @GST_WEBRTC_FEC_TYPE_NONE: none
263  * @GST_WEBRTC_FEC_TYPE_ULP_RED: ulpfec + red
264  *
265  * Since: 1.14.1
266  */
267 typedef enum /*< underscore_name=gst_webrtc_fec_type >*/
268 {
269   GST_WEBRTC_FEC_TYPE_NONE,
270   GST_WEBRTC_FEC_TYPE_ULP_RED,
271 } GstWebRTCFECType;
272 
273 /**
274  * GstWebRTCSCTPTransportState:
275  * GST_WEBRTC_SCTP_TRANSPORT_STATE_NEW: new
276  * GST_WEBRTC_SCTP_TRANSPORT_STATE_CONNECTING: connecting
277  * GST_WEBRTC_SCTP_TRANSPORT_STATE_CONNECTED: connected
278  * GST_WEBRTC_SCTP_TRANSPORT_STATE_CLOSED: closed
279  *
280  * See <ulink url="http://w3c.github.io/webrtc-pc/#dom-rtcsctptransportstate">http://w3c.github.io/webrtc-pc/#dom-rtcsctptransportstate</ulink>
281  *
282  * Since: 1.16
283  */
284 typedef enum /*< underscore_name=gst_webrtc_sctp_transport_state >*/
285 {
286   GST_WEBRTC_SCTP_TRANSPORT_STATE_NEW,
287   GST_WEBRTC_SCTP_TRANSPORT_STATE_CONNECTING,
288   GST_WEBRTC_SCTP_TRANSPORT_STATE_CONNECTED,
289   GST_WEBRTC_SCTP_TRANSPORT_STATE_CLOSED,
290 } GstWebRTCSCTPTransportState;
291 
292 /**
293  * GstWebRTCPriorityType:
294  * GST_WEBRTC_PRIORITY_TYPE_VERY_LOW: very-low
295  * GST_WEBRTC_PRIORITY_TYPE_LOW: low
296  * GST_WEBRTC_PRIORITY_TYPE_MEDIUM: medium
297  * GST_WEBRTC_PRIORITY_TYPE_HIGH: high
298  *
299  * See <ulink url="http://w3c.github.io/webrtc-pc/#dom-rtcprioritytype">http://w3c.github.io/webrtc-pc/#dom-rtcprioritytype</ulink>
300  *
301  * Since: 1.16
302  */
303 typedef enum /*< underscore_name=gst_webrtc_priority_type >*/
304 {
305   GST_WEBRTC_PRIORITY_TYPE_VERY_LOW = 1,
306   GST_WEBRTC_PRIORITY_TYPE_LOW,
307   GST_WEBRTC_PRIORITY_TYPE_MEDIUM,
308   GST_WEBRTC_PRIORITY_TYPE_HIGH,
309 } GstWebRTCPriorityType;
310 
311 /**
312  * GstWebRTCDataChannelState:
313  * GST_WEBRTC_DATA_CHANNEL_STATE_NEW: new
314  * GST_WEBRTC_DATA_CHANNEL_STATE_CONNECTING: connection
315  * GST_WEBRTC_DATA_CHANNEL_STATE_OPEN: open
316  * GST_WEBRTC_DATA_CHANNEL_STATE_CLOSING: closing
317  * GST_WEBRTC_DATA_CHANNEL_STATE_CLOSED: closed
318  *
319  * See <ulink url="http://w3c.github.io/webrtc-pc/#dom-rtcdatachannelstate">http://w3c.github.io/webrtc-pc/#dom-rtcdatachannelstate</ulink>
320  *
321  * Since: 1.16
322  */
323 typedef enum /*< underscore_name=gst_webrtc_data_channel_state >*/
324 {
325   GST_WEBRTC_DATA_CHANNEL_STATE_NEW,
326   GST_WEBRTC_DATA_CHANNEL_STATE_CONNECTING,
327   GST_WEBRTC_DATA_CHANNEL_STATE_OPEN,
328   GST_WEBRTC_DATA_CHANNEL_STATE_CLOSING,
329   GST_WEBRTC_DATA_CHANNEL_STATE_CLOSED,
330 } GstWebRTCDataChannelState;
331 
332 /**
333  * GstWebRTCBundlePolicy:
334  * GST_WEBRTC_BUNDLE_POLICY_NONE: none
335  * GST_WEBRTC_BUNDLE_POLICY_BALANCED: balanced
336  * GST_WEBRTC_BUNDLE_POLICY_MAX_COMPAT: max-compat
337  * GST_WEBRTC_BUNDLE_POLICY_MAX_BUNDLE: max-bundle
338  *
339  * See https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-24#section-4.1.1
340  * for more information.
341  *
342  * Since: 1.16
343  */
344 typedef enum /*<underscore_name=gst_webrtc_bundle_policy>*/
345 {
346   GST_WEBRTC_BUNDLE_POLICY_NONE,
347   GST_WEBRTC_BUNDLE_POLICY_BALANCED,
348   GST_WEBRTC_BUNDLE_POLICY_MAX_COMPAT,
349   GST_WEBRTC_BUNDLE_POLICY_MAX_BUNDLE,
350 } GstWebRTCBundlePolicy;
351 
352 /**
353  * GstWebRTCICETransportPolicy:
354  * GST_WEBRTC_ICE_TRANSPORT_POLICY_ALL: all
355  * GST_WEBRTC_ICE_TRANSPORT_POLICY_RELAY: relay
356  *
357  * See https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-24#section-4.1.1
358  * for more information.
359  *
360  * Since: 1.16
361  */
362 typedef enum /*<underscore_name=gst_webrtc_ice_transport_policy>*/
363 {
364   GST_WEBRTC_ICE_TRANSPORT_POLICY_ALL,
365   GST_WEBRTC_ICE_TRANSPORT_POLICY_RELAY,
366 } GstWebRTCICETransportPolicy;
367 
368 #endif /* __GST_WEBRTC_FWD_H__ */
369