Skip to content

Commit d34fe51

Browse files
authored
feat: Automatically configure audio mode for Android. (#746)
* feat: Automatically configure audio mode for Android. * import sorter.
1 parent fc276ab commit d34fe51

File tree

3 files changed

+30
-1
lines changed

3 files changed

+30
-1
lines changed

lib/src/core/room.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ import '../support/disposable.dart';
4141
import '../support/platform.dart';
4242
import '../support/region_url_provider.dart';
4343
import '../support/websocket.dart' show WebSocketException;
44+
import '../track/audio_management.dart';
4445
import '../track/local/audio.dart';
4546
import '../track/local/video.dart';
4647
import '../track/track.dart';
@@ -244,6 +245,10 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
244245
logger.warning('could not fetch region settings $e');
245246
}));
246247
}
248+
249+
// configure audio for native platform
250+
await NativeAudioManagement.start();
251+
247252
try {
248253
await engine.connect(
249254
_regionUrl ?? url,
@@ -936,6 +941,8 @@ extension RoomPrivateMethods on Room {
936941
// clean up engine
937942
await engine.cleanUp();
938943

944+
await NativeAudioManagement.stop();
945+
939946
// reset params
940947
_name = null;
941948
_metadata = null;

lib/src/track/audio_management.dart

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15+
import 'package:flutter_webrtc/flutter_webrtc.dart' as rtc;
1516
import 'package:synchronized/synchronized.dart' as sync;
1617

1718
import '../hardware/hardware.dart';
@@ -159,3 +160,24 @@ Future<NativeAudioConfiguration> defaultNativeAudioConfigurationFunc(
159160
? NativeAudioConfiguration.playAndRecordSpeaker
160161
: NativeAudioConfiguration.playAndRecordReceiver;
161162
}
163+
164+
class NativeAudioManagement {
165+
static Future<void> start() async {
166+
// Audio configuration for Android.
167+
if (lkPlatformIs(PlatformType.android)) {
168+
if (Native.bypassVoiceProcessing) {
169+
await rtc.Helper.setAndroidAudioConfiguration(
170+
rtc.AndroidAudioConfiguration.media);
171+
} else {
172+
await rtc.Helper.setAndroidAudioConfiguration(
173+
rtc.AndroidAudioConfiguration.communication);
174+
}
175+
}
176+
}
177+
178+
static Future<void> stop() async {
179+
if (lkPlatformIs(PlatformType.android)) {
180+
await rtc.Helper.clearAndroidCommunicationDevice();
181+
}
182+
}
183+
}

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ dependencies:
3737
uuid: ^4.5.1
3838
synchronized: ^3.0.0+3
3939
protobuf: ^3.0.0
40-
flutter_webrtc: ^0.13.1
40+
flutter_webrtc: ^0.13.1+hotfix.1
4141
device_info_plus: ^11.3.0
4242
dart_webrtc: ^1.5.3
4343
sdp_transform: ^0.3.2

0 commit comments

Comments
 (0)