blob: 79e0625b2828c9e483299c7d0e04df637d5113fd [file] [log] [blame]
Anders Carlsson7bca8ca2018-08-30 09:30:29 +02001/*
2 * Copyright 2015 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11#import <Foundation/Foundation.h>
12
13#import "RTCMacros.h"
14
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020015@class RTC_OBJC_TYPE(RTCConfiguration);
16@class RTC_OBJC_TYPE(RTCDataChannel);
17@class RTC_OBJC_TYPE(RTCDataChannelConfiguration);
18@class RTC_OBJC_TYPE(RTCIceCandidate);
19@class RTC_OBJC_TYPE(RTCMediaConstraints);
20@class RTC_OBJC_TYPE(RTCMediaStream);
21@class RTC_OBJC_TYPE(RTCMediaStreamTrack);
22@class RTC_OBJC_TYPE(RTCPeerConnectionFactory);
23@class RTC_OBJC_TYPE(RTCRtpReceiver);
24@class RTC_OBJC_TYPE(RTCRtpSender);
25@class RTC_OBJC_TYPE(RTCRtpTransceiver);
26@class RTC_OBJC_TYPE(RTCRtpTransceiverInit);
27@class RTC_OBJC_TYPE(RTCSessionDescription);
Danilo Bargen87a6e5a2020-05-14 12:41:53 +000028@class RTC_OBJC_TYPE(RTCStatisticsReport);
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020029@class RTC_OBJC_TYPE(RTCLegacyStatsReport);
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020030
31typedef NS_ENUM(NSInteger, RTCRtpMediaType);
32
33NS_ASSUME_NONNULL_BEGIN
34
35extern NSString *const kRTCPeerConnectionErrorDomain;
36extern int const kRTCSessionDescriptionErrorCode;
37
38/** Represents the signaling state of the peer connection. */
39typedef NS_ENUM(NSInteger, RTCSignalingState) {
40 RTCSignalingStateStable,
41 RTCSignalingStateHaveLocalOffer,
42 RTCSignalingStateHaveLocalPrAnswer,
43 RTCSignalingStateHaveRemoteOffer,
44 RTCSignalingStateHaveRemotePrAnswer,
45 // Not an actual state, represents the total number of states.
46 RTCSignalingStateClosed,
47};
48
49/** Represents the ice connection state of the peer connection. */
50typedef NS_ENUM(NSInteger, RTCIceConnectionState) {
51 RTCIceConnectionStateNew,
52 RTCIceConnectionStateChecking,
53 RTCIceConnectionStateConnected,
54 RTCIceConnectionStateCompleted,
55 RTCIceConnectionStateFailed,
56 RTCIceConnectionStateDisconnected,
57 RTCIceConnectionStateClosed,
58 RTCIceConnectionStateCount,
59};
60
Jonas Olssoncfddbb72018-11-15 16:52:45 +010061/** Represents the combined ice+dtls connection state of the peer connection. */
62typedef NS_ENUM(NSInteger, RTCPeerConnectionState) {
63 RTCPeerConnectionStateNew,
64 RTCPeerConnectionStateConnecting,
65 RTCPeerConnectionStateConnected,
66 RTCPeerConnectionStateDisconnected,
67 RTCPeerConnectionStateFailed,
68 RTCPeerConnectionStateClosed,
69};
70
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020071/** Represents the ice gathering state of the peer connection. */
72typedef NS_ENUM(NSInteger, RTCIceGatheringState) {
73 RTCIceGatheringStateNew,
74 RTCIceGatheringStateGathering,
75 RTCIceGatheringStateComplete,
76};
77
78/** Represents the stats output level. */
79typedef NS_ENUM(NSInteger, RTCStatsOutputLevel) {
80 RTCStatsOutputLevelStandard,
81 RTCStatsOutputLevelDebug,
82};
83
Yura Yaroshevich8bfa2752021-03-10 13:07:27 +030084typedef void (^RTCCreateSessionDescriptionCompletionHandler)(RTC_OBJC_TYPE(RTCSessionDescription) *
85 _Nullable sdp,
86 NSError *_Nullable error);
87
88typedef void (^RTCSetSessionDescriptionCompletionHandler)(NSError *_Nullable error);
89
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020090@class RTC_OBJC_TYPE(RTCPeerConnection);
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020091
Mirko Bonadeie8d57242018-09-17 10:22:56 +020092RTC_OBJC_EXPORT
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020093@protocol RTC_OBJC_TYPE
94(RTCPeerConnectionDelegate)<NSObject>
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020095
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020096 /** Called when the SignalingState changed. */
97 - (void)peerConnection
98 : (RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection didChangeSignalingState
99 : (RTCSignalingState)stateChanged;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200100
101/** Called when media is received on a new stream from remote peer. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200102- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
103 didAddStream:(RTC_OBJC_TYPE(RTCMediaStream) *)stream;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200104
105/** Called when a remote peer closes a stream.
106 * This is not called when RTCSdpSemanticsUnifiedPlan is specified.
107 */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200108- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
109 didRemoveStream:(RTC_OBJC_TYPE(RTCMediaStream) *)stream;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200110
111/** Called when negotiation is needed, for example ICE has restarted. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200112- (void)peerConnectionShouldNegotiate:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200113
114/** Called any time the IceConnectionState changes. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200115- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200116 didChangeIceConnectionState:(RTCIceConnectionState)newState;
117
118/** Called any time the IceGatheringState changes. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200119- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200120 didChangeIceGatheringState:(RTCIceGatheringState)newState;
121
122/** New ice candidate has been found. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200123- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
124 didGenerateIceCandidate:(RTC_OBJC_TYPE(RTCIceCandidate) *)candidate;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200125
126/** Called when a group of local Ice candidates have been removed. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200127- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
128 didRemoveIceCandidates:(NSArray<RTC_OBJC_TYPE(RTCIceCandidate) *> *)candidates;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200129
130/** New data channel has been opened. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200131- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
132 didOpenDataChannel:(RTC_OBJC_TYPE(RTCDataChannel) *)dataChannel;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200133
134/** Called when signaling indicates a transceiver will be receiving media from
135 * the remote endpoint.
136 * This is only called with RTCSdpSemanticsUnifiedPlan specified.
137 */
138@optional
Qingsi Wang36e31472019-05-29 11:37:26 -0700139/** Called any time the IceConnectionState changes following standardized
140 * transition. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200141- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
Qingsi Wang36e31472019-05-29 11:37:26 -0700142 didChangeStandardizedIceConnectionState:(RTCIceConnectionState)newState;
143
Jonas Olssoncfddbb72018-11-15 16:52:45 +0100144/** Called any time the PeerConnectionState changes. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200145- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
Jonas Olssoncfddbb72018-11-15 16:52:45 +0100146 didChangeConnectionState:(RTCPeerConnectionState)newState;
147
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200148- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
149 didStartReceivingOnTransceiver:(RTC_OBJC_TYPE(RTCRtpTransceiver) *)transceiver;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200150
151/** Called when a receiver and its track are created. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200152- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
153 didAddReceiver:(RTC_OBJC_TYPE(RTCRtpReceiver) *)rtpReceiver
154 streams:(NSArray<RTC_OBJC_TYPE(RTCMediaStream) *> *)mediaStreams;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200155
156/** Called when the receiver and its track are removed. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200157- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
158 didRemoveReceiver:(RTC_OBJC_TYPE(RTCRtpReceiver) *)rtpReceiver;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200159
Alex Drake43faee02019-08-12 16:27:34 -0700160/** Called when the selected ICE candidate pair is changed. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200161- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
162 didChangeLocalCandidate:(RTC_OBJC_TYPE(RTCIceCandidate) *)local
163 remoteCandidate:(RTC_OBJC_TYPE(RTCIceCandidate) *)remote
Alex Drake43faee02019-08-12 16:27:34 -0700164 lastReceivedMs:(int)lastDataReceivedMs
165 changeReason:(NSString *)reason;
166
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200167@end
168
Mirko Bonadeie8d57242018-09-17 10:22:56 +0200169RTC_OBJC_EXPORT
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200170@interface RTC_OBJC_TYPE (RTCPeerConnection) : NSObject
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200171
172/** The object that will be notifed about events such as state changes and
173 * streams being added or removed.
174 */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200175@property(nonatomic, weak, nullable) id<RTC_OBJC_TYPE(RTCPeerConnectionDelegate)> delegate;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200176/** This property is not available with RTCSdpSemanticsUnifiedPlan. Please use
177 * |senders| instead.
178 */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200179@property(nonatomic, readonly) NSArray<RTC_OBJC_TYPE(RTCMediaStream) *> *localStreams;
180@property(nonatomic, readonly, nullable) RTC_OBJC_TYPE(RTCSessionDescription) * localDescription;
181@property(nonatomic, readonly, nullable) RTC_OBJC_TYPE(RTCSessionDescription) * remoteDescription;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200182@property(nonatomic, readonly) RTCSignalingState signalingState;
183@property(nonatomic, readonly) RTCIceConnectionState iceConnectionState;
Jonas Olssoncfddbb72018-11-15 16:52:45 +0100184@property(nonatomic, readonly) RTCPeerConnectionState connectionState;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200185@property(nonatomic, readonly) RTCIceGatheringState iceGatheringState;
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200186@property(nonatomic, readonly, copy) RTC_OBJC_TYPE(RTCConfiguration) * configuration;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200187
188/** Gets all RTCRtpSenders associated with this peer connection.
189 * Note: reading this property returns different instances of RTCRtpSender.
190 * Use isEqual: instead of == to compare RTCRtpSender instances.
191 */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200192@property(nonatomic, readonly) NSArray<RTC_OBJC_TYPE(RTCRtpSender) *> *senders;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200193
194/** Gets all RTCRtpReceivers associated with this peer connection.
195 * Note: reading this property returns different instances of RTCRtpReceiver.
196 * Use isEqual: instead of == to compare RTCRtpReceiver instances.
197 */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200198@property(nonatomic, readonly) NSArray<RTC_OBJC_TYPE(RTCRtpReceiver) *> *receivers;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200199
200/** Gets all RTCRtpTransceivers associated with this peer connection.
201 * Note: reading this property returns different instances of
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200202 * RTCRtpTransceiver. Use isEqual: instead of == to compare
203 * RTCRtpTransceiver instances. This is only available with
204 * RTCSdpSemanticsUnifiedPlan specified.
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200205 */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200206@property(nonatomic, readonly) NSArray<RTC_OBJC_TYPE(RTCRtpTransceiver) *> *transceivers;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200207
208- (instancetype)init NS_UNAVAILABLE;
209
210/** Sets the PeerConnection's global configuration to |configuration|.
211 * Any changes to STUN/TURN servers or ICE candidate policy will affect the
212 * next gathering phase, and cause the next call to createOffer to generate
213 * new ICE credentials. Note that the BUNDLE and RTCP-multiplexing policies
214 * cannot be changed with this method.
215 */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200216- (BOOL)setConfiguration:(RTC_OBJC_TYPE(RTCConfiguration) *)configuration;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200217
218/** Terminate all media and close the transport. */
219- (void)close;
220
221/** Provide a remote candidate to the ICE Agent. */
Yura Yaroshevich2d9f53c2021-03-10 13:03:00 +0300222- (void)addIceCandidate:(RTC_OBJC_TYPE(RTCIceCandidate) *)candidate
223 DEPRECATED_MSG_ATTRIBUTE("Please use addIceCandidate:completionHandler: instead");
224
225/** Provide a remote candidate to the ICE Agent. */
226- (void)addIceCandidate:(RTC_OBJC_TYPE(RTCIceCandidate) *)candidate
227 completionHandler:(void (^)(NSError *_Nullable error))completionHandler;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200228
229/** Remove a group of remote candidates from the ICE Agent. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200230- (void)removeIceCandidates:(NSArray<RTC_OBJC_TYPE(RTCIceCandidate) *> *)candidates;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200231
232/** Add a new media stream to be sent on this peer connection.
233 * This method is not supported with RTCSdpSemanticsUnifiedPlan. Please use
234 * addTrack instead.
235 */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200236- (void)addStream:(RTC_OBJC_TYPE(RTCMediaStream) *)stream;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200237
238/** Remove the given media stream from this peer connection.
239 * This method is not supported with RTCSdpSemanticsUnifiedPlan. Please use
240 * removeTrack instead.
241 */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200242- (void)removeStream:(RTC_OBJC_TYPE(RTCMediaStream) *)stream;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200243
244/** Add a new media stream track to be sent on this peer connection, and return
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200245 * the newly created RTCRtpSender. The RTCRtpSender will be
246 * associated with the streams specified in the |streamIds| list.
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200247 *
248 * Errors: If an error occurs, returns nil. An error can occur if:
249 * - A sender already exists for the track.
250 * - The peer connection is closed.
251 */
Yura Yaroshevichd140c8f2021-03-02 23:25:10 +0300252- (nullable RTC_OBJC_TYPE(RTCRtpSender) *)addTrack:(RTC_OBJC_TYPE(RTCMediaStreamTrack) *)track
253 streamIds:(NSArray<NSString *> *)streamIds;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200254
255/** With PlanB semantics, removes an RTCRtpSender from this peer connection.
256 *
257 * With UnifiedPlan semantics, sets sender's track to null and removes the
258 * send component from the associated RTCRtpTransceiver's direction.
259 *
260 * Returns YES on success.
261 */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200262- (BOOL)removeTrack:(RTC_OBJC_TYPE(RTCRtpSender) *)sender;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200263
264/** addTransceiver creates a new RTCRtpTransceiver and adds it to the set of
265 * transceivers. Adding a transceiver will cause future calls to CreateOffer
266 * to add a media description for the corresponding transceiver.
267 *
268 * The initial value of |mid| in the returned transceiver is nil. Setting a
269 * new session description may change it to a non-nil value.
270 *
271 * https://w3c.github.io/webrtc-pc/#dom-rtcpeerconnection-addtransceiver
272 *
273 * Optionally, an RtpTransceiverInit structure can be specified to configure
274 * the transceiver from construction. If not specified, the transceiver will
275 * default to having a direction of kSendRecv and not be part of any streams.
276 *
277 * These methods are only available when Unified Plan is enabled (see
278 * RTCConfiguration).
279 */
280
281/** Adds a transceiver with a sender set to transmit the given track. The kind
282 * of the transceiver (and sender/receiver) will be derived from the kind of
283 * the track.
284 */
Yura Yaroshevichd140c8f2021-03-02 23:25:10 +0300285- (nullable RTC_OBJC_TYPE(RTCRtpTransceiver) *)addTransceiverWithTrack:
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200286 (RTC_OBJC_TYPE(RTCMediaStreamTrack) *)track;
Yura Yaroshevichd140c8f2021-03-02 23:25:10 +0300287- (nullable RTC_OBJC_TYPE(RTCRtpTransceiver) *)
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200288 addTransceiverWithTrack:(RTC_OBJC_TYPE(RTCMediaStreamTrack) *)track
289 init:(RTC_OBJC_TYPE(RTCRtpTransceiverInit) *)init;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200290
291/** Adds a transceiver with the given kind. Can either be RTCRtpMediaTypeAudio
292 * or RTCRtpMediaTypeVideo.
293 */
Yura Yaroshevichd140c8f2021-03-02 23:25:10 +0300294- (nullable RTC_OBJC_TYPE(RTCRtpTransceiver) *)addTransceiverOfType:(RTCRtpMediaType)mediaType;
295- (nullable RTC_OBJC_TYPE(RTCRtpTransceiver) *)
296 addTransceiverOfType:(RTCRtpMediaType)mediaType
297 init:(RTC_OBJC_TYPE(RTCRtpTransceiverInit) *)init;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200298
Yura Yaroshevich92d12702021-03-06 23:55:17 +0300299/** Tells the PeerConnection that ICE should be restarted. This triggers a need
300 * for negotiation and subsequent offerForConstraints:completionHandler call will act as if
301 * RTCOfferAnswerOptions::ice_restart is true.
302 */
303- (void)restartIce;
304
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200305/** Generate an SDP offer. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200306- (void)offerForConstraints:(RTC_OBJC_TYPE(RTCMediaConstraints) *)constraints
Yura Yaroshevich8bfa2752021-03-10 13:07:27 +0300307 completionHandler:(RTCCreateSessionDescriptionCompletionHandler)completionHandler;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200308
309/** Generate an SDP answer. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200310- (void)answerForConstraints:(RTC_OBJC_TYPE(RTCMediaConstraints) *)constraints
Yura Yaroshevich8bfa2752021-03-10 13:07:27 +0300311 completionHandler:(RTCCreateSessionDescriptionCompletionHandler)completionHandler;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200312
313/** Apply the supplied RTCSessionDescription as the local description. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200314- (void)setLocalDescription:(RTC_OBJC_TYPE(RTCSessionDescription) *)sdp
Yura Yaroshevich8bfa2752021-03-10 13:07:27 +0300315 completionHandler:(RTCSetSessionDescriptionCompletionHandler)completionHandler;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200316
Yura Yaroshevichd6725352021-03-05 18:21:16 +0300317/** Creates an offer or answer (depending on current signaling state) and sets
318 * it as the local session description. */
319- (void)setLocalDescriptionWithCompletionHandler:
Yura Yaroshevich8bfa2752021-03-10 13:07:27 +0300320 (RTCSetSessionDescriptionCompletionHandler)completionHandler;
Yura Yaroshevichd6725352021-03-05 18:21:16 +0300321
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200322/** Apply the supplied RTCSessionDescription as the remote description. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200323- (void)setRemoteDescription:(RTC_OBJC_TYPE(RTCSessionDescription) *)sdp
Yura Yaroshevich8bfa2752021-03-10 13:07:27 +0300324 completionHandler:(RTCSetSessionDescriptionCompletionHandler)completionHandler;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200325
326/** Limits the bandwidth allocated for all RTP streams sent by this
327 * PeerConnection. Nil parameters will be unchanged. Setting
328 * |currentBitrateBps| will force the available bitrate estimate to the given
329 * value. Returns YES if the parameters were successfully updated.
330 */
331- (BOOL)setBweMinBitrateBps:(nullable NSNumber *)minBitrateBps
332 currentBitrateBps:(nullable NSNumber *)currentBitrateBps
333 maxBitrateBps:(nullable NSNumber *)maxBitrateBps;
334
335/** Start or stop recording an Rtc EventLog. */
336- (BOOL)startRtcEventLogWithFilePath:(NSString *)filePath maxSizeInBytes:(int64_t)maxSizeInBytes;
337- (void)stopRtcEventLog;
338
339@end
340
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200341@interface RTC_OBJC_TYPE (RTCPeerConnection)
342(Media)
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200343
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200344 /** Create an RTCRtpSender with the specified kind and media stream ID.
345 * See RTCMediaStreamTrack.h for available kinds.
346 * This method is not supported with RTCSdpSemanticsUnifiedPlan. Please use
347 * addTransceiver instead.
348 */
349 - (RTC_OBJC_TYPE(RTCRtpSender) *)senderWithKind : (NSString *)kind streamId
350 : (NSString *)streamId;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200351
352@end
353
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200354@interface RTC_OBJC_TYPE (RTCPeerConnection)
355(DataChannel)
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200356
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200357 /** Create a new data channel with the given label and configuration. */
358 - (nullable RTC_OBJC_TYPE(RTCDataChannel) *)dataChannelForLabel
359 : (NSString *)label configuration : (RTC_OBJC_TYPE(RTCDataChannelConfiguration) *)configuration;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200360
361@end
362
Danilo Bargen87a6e5a2020-05-14 12:41:53 +0000363typedef void (^RTCStatisticsCompletionHandler)(RTC_OBJC_TYPE(RTCStatisticsReport) *);
Peter Hanspersbed86042019-02-21 17:27:09 +0100364
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200365@interface RTC_OBJC_TYPE (RTCPeerConnection)
366(Stats)
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200367
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200368 /** Gather stats for the given RTCMediaStreamTrack. If |mediaStreamTrack| is nil
369 * statistics are gathered for all tracks.
370 */
371 - (void)statsForTrack
372 : (nullable RTC_OBJC_TYPE(RTCMediaStreamTrack) *)mediaStreamTrack statsOutputLevel
373 : (RTCStatsOutputLevel)statsOutputLevel completionHandler
374 : (nullable void (^)(NSArray<RTC_OBJC_TYPE(RTCLegacyStatsReport) *> *stats))completionHandler;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200375
Peter Hanspersbed86042019-02-21 17:27:09 +0100376/** Gather statistic through the v2 statistics API. */
377- (void)statisticsWithCompletionHandler:(RTCStatisticsCompletionHandler)completionHandler;
378
Peter Hansperse12a1c72019-02-26 16:39:48 +0100379/** Spec-compliant getStats() performing the stats selection algorithm with the
380 * sender.
381 */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200382- (void)statisticsForSender:(RTC_OBJC_TYPE(RTCRtpSender) *)sender
Peter Hansperse12a1c72019-02-26 16:39:48 +0100383 completionHandler:(RTCStatisticsCompletionHandler)completionHandler;
384
385/** Spec-compliant getStats() performing the stats selection algorithm with the
386 * receiver.
387 */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200388- (void)statisticsForReceiver:(RTC_OBJC_TYPE(RTCRtpReceiver) *)receiver
Peter Hansperse12a1c72019-02-26 16:39:48 +0100389 completionHandler:(RTCStatisticsCompletionHandler)completionHandler;
390
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200391@end
392
393NS_ASSUME_NONNULL_END