1 /*
2  *  Copyright 2014 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 #import <WebRTC/RTCPeerConnection.h>
13 #import <WebRTC/RTCVideoTrack.h>
14 
15 typedef NS_ENUM(NSInteger, ARDAppClientState) {
16   // Disconnected from servers.
17   kARDAppClientStateDisconnected,
18   // Connecting to servers.
19   kARDAppClientStateConnecting,
20   // Connected to servers.
21   kARDAppClientStateConnected,
22 };
23 
24 @class ARDAppClient;
25 @class ARDSettingsModel;
26 @class ARDExternalSampleCapturer;
27 @class RTC_OBJC_TYPE(RTCMediaConstraints);
28 @class RTC_OBJC_TYPE(RTCCameraVideoCapturer);
29 @class RTC_OBJC_TYPE(RTCFileVideoCapturer);
30 
31 // The delegate is informed of pertinent events and will be called on the
32 // main queue.
33 @protocol ARDAppClientDelegate <NSObject>
34 
35 - (void)appClient:(ARDAppClient *)client didChangeState:(ARDAppClientState)state;
36 
37 - (void)appClient:(ARDAppClient *)client didChangeConnectionState:(RTCIceConnectionState)state;
38 
39 - (void)appClient:(ARDAppClient *)client
40     didCreateLocalCapturer:(RTC_OBJC_TYPE(RTCCameraVideoCapturer) *)localCapturer;
41 
42 - (void)appClient:(ARDAppClient *)client
43     didReceiveLocalVideoTrack:(RTC_OBJC_TYPE(RTCVideoTrack) *)localVideoTrack;
44 
45 - (void)appClient:(ARDAppClient *)client
46     didReceiveRemoteVideoTrack:(RTC_OBJC_TYPE(RTCVideoTrack) *)remoteVideoTrack;
47 
48 - (void)appClient:(ARDAppClient *)client didError:(NSError *)error;
49 
50 - (void)appClient:(ARDAppClient *)client didGetStats:(NSArray *)stats;
51 
52 @optional
53 - (void)appClient:(ARDAppClient *)client
54     didCreateLocalFileCapturer:(RTC_OBJC_TYPE(RTCFileVideoCapturer) *)fileCapturer;
55 
56 - (void)appClient:(ARDAppClient *)client
57     didCreateLocalExternalSampleCapturer:(ARDExternalSampleCapturer *)externalSampleCapturer;
58 
59 @end
60 
61 // Handles connections to the AppRTC server for a given room. Methods on this
62 // class should only be called from the main queue.
63 @interface ARDAppClient : NSObject
64 
65 // If |shouldGetStats| is true, stats will be reported in 1s intervals through
66 // the delegate.
67 @property(nonatomic, assign) BOOL shouldGetStats;
68 @property(nonatomic, readonly) ARDAppClientState state;
69 @property(nonatomic, weak) id<ARDAppClientDelegate> delegate;
70 @property(nonatomic, assign, getter=isBroadcast) BOOL broadcast;
71 
72 // Convenience constructor since all expected use cases will need a delegate
73 // in order to receive remote tracks.
74 - (instancetype)initWithDelegate:(id<ARDAppClientDelegate>)delegate;
75 
76 // Establishes a connection with the AppRTC servers for the given room id.
77 // |settings| is an object containing settings such as video codec for the call.
78 // If |isLoopback| is true, the call will connect to itself.
79 - (void)connectToRoomWithId:(NSString *)roomId
80                    settings:(ARDSettingsModel *)settings
81                  isLoopback:(BOOL)isLoopback;
82 
83 // Disconnects from the AppRTC servers and any connected clients.
84 - (void)disconnect;
85 
86 @end
87