OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2014 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2014 The WebRTC Project Authors. All rights reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 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 | 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 | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
11 #import "APPRTCViewController.h" | 11 #import "APPRTCViewController.h" |
12 | 12 |
13 #import <AVFoundation/AVFoundation.h> | 13 #import <AVFoundation/AVFoundation.h> |
14 | 14 |
15 #import "WebRTC/RTCNSGLVideoView.h" | 15 #import "WebRTC/RTCNSGLVideoView.h" |
16 #import "WebRTC/RTCVideoTrack.h" | 16 #import "WebRTC/RTCVideoTrack.h" |
17 | 17 |
18 #import "ARDAppClient.h" | 18 #import "ARDAppClient.h" |
19 | 19 |
20 static NSUInteger const kContentWidth = 1280; | 20 static NSUInteger const kContentWidth = 900; |
21 static NSUInteger const kContentHeight = 720; | 21 static NSUInteger const kRoomFieldWidth = 200; |
22 static NSUInteger const kRoomFieldWidth = 80; | 22 static NSUInteger const kActionItemHeight = 30; |
23 static NSUInteger const kLogViewHeight = 280; | 23 static NSUInteger const kBottomViewHeight = 200; |
24 static NSUInteger const kPreviewWidth = 490; | |
25 | 24 |
26 @class APPRTCMainView; | 25 @class APPRTCMainView; |
27 @protocol APPRTCMainViewDelegate | 26 @protocol APPRTCMainViewDelegate |
28 | 27 |
29 - (void)appRTCMainView:(APPRTCMainView*)mainView | 28 - (void)appRTCMainView:(APPRTCMainView*)mainView |
30 didEnterRoomId:(NSString*)roomId; | 29 didEnterRoomId:(NSString*)roomId |
| 30 loopback:(BOOL)isLoopback; |
31 | 31 |
32 @end | 32 @end |
33 | 33 |
34 @interface APPRTCMainView : NSView | 34 @interface APPRTCMainView : NSView |
35 | 35 |
36 @property(nonatomic, weak) id<APPRTCMainViewDelegate> delegate; | 36 @property(nonatomic, weak) id<APPRTCMainViewDelegate> delegate; |
37 @property(nonatomic, readonly) RTCNSGLVideoView* localVideoView; | 37 @property(nonatomic, readonly) RTCNSGLVideoView* localVideoView; |
38 @property(nonatomic, readonly) RTCNSGLVideoView* remoteVideoView; | 38 @property(nonatomic, readonly) RTCNSGLVideoView* remoteVideoView; |
39 | 39 |
40 - (void)displayLogMessage:(NSString*)message; | 40 - (void)displayLogMessage:(NSString*)message; |
41 | 41 |
42 @end | 42 @end |
43 | 43 |
44 @interface APPRTCMainView () <NSTextFieldDelegate, RTCNSGLVideoViewDelegate> | 44 @interface APPRTCMainView () <NSTextFieldDelegate, RTCNSGLVideoViewDelegate> |
45 @end | 45 @end |
46 @implementation APPRTCMainView { | 46 @implementation APPRTCMainView { |
47 NSScrollView* _scrollView; | 47 NSScrollView* _scrollView; |
48 NSTextField* _roomLabel; | 48 NSView* _actionItemsView; |
| 49 NSButton* _connectButton; |
| 50 NSButton* _loopbackButton; |
49 NSTextField* _roomField; | 51 NSTextField* _roomField; |
50 NSTextView* _logView; | 52 NSTextView* _logView; |
51 CGSize _localVideoSize; | 53 CGSize _localVideoSize; |
52 CGSize _remoteVideoSize; | 54 CGSize _remoteVideoSize; |
53 } | 55 } |
54 | 56 |
55 @synthesize delegate = _delegate; | 57 @synthesize delegate = _delegate; |
56 @synthesize localVideoView = _localVideoView; | 58 @synthesize localVideoView = _localVideoView; |
57 @synthesize remoteVideoView = _remoteVideoView; | 59 @synthesize remoteVideoView = _remoteVideoView; |
58 | 60 |
59 + (BOOL)requiresConstraintBasedLayout { | 61 |
60 return YES; | 62 - (void)displayLogMessage:(NSString *)message { |
| 63 _logView.string = |
| 64 [NSString stringWithFormat:@"%@%@\n", _logView.string, message]; |
| 65 NSRange range = NSMakeRange(_logView.string.length, 0); |
| 66 [_logView scrollRangeToVisible:range]; |
61 } | 67 } |
62 | 68 |
| 69 #pragma mark - Private |
| 70 |
63 - (instancetype)initWithFrame:(NSRect)frame { | 71 - (instancetype)initWithFrame:(NSRect)frame { |
64 if (self = [super initWithFrame:frame]) { | 72 if (self = [super initWithFrame:frame]) { |
65 [self setupViews]; | 73 [self setupViews]; |
66 } | 74 } |
67 return self; | 75 return self; |
68 } | 76 } |
69 | 77 |
| 78 + (BOOL)requiresConstraintBasedLayout { |
| 79 return YES; |
| 80 } |
| 81 |
70 - (void)updateConstraints { | 82 - (void)updateConstraints { |
71 NSParameterAssert( | 83 NSParameterAssert( |
72 _roomField != nil && _scrollView != nil && _remoteVideoView != nil); | 84 _roomField != nil && |
| 85 _scrollView != nil && |
| 86 _remoteVideoView != nil && |
| 87 _localVideoView != nil && |
| 88 _actionItemsView!= nil && |
| 89 _connectButton != nil && |
| 90 _loopbackButton != nil); |
| 91 |
73 [self removeConstraints:[self constraints]]; | 92 [self removeConstraints:[self constraints]]; |
74 NSDictionary* viewsDictionary = | 93 NSDictionary* viewsDictionary = |
75 NSDictionaryOfVariableBindings(_roomLabel, | 94 NSDictionaryOfVariableBindings(_roomField, |
76 _roomField, | |
77 _scrollView, | 95 _scrollView, |
78 _remoteVideoView, | 96 _remoteVideoView, |
79 _localVideoView); | 97 _localVideoView, |
| 98 _actionItemsView, |
| 99 _connectButton, |
| 100 _loopbackButton); |
80 | 101 |
81 NSSize remoteViewSize = [self remoteVideoViewSize]; | 102 NSSize remoteViewSize = [self remoteVideoViewSize]; |
82 NSDictionary* metrics = @{ | 103 NSDictionary* metrics = @{ |
83 @"kLogViewHeight" : @(kLogViewHeight), | |
84 @"kPreviewWidth" : @(kPreviewWidth), | |
85 @"kRoomFieldWidth" : @(kRoomFieldWidth), | |
86 @"remoteViewWidth" : @(remoteViewSize.width), | 104 @"remoteViewWidth" : @(remoteViewSize.width), |
87 @"remoteViewHeight" : @(remoteViewSize.height), | 105 @"remoteViewHeight" : @(remoteViewSize.height), |
88 @"localViewHeight" : @(remoteViewSize.height), | 106 @"kBottomViewHeight" : @(kBottomViewHeight), |
89 @"scrollViewWidth" : @(kContentWidth - kPreviewWidth), | 107 @"localViewHeight" : @(remoteViewSize.height / 3), |
| 108 @"localViewWidth" : @(remoteViewSize.width / 3), |
| 109 @"kRoomFieldWidth" : @(kRoomFieldWidth), |
| 110 @"kActionItemHeight" : @(kActionItemHeight) |
90 }; | 111 }; |
91 // Declare this separately to avoid compiler warning about splitting string | 112 // Declare this separately to avoid compiler warning about splitting string |
92 // within an NSArray expression. | 113 // within an NSArray expression. |
93 NSString* verticalConstraint = | 114 NSString* verticalConstraintLeft = |
94 @"V:|-[_roomLabel]-[_roomField]-[_scrollView(kLogViewHeight)]" | 115 @"V:|-[_remoteVideoView(remoteViewHeight)]-[_scrollView(kBottomViewHeight)
]-|"; |
95 "-[_remoteVideoView(remoteViewHeight)]-|"; | 116 NSString* verticalConstraintRight = |
| 117 @"V:|-[_remoteVideoView(remoteViewHeight)]-[_actionItemsView(kBottomViewHe
ight)]-|"; |
96 NSArray* constraintFormats = @[ | 118 NSArray* constraintFormats = @[ |
97 verticalConstraint, | 119 verticalConstraintLeft, |
98 @"V:[_localVideoView]-[_remoteVideoView]", | 120 verticalConstraintRight, |
99 @"V:[_localVideoView(kLogViewHeight)]", | 121 @"H:|-[_remoteVideoView(remoteViewWidth)]-|", |
100 @"|-[_roomLabel]", | 122 @"V:|-[_localVideoView(localViewHeight)]", |
101 @"|-[_roomField(kRoomFieldWidth)]", | 123 @"H:|-[_localVideoView(localViewWidth)]", |
102 @"|-[_scrollView(scrollViewWidth)]", | 124 @"H:|-[_scrollView(==_actionItemsView)]-[_actionItemsView]-|" |
103 @"[_scrollView]-[_localVideoView]", | |
104 @"|-[_remoteVideoView(remoteViewWidth)]-|", | |
105 @"[_localVideoView(kPreviewWidth)]-|", | |
106 ]; | 125 ]; |
107 for (NSString* constraintFormat in constraintFormats) { | 126 |
108 NSArray* constraints = | 127 NSArray* actionItemsConstraints = @[ |
109 [NSLayoutConstraint constraintsWithVisualFormat:constraintFormat | 128 @"H:|-[_roomField(kRoomFieldWidth)]-[_loopbackButton(kRoomFieldWidth)]", |
110 options:0 | 129 @"H:|-[_connectButton(kRoomFieldWidth)]", |
111 metrics:metrics | 130 @"V:|-[_roomField(kActionItemHeight)]-[_connectButton(kActionItemHeight)]"
, |
112 views:viewsDictionary]; | 131 @"V:|-[_loopbackButton(kActionItemHeight)]", |
113 for (NSLayoutConstraint* constraint in constraints) { | 132 ]; |
114 [self addConstraint:constraint]; | 133 |
115 } | 134 [APPRTCMainView addConstraints:constraintFormats |
116 } | 135 toView:self |
| 136 viewsDictionary:viewsDictionary |
| 137 metrics:metrics]; |
| 138 [APPRTCMainView addConstraints:actionItemsConstraints |
| 139 toView:_actionItemsView |
| 140 viewsDictionary:viewsDictionary |
| 141 metrics:metrics]; |
117 [super updateConstraints]; | 142 [super updateConstraints]; |
118 } | 143 } |
119 | 144 |
120 - (void)displayLogMessage:(NSString*)message { | 145 #pragma mark - Constraints helper |
121 _logView.string = | |
122 [NSString stringWithFormat:@"%@%@\n", _logView.string, message]; | |
123 NSRange range = NSMakeRange([_logView.string length], 0); | |
124 [_logView scrollRangeToVisible:range]; | |
125 } | |
126 | 146 |
127 #pragma mark - NSControl delegate | 147 + (void)addConstraints:(NSArray*)constraints toView:(NSView*)view |
128 | 148 viewsDictionary:(NSDictionary*)viewsDictionary |
129 - (void)controlTextDidEndEditing:(NSNotification*)notification { | 149 metrics:(NSDictionary*)metrics { |
130 NSDictionary* userInfo = [notification userInfo]; | 150 for (NSString* constraintFormat in constraints) { |
131 NSInteger textMovement = [userInfo[@"NSTextMovement"] intValue]; | 151 NSArray* constraints = |
132 if (textMovement == NSReturnTextMovement) { | 152 [NSLayoutConstraint constraintsWithVisualFormat:constraintFormat |
133 [self.delegate appRTCMainView:self didEnterRoomId:_roomField.stringValue]; | 153 options:0 |
| 154 metrics:metrics |
| 155 views:viewsDictionary]; |
| 156 for (NSLayoutConstraint* constraint in constraints) { |
| 157 [view addConstraint:constraint]; |
| 158 } |
134 } | 159 } |
135 } | 160 } |
136 | 161 |
| 162 #pragma mark - Control actions |
| 163 |
| 164 - (void)startCall:(id)sender { |
| 165 NSString* roomString = _roomField.stringValue; |
| 166 // Generate room id for loopback options. |
| 167 if (_loopbackButton.intValue && [roomString isEqualToString:@""]) { |
| 168 roomString = [NSUUID UUID].UUIDString; |
| 169 roomString = [roomString stringByReplacingOccurrencesOfString:@"-" withStrin
g:@""]; |
| 170 } |
| 171 |
| 172 [self.delegate appRTCMainView:self |
| 173 didEnterRoomId:roomString |
| 174 loopback:_loopbackButton.intValue]; |
| 175 } |
| 176 |
137 #pragma mark - RTCNSGLVideoViewDelegate | 177 #pragma mark - RTCNSGLVideoViewDelegate |
138 | 178 |
139 - (void)videoView:(RTCNSGLVideoView*)videoView | 179 - (void)videoView:(RTCNSGLVideoView*)videoView |
140 didChangeVideoSize:(NSSize)size { | 180 didChangeVideoSize:(NSSize)size { |
141 if (videoView == _remoteVideoView) { | 181 if (videoView == _remoteVideoView) { |
142 _remoteVideoSize = size; | 182 _remoteVideoSize = size; |
143 } else if (videoView == _localVideoView) { | 183 } else if (videoView == _localVideoView) { |
144 _localVideoSize = size; | 184 _localVideoSize = size; |
145 } else { | 185 } else { |
146 return; | 186 return; |
147 } | 187 } |
| 188 |
148 [self setNeedsUpdateConstraints:YES]; | 189 [self setNeedsUpdateConstraints:YES]; |
149 } | 190 } |
150 | 191 |
151 #pragma mark - Private | 192 #pragma mark - Private |
152 | 193 |
153 - (void)setupViews { | 194 - (void)setupViews { |
154 NSParameterAssert([[self subviews] count] == 0); | 195 NSParameterAssert([[self subviews] count] == 0); |
155 | 196 |
156 _roomLabel = [[NSTextField alloc] initWithFrame:NSZeroRect]; | |
157 [_roomLabel setTranslatesAutoresizingMaskIntoConstraints:NO]; | |
158 [_roomLabel setBezeled:NO]; | |
159 [_roomLabel setDrawsBackground:NO]; | |
160 [_roomLabel setEditable:NO]; | |
161 [_roomLabel setStringValue:@"Enter AppRTC room id:"]; | |
162 [self addSubview:_roomLabel]; | |
163 | |
164 _roomField = [[NSTextField alloc] initWithFrame:NSZeroRect]; | |
165 [_roomField setTranslatesAutoresizingMaskIntoConstraints:NO]; | |
166 [self addSubview:_roomField]; | |
167 [_roomField setEditable:YES]; | |
168 [_roomField setDelegate:self]; | |
169 | |
170 _logView = [[NSTextView alloc] initWithFrame:NSZeroRect]; | 197 _logView = [[NSTextView alloc] initWithFrame:NSZeroRect]; |
171 [_logView setMinSize:NSMakeSize(0, kLogViewHeight)]; | 198 [_logView setMinSize:NSMakeSize(0, kBottomViewHeight)]; |
172 [_logView setMaxSize:NSMakeSize(FLT_MAX, FLT_MAX)]; | 199 [_logView setMaxSize:NSMakeSize(FLT_MAX, FLT_MAX)]; |
173 [_logView setVerticallyResizable:YES]; | 200 [_logView setVerticallyResizable:YES]; |
174 [_logView setAutoresizingMask:NSViewWidthSizable]; | 201 [_logView setAutoresizingMask:NSViewWidthSizable]; |
175 NSTextContainer* textContainer = [_logView textContainer]; | 202 NSTextContainer* textContainer = [_logView textContainer]; |
176 NSSize containerSize = NSMakeSize(kContentWidth, FLT_MAX); | 203 NSSize containerSize = NSMakeSize(kContentWidth, FLT_MAX); |
177 [textContainer setContainerSize:containerSize]; | 204 [textContainer setContainerSize:containerSize]; |
178 [textContainer setWidthTracksTextView:YES]; | 205 [textContainer setWidthTracksTextView:YES]; |
179 [_logView setEditable:NO]; | 206 [_logView setEditable:NO]; |
180 | 207 |
| 208 [self setupActionItemsView]; |
| 209 |
181 _scrollView = [[NSScrollView alloc] initWithFrame:NSZeroRect]; | 210 _scrollView = [[NSScrollView alloc] initWithFrame:NSZeroRect]; |
182 [_scrollView setTranslatesAutoresizingMaskIntoConstraints:NO]; | 211 [_scrollView setTranslatesAutoresizingMaskIntoConstraints:NO]; |
183 [_scrollView setHasVerticalScroller:YES]; | 212 [_scrollView setHasVerticalScroller:YES]; |
184 [_scrollView setDocumentView:_logView]; | 213 [_scrollView setDocumentView:_logView]; |
185 [self addSubview:_scrollView]; | 214 [self addSubview:_scrollView]; |
186 | 215 |
187 NSOpenGLPixelFormatAttribute attributes[] = { | 216 NSOpenGLPixelFormatAttribute attributes[] = { |
188 NSOpenGLPFADoubleBuffer, | 217 NSOpenGLPFADoubleBuffer, |
189 NSOpenGLPFADepthSize, 24, | 218 NSOpenGLPFADepthSize, 24, |
190 NSOpenGLPFAOpenGLProfile, | 219 NSOpenGLPFAOpenGLProfile, |
191 NSOpenGLProfileVersion3_2Core, | 220 NSOpenGLProfileVersion3_2Core, |
192 0 | 221 0 |
193 }; | 222 }; |
194 NSOpenGLPixelFormat* pixelFormat = | 223 NSOpenGLPixelFormat* pixelFormat = |
195 [[NSOpenGLPixelFormat alloc] initWithAttributes:attributes]; | 224 [[NSOpenGLPixelFormat alloc] initWithAttributes:attributes]; |
196 _remoteVideoView = [[RTCNSGLVideoView alloc] initWithFrame:NSZeroRect | 225 _remoteVideoView = [[RTCNSGLVideoView alloc] initWithFrame:NSZeroRect |
197 pixelFormat:pixelFormat]; | 226 pixelFormat:pixelFormat]; |
198 [_remoteVideoView setTranslatesAutoresizingMaskIntoConstraints:NO]; | 227 [_remoteVideoView setTranslatesAutoresizingMaskIntoConstraints:NO]; |
199 _remoteVideoView.delegate = self; | 228 _remoteVideoView.delegate = self; |
200 [self addSubview:_remoteVideoView]; | 229 [self addSubview:_remoteVideoView]; |
201 | 230 |
202 _localVideoView = [[RTCNSGLVideoView alloc] initWithFrame:NSZeroRect | 231 _localVideoView = [[RTCNSGLVideoView alloc] initWithFrame:NSZeroRect |
203 pixelFormat:pixelFormat]; | 232 pixelFormat:pixelFormat]; |
204 [_localVideoView setTranslatesAutoresizingMaskIntoConstraints:NO]; | 233 [_localVideoView setTranslatesAutoresizingMaskIntoConstraints:NO]; |
205 _localVideoView.delegate = self; | 234 _localVideoView.delegate = self; |
206 [self addSubview:_localVideoView]; | 235 [self addSubview:_localVideoView]; |
207 } | 236 } |
208 | 237 |
| 238 - (void)setupActionItemsView { |
| 239 _actionItemsView = [[NSView alloc] initWithFrame:NSZeroRect]; |
| 240 [_actionItemsView setTranslatesAutoresizingMaskIntoConstraints:NO]; |
| 241 [self addSubview:_actionItemsView]; |
| 242 |
| 243 _roomField = [[NSTextField alloc] initWithFrame:NSZeroRect]; |
| 244 [_roomField setTranslatesAutoresizingMaskIntoConstraints:NO]; |
| 245 _roomField.placeholderString = @"Enter AppRTC room id"; |
| 246 [_actionItemsView addSubview:_roomField]; |
| 247 [_roomField setEditable:YES]; |
| 248 |
| 249 _connectButton = [[NSButton alloc] initWithFrame:NSZeroRect]; |
| 250 [_connectButton setTranslatesAutoresizingMaskIntoConstraints:NO]; |
| 251 _connectButton.title = @"Start call"; |
| 252 _connectButton.bezelStyle = NSRoundedBezelStyle; |
| 253 _connectButton.target = self; |
| 254 _connectButton.action = @selector(startCall:); |
| 255 [_actionItemsView addSubview:_connectButton]; |
| 256 |
| 257 _loopbackButton = [[NSButton alloc] initWithFrame:NSZeroRect]; |
| 258 [_loopbackButton setTranslatesAutoresizingMaskIntoConstraints:NO]; |
| 259 _loopbackButton.title = @"Loopback"; |
| 260 [_loopbackButton setButtonType:NSSwitchButton]; |
| 261 [_actionItemsView addSubview:_loopbackButton]; |
| 262 } |
| 263 |
209 - (NSSize)remoteVideoViewSize { | 264 - (NSSize)remoteVideoViewSize { |
210 NSInteger width = MAX(_remoteVideoSize.width, kContentWidth); | 265 if (!_remoteVideoView.bounds.size.width) { |
| 266 return NSMakeSize(kContentWidth, 0); |
| 267 } |
| 268 NSInteger width = MAX(_remoteVideoView.bounds.size.width, kContentWidth); |
211 NSInteger height = (width/16) * 9; | 269 NSInteger height = (width/16) * 9; |
212 return NSMakeSize(width, height); | 270 return NSMakeSize(width, height); |
213 } | 271 } |
214 | 272 |
215 @end | 273 @end |
216 | 274 |
217 @interface APPRTCViewController () | 275 @interface APPRTCViewController () |
218 <ARDAppClientDelegate, APPRTCMainViewDelegate> | 276 <ARDAppClientDelegate, APPRTCMainViewDelegate> |
219 @property(nonatomic, readonly) APPRTCMainView* mainView; | 277 @property(nonatomic, readonly) APPRTCMainView* mainView; |
220 @end | 278 @end |
221 | 279 |
222 @implementation APPRTCViewController { | 280 @implementation APPRTCViewController { |
223 ARDAppClient* _client; | 281 ARDAppClient* _client; |
224 RTCVideoTrack* _localVideoTrack; | 282 RTCVideoTrack* _localVideoTrack; |
225 RTCVideoTrack* _remoteVideoTrack; | 283 RTCVideoTrack* _remoteVideoTrack; |
226 } | 284 } |
227 | 285 |
228 - (void)dealloc { | 286 - (void)dealloc { |
229 [self disconnect]; | 287 [self disconnect]; |
230 } | 288 } |
231 | 289 |
| 290 - (void)viewDidAppear { |
| 291 [super viewDidAppear]; |
| 292 [self displayUsageInstructions]; |
| 293 } |
| 294 |
232 - (void)loadView { | 295 - (void)loadView { |
233 APPRTCMainView* view = [[APPRTCMainView alloc] initWithFrame:NSZeroRect]; | 296 APPRTCMainView* view = [[APPRTCMainView alloc] initWithFrame:NSZeroRect]; |
234 [view setTranslatesAutoresizingMaskIntoConstraints:NO]; | 297 [view setTranslatesAutoresizingMaskIntoConstraints:NO]; |
235 view.delegate = self; | 298 view.delegate = self; |
236 self.view = view; | 299 self.view = view; |
237 } | 300 } |
238 | 301 |
239 - (void)windowWillClose:(NSNotification*)notification { | 302 - (void)windowWillClose:(NSNotification*)notification { |
240 [self disconnect]; | 303 [self disconnect]; |
241 } | 304 } |
242 | 305 |
| 306 #pragma mark - Usage |
| 307 |
| 308 - (void)displayUsageInstructions { |
| 309 [self.mainView displayLogMessage: |
| 310 @"To start call:\n" |
| 311 @"• Enter AppRTC room id (not neccessary for loopback)\n" |
| 312 @"• Start call"]; |
| 313 } |
| 314 |
243 #pragma mark - ARDAppClientDelegate | 315 #pragma mark - ARDAppClientDelegate |
244 | 316 |
245 - (void)appClient:(ARDAppClient *)client | 317 - (void)appClient:(ARDAppClient *)client |
246 didChangeState:(ARDAppClientState)state { | 318 didChangeState:(ARDAppClientState)state { |
247 switch (state) { | 319 switch (state) { |
248 case kARDAppClientStateConnected: | 320 case kARDAppClientStateConnected: |
249 NSLog(@"Client connected."); | 321 [self.mainView displayLogMessage:@"Client connected."]; |
250 break; | 322 break; |
251 case kARDAppClientStateConnecting: | 323 case kARDAppClientStateConnecting: |
252 NSLog(@"Client connecting."); | 324 [self.mainView displayLogMessage:@"Client connecting."]; |
253 break; | 325 break; |
254 case kARDAppClientStateDisconnected: | 326 case kARDAppClientStateDisconnected: |
255 NSLog(@"Client disconnected."); | 327 [self.mainView displayLogMessage:@"Client disconnected."]; |
256 [self resetUI]; | 328 [self resetUI]; |
257 _client = nil; | 329 _client = nil; |
258 break; | 330 break; |
259 } | 331 } |
260 } | 332 } |
261 | 333 |
262 - (void)appClient:(ARDAppClient *)client | 334 - (void)appClient:(ARDAppClient *)client |
263 didChangeConnectionState:(RTCIceConnectionState)state { | 335 didChangeConnectionState:(RTCIceConnectionState)state { |
264 } | 336 } |
265 | 337 |
(...skipping 15 matching lines...) Expand all Loading... |
281 [self disconnect]; | 353 [self disconnect]; |
282 } | 354 } |
283 | 355 |
284 - (void)appClient:(ARDAppClient *)client | 356 - (void)appClient:(ARDAppClient *)client |
285 didGetStats:(NSArray *)stats { | 357 didGetStats:(NSArray *)stats { |
286 } | 358 } |
287 | 359 |
288 #pragma mark - APPRTCMainViewDelegate | 360 #pragma mark - APPRTCMainViewDelegate |
289 | 361 |
290 - (void)appRTCMainView:(APPRTCMainView*)mainView | 362 - (void)appRTCMainView:(APPRTCMainView*)mainView |
291 didEnterRoomId:(NSString*)roomId { | 363 didEnterRoomId:(NSString*)roomId |
| 364 loopback:(BOOL)isLoopback { |
| 365 |
| 366 if ([roomId isEqualToString:@""]) { |
| 367 [self.mainView displayLogMessage:@"Missing room id"]; |
| 368 return; |
| 369 } |
| 370 |
292 [_client disconnect]; | 371 [_client disconnect]; |
293 ARDAppClient *client = [[ARDAppClient alloc] initWithDelegate:self]; | 372 ARDAppClient *client = [[ARDAppClient alloc] initWithDelegate:self]; |
294 [client connectToRoomWithId:roomId | 373 [client connectToRoomWithId:roomId |
295 isLoopback:NO | 374 isLoopback:isLoopback |
296 isAudioOnly:NO | 375 isAudioOnly:NO |
297 shouldMakeAecDump:NO | 376 shouldMakeAecDump:NO |
298 shouldUseLevelControl:NO]; | 377 shouldUseLevelControl:NO]; |
299 _client = client; | 378 _client = client; |
300 } | 379 } |
301 | 380 |
302 #pragma mark - Private | 381 #pragma mark - Private |
303 | 382 |
304 - (APPRTCMainView*)mainView { | 383 - (APPRTCMainView*)mainView { |
305 return (APPRTCMainView*)self.view; | 384 return (APPRTCMainView*)self.view; |
(...skipping 13 matching lines...) Expand all Loading... |
319 [self.mainView.remoteVideoView renderFrame:nil]; | 398 [self.mainView.remoteVideoView renderFrame:nil]; |
320 [self.mainView.localVideoView renderFrame:nil]; | 399 [self.mainView.localVideoView renderFrame:nil]; |
321 } | 400 } |
322 | 401 |
323 - (void)disconnect { | 402 - (void)disconnect { |
324 [self resetUI]; | 403 [self resetUI]; |
325 [_client disconnect]; | 404 [_client disconnect]; |
326 } | 405 } |
327 | 406 |
328 @end | 407 @end |
OLD | NEW |