blob: d0cd99ce74ec59268e2b6fca9eb561a9ad181826 [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. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200222- (void)addIceCandidate:(RTC_OBJC_TYPE(RTCIceCandidate) *)candidate;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200223
224/** Remove a group of remote candidates from the ICE Agent. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200225- (void)removeIceCandidates:(NSArray<RTC_OBJC_TYPE(RTCIceCandidate) *> *)candidates;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200226
227/** Add a new media stream to be sent on this peer connection.
228 * This method is not supported with RTCSdpSemanticsUnifiedPlan. Please use
229 * addTrack instead.
230 */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200231- (void)addStream:(RTC_OBJC_TYPE(RTCMediaStream) *)stream;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200232
233/** Remove the given media stream from this peer connection.
234 * This method is not supported with RTCSdpSemanticsUnifiedPlan. Please use
235 * removeTrack instead.
236 */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200237- (void)removeStream:(RTC_OBJC_TYPE(RTCMediaStream) *)stream;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200238
239/** Add a new media stream track to be sent on this peer connection, and return
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200240 * the newly created RTCRtpSender. The RTCRtpSender will be
241 * associated with the streams specified in the |streamIds| list.
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200242 *
243 * Errors: If an error occurs, returns nil. An error can occur if:
244 * - A sender already exists for the track.
245 * - The peer connection is closed.
246 */
Yura Yaroshevichd140c8f2021-03-02 23:25:10 +0300247- (nullable RTC_OBJC_TYPE(RTCRtpSender) *)addTrack:(RTC_OBJC_TYPE(RTCMediaStreamTrack) *)track
248 streamIds:(NSArray<NSString *> *)streamIds;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200249
250/** With PlanB semantics, removes an RTCRtpSender from this peer connection.
251 *
252 * With UnifiedPlan semantics, sets sender's track to null and removes the
253 * send component from the associated RTCRtpTransceiver's direction.
254 *
255 * Returns YES on success.
256 */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200257- (BOOL)removeTrack:(RTC_OBJC_TYPE(RTCRtpSender) *)sender;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200258
259/** addTransceiver creates a new RTCRtpTransceiver and adds it to the set of
260 * transceivers. Adding a transceiver will cause future calls to CreateOffer
261 * to add a media description for the corresponding transceiver.
262 *
263 * The initial value of |mid| in the returned transceiver is nil. Setting a
264 * new session description may change it to a non-nil value.
265 *
266 * https://w3c.github.io/webrtc-pc/#dom-rtcpeerconnection-addtransceiver
267 *
268 * Optionally, an RtpTransceiverInit structure can be specified to configure
269 * the transceiver from construction. If not specified, the transceiver will
270 * default to having a direction of kSendRecv and not be part of any streams.
271 *
272 * These methods are only available when Unified Plan is enabled (see
273 * RTCConfiguration).
274 */
275
276/** Adds a transceiver with a sender set to transmit the given track. The kind
277 * of the transceiver (and sender/receiver) will be derived from the kind of
278 * the track.
279 */
Yura Yaroshevichd140c8f2021-03-02 23:25:10 +0300280- (nullable RTC_OBJC_TYPE(RTCRtpTransceiver) *)addTransceiverWithTrack:
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200281 (RTC_OBJC_TYPE(RTCMediaStreamTrack) *)track;
Yura Yaroshevichd140c8f2021-03-02 23:25:10 +0300282- (nullable RTC_OBJC_TYPE(RTCRtpTransceiver) *)
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200283 addTransceiverWithTrack:(RTC_OBJC_TYPE(RTCMediaStreamTrack) *)track
284 init:(RTC_OBJC_TYPE(RTCRtpTransceiverInit) *)init;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200285
286/** Adds a transceiver with the given kind. Can either be RTCRtpMediaTypeAudio
287 * or RTCRtpMediaTypeVideo.
288 */
Yura Yaroshevichd140c8f2021-03-02 23:25:10 +0300289- (nullable RTC_OBJC_TYPE(RTCRtpTransceiver) *)addTransceiverOfType:(RTCRtpMediaType)mediaType;
290- (nullable RTC_OBJC_TYPE(RTCRtpTransceiver) *)
291 addTransceiverOfType:(RTCRtpMediaType)mediaType
292 init:(RTC_OBJC_TYPE(RTCRtpTransceiverInit) *)init;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200293
Yura Yaroshevich92d12702021-03-06 23:55:17 +0300294/** Tells the PeerConnection that ICE should be restarted. This triggers a need
295 * for negotiation and subsequent offerForConstraints:completionHandler call will act as if
296 * RTCOfferAnswerOptions::ice_restart is true.
297 */
298- (void)restartIce;
299
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200300/** Generate an SDP offer. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200301- (void)offerForConstraints:(RTC_OBJC_TYPE(RTCMediaConstraints) *)constraints
Yura Yaroshevich8bfa2752021-03-10 13:07:27 +0300302 completionHandler:(RTCCreateSessionDescriptionCompletionHandler)completionHandler;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200303
304/** Generate an SDP answer. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200305- (void)answerForConstraints:(RTC_OBJC_TYPE(RTCMediaConstraints) *)constraints
Yura Yaroshevich8bfa2752021-03-10 13:07:27 +0300306 completionHandler:(RTCCreateSessionDescriptionCompletionHandler)completionHandler;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200307
308/** Apply the supplied RTCSessionDescription as the local description. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200309- (void)setLocalDescription:(RTC_OBJC_TYPE(RTCSessionDescription) *)sdp
Yura Yaroshevich8bfa2752021-03-10 13:07:27 +0300310 completionHandler:(RTCSetSessionDescriptionCompletionHandler)completionHandler;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200311
Yura Yaroshevichd6725352021-03-05 18:21:16 +0300312/** Creates an offer or answer (depending on current signaling state) and sets
313 * it as the local session description. */
314- (void)setLocalDescriptionWithCompletionHandler:
Yura Yaroshevich8bfa2752021-03-10 13:07:27 +0300315 (RTCSetSessionDescriptionCompletionHandler)completionHandler;
Yura Yaroshevichd6725352021-03-05 18:21:16 +0300316
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200317/** Apply the supplied RTCSessionDescription as the remote description. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200318- (void)setRemoteDescription:(RTC_OBJC_TYPE(RTCSessionDescription) *)sdp
Yura Yaroshevich8bfa2752021-03-10 13:07:27 +0300319 completionHandler:(RTCSetSessionDescriptionCompletionHandler)completionHandler;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200320
321/** Limits the bandwidth allocated for all RTP streams sent by this
322 * PeerConnection. Nil parameters will be unchanged. Setting
323 * |currentBitrateBps| will force the available bitrate estimate to the given
324 * value. Returns YES if the parameters were successfully updated.
325 */
326- (BOOL)setBweMinBitrateBps:(nullable NSNumber *)minBitrateBps
327 currentBitrateBps:(nullable NSNumber *)currentBitrateBps
328 maxBitrateBps:(nullable NSNumber *)maxBitrateBps;
329
330/** Start or stop recording an Rtc EventLog. */
331- (BOOL)startRtcEventLogWithFilePath:(NSString *)filePath maxSizeInBytes:(int64_t)maxSizeInBytes;
332- (void)stopRtcEventLog;
333
334@end
335
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200336@interface RTC_OBJC_TYPE (RTCPeerConnection)
337(Media)
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200338
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200339 /** Create an RTCRtpSender with the specified kind and media stream ID.
340 * See RTCMediaStreamTrack.h for available kinds.
341 * This method is not supported with RTCSdpSemanticsUnifiedPlan. Please use
342 * addTransceiver instead.
343 */
344 - (RTC_OBJC_TYPE(RTCRtpSender) *)senderWithKind : (NSString *)kind streamId
345 : (NSString *)streamId;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200346
347@end
348
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200349@interface RTC_OBJC_TYPE (RTCPeerConnection)
350(DataChannel)
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200351
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200352 /** Create a new data channel with the given label and configuration. */
353 - (nullable RTC_OBJC_TYPE(RTCDataChannel) *)dataChannelForLabel
354 : (NSString *)label configuration : (RTC_OBJC_TYPE(RTCDataChannelConfiguration) *)configuration;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200355
356@end
357
Danilo Bargen87a6e5a2020-05-14 12:41:53 +0000358typedef void (^RTCStatisticsCompletionHandler)(RTC_OBJC_TYPE(RTCStatisticsReport) *);
Peter Hanspersbed86042019-02-21 17:27:09 +0100359
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200360@interface RTC_OBJC_TYPE (RTCPeerConnection)
361(Stats)
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200362
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200363 /** Gather stats for the given RTCMediaStreamTrack. If |mediaStreamTrack| is nil
364 * statistics are gathered for all tracks.
365 */
366 - (void)statsForTrack
367 : (nullable RTC_OBJC_TYPE(RTCMediaStreamTrack) *)mediaStreamTrack statsOutputLevel
368 : (RTCStatsOutputLevel)statsOutputLevel completionHandler
369 : (nullable void (^)(NSArray<RTC_OBJC_TYPE(RTCLegacyStatsReport) *> *stats))completionHandler;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200370
Peter Hanspersbed86042019-02-21 17:27:09 +0100371/** Gather statistic through the v2 statistics API. */
372- (void)statisticsWithCompletionHandler:(RTCStatisticsCompletionHandler)completionHandler;
373
Peter Hansperse12a1c72019-02-26 16:39:48 +0100374/** Spec-compliant getStats() performing the stats selection algorithm with the
375 * sender.
376 */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200377- (void)statisticsForSender:(RTC_OBJC_TYPE(RTCRtpSender) *)sender
Peter Hansperse12a1c72019-02-26 16:39:48 +0100378 completionHandler:(RTCStatisticsCompletionHandler)completionHandler;
379
380/** Spec-compliant getStats() performing the stats selection algorithm with the
381 * receiver.
382 */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200383- (void)statisticsForReceiver:(RTC_OBJC_TYPE(RTCRtpReceiver) *)receiver
Peter Hansperse12a1c72019-02-26 16:39:48 +0100384 completionHandler:(RTCStatisticsCompletionHandler)completionHandler;
385
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200386@end
387
388NS_ASSUME_NONNULL_END