1 /* 2 * Copyright 2016 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 "RTCAudioSession.h" 12 13 NS_ASSUME_NONNULL_BEGIN 14 15 @class RTC_OBJC_TYPE(RTCAudioSessionConfiguration); 16 17 @interface RTC_OBJC_TYPE (RTCAudioSession) 18 () 19 20 /** Number of times setActive:YES has succeeded without a balanced call to 21 * setActive:NO. 22 */ 23 @property(nonatomic, readonly) int activationCount; 24 25 /** The number of times |beginWebRTCSession| was called without a balanced call 26 * to |endWebRTCSession|. 27 */ 28 @property(nonatomic, readonly) int webRTCSessionCount; 29 30 /** Convenience BOOL that checks useManualAudio and isAudioEnebled. */ 31 @property(readonly) BOOL canPlayOrRecord; 32 33 /** Tracks whether we have been sent an interruption event that hasn't been matched by either an 34 * interrupted end event or a foreground event. 35 */ 36 @property(nonatomic, assign) BOOL isInterrupted; 37 38 - (BOOL)checkLock:(NSError **)outError; 39 40 /** Adds the delegate to the list of delegates, and places it at the front of 41 * the list. This delegate will be notified before other delegates of 42 * audio events. 43 */ 44 - (void)pushDelegate:(id<RTC_OBJC_TYPE(RTCAudioSessionDelegate)>)delegate; 45 46 /** Signals RTCAudioSession that a WebRTC session is about to begin and 47 * audio configuration is needed. Will configure the audio session for WebRTC 48 * if not already configured and if configuration is not delayed. 49 * Successful calls must be balanced by a call to endWebRTCSession. 50 */ 51 - (BOOL)beginWebRTCSession:(NSError **)outError; 52 53 /** Signals RTCAudioSession that a WebRTC session is about to end and audio 54 * unconfiguration is needed. Will unconfigure the audio session for WebRTC 55 * if this is the last unmatched call and if configuration is not delayed. 56 */ 57 - (BOOL)endWebRTCSession:(NSError **)outError; 58 59 /** Configure the audio session for WebRTC. This call will fail if the session 60 * is already configured. On other failures, we will attempt to restore the 61 * previously used audio session configuration. 62 * |lockForConfiguration| must be called first. 63 * Successful calls to configureWebRTCSession must be matched by calls to 64 * |unconfigureWebRTCSession|. 65 */ 66 - (BOOL)configureWebRTCSession:(NSError **)outError; 67 68 /** Unconfigures the session for WebRTC. This will attempt to restore the 69 * audio session to the settings used before |configureWebRTCSession| was 70 * called. 71 * |lockForConfiguration| must be called first. 72 */ 73 - (BOOL)unconfigureWebRTCSession:(NSError **)outError; 74 75 /** Returns a configuration error with the given description. */ 76 - (NSError *)configurationErrorWithDescription:(NSString *)description; 77 78 // Properties and methods for tests. 79 - (void)notifyDidBeginInterruption; 80 - (void)notifyDidEndInterruptionWithShouldResumeSession:(BOOL)shouldResumeSession; 81 - (void)notifyDidChangeRouteWithReason:(AVAudioSessionRouteChangeReason)reason 82 previousRoute:(AVAudioSessionRouteDescription *)previousRoute; 83 - (void)notifyMediaServicesWereLost; 84 - (void)notifyMediaServicesWereReset; 85 - (void)notifyDidChangeCanPlayOrRecord:(BOOL)canPlayOrRecord; 86 - (void)notifyDidStartPlayOrRecord; 87 - (void)notifyDidStopPlayOrRecord; 88 - (void)notifyDidDetectPlayoutGlitch:(int64_t)totalNumberOfGlitches; 89 90 @end 91 92 NS_ASSUME_NONNULL_END 93