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