@@ -24,8 +24,20 @@ class MediaDevicesWeb extends MediaDevices {
24
24
mediaConstraints.putIfAbsent ('audio' , () => false );
25
25
26
26
final mediaDevices = html.window.navigator.mediaDevices;
27
- final jsStream = await mediaDevices.getUserMedia (mediaConstraints);
28
- return MediaStreamWeb (jsStream, 'local' );
27
+
28
+ if (jsutil.hasProperty (mediaDevices, 'getUserMedia' )) {
29
+ var args = jsutil.jsify (mediaConstraints);
30
+ final jsStream = await jsutil.promiseToFuture< html.MediaStream > (
31
+ jsutil.callMethod (mediaDevices, 'getUserMedia' , [args]));
32
+
33
+ return MediaStreamWeb (jsStream, 'local' );
34
+ } else {
35
+ final jsStream = await html.window.navigator.getUserMedia (
36
+ audio: mediaConstraints['audio' ],
37
+ video: mediaConstraints['video' ],
38
+ );
39
+ return MediaStreamWeb (jsStream, 'local' );
40
+ }
29
41
} catch (e) {
30
42
throw 'Unable to getUserMedia: ${e .toString ()}' ;
31
43
}
@@ -56,13 +68,16 @@ class MediaDevicesWeb extends MediaDevices {
56
68
@override
57
69
Future <List <dynamic >> getSources () async {
58
70
final devices = await html.window.navigator.mediaDevices.enumerateDevices ();
71
+
59
72
final result = < dynamic > [];
60
73
for (final device in devices) {
74
+ var input = device as html.MediaDeviceInfo ;
75
+ // info
61
76
result.add (< String , String > {
62
- 'deviceId' : device .deviceId,
63
- 'groupId' : device .groupId,
64
- 'kind' : device .kind,
65
- 'label' : device .label
77
+ 'deviceId' : input .deviceId,
78
+ 'groupId' : input .groupId,
79
+ 'kind' : input .kind,
80
+ 'label' : input .label
66
81
});
67
82
}
68
83
return result;
0 commit comments