blob: 55af6868fd55406a7e9d0e152938ef4a9909f59b [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);
Jaehyun Kod2110982021-11-30 19:01:43 +090019@class RTC_OBJC_TYPE(RTCIceCandidateErrorEvent);
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020020@class RTC_OBJC_TYPE(RTCMediaConstraints);
21@class RTC_OBJC_TYPE(RTCMediaStream);
22@class RTC_OBJC_TYPE(RTCMediaStreamTrack);
23@class RTC_OBJC_TYPE(RTCPeerConnectionFactory);
24@class RTC_OBJC_TYPE(RTCRtpReceiver);
25@class RTC_OBJC_TYPE(RTCRtpSender);
26@class RTC_OBJC_TYPE(RTCRtpTransceiver);
27@class RTC_OBJC_TYPE(RTCRtpTransceiverInit);
28@class RTC_OBJC_TYPE(RTCSessionDescription);
Danilo Bargen87a6e5a2020-05-14 12:41:53 +000029@class RTC_OBJC_TYPE(RTCStatisticsReport);
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020030@class RTC_OBJC_TYPE(RTCLegacyStatsReport);
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020031
32typedef NS_ENUM(NSInteger, RTCRtpMediaType);
33
34NS_ASSUME_NONNULL_BEGIN
35
36extern NSString *const kRTCPeerConnectionErrorDomain;
37extern int const kRTCSessionDescriptionErrorCode;
38
39/** Represents the signaling state of the peer connection. */
40typedef NS_ENUM(NSInteger, RTCSignalingState) {
41 RTCSignalingStateStable,
42 RTCSignalingStateHaveLocalOffer,
43 RTCSignalingStateHaveLocalPrAnswer,
44 RTCSignalingStateHaveRemoteOffer,
45 RTCSignalingStateHaveRemotePrAnswer,
46 // Not an actual state, represents the total number of states.
47 RTCSignalingStateClosed,
48};
49
50/** Represents the ice connection state of the peer connection. */
51typedef NS_ENUM(NSInteger, RTCIceConnectionState) {
52 RTCIceConnectionStateNew,
53 RTCIceConnectionStateChecking,
54 RTCIceConnectionStateConnected,
55 RTCIceConnectionStateCompleted,
56 RTCIceConnectionStateFailed,
57 RTCIceConnectionStateDisconnected,
58 RTCIceConnectionStateClosed,
59 RTCIceConnectionStateCount,
60};
61
Jonas Olssoncfddbb72018-11-15 16:52:45 +010062/** Represents the combined ice+dtls connection state of the peer connection. */
63typedef NS_ENUM(NSInteger, RTCPeerConnectionState) {
64 RTCPeerConnectionStateNew,
65 RTCPeerConnectionStateConnecting,
66 RTCPeerConnectionStateConnected,
67 RTCPeerConnectionStateDisconnected,
68 RTCPeerConnectionStateFailed,
69 RTCPeerConnectionStateClosed,
70};
71
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020072/** Represents the ice gathering state of the peer connection. */
73typedef NS_ENUM(NSInteger, RTCIceGatheringState) {
74 RTCIceGatheringStateNew,
75 RTCIceGatheringStateGathering,
76 RTCIceGatheringStateComplete,
77};
78
79/** Represents the stats output level. */
80typedef NS_ENUM(NSInteger, RTCStatsOutputLevel) {
81 RTCStatsOutputLevelStandard,
82 RTCStatsOutputLevelDebug,
83};
84
Yura Yaroshevich8bfa2752021-03-10 13:07:27 +030085typedef void (^RTCCreateSessionDescriptionCompletionHandler)(RTC_OBJC_TYPE(RTCSessionDescription) *
86 _Nullable sdp,
87 NSError *_Nullable error);
88
89typedef void (^RTCSetSessionDescriptionCompletionHandler)(NSError *_Nullable error);
90
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020091@class RTC_OBJC_TYPE(RTCPeerConnection);
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020092
Mirko Bonadeie8d57242018-09-17 10:22:56 +020093RTC_OBJC_EXPORT
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020094@protocol RTC_OBJC_TYPE
95(RTCPeerConnectionDelegate)<NSObject>
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020096
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020097 /** Called when the SignalingState changed. */
98 - (void)peerConnection
99 : (RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection didChangeSignalingState
100 : (RTCSignalingState)stateChanged;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200101
102/** Called when media is received on a new stream from remote peer. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200103- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
104 didAddStream:(RTC_OBJC_TYPE(RTCMediaStream) *)stream;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200105
106/** Called when a remote peer closes a stream.
107 * This is not called when RTCSdpSemanticsUnifiedPlan is specified.
108 */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200109- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
110 didRemoveStream:(RTC_OBJC_TYPE(RTCMediaStream) *)stream;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200111
112/** Called when negotiation is needed, for example ICE has restarted. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200113- (void)peerConnectionShouldNegotiate:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200114
115/** Called any time the IceConnectionState changes. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200116- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200117 didChangeIceConnectionState:(RTCIceConnectionState)newState;
118
119/** Called any time the IceGatheringState changes. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200120- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200121 didChangeIceGatheringState:(RTCIceGatheringState)newState;
122
123/** New ice candidate has been found. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200124- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
125 didGenerateIceCandidate:(RTC_OBJC_TYPE(RTCIceCandidate) *)candidate;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200126
127/** Called when a group of local Ice candidates have been removed. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200128- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
129 didRemoveIceCandidates:(NSArray<RTC_OBJC_TYPE(RTCIceCandidate) *> *)candidates;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200130
131/** New data channel has been opened. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200132- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
133 didOpenDataChannel:(RTC_OBJC_TYPE(RTCDataChannel) *)dataChannel;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200134
135/** Called when signaling indicates a transceiver will be receiving media from
136 * the remote endpoint.
137 * This is only called with RTCSdpSemanticsUnifiedPlan specified.
138 */
139@optional
Qingsi Wang36e31472019-05-29 11:37:26 -0700140/** Called any time the IceConnectionState changes following standardized
141 * transition. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200142- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
Qingsi Wang36e31472019-05-29 11:37:26 -0700143 didChangeStandardizedIceConnectionState:(RTCIceConnectionState)newState;
144
Jonas Olssoncfddbb72018-11-15 16:52:45 +0100145/** Called any time the PeerConnectionState changes. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200146- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
Jonas Olssoncfddbb72018-11-15 16:52:45 +0100147 didChangeConnectionState:(RTCPeerConnectionState)newState;
148
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200149- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
150 didStartReceivingOnTransceiver:(RTC_OBJC_TYPE(RTCRtpTransceiver) *)transceiver;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200151
152/** Called when a receiver and its track are created. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200153- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
154 didAddReceiver:(RTC_OBJC_TYPE(RTCRtpReceiver) *)rtpReceiver
155 streams:(NSArray<RTC_OBJC_TYPE(RTCMediaStream) *> *)mediaStreams;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200156
157/** Called when the receiver and its track are removed. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200158- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
159 didRemoveReceiver:(RTC_OBJC_TYPE(RTCRtpReceiver) *)rtpReceiver;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200160
Alex Drake43faee02019-08-12 16:27:34 -0700161/** Called when the selected ICE candidate pair is changed. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200162- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
163 didChangeLocalCandidate:(RTC_OBJC_TYPE(RTCIceCandidate) *)local
164 remoteCandidate:(RTC_OBJC_TYPE(RTCIceCandidate) *)remote
Alex Drake43faee02019-08-12 16:27:34 -0700165 lastReceivedMs:(int)lastDataReceivedMs
166 changeReason:(NSString *)reason;
167
Jaehyun Kod2110982021-11-30 19:01:43 +0900168/** Called when gathering of an ICE candidate failed. */
169- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
170 didFailToGatherIceCandidate:(RTC_OBJC_TYPE(RTCIceCandidateErrorEvent) *)event;
171
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200172@end
173
Mirko Bonadeie8d57242018-09-17 10:22:56 +0200174RTC_OBJC_EXPORT
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200175@interface RTC_OBJC_TYPE (RTCPeerConnection) : NSObject
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200176
177/** The object that will be notifed about events such as state changes and
178 * streams being added or removed.
179 */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200180@property(nonatomic, weak, nullable) id<RTC_OBJC_TYPE(RTCPeerConnectionDelegate)> delegate;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200181/** This property is not available with RTCSdpSemanticsUnifiedPlan. Please use
Artem Titovd7ac5812021-07-27 12:23:39 +0200182 * `senders` instead.
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200183 */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200184@property(nonatomic, readonly) NSArray<RTC_OBJC_TYPE(RTCMediaStream) *> *localStreams;
185@property(nonatomic, readonly, nullable) RTC_OBJC_TYPE(RTCSessionDescription) * localDescription;
186@property(nonatomic, readonly, nullable) RTC_OBJC_TYPE(RTCSessionDescription) * remoteDescription;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200187@property(nonatomic, readonly) RTCSignalingState signalingState;
188@property(nonatomic, readonly) RTCIceConnectionState iceConnectionState;
Jonas Olssoncfddbb72018-11-15 16:52:45 +0100189@property(nonatomic, readonly) RTCPeerConnectionState connectionState;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200190@property(nonatomic, readonly) RTCIceGatheringState iceGatheringState;
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200191@property(nonatomic, readonly, copy) RTC_OBJC_TYPE(RTCConfiguration) * configuration;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200192
193/** Gets all RTCRtpSenders associated with this peer connection.
194 * Note: reading this property returns different instances of RTCRtpSender.
195 * Use isEqual: instead of == to compare RTCRtpSender instances.
196 */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200197@property(nonatomic, readonly) NSArray<RTC_OBJC_TYPE(RTCRtpSender) *> *senders;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200198
199/** Gets all RTCRtpReceivers associated with this peer connection.
200 * Note: reading this property returns different instances of RTCRtpReceiver.
201 * Use isEqual: instead of == to compare RTCRtpReceiver instances.
202 */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200203@property(nonatomic, readonly) NSArray<RTC_OBJC_TYPE(RTCRtpReceiver) *> *receivers;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200204
205/** Gets all RTCRtpTransceivers associated with this peer connection.
206 * Note: reading this property returns different instances of
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200207 * RTCRtpTransceiver. Use isEqual: instead of == to compare
208 * RTCRtpTransceiver instances. This is only available with
209 * RTCSdpSemanticsUnifiedPlan specified.
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200210 */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200211@property(nonatomic, readonly) NSArray<RTC_OBJC_TYPE(RTCRtpTransceiver) *> *transceivers;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200212
213- (instancetype)init NS_UNAVAILABLE;
214
Artem Titovd7ac5812021-07-27 12:23:39 +0200215/** Sets the PeerConnection's global configuration to `configuration`.
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200216 * Any changes to STUN/TURN servers or ICE candidate policy will affect the
217 * next gathering phase, and cause the next call to createOffer to generate
218 * new ICE credentials. Note that the BUNDLE and RTCP-multiplexing policies
219 * cannot be changed with this method.
220 */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200221- (BOOL)setConfiguration:(RTC_OBJC_TYPE(RTCConfiguration) *)configuration;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200222
223/** Terminate all media and close the transport. */
224- (void)close;
225
226/** Provide a remote candidate to the ICE Agent. */
Yura Yaroshevich2d9f53c2021-03-10 13:03:00 +0300227- (void)addIceCandidate:(RTC_OBJC_TYPE(RTCIceCandidate) *)candidate
228 DEPRECATED_MSG_ATTRIBUTE("Please use addIceCandidate:completionHandler: instead");
229
230/** Provide a remote candidate to the ICE Agent. */
231- (void)addIceCandidate:(RTC_OBJC_TYPE(RTCIceCandidate) *)candidate
232 completionHandler:(void (^)(NSError *_Nullable error))completionHandler;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200233
234/** Remove a group of remote candidates from the ICE Agent. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200235- (void)removeIceCandidates:(NSArray<RTC_OBJC_TYPE(RTCIceCandidate) *> *)candidates;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200236
237/** Add a new media stream to be sent on this peer connection.
238 * This method is not supported with RTCSdpSemanticsUnifiedPlan. Please use
239 * addTrack instead.
240 */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200241- (void)addStream:(RTC_OBJC_TYPE(RTCMediaStream) *)stream;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200242
243/** Remove the given media stream from this peer connection.
244 * This method is not supported with RTCSdpSemanticsUnifiedPlan. Please use
245 * removeTrack instead.
246 */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200247- (void)removeStream:(RTC_OBJC_TYPE(RTCMediaStream) *)stream;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200248
249/** Add a new media stream track to be sent on this peer connection, and return
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200250 * the newly created RTCRtpSender. The RTCRtpSender will be
Artem Titovd7ac5812021-07-27 12:23:39 +0200251 * associated with the streams specified in the `streamIds` list.
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200252 *
253 * Errors: If an error occurs, returns nil. An error can occur if:
254 * - A sender already exists for the track.
255 * - The peer connection is closed.
256 */
Yura Yaroshevichd140c8f2021-03-02 23:25:10 +0300257- (nullable RTC_OBJC_TYPE(RTCRtpSender) *)addTrack:(RTC_OBJC_TYPE(RTCMediaStreamTrack) *)track
258 streamIds:(NSArray<NSString *> *)streamIds;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200259
260/** With PlanB semantics, removes an RTCRtpSender from this peer connection.
261 *
262 * With UnifiedPlan semantics, sets sender's track to null and removes the
263 * send component from the associated RTCRtpTransceiver's direction.
264 *
265 * Returns YES on success.
266 */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200267- (BOOL)removeTrack:(RTC_OBJC_TYPE(RTCRtpSender) *)sender;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200268
269/** addTransceiver creates a new RTCRtpTransceiver and adds it to the set of
270 * transceivers. Adding a transceiver will cause future calls to CreateOffer
271 * to add a media description for the corresponding transceiver.
272 *
Artem Titovd7ac5812021-07-27 12:23:39 +0200273 * The initial value of `mid` in the returned transceiver is nil. Setting a
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200274 * new session description may change it to a non-nil value.
275 *
276 * https://w3c.github.io/webrtc-pc/#dom-rtcpeerconnection-addtransceiver
277 *
278 * Optionally, an RtpTransceiverInit structure can be specified to configure
279 * the transceiver from construction. If not specified, the transceiver will
280 * default to having a direction of kSendRecv and not be part of any streams.
281 *
282 * These methods are only available when Unified Plan is enabled (see
283 * RTCConfiguration).
284 */
285
286/** Adds a transceiver with a sender set to transmit the given track. The kind
287 * of the transceiver (and sender/receiver) will be derived from the kind of
288 * the track.
289 */
Yura Yaroshevichd140c8f2021-03-02 23:25:10 +0300290- (nullable RTC_OBJC_TYPE(RTCRtpTransceiver) *)addTransceiverWithTrack:
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200291 (RTC_OBJC_TYPE(RTCMediaStreamTrack) *)track;
Yura Yaroshevichd140c8f2021-03-02 23:25:10 +0300292- (nullable RTC_OBJC_TYPE(RTCRtpTransceiver) *)
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200293 addTransceiverWithTrack:(RTC_OBJC_TYPE(RTCMediaStreamTrack) *)track
294 init:(RTC_OBJC_TYPE(RTCRtpTransceiverInit) *)init;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200295
296/** Adds a transceiver with the given kind. Can either be RTCRtpMediaTypeAudio
297 * or RTCRtpMediaTypeVideo.
298 */
Yura Yaroshevichd140c8f2021-03-02 23:25:10 +0300299- (nullable RTC_OBJC_TYPE(RTCRtpTransceiver) *)addTransceiverOfType:(RTCRtpMediaType)mediaType;
300- (nullable RTC_OBJC_TYPE(RTCRtpTransceiver) *)
301 addTransceiverOfType:(RTCRtpMediaType)mediaType
302 init:(RTC_OBJC_TYPE(RTCRtpTransceiverInit) *)init;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200303
Yura Yaroshevich92d12702021-03-06 23:55:17 +0300304/** Tells the PeerConnection that ICE should be restarted. This triggers a need
305 * for negotiation and subsequent offerForConstraints:completionHandler call will act as if
306 * RTCOfferAnswerOptions::ice_restart is true.
307 */
308- (void)restartIce;
309
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200310/** Generate an SDP offer. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200311- (void)offerForConstraints:(RTC_OBJC_TYPE(RTCMediaConstraints) *)constraints
Yura Yaroshevich8bfa2752021-03-10 13:07:27 +0300312 completionHandler:(RTCCreateSessionDescriptionCompletionHandler)completionHandler;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200313
314/** Generate an SDP answer. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200315- (void)answerForConstraints:(RTC_OBJC_TYPE(RTCMediaConstraints) *)constraints
Yura Yaroshevich8bfa2752021-03-10 13:07:27 +0300316 completionHandler:(RTCCreateSessionDescriptionCompletionHandler)completionHandler;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200317
318/** Apply the supplied RTCSessionDescription as the local description. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200319- (void)setLocalDescription:(RTC_OBJC_TYPE(RTCSessionDescription) *)sdp
Yura Yaroshevich8bfa2752021-03-10 13:07:27 +0300320 completionHandler:(RTCSetSessionDescriptionCompletionHandler)completionHandler;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200321
Yura Yaroshevichd6725352021-03-05 18:21:16 +0300322/** Creates an offer or answer (depending on current signaling state) and sets
323 * it as the local session description. */
324- (void)setLocalDescriptionWithCompletionHandler:
Yura Yaroshevich8bfa2752021-03-10 13:07:27 +0300325 (RTCSetSessionDescriptionCompletionHandler)completionHandler;
Yura Yaroshevichd6725352021-03-05 18:21:16 +0300326
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200327/** Apply the supplied RTCSessionDescription as the remote description. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200328- (void)setRemoteDescription:(RTC_OBJC_TYPE(RTCSessionDescription) *)sdp
Yura Yaroshevich8bfa2752021-03-10 13:07:27 +0300329 completionHandler:(RTCSetSessionDescriptionCompletionHandler)completionHandler;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200330
331/** Limits the bandwidth allocated for all RTP streams sent by this
332 * PeerConnection. Nil parameters will be unchanged. Setting
Artem Titovd7ac5812021-07-27 12:23:39 +0200333 * `currentBitrateBps` will force the available bitrate estimate to the given
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200334 * value. Returns YES if the parameters were successfully updated.
335 */
336- (BOOL)setBweMinBitrateBps:(nullable NSNumber *)minBitrateBps
337 currentBitrateBps:(nullable NSNumber *)currentBitrateBps
338 maxBitrateBps:(nullable NSNumber *)maxBitrateBps;
339
340/** Start or stop recording an Rtc EventLog. */
341- (BOOL)startRtcEventLogWithFilePath:(NSString *)filePath maxSizeInBytes:(int64_t)maxSizeInBytes;
342- (void)stopRtcEventLog;
343
344@end
345
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200346@interface RTC_OBJC_TYPE (RTCPeerConnection)
347(Media)
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200348
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200349 /** Create an RTCRtpSender with the specified kind and media stream ID.
350 * See RTCMediaStreamTrack.h for available kinds.
351 * This method is not supported with RTCSdpSemanticsUnifiedPlan. Please use
352 * addTransceiver instead.
353 */
354 - (RTC_OBJC_TYPE(RTCRtpSender) *)senderWithKind : (NSString *)kind streamId
355 : (NSString *)streamId;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200356
357@end
358
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200359@interface RTC_OBJC_TYPE (RTCPeerConnection)
360(DataChannel)
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200361
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200362 /** Create a new data channel with the given label and configuration. */
363 - (nullable RTC_OBJC_TYPE(RTCDataChannel) *)dataChannelForLabel
364 : (NSString *)label configuration : (RTC_OBJC_TYPE(RTCDataChannelConfiguration) *)configuration;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200365
366@end
367
Danilo Bargen87a6e5a2020-05-14 12:41:53 +0000368typedef void (^RTCStatisticsCompletionHandler)(RTC_OBJC_TYPE(RTCStatisticsReport) *);
Peter Hanspersbed86042019-02-21 17:27:09 +0100369
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200370@interface RTC_OBJC_TYPE (RTCPeerConnection)
371(Stats)
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200372
Artem Titovd7ac5812021-07-27 12:23:39 +0200373 /** Gather stats for the given RTCMediaStreamTrack. If `mediaStreamTrack` is nil
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200374 * statistics are gathered for all tracks.
375 */
376 - (void)statsForTrack
377 : (nullable RTC_OBJC_TYPE(RTCMediaStreamTrack) *)mediaStreamTrack statsOutputLevel
378 : (RTCStatsOutputLevel)statsOutputLevel completionHandler
379 : (nullable void (^)(NSArray<RTC_OBJC_TYPE(RTCLegacyStatsReport) *> *stats))completionHandler;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200380
Peter Hanspersbed86042019-02-21 17:27:09 +0100381/** Gather statistic through the v2 statistics API. */
382- (void)statisticsWithCompletionHandler:(RTCStatisticsCompletionHandler)completionHandler;
383
Peter Hansperse12a1c72019-02-26 16:39:48 +0100384/** Spec-compliant getStats() performing the stats selection algorithm with the
385 * sender.
386 */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200387- (void)statisticsForSender:(RTC_OBJC_TYPE(RTCRtpSender) *)sender
Peter Hansperse12a1c72019-02-26 16:39:48 +0100388 completionHandler:(RTCStatisticsCompletionHandler)completionHandler;
389
390/** Spec-compliant getStats() performing the stats selection algorithm with the
391 * receiver.
392 */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200393- (void)statisticsForReceiver:(RTC_OBJC_TYPE(RTCRtpReceiver) *)receiver
Peter Hansperse12a1c72019-02-26 16:39:48 +0100394 completionHandler:(RTCStatisticsCompletionHandler)completionHandler;
395
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200396@end
397
398NS_ASSUME_NONNULL_END