From 288bd99dca4604cf04be0db5e6daf49abb99f535 Mon Sep 17 00:00:00 2001 From: davidliu Date: Thu, 10 Mar 2022 00:08:21 +0900 Subject: [PATCH] add ability to select capture device ids (#89) * add ability to select capture device ids * format fix --- lib/src/track/options.dart | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/lib/src/track/options.dart b/lib/src/track/options.dart index 7dfd5d7..a483de2 100644 --- a/lib/src/track/options.dart +++ b/lib/src/track/options.dart @@ -19,20 +19,34 @@ extension CameraPositionExt on CameraPosition { /// Options used when creating a [LocalVideoTrack] that captures the camera. class CameraCaptureOptions extends VideoCaptureOptions { + /// The deviceId of the capture device to use. + /// Available deviceIds can be obtained through `flutter_webrtc`: + ///
+  /// import 'package:flutter_webrtc/flutter_webrtc.dart' as rtc;
+  ///
+  /// List devices = await rtc.navigator.mediaDevices.enumerateDevices();
+  /// 
+ final String? deviceId; final CameraPosition cameraPosition; const CameraCaptureOptions({ + this.deviceId, this.cameraPosition = CameraPosition.front, VideoParameters params = VideoParametersPresets.h540_169, }) : super(params: params); CameraCaptureOptions.from({required VideoCaptureOptions captureOptions}) - : cameraPosition = CameraPosition.front, + : deviceId = null, + cameraPosition = CameraPosition.front, super(params: captureOptions.params); @override Map toMediaConstraintsMap() => { ...super.toMediaConstraintsMap(), + 'optional': [ + {'sourceId': deviceId} + ], + 'deviceId': deviceId, 'facingMode': cameraPosition == CameraPosition.front ? 'user' : 'environment', }; @@ -81,6 +95,15 @@ abstract class VideoCaptureOptions extends LocalTrackOptions { /// Options used when creating a [LocalAudioTrack]. class AudioCaptureOptions extends LocalTrackOptions { + /// The deviceId of the capture device to use. + /// Available deviceIds can be obtained through `flutter_webrtc`: + ///
+  /// import 'package:flutter_webrtc/flutter_webrtc.dart' as rtc;
+  ///
+  /// List devices = await rtc.navigator.mediaDevices.enumerateDevices();
+  /// 
+ final String? deviceId; + /// Attempt to use noiseSuppression option (if supported by the platform) /// See https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackSettings/noiseSuppression /// Defaults to true. @@ -105,6 +128,7 @@ class AudioCaptureOptions extends LocalTrackOptions { final bool typingNoiseDetection; const AudioCaptureOptions({ + this.deviceId, this.noiseSuppression = true, this.echoCancellation = true, this.autoGainControl = true, @@ -114,7 +138,9 @@ class AudioCaptureOptions extends LocalTrackOptions { @override Map toMediaConstraintsMap() => { + 'deviceId': deviceId, 'optional': >[ + {'sourceId': deviceId}, {'echoCancellation': echoCancellation}, {'googDAEchoCancellation': echoCancellation}, {'googEchoCancellation': echoCancellation},