| Index: webrtc/examples/objc/AppRTCMobile/mac/APPRTCViewController.m
|
| diff --git a/webrtc/examples/objc/AppRTCMobile/mac/APPRTCViewController.m b/webrtc/examples/objc/AppRTCMobile/mac/APPRTCViewController.m
|
| deleted file mode 100644
|
| index 710b8a5ea40e1264c73d60d2c9be953e84111d93..0000000000000000000000000000000000000000
|
| --- a/webrtc/examples/objc/AppRTCMobile/mac/APPRTCViewController.m
|
| +++ /dev/null
|
| @@ -1,328 +0,0 @@
|
| -/*
|
| - * Copyright 2014 The WebRTC Project Authors. All rights reserved.
|
| - *
|
| - * Use of this source code is governed by a BSD-style license
|
| - * that can be found in the LICENSE file in the root of the source
|
| - * tree. An additional intellectual property rights grant can be found
|
| - * in the file PATENTS. All contributing project authors may
|
| - * be found in the AUTHORS file in the root of the source tree.
|
| - */
|
| -
|
| -#import "APPRTCViewController.h"
|
| -
|
| -#import <AVFoundation/AVFoundation.h>
|
| -
|
| -#import "WebRTC/RTCNSGLVideoView.h"
|
| -#import "WebRTC/RTCVideoTrack.h"
|
| -
|
| -#import "ARDAppClient.h"
|
| -
|
| -static NSUInteger const kContentWidth = 1280;
|
| -static NSUInteger const kContentHeight = 720;
|
| -static NSUInteger const kRoomFieldWidth = 80;
|
| -static NSUInteger const kLogViewHeight = 280;
|
| -static NSUInteger const kPreviewWidth = 490;
|
| -
|
| -@class APPRTCMainView;
|
| -@protocol APPRTCMainViewDelegate
|
| -
|
| -- (void)appRTCMainView:(APPRTCMainView*)mainView
|
| - didEnterRoomId:(NSString*)roomId;
|
| -
|
| -@end
|
| -
|
| -@interface APPRTCMainView : NSView
|
| -
|
| -@property(nonatomic, weak) id<APPRTCMainViewDelegate> delegate;
|
| -@property(nonatomic, readonly) RTCNSGLVideoView* localVideoView;
|
| -@property(nonatomic, readonly) RTCNSGLVideoView* remoteVideoView;
|
| -
|
| -- (void)displayLogMessage:(NSString*)message;
|
| -
|
| -@end
|
| -
|
| -@interface APPRTCMainView () <NSTextFieldDelegate, RTCNSGLVideoViewDelegate>
|
| -@end
|
| -@implementation APPRTCMainView {
|
| - NSScrollView* _scrollView;
|
| - NSTextField* _roomLabel;
|
| - NSTextField* _roomField;
|
| - NSTextView* _logView;
|
| - CGSize _localVideoSize;
|
| - CGSize _remoteVideoSize;
|
| -}
|
| -
|
| -@synthesize delegate = _delegate;
|
| -@synthesize localVideoView = _localVideoView;
|
| -@synthesize remoteVideoView = _remoteVideoView;
|
| -
|
| -+ (BOOL)requiresConstraintBasedLayout {
|
| - return YES;
|
| -}
|
| -
|
| -- (instancetype)initWithFrame:(NSRect)frame {
|
| - if (self = [super initWithFrame:frame]) {
|
| - [self setupViews];
|
| - }
|
| - return self;
|
| -}
|
| -
|
| -- (void)updateConstraints {
|
| - NSParameterAssert(
|
| - _roomField != nil && _scrollView != nil && _remoteVideoView != nil);
|
| - [self removeConstraints:[self constraints]];
|
| - NSDictionary* viewsDictionary =
|
| - NSDictionaryOfVariableBindings(_roomLabel,
|
| - _roomField,
|
| - _scrollView,
|
| - _remoteVideoView,
|
| - _localVideoView);
|
| -
|
| - NSSize remoteViewSize = [self remoteVideoViewSize];
|
| - NSDictionary* metrics = @{
|
| - @"kLogViewHeight" : @(kLogViewHeight),
|
| - @"kPreviewWidth" : @(kPreviewWidth),
|
| - @"kRoomFieldWidth" : @(kRoomFieldWidth),
|
| - @"remoteViewWidth" : @(remoteViewSize.width),
|
| - @"remoteViewHeight" : @(remoteViewSize.height),
|
| - @"localViewHeight" : @(remoteViewSize.height),
|
| - @"scrollViewWidth" : @(kContentWidth - kPreviewWidth),
|
| - };
|
| - // Declare this separately to avoid compiler warning about splitting string
|
| - // within an NSArray expression.
|
| - NSString* verticalConstraint =
|
| - @"V:|-[_roomLabel]-[_roomField]-[_scrollView(kLogViewHeight)]"
|
| - "-[_remoteVideoView(remoteViewHeight)]-|";
|
| - NSArray* constraintFormats = @[
|
| - verticalConstraint,
|
| - @"V:[_localVideoView]-[_remoteVideoView]",
|
| - @"V:[_localVideoView(kLogViewHeight)]",
|
| - @"|-[_roomLabel]",
|
| - @"|-[_roomField(kRoomFieldWidth)]",
|
| - @"|-[_scrollView(scrollViewWidth)]",
|
| - @"[_scrollView]-[_localVideoView]",
|
| - @"|-[_remoteVideoView(remoteViewWidth)]-|",
|
| - @"[_localVideoView(kPreviewWidth)]-|",
|
| - ];
|
| - for (NSString* constraintFormat in constraintFormats) {
|
| - NSArray* constraints =
|
| - [NSLayoutConstraint constraintsWithVisualFormat:constraintFormat
|
| - options:0
|
| - metrics:metrics
|
| - views:viewsDictionary];
|
| - for (NSLayoutConstraint* constraint in constraints) {
|
| - [self addConstraint:constraint];
|
| - }
|
| - }
|
| - [super updateConstraints];
|
| -}
|
| -
|
| -- (void)displayLogMessage:(NSString*)message {
|
| - _logView.string =
|
| - [NSString stringWithFormat:@"%@%@\n", _logView.string, message];
|
| - NSRange range = NSMakeRange([_logView.string length], 0);
|
| - [_logView scrollRangeToVisible:range];
|
| -}
|
| -
|
| -#pragma mark - NSControl delegate
|
| -
|
| -- (void)controlTextDidEndEditing:(NSNotification*)notification {
|
| - NSDictionary* userInfo = [notification userInfo];
|
| - NSInteger textMovement = [userInfo[@"NSTextMovement"] intValue];
|
| - if (textMovement == NSReturnTextMovement) {
|
| - [self.delegate appRTCMainView:self didEnterRoomId:_roomField.stringValue];
|
| - }
|
| -}
|
| -
|
| -#pragma mark - RTCNSGLVideoViewDelegate
|
| -
|
| -- (void)videoView:(RTCNSGLVideoView*)videoView
|
| - didChangeVideoSize:(NSSize)size {
|
| - if (videoView == _remoteVideoView) {
|
| - _remoteVideoSize = size;
|
| - } else if (videoView == _localVideoView) {
|
| - _localVideoSize = size;
|
| - } else {
|
| - return;
|
| - }
|
| - [self setNeedsUpdateConstraints:YES];
|
| -}
|
| -
|
| -#pragma mark - Private
|
| -
|
| -- (void)setupViews {
|
| - NSParameterAssert([[self subviews] count] == 0);
|
| -
|
| - _roomLabel = [[NSTextField alloc] initWithFrame:NSZeroRect];
|
| - [_roomLabel setTranslatesAutoresizingMaskIntoConstraints:NO];
|
| - [_roomLabel setBezeled:NO];
|
| - [_roomLabel setDrawsBackground:NO];
|
| - [_roomLabel setEditable:NO];
|
| - [_roomLabel setStringValue:@"Enter AppRTC room id:"];
|
| - [self addSubview:_roomLabel];
|
| -
|
| - _roomField = [[NSTextField alloc] initWithFrame:NSZeroRect];
|
| - [_roomField setTranslatesAutoresizingMaskIntoConstraints:NO];
|
| - [self addSubview:_roomField];
|
| - [_roomField setEditable:YES];
|
| - [_roomField setDelegate:self];
|
| -
|
| - _logView = [[NSTextView alloc] initWithFrame:NSZeroRect];
|
| - [_logView setMinSize:NSMakeSize(0, kLogViewHeight)];
|
| - [_logView setMaxSize:NSMakeSize(FLT_MAX, FLT_MAX)];
|
| - [_logView setVerticallyResizable:YES];
|
| - [_logView setAutoresizingMask:NSViewWidthSizable];
|
| - NSTextContainer* textContainer = [_logView textContainer];
|
| - NSSize containerSize = NSMakeSize(kContentWidth, FLT_MAX);
|
| - [textContainer setContainerSize:containerSize];
|
| - [textContainer setWidthTracksTextView:YES];
|
| - [_logView setEditable:NO];
|
| -
|
| - _scrollView = [[NSScrollView alloc] initWithFrame:NSZeroRect];
|
| - [_scrollView setTranslatesAutoresizingMaskIntoConstraints:NO];
|
| - [_scrollView setHasVerticalScroller:YES];
|
| - [_scrollView setDocumentView:_logView];
|
| - [self addSubview:_scrollView];
|
| -
|
| - NSOpenGLPixelFormatAttribute attributes[] = {
|
| - NSOpenGLPFADoubleBuffer,
|
| - NSOpenGLPFADepthSize, 24,
|
| - NSOpenGLPFAOpenGLProfile,
|
| - NSOpenGLProfileVersion3_2Core,
|
| - 0
|
| - };
|
| - NSOpenGLPixelFormat* pixelFormat =
|
| - [[NSOpenGLPixelFormat alloc] initWithAttributes:attributes];
|
| - _remoteVideoView = [[RTCNSGLVideoView alloc] initWithFrame:NSZeroRect
|
| - pixelFormat:pixelFormat];
|
| - [_remoteVideoView setTranslatesAutoresizingMaskIntoConstraints:NO];
|
| - _remoteVideoView.delegate = self;
|
| - [self addSubview:_remoteVideoView];
|
| -
|
| - _localVideoView = [[RTCNSGLVideoView alloc] initWithFrame:NSZeroRect
|
| - pixelFormat:pixelFormat];
|
| - [_localVideoView setTranslatesAutoresizingMaskIntoConstraints:NO];
|
| - _localVideoView.delegate = self;
|
| - [self addSubview:_localVideoView];
|
| -}
|
| -
|
| -- (NSSize)remoteVideoViewSize {
|
| - NSInteger width = MAX(_remoteVideoSize.width, kContentWidth);
|
| - NSInteger height = (width/16) * 9;
|
| - return NSMakeSize(width, height);
|
| -}
|
| -
|
| -@end
|
| -
|
| -@interface APPRTCViewController ()
|
| - <ARDAppClientDelegate, APPRTCMainViewDelegate>
|
| -@property(nonatomic, readonly) APPRTCMainView* mainView;
|
| -@end
|
| -
|
| -@implementation APPRTCViewController {
|
| - ARDAppClient* _client;
|
| - RTCVideoTrack* _localVideoTrack;
|
| - RTCVideoTrack* _remoteVideoTrack;
|
| -}
|
| -
|
| -- (void)dealloc {
|
| - [self disconnect];
|
| -}
|
| -
|
| -- (void)loadView {
|
| - APPRTCMainView* view = [[APPRTCMainView alloc] initWithFrame:NSZeroRect];
|
| - [view setTranslatesAutoresizingMaskIntoConstraints:NO];
|
| - view.delegate = self;
|
| - self.view = view;
|
| -}
|
| -
|
| -- (void)windowWillClose:(NSNotification*)notification {
|
| - [self disconnect];
|
| -}
|
| -
|
| -#pragma mark - ARDAppClientDelegate
|
| -
|
| -- (void)appClient:(ARDAppClient *)client
|
| - didChangeState:(ARDAppClientState)state {
|
| - switch (state) {
|
| - case kARDAppClientStateConnected:
|
| - NSLog(@"Client connected.");
|
| - break;
|
| - case kARDAppClientStateConnecting:
|
| - NSLog(@"Client connecting.");
|
| - break;
|
| - case kARDAppClientStateDisconnected:
|
| - NSLog(@"Client disconnected.");
|
| - [self resetUI];
|
| - _client = nil;
|
| - break;
|
| - }
|
| -}
|
| -
|
| -- (void)appClient:(ARDAppClient *)client
|
| - didChangeConnectionState:(RTCIceConnectionState)state {
|
| -}
|
| -
|
| -- (void)appClient:(ARDAppClient *)client
|
| - didReceiveLocalVideoTrack:(RTCVideoTrack *)localVideoTrack {
|
| - _localVideoTrack = localVideoTrack;
|
| - [_localVideoTrack addRenderer:self.mainView.localVideoView];
|
| -}
|
| -
|
| -- (void)appClient:(ARDAppClient *)client
|
| - didReceiveRemoteVideoTrack:(RTCVideoTrack *)remoteVideoTrack {
|
| - _remoteVideoTrack = remoteVideoTrack;
|
| - [_remoteVideoTrack addRenderer:self.mainView.remoteVideoView];
|
| -}
|
| -
|
| -- (void)appClient:(ARDAppClient *)client
|
| - didError:(NSError *)error {
|
| - [self showAlertWithMessage:[NSString stringWithFormat:@"%@", error]];
|
| - [self disconnect];
|
| -}
|
| -
|
| -- (void)appClient:(ARDAppClient *)client
|
| - didGetStats:(NSArray *)stats {
|
| -}
|
| -
|
| -#pragma mark - APPRTCMainViewDelegate
|
| -
|
| -- (void)appRTCMainView:(APPRTCMainView*)mainView
|
| - didEnterRoomId:(NSString*)roomId {
|
| - [_client disconnect];
|
| - ARDAppClient *client = [[ARDAppClient alloc] initWithDelegate:self];
|
| - [client connectToRoomWithId:roomId
|
| - isLoopback:NO
|
| - isAudioOnly:NO
|
| - shouldMakeAecDump:NO
|
| - shouldUseLevelControl:NO];
|
| - _client = client;
|
| -}
|
| -
|
| -#pragma mark - Private
|
| -
|
| -- (APPRTCMainView*)mainView {
|
| - return (APPRTCMainView*)self.view;
|
| -}
|
| -
|
| -- (void)showAlertWithMessage:(NSString*)message {
|
| - NSAlert* alert = [[NSAlert alloc] init];
|
| - [alert setMessageText:message];
|
| - [alert runModal];
|
| -}
|
| -
|
| -- (void)resetUI {
|
| - [_remoteVideoTrack removeRenderer:self.mainView.remoteVideoView];
|
| - [_localVideoTrack removeRenderer:self.mainView.localVideoView];
|
| - _remoteVideoTrack = nil;
|
| - _localVideoTrack = nil;
|
| - [self.mainView.remoteVideoView renderFrame:nil];
|
| - [self.mainView.localVideoView renderFrame:nil];
|
| -}
|
| -
|
| -- (void)disconnect {
|
| - [self resetUI];
|
| - [_client disconnect];
|
| -}
|
| -
|
| -@end
|
|
|