【问题标题】:adding support for navigator.mediaDevices.getUserMedia to Dart向 Dart 添加对 navigator.mediaDevices.getUserMedia 的支持
【发布时间】: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


    【解决方案1】:

    这是一种解决方法。我没有让 Dart 与 navigator.mediaDevices.getUserMedia 正确交互,而是将 getUserMedia 的回调实现添加到导航器对象(如果它不存在)(即 Safari)。它只是反过来在 mediaDevices 对象上调用基于 Promise 的版本。

    <script>
        if (navigator.getUserMedia == undefined && navigator.mediaDevices.getUserMedia){
            navigator.getUserMedia = function(constraints, success, error){
                navigator.mediaDevices.getUserMedia({audio: true, video: false})
                .then((mediaStream) => {
                    success(mediaStream);
                })
                .catch((err) => {
                    error(err);
                });
            };
        }
    </script>
    

    【讨论】:

      猜你喜欢
      • 2020-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-16
      • 2020-10-30
      • 2011-03-10
      • 1970-01-01
      相关资源
      最近更新 更多