Index: webrtc/modules/audio_device/ios/objc/RTCAudioSession.h |
diff --git a/webrtc/modules/audio_device/ios/objc/RTCAudioSession.h b/webrtc/modules/audio_device/ios/objc/RTCAudioSession.h |
index ab8dbc8859e64bebc404ffebc52e5950a11e07e9..274cc2bc978ca849f516032c52b5b2f1fa2da6c5 100644 |
--- a/webrtc/modules/audio_device/ios/objc/RTCAudioSession.h |
+++ b/webrtc/modules/audio_device/ios/objc/RTCAudioSession.h |
@@ -58,29 +58,18 @@ extern NSInteger const kRTCAudioSessionErrorConfiguration; |
// TODO(tkchin): Maybe handle SilenceSecondaryAudioHintNotification. |
-/** Called on a WebRTC thread when WebRTC needs to take over audio. Applications |
- * should call -[RTCAudioSession configureWebRTCSession] to allow WebRTC to |
- * play and record audio. Will only occur if shouldDelayAudioConfiguration is |
- * set to YES. |
- */ |
-- (void)audioSessionShouldConfigure:(RTCAudioSession *)session; |
- |
-/** Called on a WebRTC thread when WebRTC no longer requires audio. Applications |
- * should call -[RTCAudioSession unconfigureWebRTCSession] to restore their |
- * audio session settings. Will only occur if shouldDelayAudioConfiguration is |
- * set to YES. |
- */ |
-- (void)audioSessionShouldUnconfigure:(RTCAudioSession *)session; |
+- (void)audioSession:(RTCAudioSession *)session |
+ didChangeCanPlayOrRecord:(BOOL)canPlayOrRecord; |
-/** Called on a WebRTC thread when WebRTC has configured the audio session for |
- * WebRTC audio. |
+/** Called on a WebRTC thread when the audio device is notified to begin |
+ * playback or recording. |
*/ |
-- (void)audioSessionDidConfigure:(RTCAudioSession *)session; |
+- (void)audioSessionDidStartPlayOrRecord:(RTCAudioSession *)session; |
-/** Called on a WebRTC thread when WebRTC has unconfigured the audio session for |
- * WebRTC audio. |
+/** Called on a WebRTC thread when the audio device is notified to stop |
+ * playback or recording. |
*/ |
-- (void)audioSessionDidUnconfigure:(RTCAudioSession *)session; |
+- (void)audioSessionDidStopPlayOrRecord:(RTCAudioSession *)session; |
@end |
@@ -108,11 +97,24 @@ extern NSInteger const kRTCAudioSessionErrorConfiguration; |
/** If YES, WebRTC will not initialize the audio unit automatically when an |
* audio track is ready for playout or recording. Instead, applications should |
- * listen to the delegate method |audioSessionShouldConfigure| and configure |
- * the session manually. This should be set before making WebRTC media calls |
- * and should not be changed while a call is active. |
+ * call setIsAudioEnabled. If NO, WebRTC will initialize the audio unit |
+ * as soon as an audio track is ready for playout or recording. |
*/ |
-@property(nonatomic, assign) BOOL shouldDelayAudioConfiguration; |
+@property(nonatomic, assign) BOOL useManualAudio; |
+ |
+/** This property is only effective if useManualAudio is YES. |
+ * Represents permission for WebRTC to initialize the VoIP audio unit. |
+ * When set to NO, if the VoIP audio unit used by WebRTC is active, it will be |
+ * stopped and uninitialized. This will stop incoming and outgoing audio. |
+ * When set to YES, WebRTC will initialize and start the audio unit when it is |
+ * needed (e.g. due to establishing an audio connection). |
+ * This property was introduced to work around an issue where if an AVPlayer is |
+ * playing audio while the VoIP audio unit is initialized, its audio would be |
+ * either cut off completely or played at a reduced volume. By preventing |
+ * the audio unit from being initialized until after the audio has completed, |
+ * we are able to prevent the abrupt cutoff. |
+ */ |
+@property(nonatomic, assign) BOOL isAudioEnabled; |
// Proxy properties. |
@property(readonly) NSString *category; |
@@ -134,12 +136,14 @@ extern NSInteger const kRTCAudioSessionErrorConfiguration; |
@property(readonly, nullable) |
AVAudioSessionDataSourceDescription *outputDataSource; |
@property(readonly) double sampleRate; |
+@property(readonly) double preferredSampleRate; |
@property(readonly) NSInteger inputNumberOfChannels; |
@property(readonly) NSInteger outputNumberOfChannels; |
@property(readonly) float outputVolume; |
@property(readonly) NSTimeInterval inputLatency; |
@property(readonly) NSTimeInterval outputLatency; |
@property(readonly) NSTimeInterval IOBufferDuration; |
+@property(readonly) NSTimeInterval preferredIOBufferDuration; |
/** Default constructor. */ |
+ (instancetype)sharedInstance; |
@@ -196,36 +200,20 @@ extern NSInteger const kRTCAudioSessionErrorConfiguration; |
@interface RTCAudioSession (Configuration) |
-/** Whether or not |configureWebRTCSession| has been called without a balanced |
- * call to |unconfigureWebRTCSession|. This is not an indication of whether the |
- * audio session has the right settings. |
- */ |
-@property(readonly) BOOL isConfiguredForWebRTC; |
- |
/** Applies the configuration to the current session. Attempts to set all |
* properties even if previous ones fail. Only the last error will be |
- * returned. Also calls setActive with |active|. |
+ * returned. |
* |lockForConfiguration| must be called first. |
*/ |
- (BOOL)setConfiguration:(RTCAudioSessionConfiguration *)configuration |
- active:(BOOL)active |
error:(NSError **)outError; |
-/** Configure the audio session for WebRTC. This call will fail if the session |
- * is already configured. On other failures, we will attempt to restore the |
- * previously used audio session configuration. |
- * |lockForConfiguration| must be called first. |
- * Successful calls to configureWebRTCSession must be matched by calls to |
- * |unconfigureWebRTCSession|. |
- */ |
-- (BOOL)configureWebRTCSession:(NSError **)outError; |
- |
-/** Unconfigures the session for WebRTC. This will attempt to restore the |
- * audio session to the settings used before |configureWebRTCSession| was |
- * called. |
+/** Convenience method that calls both setConfiguration and setActive. |
* |lockForConfiguration| must be called first. |
*/ |
-- (BOOL)unconfigureWebRTCSession:(NSError **)outError; |
+- (BOOL)setConfiguration:(RTCAudioSessionConfiguration *)configuration |
+ active:(BOOL)active |
+ error:(NSError **)outError; |
@end |