@@ -121,44 +121,59 @@ +(void)setup {
121
121
122
122
// / Configure audio config for WebRTC
123
123
RCT_EXPORT_METHOD (setAppleAudioConfiguration:(NSDictionary *) configuration){
124
- RTCAudioSession* session = [RTCAudioSession sharedInstance ];
125
- RTCAudioSessionConfiguration* config = [RTCAudioSessionConfiguration webRTCConfiguration ];
126
-
127
- NSString * appleAudioCategory = configuration[@" audioCategory" ];
128
- NSArray * appleAudioCategoryOptions = configuration[@" audioCategoryOptions" ];
129
- NSString * appleAudioMode = configuration[@" audioMode" ];
130
-
131
- [session lockForConfiguration ];
132
-
133
- if (appleAudioCategoryOptions != nil ) {
134
- config.categoryOptions = 0 ;
135
- for (NSString * option in appleAudioCategoryOptions) {
136
- if ([@" mixWithOthers" isEqualToString: option]) {
137
- config.categoryOptions |= AVAudioSessionCategoryOptionMixWithOthers;
138
- } else if ([@" duckOthers" isEqualToString: option]) {
139
- config.categoryOptions |= AVAudioSessionCategoryOptionDuckOthers;
140
- } else if ([@" allowBluetooth" isEqualToString: option]) {
141
- config.categoryOptions |= AVAudioSessionCategoryOptionAllowBluetooth;
142
- } else if ([@" allowBluetoothA2DP" isEqualToString: option]) {
143
- config.categoryOptions |= AVAudioSessionCategoryOptionAllowBluetoothA2DP;
144
- } else if ([@" allowAirPlay" isEqualToString: option]) {
145
- config.categoryOptions |= AVAudioSessionCategoryOptionAllowAirPlay;
146
- } else if ([@" defaultToSpeaker" isEqualToString: option]) {
147
- config.categoryOptions |= AVAudioSessionCategoryOptionDefaultToSpeaker;
148
- }
124
+ RTCAudioSession* session = [RTCAudioSession sharedInstance ];
125
+ RTCAudioSessionConfiguration* config = [RTCAudioSessionConfiguration webRTCConfiguration ];
126
+
127
+ NSString * appleAudioCategory = configuration[@" audioCategory" ];
128
+ NSArray * appleAudioCategoryOptions = configuration[@" audioCategoryOptions" ];
129
+ NSString * appleAudioMode = configuration[@" audioMode" ];
130
+
131
+ [session lockForConfiguration ];
132
+
133
+ NSError * error = nil ;
134
+ BOOL categoryChanged = NO ;
135
+ if (appleAudioCategoryOptions != nil ) {
136
+ categoryChanged = YES ;
137
+ config.categoryOptions = 0 ;
138
+ for (NSString * option in appleAudioCategoryOptions) {
139
+ if ([@" mixWithOthers" isEqualToString: option]) {
140
+ config.categoryOptions |= AVAudioSessionCategoryOptionMixWithOthers;
141
+ } else if ([@" duckOthers" isEqualToString: option]) {
142
+ config.categoryOptions |= AVAudioSessionCategoryOptionDuckOthers;
143
+ } else if ([@" allowBluetooth" isEqualToString: option]) {
144
+ config.categoryOptions |= AVAudioSessionCategoryOptionAllowBluetooth;
145
+ } else if ([@" allowBluetoothA2DP" isEqualToString: option]) {
146
+ config.categoryOptions |= AVAudioSessionCategoryOptionAllowBluetoothA2DP;
147
+ } else if ([@" allowAirPlay" isEqualToString: option]) {
148
+ config.categoryOptions |= AVAudioSessionCategoryOptionAllowAirPlay;
149
+ } else if ([@" defaultToSpeaker" isEqualToString: option]) {
150
+ config.categoryOptions |= AVAudioSessionCategoryOptionDefaultToSpeaker;
151
+ }
152
+ }
149
153
}
150
- }
151
154
152
- if (appleAudioCategory != nil ) {
153
- config.category = [AudioUtils audioSessionCategoryFromString: appleAudioCategory];
154
- [session setCategory: config.category withOptions: config.categoryOptions error: nil ];
155
- }
155
+ if (appleAudioCategory != nil ) {
156
+ categoryChanged = YES ;
157
+ config.category = [AudioUtils audioSessionCategoryFromString: appleAudioCategory];
158
+ }
159
+
160
+ if (categoryChanged) {
161
+ [session setCategory: config.category withOptions: config.categoryOptions error: &error];
162
+ if (error != nil ) {
163
+ NSLog (@" Error setting category: %@ " , [error localizedDescription ]);
164
+ error = nil ;
165
+ }
166
+ }
156
167
157
- if (appleAudioMode != nil ) {
158
- config.mode = [AudioUtils audioSessionModeFromString: appleAudioMode];
159
- [session setMode: config.mode error: nil ];
160
- }
168
+ if (appleAudioMode != nil ) {
169
+ config.mode = [AudioUtils audioSessionModeFromString: appleAudioMode];
170
+ [session setMode: config.mode error: &error];
171
+ if (error != nil ) {
172
+ NSLog (@" Error setting category: %@ " , [error localizedDescription ]);
173
+ error = nil ;
174
+ }
175
+ }
161
176
162
- [session unlockForConfiguration ];
177
+ [session unlockForConfiguration ];
163
178
}
164
179
@end
0 commit comments