blob: 8ad0c21105d9b5eebc4e941a136ea5dc988a5f7e [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
tkchine54467f2016-03-15 16:54:03 -070013#include <vector>
14
Zeke Chinb3fb71c2016-02-18 15:44:07 -080015NS_ASSUME_NONNULL_BEGIN
16
Tze Kwang Chin307a0922016-03-21 13:57:40 -070017@class RTCAudioSessionConfiguration;
18
Zeke Chinb3fb71c2016-02-18 15:44:07 -080019@interface RTCAudioSession ()
20
Zeke Chinb3fb71c2016-02-18 15:44:07 -080021/** Number of times setActive:YES has succeeded without a balanced call to
22 * setActive:NO.
23 */
Tze Kwang Chin307a0922016-03-21 13:57:40 -070024@property(nonatomic, readonly) int activationCount;
25
26/** The number of times |beginWebRTCSession| was called without a balanced call
27 * to |endWebRTCSession|.
28 */
29@property(nonatomic, readonly) int webRTCSessionCount;
30
tkchind2511962016-05-06 18:54:15 -070031/** Convenience BOOL that checks useManualAudio and isAudioEnebled. */
32@property(readonly) BOOL canPlayOrRecord;
Zeke Chinb3fb71c2016-02-18 15:44:07 -080033
tkchin93dd6342016-07-27 10:17:14 -070034/** Tracks whether we have been sent an interruption event that hasn't been matched by either an
35 * interrupted end event or a foreground event.
36 */
37@property(nonatomic, assign) BOOL isInterrupted;
38
tkchin9f987d32016-03-12 20:06:28 -080039- (BOOL)checkLock:(NSError **)outError;
40
tkchine54467f2016-03-15 16:54:03 -070041/** Adds the delegate to the list of delegates, and places it at the front of
42 * the list. This delegate will be notified before other delegates of
43 * audio events.
44 */
45- (void)pushDelegate:(id<RTCAudioSessionDelegate>)delegate;
46
Tze Kwang Chin307a0922016-03-21 13:57:40 -070047/** Signals RTCAudioSession that a WebRTC session is about to begin and
48 * audio configuration is needed. Will configure the audio session for WebRTC
49 * if not already configured and if configuration is not delayed.
50 * Successful calls must be balanced by a call to endWebRTCSession.
51 */
52- (BOOL)beginWebRTCSession:(NSError **)outError;
53
54/** Signals RTCAudioSession that a WebRTC session is about to end and audio
55 * unconfiguration is needed. Will unconfigure the audio session for WebRTC
56 * if this is the last unmatched call and if configuration is not delayed.
57 */
58- (BOOL)endWebRTCSession:(NSError **)outError;
59
tkchind2511962016-05-06 18:54:15 -070060/** Configure the audio session for WebRTC. This call will fail if the session
61 * is already configured. On other failures, we will attempt to restore the
62 * previously used audio session configuration.
63 * |lockForConfiguration| must be called first.
64 * Successful calls to configureWebRTCSession must be matched by calls to
65 * |unconfigureWebRTCSession|.
66 */
67- (BOOL)configureWebRTCSession:(NSError **)outError;
68
69/** Unconfigures the session for WebRTC. This will attempt to restore the
70 * audio session to the settings used before |configureWebRTCSession| was
71 * called.
72 * |lockForConfiguration| must be called first.
73 */
74- (BOOL)unconfigureWebRTCSession:(NSError **)outError;
75
Tze Kwang Chin307a0922016-03-21 13:57:40 -070076/** Returns a configuration error with the given description. */
77- (NSError *)configurationErrorWithDescription:(NSString *)description;
78
tkchine54467f2016-03-15 16:54:03 -070079// Properties and methods for tests.
Yves Gerey665174f2018-06-19 15:03:05 +020080@property(nonatomic, readonly) std::vector<__weak id<RTCAudioSessionDelegate> > delegates;
Tze Kwang Chin307a0922016-03-21 13:57:40 -070081
tkchine54467f2016-03-15 16:54:03 -070082- (void)notifyDidBeginInterruption;
Yves Gerey665174f2018-06-19 15:03:05 +020083- (void)notifyDidEndInterruptionWithShouldResumeSession:(BOOL)shouldResumeSession;
tkchine54467f2016-03-15 16:54:03 -070084- (void)notifyDidChangeRouteWithReason:(AVAudioSessionRouteChangeReason)reason
Yves Gerey665174f2018-06-19 15:03:05 +020085 previousRoute:(AVAudioSessionRouteDescription *)previousRoute;
tkchine54467f2016-03-15 16:54:03 -070086- (void)notifyMediaServicesWereLost;
87- (void)notifyMediaServicesWereReset;
tkchind2511962016-05-06 18:54:15 -070088- (void)notifyDidChangeCanPlayOrRecord:(BOOL)canPlayOrRecord;
89- (void)notifyDidStartPlayOrRecord;
90- (void)notifyDidStopPlayOrRecord;
Anders Carlsson121ea322017-06-26 15:34:47 +020091- (void)notifyDidDetectPlayoutGlitch:(int64_t)totalNumberOfGlitches;
tkchine54467f2016-03-15 16:54:03 -070092
Zeke Chinb3fb71c2016-02-18 15:44:07 -080093@end
94
95NS_ASSUME_NONNULL_END