1 /*
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 
15 NS_ASSUME_NONNULL_BEGIN
16 
17 @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);
32 
33 RTC_OBJC_EXPORT
34 @interface RTC_OBJC_TYPE (RTCPeerConnectionFactory) : NSObject
35 
36 /* Initialize object with default H264 video encoder/decoder factories */
37 - (instancetype)init;
38 
39 /* Initialize object with injectable video encoder/decoder factories */
40 - (instancetype)
41     initWithEncoderFactory:(nullable id<RTC_OBJC_TYPE(RTCVideoEncoderFactory)>)encoderFactory
42             decoderFactory:(nullable id<RTC_OBJC_TYPE(RTCVideoDecoderFactory)>)decoderFactory;
43 
44 /** Initialize an RTCAudioSource with constraints. */
45 - (RTC_OBJC_TYPE(RTCAudioSource) *)audioSourceWithConstraints:
46     (nullable RTC_OBJC_TYPE(RTCMediaConstraints) *)constraints;
47 
48 /** Initialize an RTCAudioTrack with an id. Convenience ctor to use an audio source
49  * with no constraints.
50  */
51 - (RTC_OBJC_TYPE(RTCAudioTrack) *)audioTrackWithTrackId:(NSString *)trackId;
52 
53 /** Initialize an RTCAudioTrack with a source and an id. */
54 - (RTC_OBJC_TYPE(RTCAudioTrack) *)audioTrackWithSource:(RTC_OBJC_TYPE(RTCAudioSource) *)source
55                                                trackId:(NSString *)trackId;
56 
57 /** Initialize a generic RTCVideoSource. The RTCVideoSource should be
58  * passed to a RTCVideoCapturer implementation, e.g.
59  * RTCCameraVideoCapturer, in order to produce frames.
60  */
61 - (RTC_OBJC_TYPE(RTCVideoSource) *)videoSource;
62 
63 /** Initialize an RTCVideoTrack with a source and an id. */
64 - (RTC_OBJC_TYPE(RTCVideoTrack) *)videoTrackWithSource:(RTC_OBJC_TYPE(RTCVideoSource) *)source
65                                                trackId:(NSString *)trackId;
66 
67 /** Initialize an RTCMediaStream with an id. */
68 - (RTC_OBJC_TYPE(RTCMediaStream) *)mediaStreamWithStreamId:(NSString *)streamId;
69 
70 /** Initialize an RTCPeerConnection with a configuration, constraints, and
71  *  delegate.
72  */
73 - (RTC_OBJC_TYPE(RTCPeerConnection) *)
74     peerConnectionWithConfiguration:(RTC_OBJC_TYPE(RTCConfiguration) *)configuration
75                         constraints:(RTC_OBJC_TYPE(RTCMediaConstraints) *)constraints
76                            delegate:(nullable id<RTC_OBJC_TYPE(RTCPeerConnectionDelegate)>)delegate;
77 
78 /** Set the options to be used for subsequently created RTCPeerConnections */
79 - (void)setOptions:(nonnull RTC_OBJC_TYPE(RTCPeerConnectionFactoryOptions) *)options;
80 
81 /** Start an AecDump recording. This API call will likely change in the future. */
82 - (BOOL)startAecDumpWithFilePath:(NSString *)filePath maxSizeInBytes:(int64_t)maxSizeInBytes;
83 
84 /* Stop an active AecDump recording */
85 - (void)stopAecDump;
86 
87 @end
88 
89 NS_ASSUME_NONNULL_END
90