blob: 88aac990f2a2ee30d26d6700a4b71af2ab66dd75 [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
15NS_ASSUME_NONNULL_BEGIN
16
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020017@class RTC_OBJC_TYPE(RTCAudioSource);
18@class RTC_OBJC_TYPE(RTCAudioTrack);
19@class RTC_OBJC_TYPE(RTCConfiguration);
20@class RTC_OBJC_TYPE(RTCMediaConstraints);
21@class RTC_OBJC_TYPE(RTCMediaStream);
22@class RTC_OBJC_TYPE(RTCPeerConnection);
23@class RTC_OBJC_TYPE(RTCVideoSource);
24@class RTC_OBJC_TYPE(RTCVideoTrack);
25@class RTC_OBJC_TYPE(RTCPeerConnectionFactoryOptions);
26@protocol RTC_OBJC_TYPE
27(RTCPeerConnectionDelegate);
28@protocol RTC_OBJC_TYPE
29(RTCVideoDecoderFactory);
30@protocol RTC_OBJC_TYPE
31(RTCVideoEncoderFactory);
Yury Yaroshevich19a6e942022-03-11 09:22:08 +010032@protocol RTC_OBJC_TYPE
33(RTCSSLCertificateVerifier);
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020034
Mirko Bonadeie8d57242018-09-17 10:22:56 +020035RTC_OBJC_EXPORT
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020036@interface RTC_OBJC_TYPE (RTCPeerConnectionFactory) : NSObject
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020037
38/* Initialize object with default H264 video encoder/decoder factories */
39- (instancetype)init;
40
41/* Initialize object with injectable video encoder/decoder factories */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020042- (instancetype)
43 initWithEncoderFactory:(nullable id<RTC_OBJC_TYPE(RTCVideoEncoderFactory)>)encoderFactory
44 decoderFactory:(nullable id<RTC_OBJC_TYPE(RTCVideoDecoderFactory)>)decoderFactory;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020045
46/** Initialize an RTCAudioSource with constraints. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020047- (RTC_OBJC_TYPE(RTCAudioSource) *)audioSourceWithConstraints:
48 (nullable RTC_OBJC_TYPE(RTCMediaConstraints) *)constraints;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020049
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020050/** Initialize an RTCAudioTrack with an id. Convenience ctor to use an audio source
51 * with no constraints.
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020052 */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020053- (RTC_OBJC_TYPE(RTCAudioTrack) *)audioTrackWithTrackId:(NSString *)trackId;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020054
55/** Initialize an RTCAudioTrack with a source and an id. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020056- (RTC_OBJC_TYPE(RTCAudioTrack) *)audioTrackWithSource:(RTC_OBJC_TYPE(RTCAudioSource) *)source
57 trackId:(NSString *)trackId;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020058
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020059/** Initialize a generic RTCVideoSource. The RTCVideoSource should be
60 * passed to a RTCVideoCapturer implementation, e.g.
61 * RTCCameraVideoCapturer, in order to produce frames.
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020062 */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020063- (RTC_OBJC_TYPE(RTCVideoSource) *)videoSource;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020064
Saúl Ibarra Corretgé4d0760e2021-08-06 16:17:12 +020065/** Initialize a generic RTCVideoSource with he posibility of marking
66 * it as usable for screen sharing. The RTCVideoSource should be
67 * passed to a RTCVideoCapturer implementation, e.g.
68 * RTCCameraVideoCapturer, in order to produce frames.
69 */
70- (RTC_OBJC_TYPE(RTCVideoSource) *)videoSourceForScreenCast:(BOOL)forScreenCast;
71
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020072/** Initialize an RTCVideoTrack with a source and an id. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020073- (RTC_OBJC_TYPE(RTCVideoTrack) *)videoTrackWithSource:(RTC_OBJC_TYPE(RTCVideoSource) *)source
74 trackId:(NSString *)trackId;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020075
76/** Initialize an RTCMediaStream with an id. */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020077- (RTC_OBJC_TYPE(RTCMediaStream) *)mediaStreamWithStreamId:(NSString *)streamId;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020078
79/** Initialize an RTCPeerConnection with a configuration, constraints, and
80 * delegate.
81 */
Yura Yaroshevichd140c8f2021-03-02 23:25:10 +030082- (nullable RTC_OBJC_TYPE(RTCPeerConnection) *)
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020083 peerConnectionWithConfiguration:(RTC_OBJC_TYPE(RTCConfiguration) *)configuration
84 constraints:(RTC_OBJC_TYPE(RTCMediaConstraints) *)constraints
85 delegate:(nullable id<RTC_OBJC_TYPE(RTCPeerConnectionDelegate)>)delegate;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020086
Yury Yaroshevich19a6e942022-03-11 09:22:08 +010087- (nullable RTC_OBJC_TYPE(RTCPeerConnection) *)
88 peerConnectionWithConfiguration:(RTC_OBJC_TYPE(RTCConfiguration) *)configuration
89 constraints:(RTC_OBJC_TYPE(RTCMediaConstraints) *)constraints
90 certificateVerifier:
91 (id<RTC_OBJC_TYPE(RTCSSLCertificateVerifier)>)certificateVerifier
92 delegate:(nullable id<RTC_OBJC_TYPE(RTCPeerConnectionDelegate)>)delegate;
93
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020094/** Set the options to be used for subsequently created RTCPeerConnections */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020095- (void)setOptions:(nonnull RTC_OBJC_TYPE(RTCPeerConnectionFactoryOptions) *)options;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020096
97/** Start an AecDump recording. This API call will likely change in the future. */
98- (BOOL)startAecDumpWithFilePath:(NSString *)filePath maxSizeInBytes:(int64_t)maxSizeInBytes;
99
100/* Stop an active AecDump recording */
101- (void)stopAecDump;
102
103@end
104
105NS_ASSUME_NONNULL_END