【发布时间】:2020-04-11 17:43:30
【问题描述】:
Dart SDK 尚不支持 MediaDevices 类中的某些方法,包括 getUserMedia https://github.com/dart-lang/sdk/issues/35253。对于像 Chrome 和 Firefox 这样的浏览器,这没问题,因为仍然可以直接在 window.navigator 对象上找到基于回调的较旧的 getUserMedia 实现。但是对于我认为最近才实现此功能的 Safari,仅支持返回承诺的较新 MediaDevices 变体。
我正在努力弄清楚如何将此方法添加到 Dart 现有的 MediaDevices 类中,以便它可以调用本机 javascript 函数,处理生成的 promise 并将成功传递的结果转换回 Dart MediaStream 对象。
这里有一篇看起来很有希望的旧帖子,但我现在无法让该示例成功运行,并怀疑它与 Dart 2+ 无关,或者如果 Dart 类已经存在则无关(这就是我得到的错误表示)。 Dart JS Interop 0.6.0 and JS Promises - resolving
我最接近成功的是回到 Dart 的旧 JsObject 互操作方法。我可以调用 getUserMedia 方法并接收一个 Promise 对象,但目前它总是失败并出现一个错误,指出我必须请求音频或视频。所以我的参数语法或它如何转换为 JS 有问题:
JsObject jsObj = context['navigator']['mediaDevices'];
JsObject promise = jsObj.callMethod("getUserMedia",
[{'audio': true, 'video': false}]);
promise.callMethod('then', [
(_){
completer.complete(true);
print('success...');
},
(e){
completer.complete(false);
print('fail...');
}
]);
但是,即使我通过了这个,我仍然看不到如何将结果转换回 Dart MediaStream 对象。有谁知道可用于填写这样的缺失 SDK 片段的任何信息?
【问题讨论】:
标签: dart safari getusermedia