xref: /aosp_15_r20/external/webrtc/sdk/objc/api/peerconnection/RTCPeerConnection.h (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1*d9f75844SAndroid Build Coastguard Worker /*
2*d9f75844SAndroid Build Coastguard Worker  *  Copyright 2015 The WebRTC project authors. All Rights Reserved.
3*d9f75844SAndroid Build Coastguard Worker  *
4*d9f75844SAndroid Build Coastguard Worker  *  Use of this source code is governed by a BSD-style license
5*d9f75844SAndroid Build Coastguard Worker  *  that can be found in the LICENSE file in the root of the source
6*d9f75844SAndroid Build Coastguard Worker  *  tree. An additional intellectual property rights grant can be found
7*d9f75844SAndroid Build Coastguard Worker  *  in the file PATENTS.  All contributing project authors may
8*d9f75844SAndroid Build Coastguard Worker  *  be found in the AUTHORS file in the root of the source tree.
9*d9f75844SAndroid Build Coastguard Worker  */
10*d9f75844SAndroid Build Coastguard Worker 
11*d9f75844SAndroid Build Coastguard Worker #import <Foundation/Foundation.h>
12*d9f75844SAndroid Build Coastguard Worker 
13*d9f75844SAndroid Build Coastguard Worker #import "RTCMacros.h"
14*d9f75844SAndroid Build Coastguard Worker 
15*d9f75844SAndroid Build Coastguard Worker @class RTC_OBJC_TYPE(RTCConfiguration);
16*d9f75844SAndroid Build Coastguard Worker @class RTC_OBJC_TYPE(RTCDataChannel);
17*d9f75844SAndroid Build Coastguard Worker @class RTC_OBJC_TYPE(RTCDataChannelConfiguration);
18*d9f75844SAndroid Build Coastguard Worker @class RTC_OBJC_TYPE(RTCIceCandidate);
19*d9f75844SAndroid Build Coastguard Worker @class RTC_OBJC_TYPE(RTCIceCandidateErrorEvent);
20*d9f75844SAndroid Build Coastguard Worker @class RTC_OBJC_TYPE(RTCMediaConstraints);
21*d9f75844SAndroid Build Coastguard Worker @class RTC_OBJC_TYPE(RTCMediaStream);
22*d9f75844SAndroid Build Coastguard Worker @class RTC_OBJC_TYPE(RTCMediaStreamTrack);
23*d9f75844SAndroid Build Coastguard Worker @class RTC_OBJC_TYPE(RTCPeerConnectionFactory);
24*d9f75844SAndroid Build Coastguard Worker @class RTC_OBJC_TYPE(RTCRtpReceiver);
25*d9f75844SAndroid Build Coastguard Worker @class RTC_OBJC_TYPE(RTCRtpSender);
26*d9f75844SAndroid Build Coastguard Worker @class RTC_OBJC_TYPE(RTCRtpTransceiver);
27*d9f75844SAndroid Build Coastguard Worker @class RTC_OBJC_TYPE(RTCRtpTransceiverInit);
28*d9f75844SAndroid Build Coastguard Worker @class RTC_OBJC_TYPE(RTCSessionDescription);
29*d9f75844SAndroid Build Coastguard Worker @class RTC_OBJC_TYPE(RTCStatisticsReport);
30*d9f75844SAndroid Build Coastguard Worker @class RTC_OBJC_TYPE(RTCLegacyStatsReport);
31*d9f75844SAndroid Build Coastguard Worker 
32*d9f75844SAndroid Build Coastguard Worker typedef NS_ENUM(NSInteger, RTCRtpMediaType);
33*d9f75844SAndroid Build Coastguard Worker 
34*d9f75844SAndroid Build Coastguard Worker NS_ASSUME_NONNULL_BEGIN
35*d9f75844SAndroid Build Coastguard Worker 
36*d9f75844SAndroid Build Coastguard Worker extern NSString *const kRTCPeerConnectionErrorDomain;
37*d9f75844SAndroid Build Coastguard Worker extern int const kRTCSessionDescriptionErrorCode;
38*d9f75844SAndroid Build Coastguard Worker 
39*d9f75844SAndroid Build Coastguard Worker /** Represents the signaling state of the peer connection. */
40*d9f75844SAndroid Build Coastguard Worker typedef NS_ENUM(NSInteger, RTCSignalingState) {
41*d9f75844SAndroid Build Coastguard Worker   RTCSignalingStateStable,
42*d9f75844SAndroid Build Coastguard Worker   RTCSignalingStateHaveLocalOffer,
43*d9f75844SAndroid Build Coastguard Worker   RTCSignalingStateHaveLocalPrAnswer,
44*d9f75844SAndroid Build Coastguard Worker   RTCSignalingStateHaveRemoteOffer,
45*d9f75844SAndroid Build Coastguard Worker   RTCSignalingStateHaveRemotePrAnswer,
46*d9f75844SAndroid Build Coastguard Worker   // Not an actual state, represents the total number of states.
47*d9f75844SAndroid Build Coastguard Worker   RTCSignalingStateClosed,
48*d9f75844SAndroid Build Coastguard Worker };
49*d9f75844SAndroid Build Coastguard Worker 
50*d9f75844SAndroid Build Coastguard Worker /** Represents the ice connection state of the peer connection. */
51*d9f75844SAndroid Build Coastguard Worker typedef NS_ENUM(NSInteger, RTCIceConnectionState) {
52*d9f75844SAndroid Build Coastguard Worker   RTCIceConnectionStateNew,
53*d9f75844SAndroid Build Coastguard Worker   RTCIceConnectionStateChecking,
54*d9f75844SAndroid Build Coastguard Worker   RTCIceConnectionStateConnected,
55*d9f75844SAndroid Build Coastguard Worker   RTCIceConnectionStateCompleted,
56*d9f75844SAndroid Build Coastguard Worker   RTCIceConnectionStateFailed,
57*d9f75844SAndroid Build Coastguard Worker   RTCIceConnectionStateDisconnected,
58*d9f75844SAndroid Build Coastguard Worker   RTCIceConnectionStateClosed,
59*d9f75844SAndroid Build Coastguard Worker   RTCIceConnectionStateCount,
60*d9f75844SAndroid Build Coastguard Worker };
61*d9f75844SAndroid Build Coastguard Worker 
62*d9f75844SAndroid Build Coastguard Worker /** Represents the combined ice+dtls connection state of the peer connection. */
63*d9f75844SAndroid Build Coastguard Worker typedef NS_ENUM(NSInteger, RTCPeerConnectionState) {
64*d9f75844SAndroid Build Coastguard Worker   RTCPeerConnectionStateNew,
65*d9f75844SAndroid Build Coastguard Worker   RTCPeerConnectionStateConnecting,
66*d9f75844SAndroid Build Coastguard Worker   RTCPeerConnectionStateConnected,
67*d9f75844SAndroid Build Coastguard Worker   RTCPeerConnectionStateDisconnected,
68*d9f75844SAndroid Build Coastguard Worker   RTCPeerConnectionStateFailed,
69*d9f75844SAndroid Build Coastguard Worker   RTCPeerConnectionStateClosed,
70*d9f75844SAndroid Build Coastguard Worker };
71*d9f75844SAndroid Build Coastguard Worker 
72*d9f75844SAndroid Build Coastguard Worker /** Represents the ice gathering state of the peer connection. */
73*d9f75844SAndroid Build Coastguard Worker typedef NS_ENUM(NSInteger, RTCIceGatheringState) {
74*d9f75844SAndroid Build Coastguard Worker   RTCIceGatheringStateNew,
75*d9f75844SAndroid Build Coastguard Worker   RTCIceGatheringStateGathering,
76*d9f75844SAndroid Build Coastguard Worker   RTCIceGatheringStateComplete,
77*d9f75844SAndroid Build Coastguard Worker };
78*d9f75844SAndroid Build Coastguard Worker 
79*d9f75844SAndroid Build Coastguard Worker /** Represents the stats output level. */
80*d9f75844SAndroid Build Coastguard Worker typedef NS_ENUM(NSInteger, RTCStatsOutputLevel) {
81*d9f75844SAndroid Build Coastguard Worker   RTCStatsOutputLevelStandard,
82*d9f75844SAndroid Build Coastguard Worker   RTCStatsOutputLevelDebug,
83*d9f75844SAndroid Build Coastguard Worker };
84*d9f75844SAndroid Build Coastguard Worker 
85*d9f75844SAndroid Build Coastguard Worker typedef void (^RTCCreateSessionDescriptionCompletionHandler)(RTC_OBJC_TYPE(RTCSessionDescription) *
86*d9f75844SAndroid Build Coastguard Worker                                                                  _Nullable sdp,
87*d9f75844SAndroid Build Coastguard Worker                                                              NSError *_Nullable error);
88*d9f75844SAndroid Build Coastguard Worker 
89*d9f75844SAndroid Build Coastguard Worker typedef void (^RTCSetSessionDescriptionCompletionHandler)(NSError *_Nullable error);
90*d9f75844SAndroid Build Coastguard Worker 
91*d9f75844SAndroid Build Coastguard Worker @class RTC_OBJC_TYPE(RTCPeerConnection);
92*d9f75844SAndroid Build Coastguard Worker 
93*d9f75844SAndroid Build Coastguard Worker RTC_OBJC_EXPORT
94*d9f75844SAndroid Build Coastguard Worker @protocol RTC_OBJC_TYPE
95*d9f75844SAndroid Build Coastguard Worker (RTCPeerConnectionDelegate)<NSObject>
96*d9f75844SAndroid Build Coastguard Worker 
97*d9f75844SAndroid Build Coastguard Worker     /** Called when the SignalingState changed. */
98*d9f75844SAndroid Build Coastguard Worker     - (void)peerConnection
99*d9f75844SAndroid Build Coastguard Worker     : (RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection didChangeSignalingState
100*d9f75844SAndroid Build Coastguard Worker     : (RTCSignalingState)stateChanged;
101*d9f75844SAndroid Build Coastguard Worker 
102*d9f75844SAndroid Build Coastguard Worker /** Called when media is received on a new stream from remote peer. */
103*d9f75844SAndroid Build Coastguard Worker - (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
104*d9f75844SAndroid Build Coastguard Worker           didAddStream:(RTC_OBJC_TYPE(RTCMediaStream) *)stream;
105*d9f75844SAndroid Build Coastguard Worker 
106*d9f75844SAndroid Build Coastguard Worker /** Called when a remote peer closes a stream.
107*d9f75844SAndroid Build Coastguard Worker  *  This is not called when RTCSdpSemanticsUnifiedPlan is specified.
108*d9f75844SAndroid Build Coastguard Worker  */
109*d9f75844SAndroid Build Coastguard Worker - (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
110*d9f75844SAndroid Build Coastguard Worker        didRemoveStream:(RTC_OBJC_TYPE(RTCMediaStream) *)stream;
111*d9f75844SAndroid Build Coastguard Worker 
112*d9f75844SAndroid Build Coastguard Worker /** Called when negotiation is needed, for example ICE has restarted. */
113*d9f75844SAndroid Build Coastguard Worker - (void)peerConnectionShouldNegotiate:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection;
114*d9f75844SAndroid Build Coastguard Worker 
115*d9f75844SAndroid Build Coastguard Worker /** Called any time the IceConnectionState changes. */
116*d9f75844SAndroid Build Coastguard Worker - (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
117*d9f75844SAndroid Build Coastguard Worker     didChangeIceConnectionState:(RTCIceConnectionState)newState;
118*d9f75844SAndroid Build Coastguard Worker 
119*d9f75844SAndroid Build Coastguard Worker /** Called any time the IceGatheringState changes. */
120*d9f75844SAndroid Build Coastguard Worker - (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
121*d9f75844SAndroid Build Coastguard Worker     didChangeIceGatheringState:(RTCIceGatheringState)newState;
122*d9f75844SAndroid Build Coastguard Worker 
123*d9f75844SAndroid Build Coastguard Worker /** New ice candidate has been found. */
124*d9f75844SAndroid Build Coastguard Worker - (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
125*d9f75844SAndroid Build Coastguard Worker     didGenerateIceCandidate:(RTC_OBJC_TYPE(RTCIceCandidate) *)candidate;
126*d9f75844SAndroid Build Coastguard Worker 
127*d9f75844SAndroid Build Coastguard Worker /** Called when a group of local Ice candidates have been removed. */
128*d9f75844SAndroid Build Coastguard Worker - (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
129*d9f75844SAndroid Build Coastguard Worker     didRemoveIceCandidates:(NSArray<RTC_OBJC_TYPE(RTCIceCandidate) *> *)candidates;
130*d9f75844SAndroid Build Coastguard Worker 
131*d9f75844SAndroid Build Coastguard Worker /** New data channel has been opened. */
132*d9f75844SAndroid Build Coastguard Worker - (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
133*d9f75844SAndroid Build Coastguard Worker     didOpenDataChannel:(RTC_OBJC_TYPE(RTCDataChannel) *)dataChannel;
134*d9f75844SAndroid Build Coastguard Worker 
135*d9f75844SAndroid Build Coastguard Worker /** Called when signaling indicates a transceiver will be receiving media from
136*d9f75844SAndroid Build Coastguard Worker  *  the remote endpoint.
137*d9f75844SAndroid Build Coastguard Worker  *  This is only called with RTCSdpSemanticsUnifiedPlan specified.
138*d9f75844SAndroid Build Coastguard Worker  */
139*d9f75844SAndroid Build Coastguard Worker @optional
140*d9f75844SAndroid Build Coastguard Worker /** Called any time the IceConnectionState changes following standardized
141*d9f75844SAndroid Build Coastguard Worker  * transition. */
142*d9f75844SAndroid Build Coastguard Worker - (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
143*d9f75844SAndroid Build Coastguard Worker     didChangeStandardizedIceConnectionState:(RTCIceConnectionState)newState;
144*d9f75844SAndroid Build Coastguard Worker 
145*d9f75844SAndroid Build Coastguard Worker /** Called any time the PeerConnectionState changes. */
146*d9f75844SAndroid Build Coastguard Worker - (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
147*d9f75844SAndroid Build Coastguard Worker     didChangeConnectionState:(RTCPeerConnectionState)newState;
148*d9f75844SAndroid Build Coastguard Worker 
149*d9f75844SAndroid Build Coastguard Worker - (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
150*d9f75844SAndroid Build Coastguard Worker     didStartReceivingOnTransceiver:(RTC_OBJC_TYPE(RTCRtpTransceiver) *)transceiver;
151*d9f75844SAndroid Build Coastguard Worker 
152*d9f75844SAndroid Build Coastguard Worker /** Called when a receiver and its track are created. */
153*d9f75844SAndroid Build Coastguard Worker - (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
154*d9f75844SAndroid Build Coastguard Worker         didAddReceiver:(RTC_OBJC_TYPE(RTCRtpReceiver) *)rtpReceiver
155*d9f75844SAndroid Build Coastguard Worker                streams:(NSArray<RTC_OBJC_TYPE(RTCMediaStream) *> *)mediaStreams;
156*d9f75844SAndroid Build Coastguard Worker 
157*d9f75844SAndroid Build Coastguard Worker /** Called when the receiver and its track are removed. */
158*d9f75844SAndroid Build Coastguard Worker - (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
159*d9f75844SAndroid Build Coastguard Worker      didRemoveReceiver:(RTC_OBJC_TYPE(RTCRtpReceiver) *)rtpReceiver;
160*d9f75844SAndroid Build Coastguard Worker 
161*d9f75844SAndroid Build Coastguard Worker /** Called when the selected ICE candidate pair is changed. */
162*d9f75844SAndroid Build Coastguard Worker - (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
163*d9f75844SAndroid Build Coastguard Worker     didChangeLocalCandidate:(RTC_OBJC_TYPE(RTCIceCandidate) *)local
164*d9f75844SAndroid Build Coastguard Worker             remoteCandidate:(RTC_OBJC_TYPE(RTCIceCandidate) *)remote
165*d9f75844SAndroid Build Coastguard Worker              lastReceivedMs:(int)lastDataReceivedMs
166*d9f75844SAndroid Build Coastguard Worker                changeReason:(NSString *)reason;
167*d9f75844SAndroid Build Coastguard Worker 
168*d9f75844SAndroid Build Coastguard Worker /** Called when gathering of an ICE candidate failed. */
169*d9f75844SAndroid Build Coastguard Worker - (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
170*d9f75844SAndroid Build Coastguard Worker     didFailToGatherIceCandidate:(RTC_OBJC_TYPE(RTCIceCandidateErrorEvent) *)event;
171*d9f75844SAndroid Build Coastguard Worker 
172*d9f75844SAndroid Build Coastguard Worker @end
173*d9f75844SAndroid Build Coastguard Worker 
174*d9f75844SAndroid Build Coastguard Worker RTC_OBJC_EXPORT
175*d9f75844SAndroid Build Coastguard Worker @interface RTC_OBJC_TYPE (RTCPeerConnection) : NSObject
176*d9f75844SAndroid Build Coastguard Worker 
177*d9f75844SAndroid Build Coastguard Worker /** The object that will be notifed about events such as state changes and
178*d9f75844SAndroid Build Coastguard Worker  *  streams being added or removed.
179*d9f75844SAndroid Build Coastguard Worker  */
180*d9f75844SAndroid Build Coastguard Worker @property(nonatomic, weak, nullable) id<RTC_OBJC_TYPE(RTCPeerConnectionDelegate)> delegate;
181*d9f75844SAndroid Build Coastguard Worker /** This property is not available with RTCSdpSemanticsUnifiedPlan. Please use
182*d9f75844SAndroid Build Coastguard Worker  *  `senders` instead.
183*d9f75844SAndroid Build Coastguard Worker  */
184*d9f75844SAndroid Build Coastguard Worker @property(nonatomic, readonly) NSArray<RTC_OBJC_TYPE(RTCMediaStream) *> *localStreams;
185*d9f75844SAndroid Build Coastguard Worker @property(nonatomic, readonly, nullable) RTC_OBJC_TYPE(RTCSessionDescription) * localDescription;
186*d9f75844SAndroid Build Coastguard Worker @property(nonatomic, readonly, nullable) RTC_OBJC_TYPE(RTCSessionDescription) * remoteDescription;
187*d9f75844SAndroid Build Coastguard Worker @property(nonatomic, readonly) RTCSignalingState signalingState;
188*d9f75844SAndroid Build Coastguard Worker @property(nonatomic, readonly) RTCIceConnectionState iceConnectionState;
189*d9f75844SAndroid Build Coastguard Worker @property(nonatomic, readonly) RTCPeerConnectionState connectionState;
190*d9f75844SAndroid Build Coastguard Worker @property(nonatomic, readonly) RTCIceGatheringState iceGatheringState;
191*d9f75844SAndroid Build Coastguard Worker @property(nonatomic, readonly, copy) RTC_OBJC_TYPE(RTCConfiguration) * configuration;
192*d9f75844SAndroid Build Coastguard Worker 
193*d9f75844SAndroid Build Coastguard Worker /** Gets all RTCRtpSenders associated with this peer connection.
194*d9f75844SAndroid Build Coastguard Worker  *  Note: reading this property returns different instances of RTCRtpSender.
195*d9f75844SAndroid Build Coastguard Worker  *  Use isEqual: instead of == to compare RTCRtpSender instances.
196*d9f75844SAndroid Build Coastguard Worker  */
197*d9f75844SAndroid Build Coastguard Worker @property(nonatomic, readonly) NSArray<RTC_OBJC_TYPE(RTCRtpSender) *> *senders;
198*d9f75844SAndroid Build Coastguard Worker 
199*d9f75844SAndroid Build Coastguard Worker /** Gets all RTCRtpReceivers associated with this peer connection.
200*d9f75844SAndroid Build Coastguard Worker  *  Note: reading this property returns different instances of RTCRtpReceiver.
201*d9f75844SAndroid Build Coastguard Worker  *  Use isEqual: instead of == to compare RTCRtpReceiver instances.
202*d9f75844SAndroid Build Coastguard Worker  */
203*d9f75844SAndroid Build Coastguard Worker @property(nonatomic, readonly) NSArray<RTC_OBJC_TYPE(RTCRtpReceiver) *> *receivers;
204*d9f75844SAndroid Build Coastguard Worker 
205*d9f75844SAndroid Build Coastguard Worker /** Gets all RTCRtpTransceivers associated with this peer connection.
206*d9f75844SAndroid Build Coastguard Worker  *  Note: reading this property returns different instances of
207*d9f75844SAndroid Build Coastguard Worker  *  RTCRtpTransceiver. Use isEqual: instead of == to compare
208*d9f75844SAndroid Build Coastguard Worker  *  RTCRtpTransceiver instances. This is only available with
209*d9f75844SAndroid Build Coastguard Worker  * RTCSdpSemanticsUnifiedPlan specified.
210*d9f75844SAndroid Build Coastguard Worker  */
211*d9f75844SAndroid Build Coastguard Worker @property(nonatomic, readonly) NSArray<RTC_OBJC_TYPE(RTCRtpTransceiver) *> *transceivers;
212*d9f75844SAndroid Build Coastguard Worker 
213*d9f75844SAndroid Build Coastguard Worker - (instancetype)init NS_UNAVAILABLE;
214*d9f75844SAndroid Build Coastguard Worker 
215*d9f75844SAndroid Build Coastguard Worker /** Sets the PeerConnection's global configuration to `configuration`.
216*d9f75844SAndroid Build Coastguard Worker  *  Any changes to STUN/TURN servers or ICE candidate policy will affect the
217*d9f75844SAndroid Build Coastguard Worker  *  next gathering phase, and cause the next call to createOffer to generate
218*d9f75844SAndroid Build Coastguard Worker  *  new ICE credentials. Note that the BUNDLE and RTCP-multiplexing policies
219*d9f75844SAndroid Build Coastguard Worker  *  cannot be changed with this method.
220*d9f75844SAndroid Build Coastguard Worker  */
221*d9f75844SAndroid Build Coastguard Worker - (BOOL)setConfiguration:(RTC_OBJC_TYPE(RTCConfiguration) *)configuration;
222*d9f75844SAndroid Build Coastguard Worker 
223*d9f75844SAndroid Build Coastguard Worker /** Terminate all media and close the transport. */
224*d9f75844SAndroid Build Coastguard Worker - (void)close;
225*d9f75844SAndroid Build Coastguard Worker 
226*d9f75844SAndroid Build Coastguard Worker /** Provide a remote candidate to the ICE Agent. */
227*d9f75844SAndroid Build Coastguard Worker - (void)addIceCandidate:(RTC_OBJC_TYPE(RTCIceCandidate) *)candidate
228*d9f75844SAndroid Build Coastguard Worker     DEPRECATED_MSG_ATTRIBUTE("Please use addIceCandidate:completionHandler: instead");
229*d9f75844SAndroid Build Coastguard Worker 
230*d9f75844SAndroid Build Coastguard Worker /** Provide a remote candidate to the ICE Agent. */
231*d9f75844SAndroid Build Coastguard Worker - (void)addIceCandidate:(RTC_OBJC_TYPE(RTCIceCandidate) *)candidate
232*d9f75844SAndroid Build Coastguard Worker       completionHandler:(void (^)(NSError *_Nullable error))completionHandler;
233*d9f75844SAndroid Build Coastguard Worker 
234*d9f75844SAndroid Build Coastguard Worker /** Remove a group of remote candidates from the ICE Agent. */
235*d9f75844SAndroid Build Coastguard Worker - (void)removeIceCandidates:(NSArray<RTC_OBJC_TYPE(RTCIceCandidate) *> *)candidates;
236*d9f75844SAndroid Build Coastguard Worker 
237*d9f75844SAndroid Build Coastguard Worker /** Add a new media stream to be sent on this peer connection.
238*d9f75844SAndroid Build Coastguard Worker  *  This method is not supported with RTCSdpSemanticsUnifiedPlan. Please use
239*d9f75844SAndroid Build Coastguard Worker  *  addTrack instead.
240*d9f75844SAndroid Build Coastguard Worker  */
241*d9f75844SAndroid Build Coastguard Worker - (void)addStream:(RTC_OBJC_TYPE(RTCMediaStream) *)stream;
242*d9f75844SAndroid Build Coastguard Worker 
243*d9f75844SAndroid Build Coastguard Worker /** Remove the given media stream from this peer connection.
244*d9f75844SAndroid Build Coastguard Worker  *  This method is not supported with RTCSdpSemanticsUnifiedPlan. Please use
245*d9f75844SAndroid Build Coastguard Worker  *  removeTrack instead.
246*d9f75844SAndroid Build Coastguard Worker  */
247*d9f75844SAndroid Build Coastguard Worker - (void)removeStream:(RTC_OBJC_TYPE(RTCMediaStream) *)stream;
248*d9f75844SAndroid Build Coastguard Worker 
249*d9f75844SAndroid Build Coastguard Worker /** Add a new media stream track to be sent on this peer connection, and return
250*d9f75844SAndroid Build Coastguard Worker  *  the newly created RTCRtpSender. The RTCRtpSender will be
251*d9f75844SAndroid Build Coastguard Worker  * associated with the streams specified in the `streamIds` list.
252*d9f75844SAndroid Build Coastguard Worker  *
253*d9f75844SAndroid Build Coastguard Worker  *  Errors: If an error occurs, returns nil. An error can occur if:
254*d9f75844SAndroid Build Coastguard Worker  *  - A sender already exists for the track.
255*d9f75844SAndroid Build Coastguard Worker  *  - The peer connection is closed.
256*d9f75844SAndroid Build Coastguard Worker  */
257*d9f75844SAndroid Build Coastguard Worker - (nullable RTC_OBJC_TYPE(RTCRtpSender) *)addTrack:(RTC_OBJC_TYPE(RTCMediaStreamTrack) *)track
258*d9f75844SAndroid Build Coastguard Worker                                          streamIds:(NSArray<NSString *> *)streamIds;
259*d9f75844SAndroid Build Coastguard Worker 
260*d9f75844SAndroid Build Coastguard Worker /** With PlanB semantics, removes an RTCRtpSender from this peer connection.
261*d9f75844SAndroid Build Coastguard Worker  *
262*d9f75844SAndroid Build Coastguard Worker  *  With UnifiedPlan semantics, sets sender's track to null and removes the
263*d9f75844SAndroid Build Coastguard Worker  *  send component from the associated RTCRtpTransceiver's direction.
264*d9f75844SAndroid Build Coastguard Worker  *
265*d9f75844SAndroid Build Coastguard Worker  *  Returns YES on success.
266*d9f75844SAndroid Build Coastguard Worker  */
267*d9f75844SAndroid Build Coastguard Worker - (BOOL)removeTrack:(RTC_OBJC_TYPE(RTCRtpSender) *)sender;
268*d9f75844SAndroid Build Coastguard Worker 
269*d9f75844SAndroid Build Coastguard Worker /** addTransceiver creates a new RTCRtpTransceiver and adds it to the set of
270*d9f75844SAndroid Build Coastguard Worker  *  transceivers. Adding a transceiver will cause future calls to CreateOffer
271*d9f75844SAndroid Build Coastguard Worker  *  to add a media description for the corresponding transceiver.
272*d9f75844SAndroid Build Coastguard Worker  *
273*d9f75844SAndroid Build Coastguard Worker  *  The initial value of `mid` in the returned transceiver is nil. Setting a
274*d9f75844SAndroid Build Coastguard Worker  *  new session description may change it to a non-nil value.
275*d9f75844SAndroid Build Coastguard Worker  *
276*d9f75844SAndroid Build Coastguard Worker  *  https://w3c.github.io/webrtc-pc/#dom-rtcpeerconnection-addtransceiver
277*d9f75844SAndroid Build Coastguard Worker  *
278*d9f75844SAndroid Build Coastguard Worker  *  Optionally, an RtpTransceiverInit structure can be specified to configure
279*d9f75844SAndroid Build Coastguard Worker  *  the transceiver from construction. If not specified, the transceiver will
280*d9f75844SAndroid Build Coastguard Worker  *  default to having a direction of kSendRecv and not be part of any streams.
281*d9f75844SAndroid Build Coastguard Worker  *
282*d9f75844SAndroid Build Coastguard Worker  *  These methods are only available when Unified Plan is enabled (see
283*d9f75844SAndroid Build Coastguard Worker  *  RTCConfiguration).
284*d9f75844SAndroid Build Coastguard Worker  */
285*d9f75844SAndroid Build Coastguard Worker 
286*d9f75844SAndroid Build Coastguard Worker /** Adds a transceiver with a sender set to transmit the given track. The kind
287*d9f75844SAndroid Build Coastguard Worker  *  of the transceiver (and sender/receiver) will be derived from the kind of
288*d9f75844SAndroid Build Coastguard Worker  *  the track.
289*d9f75844SAndroid Build Coastguard Worker  */
290*d9f75844SAndroid Build Coastguard Worker - (nullable RTC_OBJC_TYPE(RTCRtpTransceiver) *)addTransceiverWithTrack:
291*d9f75844SAndroid Build Coastguard Worker     (RTC_OBJC_TYPE(RTCMediaStreamTrack) *)track;
292*d9f75844SAndroid Build Coastguard Worker - (nullable RTC_OBJC_TYPE(RTCRtpTransceiver) *)
293*d9f75844SAndroid Build Coastguard Worker     addTransceiverWithTrack:(RTC_OBJC_TYPE(RTCMediaStreamTrack) *)track
294*d9f75844SAndroid Build Coastguard Worker                        init:(RTC_OBJC_TYPE(RTCRtpTransceiverInit) *)init;
295*d9f75844SAndroid Build Coastguard Worker 
296*d9f75844SAndroid Build Coastguard Worker /** Adds a transceiver with the given kind. Can either be RTCRtpMediaTypeAudio
297*d9f75844SAndroid Build Coastguard Worker  *  or RTCRtpMediaTypeVideo.
298*d9f75844SAndroid Build Coastguard Worker  */
299*d9f75844SAndroid Build Coastguard Worker - (nullable RTC_OBJC_TYPE(RTCRtpTransceiver) *)addTransceiverOfType:(RTCRtpMediaType)mediaType;
300*d9f75844SAndroid Build Coastguard Worker - (nullable RTC_OBJC_TYPE(RTCRtpTransceiver) *)
301*d9f75844SAndroid Build Coastguard Worker     addTransceiverOfType:(RTCRtpMediaType)mediaType
302*d9f75844SAndroid Build Coastguard Worker                     init:(RTC_OBJC_TYPE(RTCRtpTransceiverInit) *)init;
303*d9f75844SAndroid Build Coastguard Worker 
304*d9f75844SAndroid Build Coastguard Worker /** Tells the PeerConnection that ICE should be restarted. This triggers a need
305*d9f75844SAndroid Build Coastguard Worker  * for negotiation and subsequent offerForConstraints:completionHandler call will act as if
306*d9f75844SAndroid Build Coastguard Worker  * RTCOfferAnswerOptions::ice_restart is true.
307*d9f75844SAndroid Build Coastguard Worker  */
308*d9f75844SAndroid Build Coastguard Worker - (void)restartIce;
309*d9f75844SAndroid Build Coastguard Worker 
310*d9f75844SAndroid Build Coastguard Worker /** Generate an SDP offer. */
311*d9f75844SAndroid Build Coastguard Worker - (void)offerForConstraints:(RTC_OBJC_TYPE(RTCMediaConstraints) *)constraints
312*d9f75844SAndroid Build Coastguard Worker           completionHandler:(RTCCreateSessionDescriptionCompletionHandler)completionHandler;
313*d9f75844SAndroid Build Coastguard Worker 
314*d9f75844SAndroid Build Coastguard Worker /** Generate an SDP answer. */
315*d9f75844SAndroid Build Coastguard Worker - (void)answerForConstraints:(RTC_OBJC_TYPE(RTCMediaConstraints) *)constraints
316*d9f75844SAndroid Build Coastguard Worker            completionHandler:(RTCCreateSessionDescriptionCompletionHandler)completionHandler;
317*d9f75844SAndroid Build Coastguard Worker 
318*d9f75844SAndroid Build Coastguard Worker /** Apply the supplied RTCSessionDescription as the local description. */
319*d9f75844SAndroid Build Coastguard Worker - (void)setLocalDescription:(RTC_OBJC_TYPE(RTCSessionDescription) *)sdp
320*d9f75844SAndroid Build Coastguard Worker           completionHandler:(RTCSetSessionDescriptionCompletionHandler)completionHandler;
321*d9f75844SAndroid Build Coastguard Worker 
322*d9f75844SAndroid Build Coastguard Worker /** Creates an offer or answer (depending on current signaling state) and sets
323*d9f75844SAndroid Build Coastguard Worker  * it as the local session description. */
324*d9f75844SAndroid Build Coastguard Worker - (void)setLocalDescriptionWithCompletionHandler:
325*d9f75844SAndroid Build Coastguard Worker     (RTCSetSessionDescriptionCompletionHandler)completionHandler;
326*d9f75844SAndroid Build Coastguard Worker 
327*d9f75844SAndroid Build Coastguard Worker /** Apply the supplied RTCSessionDescription as the remote description. */
328*d9f75844SAndroid Build Coastguard Worker - (void)setRemoteDescription:(RTC_OBJC_TYPE(RTCSessionDescription) *)sdp
329*d9f75844SAndroid Build Coastguard Worker            completionHandler:(RTCSetSessionDescriptionCompletionHandler)completionHandler;
330*d9f75844SAndroid Build Coastguard Worker 
331*d9f75844SAndroid Build Coastguard Worker /** Limits the bandwidth allocated for all RTP streams sent by this
332*d9f75844SAndroid Build Coastguard Worker  *  PeerConnection. Nil parameters will be unchanged. Setting
333*d9f75844SAndroid Build Coastguard Worker  * `currentBitrateBps` will force the available bitrate estimate to the given
334*d9f75844SAndroid Build Coastguard Worker  *  value. Returns YES if the parameters were successfully updated.
335*d9f75844SAndroid Build Coastguard Worker  */
336*d9f75844SAndroid Build Coastguard Worker - (BOOL)setBweMinBitrateBps:(nullable NSNumber *)minBitrateBps
337*d9f75844SAndroid Build Coastguard Worker           currentBitrateBps:(nullable NSNumber *)currentBitrateBps
338*d9f75844SAndroid Build Coastguard Worker               maxBitrateBps:(nullable NSNumber *)maxBitrateBps;
339*d9f75844SAndroid Build Coastguard Worker 
340*d9f75844SAndroid Build Coastguard Worker /** Start or stop recording an Rtc EventLog. */
341*d9f75844SAndroid Build Coastguard Worker - (BOOL)startRtcEventLogWithFilePath:(NSString *)filePath maxSizeInBytes:(int64_t)maxSizeInBytes;
342*d9f75844SAndroid Build Coastguard Worker - (void)stopRtcEventLog;
343*d9f75844SAndroid Build Coastguard Worker 
344*d9f75844SAndroid Build Coastguard Worker @end
345*d9f75844SAndroid Build Coastguard Worker 
346*d9f75844SAndroid Build Coastguard Worker @interface RTC_OBJC_TYPE (RTCPeerConnection)
347*d9f75844SAndroid Build Coastguard Worker (Media)
348*d9f75844SAndroid Build Coastguard Worker 
349*d9f75844SAndroid Build Coastguard Worker     /** Create an RTCRtpSender with the specified kind and media stream ID.
350*d9f75844SAndroid Build Coastguard Worker      *  See RTCMediaStreamTrack.h for available kinds.
351*d9f75844SAndroid Build Coastguard Worker      *  This method is not supported with RTCSdpSemanticsUnifiedPlan. Please use
352*d9f75844SAndroid Build Coastguard Worker      *  addTransceiver instead.
353*d9f75844SAndroid Build Coastguard Worker      */
354*d9f75844SAndroid Build Coastguard Worker     - (RTC_OBJC_TYPE(RTCRtpSender) *)senderWithKind : (NSString *)kind streamId
355*d9f75844SAndroid Build Coastguard Worker     : (NSString *)streamId;
356*d9f75844SAndroid Build Coastguard Worker 
357*d9f75844SAndroid Build Coastguard Worker @end
358*d9f75844SAndroid Build Coastguard Worker 
359*d9f75844SAndroid Build Coastguard Worker @interface RTC_OBJC_TYPE (RTCPeerConnection)
360*d9f75844SAndroid Build Coastguard Worker (DataChannel)
361*d9f75844SAndroid Build Coastguard Worker 
362*d9f75844SAndroid Build Coastguard Worker     /** Create a new data channel with the given label and configuration. */
363*d9f75844SAndroid Build Coastguard Worker     - (nullable RTC_OBJC_TYPE(RTCDataChannel) *)dataChannelForLabel
364*d9f75844SAndroid Build Coastguard Worker     : (NSString *)label configuration : (RTC_OBJC_TYPE(RTCDataChannelConfiguration) *)configuration;
365*d9f75844SAndroid Build Coastguard Worker 
366*d9f75844SAndroid Build Coastguard Worker @end
367*d9f75844SAndroid Build Coastguard Worker 
368*d9f75844SAndroid Build Coastguard Worker typedef void (^RTCStatisticsCompletionHandler)(RTC_OBJC_TYPE(RTCStatisticsReport) *);
369*d9f75844SAndroid Build Coastguard Worker 
370*d9f75844SAndroid Build Coastguard Worker @interface RTC_OBJC_TYPE (RTCPeerConnection)
371*d9f75844SAndroid Build Coastguard Worker (Stats)
372*d9f75844SAndroid Build Coastguard Worker 
373*d9f75844SAndroid Build Coastguard Worker     /** Gather stats for the given RTCMediaStreamTrack. If `mediaStreamTrack` is nil
374*d9f75844SAndroid Build Coastguard Worker      *  statistics are gathered for all tracks.
375*d9f75844SAndroid Build Coastguard Worker      */
376*d9f75844SAndroid Build Coastguard Worker     - (void)statsForTrack
377*d9f75844SAndroid Build Coastguard Worker     : (nullable RTC_OBJC_TYPE(RTCMediaStreamTrack) *)mediaStreamTrack statsOutputLevel
378*d9f75844SAndroid Build Coastguard Worker     : (RTCStatsOutputLevel)statsOutputLevel completionHandler
379*d9f75844SAndroid Build Coastguard Worker     : (nullable void (^)(NSArray<RTC_OBJC_TYPE(RTCLegacyStatsReport) *> *stats))completionHandler;
380*d9f75844SAndroid Build Coastguard Worker 
381*d9f75844SAndroid Build Coastguard Worker /** Gather statistic through the v2 statistics API. */
382*d9f75844SAndroid Build Coastguard Worker - (void)statisticsWithCompletionHandler:(RTCStatisticsCompletionHandler)completionHandler;
383*d9f75844SAndroid Build Coastguard Worker 
384*d9f75844SAndroid Build Coastguard Worker /** Spec-compliant getStats() performing the stats selection algorithm with the
385*d9f75844SAndroid Build Coastguard Worker  *  sender.
386*d9f75844SAndroid Build Coastguard Worker  */
387*d9f75844SAndroid Build Coastguard Worker - (void)statisticsForSender:(RTC_OBJC_TYPE(RTCRtpSender) *)sender
388*d9f75844SAndroid Build Coastguard Worker           completionHandler:(RTCStatisticsCompletionHandler)completionHandler;
389*d9f75844SAndroid Build Coastguard Worker 
390*d9f75844SAndroid Build Coastguard Worker /** Spec-compliant getStats() performing the stats selection algorithm with the
391*d9f75844SAndroid Build Coastguard Worker  *  receiver.
392*d9f75844SAndroid Build Coastguard Worker  */
393*d9f75844SAndroid Build Coastguard Worker - (void)statisticsForReceiver:(RTC_OBJC_TYPE(RTCRtpReceiver) *)receiver
394*d9f75844SAndroid Build Coastguard Worker             completionHandler:(RTCStatisticsCompletionHandler)completionHandler;
395*d9f75844SAndroid Build Coastguard Worker 
396*d9f75844SAndroid Build Coastguard Worker @end
397*d9f75844SAndroid Build Coastguard Worker 
398*d9f75844SAndroid Build Coastguard Worker NS_ASSUME_NONNULL_END
399