blob: 4c1eb1c44ad4fec10808799361b4739de4a62131 [file] [log] [blame]
Zeke Chinb3fb71c2016-02-18 15:44:07 -08001/*
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
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020011#import "RTCAudioSession.h"
Zeke Chinb3fb71c2016-02-18 15:44:07 -080012
13NS_ASSUME_NONNULL_BEGIN
14
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020015@class RTC_OBJC_TYPE(RTCAudioSessionConfiguration);
Tze Kwang Chin307a0922016-03-21 13:57:40 -070016
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020017@interface RTC_OBJC_TYPE (RTCAudioSession)
18()
Zeke Chinb3fb71c2016-02-18 15:44:07 -080019
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020020 /** Number of times setActive:YES has succeeded without a balanced call to
21 * setActive:NO.
22 */
23 @property(nonatomic, readonly) int activationCount;
Tze Kwang Chin307a0922016-03-21 13:57:40 -070024
25/** The number of times |beginWebRTCSession| was called without a balanced call
26 * to |endWebRTCSession|.
27 */
28@property(nonatomic, readonly) int webRTCSessionCount;
29
tkchind2511962016-05-06 18:54:15 -070030/** Convenience BOOL that checks useManualAudio and isAudioEnebled. */
31@property(readonly) BOOL canPlayOrRecord;
Zeke Chinb3fb71c2016-02-18 15:44:07 -080032
tkchin93dd6342016-07-27 10:17:14 -070033/** 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
tkchin9f987d32016-03-12 20:06:28 -080038- (BOOL)checkLock:(NSError **)outError;
39
tkchine54467f2016-03-15 16:54:03 -070040/** 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 */
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020044- (void)pushDelegate:(id<RTC_OBJC_TYPE(RTCAudioSessionDelegate)>)delegate;
tkchine54467f2016-03-15 16:54:03 -070045
Tze Kwang Chin307a0922016-03-21 13:57:40 -070046/** 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
tkchind2511962016-05-06 18:54:15 -070059/** 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
Tze Kwang Chin307a0922016-03-21 13:57:40 -070075/** Returns a configuration error with the given description. */
76- (NSError *)configurationErrorWithDescription:(NSString *)description;
77
tkchine54467f2016-03-15 16:54:03 -070078// Properties and methods for tests.
tkchine54467f2016-03-15 16:54:03 -070079- (void)notifyDidBeginInterruption;
Yves Gerey665174f2018-06-19 15:03:05 +020080- (void)notifyDidEndInterruptionWithShouldResumeSession:(BOOL)shouldResumeSession;
tkchine54467f2016-03-15 16:54:03 -070081- (void)notifyDidChangeRouteWithReason:(AVAudioSessionRouteChangeReason)reason
Yves Gerey665174f2018-06-19 15:03:05 +020082 previousRoute:(AVAudioSessionRouteDescription *)previousRoute;
tkchine54467f2016-03-15 16:54:03 -070083- (void)notifyMediaServicesWereLost;
84- (void)notifyMediaServicesWereReset;
tkchind2511962016-05-06 18:54:15 -070085- (void)notifyDidChangeCanPlayOrRecord:(BOOL)canPlayOrRecord;
86- (void)notifyDidStartPlayOrRecord;
87- (void)notifyDidStopPlayOrRecord;
Anders Carlsson121ea322017-06-26 15:34:47 +020088- (void)notifyDidDetectPlayoutGlitch:(int64_t)totalNumberOfGlitches;
tkchine54467f2016-03-15 16:54:03 -070089
Zeke Chinb3fb71c2016-02-18 15:44:07 -080090@end
91
92NS_ASSUME_NONNULL_END