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
This commit is contained in:
davidliu
2022-03-12 02:26:09 +09:00
committed by GitHub
parent 288bd99dca
commit e7333174b5
3 changed files with 51 additions and 28 deletions
+2 -2
View File
@@ -2,14 +2,14 @@ group 'io.livekit.plugin'
version '1.0-SNAPSHOT' version '1.0-SNAPSHOT'
buildscript { buildscript {
ext.kotlin_version = '1.3.50' ext.kotlin_version = '1.6.10'
repositories { repositories {
google() google()
mavenCentral() mavenCentral()
} }
dependencies { 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" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
} }
} }
+3 -2
View File
@@ -1,5 +1,6 @@
#Tue Feb 15 15:44:59 JST 2022
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip zipStoreBase=GRADLE_USER_HOME
+46 -24
View File
@@ -1,3 +1,5 @@
import 'package:flutter/foundation.dart' show kIsWeb;
import '../track/local/audio.dart'; import '../track/local/audio.dart';
import '../track/local/video.dart'; import '../track/local/video.dart';
import '../types/video_parameters.dart'; import '../types/video_parameters.dart';
@@ -41,15 +43,23 @@ class CameraCaptureOptions extends VideoCaptureOptions {
super(params: captureOptions.params); super(params: captureOptions.params);
@override @override
Map<String, dynamic> toMediaConstraintsMap() => <String, dynamic>{ Map<String, dynamic> toMediaConstraintsMap() {
...super.toMediaConstraintsMap(), var constraints = <String, dynamic>{
'optional': [ ...super.toMediaConstraintsMap(),
'facingMode':
cameraPosition == CameraPosition.front ? 'user' : 'environment',
};
if (deviceId != null) {
if (kIsWeb) {
constraints['deviceId'] = deviceId;
} else {
constraints['optional'] = [
{'sourceId': deviceId} {'sourceId': deviceId}
], ];
'deviceId': deviceId, }
'facingMode': }
cameraPosition == CameraPosition.front ? 'user' : 'environment', return constraints;
}; }
// Returns new options with updated properties // Returns new options with updated properties
CameraCaptureOptions copyWith({ CameraCaptureOptions copyWith({
@@ -75,6 +85,7 @@ class ScreenShareCaptureOptions extends VideoCaptureOptions {
/// Base class for track options. /// Base class for track options.
abstract class LocalTrackOptions { abstract class LocalTrackOptions {
const LocalTrackOptions(); const LocalTrackOptions();
// All subclasses must be able to report constraints // All subclasses must be able to report constraints
Map<String, dynamic> toMediaConstraintsMap(); Map<String, dynamic> toMediaConstraintsMap();
} }
@@ -137,20 +148,31 @@ class AudioCaptureOptions extends LocalTrackOptions {
}); });
@override @override
Map<String, dynamic> toMediaConstraintsMap() => <String, dynamic>{ Map<String, dynamic> toMediaConstraintsMap() {
'deviceId': deviceId, var constraints = <String, dynamic>{
'optional': <Map<String, dynamic>>[ 'optional': <Map<String, dynamic>>[
<String, dynamic>{'sourceId': deviceId}, <String, dynamic>{'echoCancellation': echoCancellation},
<String, dynamic>{'echoCancellation': echoCancellation}, <String, dynamic>{'googDAEchoCancellation': echoCancellation},
<String, dynamic>{'googDAEchoCancellation': echoCancellation}, <String, dynamic>{'googEchoCancellation': echoCancellation},
<String, dynamic>{'googEchoCancellation': echoCancellation}, <String, dynamic>{'googEchoCancellation2': echoCancellation},
<String, dynamic>{'googEchoCancellation2': echoCancellation}, <String, dynamic>{'noiseSuppression': noiseSuppression},
<String, dynamic>{'noiseSuppression': noiseSuppression}, <String, dynamic>{'googNoiseSuppression': noiseSuppression},
<String, dynamic>{'googNoiseSuppression': noiseSuppression}, <String, dynamic>{'googNoiseSuppression2': noiseSuppression},
<String, dynamic>{'googNoiseSuppression2': noiseSuppression}, <String, dynamic>{'googAutoGainControl': autoGainControl},
<String, dynamic>{'googAutoGainControl': autoGainControl}, <String, dynamic>{'googHighpassFilter': highPassFilter},
<String, dynamic>{'googHighpassFilter': highPassFilter}, <String, dynamic>{'googTypingNoiseDetection': typingNoiseDetection},
<String, dynamic>{'googTypingNoiseDetection': typingNoiseDetection}, ],
], };
};
if (deviceId != null) {
if (kIsWeb) {
constraints['deviceId'] = deviceId;
} else {
constraints['optional']
.cast<Map<String, dynamic>>()
.add(<String, dynamic>{'sourceId': deviceId});
}
}
return constraints;
}
} }