@@ -117,23 +117,26 @@ public class LivekitReactNativeModule: RCTEventEmitter {
117117
118118 resolve ( nil )
119119 }
120-
121- @objc ( setAppleAudioConfiguration: )
122- public func setAppleAudioConfiguration( _ configuration: NSDictionary ) {
120+
121+ @objc ( setAppleAudioConfiguration: withResolver : withRejecter : )
122+ public func setAppleAudioConfiguration( _ configuration: NSDictionary , resolve : RCTPromiseResolveBlock , reject : RCTPromiseRejectBlock ) {
123123 let session = RTCAudioSession . sharedInstance ( )
124124 let config = RTCAudioSessionConfiguration . webRTC ( )
125-
125+
126126 let appleAudioCategory = configuration [ " audioCategory " ] as? String
127127 let appleAudioCategoryOptions = configuration [ " audioCategoryOptions " ] as? [ String ]
128128 let appleAudioMode = configuration [ " audioMode " ] as? String
129-
129+
130130 session. lockForConfiguration ( )
131-
131+ defer {
132+ session. unlockForConfiguration ( )
133+ }
134+
132135 var categoryChanged = false
133-
136+
134137 if let appleAudioCategoryOptions = appleAudioCategoryOptions {
135138 categoryChanged = true
136-
139+
137140 var newOptions : AVAudioSession . CategoryOptions = [ ]
138141 for option in appleAudioCategoryOptions {
139142 if option == " mixWithOthers " {
@@ -152,33 +155,43 @@ public class LivekitReactNativeModule: RCTEventEmitter {
152155 }
153156 config. categoryOptions = newOptions
154157 }
155-
158+
156159 if let appleAudioCategory = appleAudioCategory {
157160 categoryChanged = true
158161 config. category = AudioUtils . audioSessionCategoryFromString ( appleAudioCategory) . rawValue
159162 }
160-
163+
161164 if categoryChanged {
162165 do {
163166 try session. setCategory ( AVAudioSession . Category ( rawValue: config. category) , with: config. categoryOptions)
164167 } catch {
165- NSLog ( " Error setting category: %@ " , error. localizedDescription)
168+ reject ( " setAppleAudioConfiguration " , " Error setting category: \( error. localizedDescription) " , error)
169+ return
166170 }
167171 }
168-
172+
169173 if let appleAudioMode = appleAudioMode {
170174 let mode = AudioUtils . audioSessionModeFromString ( appleAudioMode)
171175 config. mode = mode. rawValue
172176 do {
173177 try session. setMode ( mode)
174178 } catch {
175- NSLog ( " Error setting mode: %@ " , error. localizedDescription)
179+ reject ( " setAppleAudioConfiguration " , " Error setting mode: \( error. localizedDescription) " , error)
180+ return
176181 }
177182 }
178-
179- session. unlockForConfiguration ( )
183+
184+ // Activate the audio session
185+ do {
186+ try session. setActive ( true )
187+ } catch {
188+ reject ( " setAppleAudioConfiguration " , " Error activating audio session: \( error. localizedDescription) " , error)
189+ return
190+ }
191+
192+ resolve ( nil )
180193 }
181-
194+
182195 @objc ( createAudioSinkListener: trackId: )
183196 public func createAudioSinkListener( _ pcId: NSNumber , trackId: String ) -> String {
184197 let renderer = AudioSinkRenderer ( eventEmitter: self )
0 commit comments