From e7333174b5ea7d3eff70b1051dd1c248457c6b11 Mon Sep 17 00:00:00 2001 From: davidliu Date: Sat, 12 Mar 2022 02:26:09 +0900 Subject: [PATCH] Fix device id not working for web (#91) * update gradle * Use either sourceId or deviceId as needed Web does not allow for mixing optional constraints with modern constraints --- android/build.gradle | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 5 +- lib/src/track/options.dart | 70 ++++++++++++------- 3 files changed, 51 insertions(+), 28 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 0c4eacf..c0efc8a 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -2,14 +2,14 @@ group 'io.livekit.plugin' version '1.0-SNAPSHOT' buildscript { - ext.kotlin_version = '1.3.50' + ext.kotlin_version = '1.6.10' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:4.1.0' + classpath 'com.android.tools.build:gradle:7.1.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 3c9d085..e03d734 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Tue Feb 15 15:44:59 JST 2022 distributionBase=GRADLE_USER_HOME +distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +zipStoreBase=GRADLE_USER_HOME diff --git a/lib/src/track/options.dart b/lib/src/track/options.dart index a483de2..993ad42 100644 --- a/lib/src/track/options.dart +++ b/lib/src/track/options.dart @@ -1,3 +1,5 @@ +import 'package:flutter/foundation.dart' show kIsWeb; + import '../track/local/audio.dart'; import '../track/local/video.dart'; import '../types/video_parameters.dart'; @@ -41,15 +43,23 @@ class CameraCaptureOptions extends VideoCaptureOptions { super(params: captureOptions.params); @override - Map toMediaConstraintsMap() => { - ...super.toMediaConstraintsMap(), - 'optional': [ + Map toMediaConstraintsMap() { + var constraints = { + ...super.toMediaConstraintsMap(), + 'facingMode': + cameraPosition == CameraPosition.front ? 'user' : 'environment', + }; + if (deviceId != null) { + if (kIsWeb) { + constraints['deviceId'] = deviceId; + } else { + constraints['optional'] = [ {'sourceId': deviceId} - ], - 'deviceId': deviceId, - 'facingMode': - cameraPosition == CameraPosition.front ? 'user' : 'environment', - }; + ]; + } + } + return constraints; + } // Returns new options with updated properties CameraCaptureOptions copyWith({ @@ -75,6 +85,7 @@ class ScreenShareCaptureOptions extends VideoCaptureOptions { /// Base class for track options. abstract class LocalTrackOptions { const LocalTrackOptions(); + // All subclasses must be able to report constraints Map toMediaConstraintsMap(); } @@ -137,20 +148,31 @@ class AudioCaptureOptions extends LocalTrackOptions { }); @override - Map toMediaConstraintsMap() => { - 'deviceId': deviceId, - 'optional': >[ - {'sourceId': deviceId}, - {'echoCancellation': echoCancellation}, - {'googDAEchoCancellation': echoCancellation}, - {'googEchoCancellation': echoCancellation}, - {'googEchoCancellation2': echoCancellation}, - {'noiseSuppression': noiseSuppression}, - {'googNoiseSuppression': noiseSuppression}, - {'googNoiseSuppression2': noiseSuppression}, - {'googAutoGainControl': autoGainControl}, - {'googHighpassFilter': highPassFilter}, - {'googTypingNoiseDetection': typingNoiseDetection}, - ], - }; + Map toMediaConstraintsMap() { + var constraints = { + 'optional': >[ + {'echoCancellation': echoCancellation}, + {'googDAEchoCancellation': echoCancellation}, + {'googEchoCancellation': echoCancellation}, + {'googEchoCancellation2': echoCancellation}, + {'noiseSuppression': noiseSuppression}, + {'googNoiseSuppression': noiseSuppression}, + {'googNoiseSuppression2': noiseSuppression}, + {'googAutoGainControl': autoGainControl}, + {'googHighpassFilter': highPassFilter}, + {'googTypingNoiseDetection': typingNoiseDetection}, + ], + }; + + if (deviceId != null) { + if (kIsWeb) { + constraints['deviceId'] = deviceId; + } else { + constraints['optional'] + .cast>() + .add({'sourceId': deviceId}); + } + } + return constraints; + } }