Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(429)

Side by Side Diff: webrtc/examples/objc/AppRTCMobile/ARDAppClient.m

Issue 2770113004: Pass settings model to ARDAppClient instead of individual settings. (Closed)
Patch Set: Fix test. Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "ARDAppClient+Internal.h" 11 #import "ARDAppClient+Internal.h"
12 12
13 #import "WebRTC/RTCAVFoundationVideoSource.h" 13 #import "WebRTC/RTCAVFoundationVideoSource.h"
14 #import "WebRTC/RTCAudioTrack.h" 14 #import "WebRTC/RTCAudioTrack.h"
15 #import "WebRTC/RTCConfiguration.h" 15 #import "WebRTC/RTCConfiguration.h"
16 #import "WebRTC/RTCFileLogger.h" 16 #import "WebRTC/RTCFileLogger.h"
17 #import "WebRTC/RTCIceServer.h" 17 #import "WebRTC/RTCIceServer.h"
18 #import "WebRTC/RTCLogging.h" 18 #import "WebRTC/RTCLogging.h"
19 #import "WebRTC/RTCMediaConstraints.h" 19 #import "WebRTC/RTCMediaConstraints.h"
20 #import "WebRTC/RTCMediaStream.h" 20 #import "WebRTC/RTCMediaStream.h"
21 #import "WebRTC/RTCPeerConnectionFactory.h" 21 #import "WebRTC/RTCPeerConnectionFactory.h"
22 #import "WebRTC/RTCRtpSender.h" 22 #import "WebRTC/RTCRtpSender.h"
23 #import "WebRTC/RTCTracing.h" 23 #import "WebRTC/RTCTracing.h"
24 24
25 #import "ARDAppEngineClient.h" 25 #import "ARDAppEngineClient.h"
26 #import "ARDTURNClient+Internal.h"
27 #import "ARDJoinResponse.h" 26 #import "ARDJoinResponse.h"
28 #import "ARDMessageResponse.h" 27 #import "ARDMessageResponse.h"
29 #import "ARDSDPUtils.h" 28 #import "ARDSDPUtils.h"
29 #import "ARDSettingsModel.h"
30 #import "ARDSignalingMessage.h" 30 #import "ARDSignalingMessage.h"
31 #import "ARDTURNClient+Internal.h"
31 #import "ARDUtilities.h" 32 #import "ARDUtilities.h"
32 #import "ARDWebSocketChannel.h" 33 #import "ARDWebSocketChannel.h"
33 #import "RTCIceCandidate+JSON.h" 34 #import "RTCIceCandidate+JSON.h"
34 #import "RTCSessionDescription+JSON.h" 35 #import "RTCSessionDescription+JSON.h"
35 36
36 static NSString * const kARDIceServerRequestUrl = @"https://appr.tc/params"; 37 static NSString * const kARDIceServerRequestUrl = @"https://appr.tc/params";
37 38
38 static NSString * const kARDAppClientErrorDomain = @"ARDAppClient"; 39 static NSString * const kARDAppClientErrorDomain = @"ARDAppClient";
39 static NSInteger const kARDAppClientErrorUnknown = -1; 40 static NSInteger const kARDAppClientErrorUnknown = -1;
40 static NSInteger const kARDAppClientErrorRoomFull = -2; 41 static NSInteger const kARDAppClientErrorRoomFull = -2;
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 92
92 - (void)timerDidFire:(NSTimer *)timer { 93 - (void)timerDidFire:(NSTimer *)timer {
93 _timerHandler(); 94 _timerHandler();
94 } 95 }
95 96
96 @end 97 @end
97 98
98 @implementation ARDAppClient { 99 @implementation ARDAppClient {
99 RTCFileLogger *_fileLogger; 100 RTCFileLogger *_fileLogger;
100 ARDTimerProxy *_statsTimer; 101 ARDTimerProxy *_statsTimer;
101 RTCMediaConstraints *_cameraConstraints; 102 ARDSettingsModel *_settings;
102 NSNumber *_maxBitrate;
103 NSString *_videoCodec;
104 } 103 }
105 104
106 @synthesize shouldGetStats = _shouldGetStats; 105 @synthesize shouldGetStats = _shouldGetStats;
107 @synthesize state = _state; 106 @synthesize state = _state;
108 @synthesize delegate = _delegate; 107 @synthesize delegate = _delegate;
109 @synthesize roomServerClient = _roomServerClient; 108 @synthesize roomServerClient = _roomServerClient;
110 @synthesize channel = _channel; 109 @synthesize channel = _channel;
111 @synthesize loopbackChannel = _loopbackChannel; 110 @synthesize loopbackChannel = _loopbackChannel;
112 @synthesize turnClient = _turnClient; 111 @synthesize turnClient = _turnClient;
113 @synthesize peerConnection = _peerConnection; 112 @synthesize peerConnection = _peerConnection;
114 @synthesize factory = _factory; 113 @synthesize factory = _factory;
115 @synthesize messageQueue = _messageQueue; 114 @synthesize messageQueue = _messageQueue;
116 @synthesize isTurnComplete = _isTurnComplete; 115 @synthesize isTurnComplete = _isTurnComplete;
117 @synthesize hasReceivedSdp = _hasReceivedSdp; 116 @synthesize hasReceivedSdp = _hasReceivedSdp;
118 @synthesize roomId = _roomId; 117 @synthesize roomId = _roomId;
119 @synthesize clientId = _clientId; 118 @synthesize clientId = _clientId;
120 @synthesize isInitiator = _isInitiator; 119 @synthesize isInitiator = _isInitiator;
121 @synthesize iceServers = _iceServers; 120 @synthesize iceServers = _iceServers;
122 @synthesize webSocketURL = _websocketURL; 121 @synthesize webSocketURL = _websocketURL;
123 @synthesize webSocketRestURL = _websocketRestURL; 122 @synthesize webSocketRestURL = _websocketRestURL;
124 @synthesize defaultPeerConnectionConstraints = 123 @synthesize defaultPeerConnectionConstraints =
125 _defaultPeerConnectionConstraints; 124 _defaultPeerConnectionConstraints;
126 @synthesize isLoopback = _isLoopback; 125 @synthesize isLoopback = _isLoopback;
127 @synthesize isAudioOnly = _isAudioOnly; 126 @synthesize isAudioOnly = _isAudioOnly;
128 @synthesize shouldMakeAecDump = _shouldMakeAecDump; 127 @synthesize shouldMakeAecDump = _shouldMakeAecDump;
129 @synthesize shouldUseLevelControl = _shouldUseLevelControl; 128 @synthesize shouldUseLevelControl = _shouldUseLevelControl;
130 129
131 - (instancetype)init { 130 - (instancetype)init {
132 return [self initWithDelegate:nil preferVideoCodec:@"H264"]; 131 return [self initWithDelegate:nil];
133 } 132 }
134 133
135 - (instancetype)initWithDelegate:(id<ARDAppClientDelegate>)delegate 134 - (instancetype)initWithDelegate:(id<ARDAppClientDelegate>)delegate {
136 preferVideoCodec:(NSString *)codec {
137 if (self = [super init]) { 135 if (self = [super init]) {
138 _roomServerClient = [[ARDAppEngineClient alloc] init]; 136 _roomServerClient = [[ARDAppEngineClient alloc] init];
139 _delegate = delegate; 137 _delegate = delegate;
140 _videoCodec = codec;
141 NSURL *turnRequestURL = [NSURL URLWithString:kARDIceServerRequestUrl]; 138 NSURL *turnRequestURL = [NSURL URLWithString:kARDIceServerRequestUrl];
142 _turnClient = [[ARDTURNClient alloc] initWithURL:turnRequestURL]; 139 _turnClient = [[ARDTURNClient alloc] initWithURL:turnRequestURL];
143 [self configure]; 140 [self configure];
144 } 141 }
145 return self; 142 return self;
146 } 143 }
147 144
148 // TODO(tkchin): Provide signaling channel factory interface so we can recreate 145 // TODO(tkchin): Provide signaling channel factory interface so we can recreate
149 // channel if we need to on network failure. Also, make this the default public 146 // channel if we need to on network failure. Also, make this the default public
150 // constructor. 147 // constructor.
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 203
207 - (void)setState:(ARDAppClientState)state { 204 - (void)setState:(ARDAppClientState)state {
208 if (_state == state) { 205 if (_state == state) {
209 return; 206 return;
210 } 207 }
211 _state = state; 208 _state = state;
212 [_delegate appClient:self didChangeState:_state]; 209 [_delegate appClient:self didChangeState:_state];
213 } 210 }
214 211
215 - (void)connectToRoomWithId:(NSString *)roomId 212 - (void)connectToRoomWithId:(NSString *)roomId
213 settings:(ARDSettingsModel *)settings
216 isLoopback:(BOOL)isLoopback 214 isLoopback:(BOOL)isLoopback
217 isAudioOnly:(BOOL)isAudioOnly 215 isAudioOnly:(BOOL)isAudioOnly
218 shouldMakeAecDump:(BOOL)shouldMakeAecDump 216 shouldMakeAecDump:(BOOL)shouldMakeAecDump
219 shouldUseLevelControl:(BOOL)shouldUseLevelControl { 217 shouldUseLevelControl:(BOOL)shouldUseLevelControl {
220 NSParameterAssert(roomId.length); 218 NSParameterAssert(roomId.length);
221 NSParameterAssert(_state == kARDAppClientStateDisconnected); 219 NSParameterAssert(_state == kARDAppClientStateDisconnected);
220 _settings = settings;
222 _isLoopback = isLoopback; 221 _isLoopback = isLoopback;
223 _isAudioOnly = isAudioOnly; 222 _isAudioOnly = isAudioOnly;
224 _shouldMakeAecDump = shouldMakeAecDump; 223 _shouldMakeAecDump = shouldMakeAecDump;
225 _shouldUseLevelControl = shouldUseLevelControl; 224 _shouldUseLevelControl = shouldUseLevelControl;
226 self.state = kARDAppClientStateConnecting; 225 self.state = kARDAppClientStateConnecting;
227 226
228 #if defined(WEBRTC_IOS) 227 #if defined(WEBRTC_IOS)
229 if (kARDAppClientEnableTracing) { 228 if (kARDAppClientEnableTracing) {
230 NSString *filePath = [self documentsFilePathForFileName:@"webrtc-trace.txt"] ; 229 NSString *filePath = [self documentsFilePathForFileName:@"webrtc-trace.txt"] ;
231 RTCStartInternalCapture(filePath); 230 RTCStartInternalCapture(filePath);
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 #endif 311 #endif
313 _peerConnection = nil; 312 _peerConnection = nil;
314 self.state = kARDAppClientStateDisconnected; 313 self.state = kARDAppClientStateDisconnected;
315 #if defined(WEBRTC_IOS) 314 #if defined(WEBRTC_IOS)
316 if (kARDAppClientEnableTracing) { 315 if (kARDAppClientEnableTracing) {
317 RTCStopInternalCapture(); 316 RTCStopInternalCapture();
318 } 317 }
319 #endif 318 #endif
320 } 319 }
321 320
322 - (void)setCameraConstraints:(RTCMediaConstraints *)mediaConstraints {
323 _cameraConstraints = mediaConstraints;
324 }
325
326 - (void)setMaxBitrate:(NSNumber *)maxBitrate {
327 _maxBitrate = maxBitrate;
328 }
329
330 #pragma mark - ARDSignalingChannelDelegate 321 #pragma mark - ARDSignalingChannelDelegate
331 322
332 - (void)channel:(id<ARDSignalingChannel>)channel 323 - (void)channel:(id<ARDSignalingChannel>)channel
333 didReceiveMessage:(ARDSignalingMessage *)message { 324 didReceiveMessage:(ARDSignalingMessage *)message {
334 switch (message.type) { 325 switch (message.type) {
335 case kARDSignalingMessageTypeOffer: 326 case kARDSignalingMessageTypeOffer:
336 case kARDSignalingMessageTypeAnswer: 327 case kARDSignalingMessageTypeAnswer:
337 // Offers and answers must be processed before any other message, so we 328 // Offers and answers must be processed before any other message, so we
338 // place them at the front of the queue. 329 // place them at the front of the queue.
339 _hasReceivedSdp = YES; 330 _hasReceivedSdp = YES;
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
451 NSError *sdpError = 442 NSError *sdpError =
452 [[NSError alloc] initWithDomain:kARDAppClientErrorDomain 443 [[NSError alloc] initWithDomain:kARDAppClientErrorDomain
453 code:kARDAppClientErrorCreateSDP 444 code:kARDAppClientErrorCreateSDP
454 userInfo:userInfo]; 445 userInfo:userInfo];
455 [_delegate appClient:self didError:sdpError]; 446 [_delegate appClient:self didError:sdpError];
456 return; 447 return;
457 } 448 }
458 // Prefer codec from settings if available. 449 // Prefer codec from settings if available.
459 RTCSessionDescription *sdpPreferringCodec = 450 RTCSessionDescription *sdpPreferringCodec =
460 [ARDSDPUtils descriptionForDescription:sdp 451 [ARDSDPUtils descriptionForDescription:sdp
461 preferredVideoCodec:_videoCodec]; 452 preferredVideoCodec:[_settings currentVideoCodecSetti ngFromStore]];
462 __weak ARDAppClient *weakSelf = self; 453 __weak ARDAppClient *weakSelf = self;
463 [_peerConnection setLocalDescription:sdpPreferringCodec 454 [_peerConnection setLocalDescription:sdpPreferringCodec
464 completionHandler:^(NSError *error) { 455 completionHandler:^(NSError *error) {
465 ARDAppClient *strongSelf = weakSelf; 456 ARDAppClient *strongSelf = weakSelf;
466 [strongSelf peerConnection:strongSelf.peerConnection 457 [strongSelf peerConnection:strongSelf.peerConnection
467 didSetSessionDescriptionWithError:error]; 458 didSetSessionDescriptionWithError:error];
468 }]; 459 }];
469 ARDSessionDescriptionMessage *message = 460 ARDSessionDescriptionMessage *message =
470 [[ARDSessionDescriptionMessage alloc] 461 [[ARDSessionDescriptionMessage alloc]
471 initWithDescription:sdpPreferringCodec]; 462 initWithDescription:sdpPreferringCodec];
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
605 message.type == kARDSignalingMessageTypeBye); 596 message.type == kARDSignalingMessageTypeBye);
606 switch (message.type) { 597 switch (message.type) {
607 case kARDSignalingMessageTypeOffer: 598 case kARDSignalingMessageTypeOffer:
608 case kARDSignalingMessageTypeAnswer: { 599 case kARDSignalingMessageTypeAnswer: {
609 ARDSessionDescriptionMessage *sdpMessage = 600 ARDSessionDescriptionMessage *sdpMessage =
610 (ARDSessionDescriptionMessage *)message; 601 (ARDSessionDescriptionMessage *)message;
611 RTCSessionDescription *description = sdpMessage.sessionDescription; 602 RTCSessionDescription *description = sdpMessage.sessionDescription;
612 // Prefer codec from settings if available. 603 // Prefer codec from settings if available.
613 RTCSessionDescription *sdpPreferringCodec = 604 RTCSessionDescription *sdpPreferringCodec =
614 [ARDSDPUtils descriptionForDescription:description 605 [ARDSDPUtils descriptionForDescription:description
615 preferredVideoCodec:_videoCodec]; 606 preferredVideoCodec:[_settings currentVideoCodecSet tingFromStore]];
616 __weak ARDAppClient *weakSelf = self; 607 __weak ARDAppClient *weakSelf = self;
617 [_peerConnection setRemoteDescription:sdpPreferringCodec 608 [_peerConnection setRemoteDescription:sdpPreferringCodec
618 completionHandler:^(NSError *error) { 609 completionHandler:^(NSError *error) {
619 ARDAppClient *strongSelf = weakSelf; 610 ARDAppClient *strongSelf = weakSelf;
620 [strongSelf peerConnection:strongSelf.peerConnection 611 [strongSelf peerConnection:strongSelf.peerConnection
621 didSetSessionDescriptionWithError:error]; 612 didSetSessionDescriptionWithError:error];
622 }]; 613 }];
623 break; 614 break;
624 } 615 }
625 case kARDSignalingMessageTypeCandidate: { 616 case kARDSignalingMessageTypeCandidate: {
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
681 [_delegate appClient:self didReceiveLocalVideoTrack:track]; 672 [_delegate appClient:self didReceiveLocalVideoTrack:track];
682 } 673 }
683 674
684 return sender; 675 return sender;
685 } 676 }
686 677
687 - (void)setMaxBitrateForPeerConnectionVideoSender { 678 - (void)setMaxBitrateForPeerConnectionVideoSender {
688 for (RTCRtpSender *sender in _peerConnection.senders) { 679 for (RTCRtpSender *sender in _peerConnection.senders) {
689 if (sender.track != nil) { 680 if (sender.track != nil) {
690 if ([sender.track.kind isEqualToString:kARDVideoTrackKind]) { 681 if ([sender.track.kind isEqualToString:kARDVideoTrackKind]) {
691 [self setMaxBitrate:_maxBitrate forVideoSender:sender]; 682 [self setMaxBitrate:[_settings currentMaxBitrateSettingFromStore] forVid eoSender:sender];
692 } 683 }
693 } 684 }
694 } 685 }
695 } 686 }
696 687
697 - (void)setMaxBitrate:(NSNumber *)maxBitrate forVideoSender:(RTCRtpSender *)send er { 688 - (void)setMaxBitrate:(NSNumber *)maxBitrate forVideoSender:(RTCRtpSender *)send er {
698 if (maxBitrate.intValue <= 0) { 689 if (maxBitrate.intValue <= 0) {
699 return; 690 return;
700 } 691 }
701 692
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
767 NSString *valueLevelControl = _shouldUseLevelControl ? 758 NSString *valueLevelControl = _shouldUseLevelControl ?
768 kRTCMediaConstraintsValueTrue : kRTCMediaConstraintsValueFalse; 759 kRTCMediaConstraintsValueTrue : kRTCMediaConstraintsValueFalse;
769 NSDictionary *mandatoryConstraints = @{ kRTCMediaConstraintsLevelControl : va lueLevelControl }; 760 NSDictionary *mandatoryConstraints = @{ kRTCMediaConstraintsLevelControl : va lueLevelControl };
770 RTCMediaConstraints *constraints = 761 RTCMediaConstraints *constraints =
771 [[RTCMediaConstraints alloc] initWithMandatoryConstraints:mandatoryConstr aints 762 [[RTCMediaConstraints alloc] initWithMandatoryConstraints:mandatoryConstr aints
772 optionalConstraints:nil]; 763 optionalConstraints:nil];
773 return constraints; 764 return constraints;
774 } 765 }
775 766
776 - (RTCMediaConstraints *)cameraConstraints { 767 - (RTCMediaConstraints *)cameraConstraints {
777 return _cameraConstraints; 768 RTCMediaConstraints *cameraConstraints = [[RTCMediaConstraints alloc]
769 initWithMandatoryConstraints:nil
770 optionalConstraints:[_settings currentMediaConstraintFromStoreAsR TCDictionary]];
771 return cameraConstraints;
778 } 772 }
779 773
780 - (RTCMediaConstraints *)defaultAnswerConstraints { 774 - (RTCMediaConstraints *)defaultAnswerConstraints {
781 return [self defaultOfferConstraints]; 775 return [self defaultOfferConstraints];
782 } 776 }
783 777
784 - (RTCMediaConstraints *)defaultOfferConstraints { 778 - (RTCMediaConstraints *)defaultOfferConstraints {
785 NSDictionary *mandatoryConstraints = @{ 779 NSDictionary *mandatoryConstraints = @{
786 @"OfferToReceiveAudio" : @"true", 780 @"OfferToReceiveAudio" : @"true",
787 @"OfferToReceiveVideo" : @"true" 781 @"OfferToReceiveVideo" : @"true"
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
857 code:kARDAppClientErrorInvalidRoom 851 code:kARDAppClientErrorInvalidRoom
858 userInfo:@{ 852 userInfo:@{
859 NSLocalizedDescriptionKey: @"Invalid room.", 853 NSLocalizedDescriptionKey: @"Invalid room.",
860 }]; 854 }];
861 break; 855 break;
862 } 856 }
863 return error; 857 return error;
864 } 858 }
865 859
866 @end 860 @end
OLDNEW
« no previous file with comments | « webrtc/examples/objc/AppRTCMobile/ARDAppClient.h ('k') | webrtc/examples/objc/AppRTCMobile/ARDSettingsModel.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698