diff --git a/ios/Classes/SwiftLiveKitPlugin.swift b/ios/Classes/SwiftLiveKitPlugin.swift index 2571257..329cf4c 100644 --- a/ios/Classes/SwiftLiveKitPlugin.swift +++ b/ios/Classes/SwiftLiveKitPlugin.swift @@ -79,15 +79,39 @@ public class SwiftLiveKitPlugin: NSObject, FlutterPlugin { print("[LiveKit] Configuring mode: ", configuration.mode) } - let session = RTCAudioSession.sharedInstance() - session.lockForConfiguration() + // get `RTCAudioSession` and lock + let rtcSession = RTCAudioSession.sharedInstance() + rtcSession.lockForConfiguration() + + var isLocked: Bool = true + let unlock = { + guard isLocked else { + print("[LiveKit] not locked, ignoring unlock") + return + } + rtcSession.unlockForConfiguration() + isLocked = false + } + + // always `unlock()` when exiting scope, calling multiple times has no side-effect defer { - session.unlockForConfiguration() + unlock() } do { - try session.setConfiguration(configuration, active: true) - print("[LiveKit] Configure success") + try rtcSession.setConfiguration(configuration, active: true) + // unlock here before configuring `AVAudioSession` + // unlock() + print("[LiveKit] RTCAudioSession Configure success") + + // also configure longFormAudio + // let avSession = AVAudioSession.sharedInstance() + // try avSession.setCategory(AVAudioSession.Category(rawValue: configuration.category), + // mode: AVAudioSession.Mode(rawValue: configuration.mode), + // policy: .default, + // options: configuration.categoryOptions) + // print("[LiveKit] AVAudioSession Configure success") + result(true) } catch let error { print("[LiveKit] Configure audio error: ", error) diff --git a/lib/src/track/audio_track.dart b/lib/src/track/audio_track.dart index cfb365e..26808ec 100644 --- a/lib/src/track/audio_track.dart +++ b/lib/src/track/audio_track.dart @@ -140,7 +140,6 @@ Future defaultNativeAudioConfigurationFunc( appleAudioCategory: AppleAudioCategory.playback, appleAudioCategoryOptions: { AppleAudioCategoryOption.mixWithOthers, - // IosAudioCategoryOption.duckOthers, }, appleAudioMode: AppleAudioMode.spokenAudio, ); @@ -153,9 +152,8 @@ Future defaultNativeAudioConfigurationFunc( appleAudioCategoryOptions: { AppleAudioCategoryOption.allowBluetooth, AppleAudioCategoryOption.mixWithOthers, - // IosAudioCategoryOption.duckOthers, }, - appleAudioMode: AppleAudioMode.voiceChat, + appleAudioMode: AppleAudioMode.videoChat, ); }