Skip to content

Commit 982acc8

Browse files
committed
Implementation 1
1 parent 1e39e0f commit 982acc8

3 files changed

Lines changed: 37 additions & 18 deletions

File tree

ios/AudioUtils.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@ public class AudioUtils {
66
case "default_":
77
.default
88
case "voicePrompt":
9-
.voicePrompt
9+
if #available(iOS 12.0, *) {
10+
.voicePrompt
11+
} else {
12+
.default
13+
}
1014
case "videoRecording":
1115
.videoRecording
1216
case "videoChat":

ios/LiveKitReactNativeModule.swift

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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)

ios/LivekitReactNativeModule.m

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ @interface RCT_EXTERN_MODULE(LivekitReactNativeModule, RCTEventEmitter)
1919

2020

2121
/// Configure audio config for WebRTC
22-
RCT_EXTERN_METHOD(setAppleAudioConfiguration:(NSDictionary *) configuration)
22+
RCT_EXTERN_METHOD(setAppleAudioConfiguration:(NSDictionary *)configuration
23+
withResolver:(RCTPromiseResolveBlock)resolve
24+
withRejecter:(RCTPromiseRejectBlock)reject)
2325

2426
RCT_EXTERN__BLOCKING_SYNCHRONOUS_METHOD(createAudioSinkListener:(nonnull NSNumber *)pcId
2527
trackId:(nonnull NSString *)trackId)

0 commit comments

Comments
 (0)