【问题标题】:passing Dart MediaStreamTrack to JavaScript将 Dart MediaStreamTrack 传递给 JavaScript
【发布时间】:2021-03-11 08:26:11
【问题描述】:

我正在尝试将第三方 JS 库用于某些 WebRTC 功能,并且我希望能够使用我已经在基于 Dart 的音频应用程序中生成的 MediaStreamTrack 对象。我遇到的问题是 Dart 中的 MediaStreamTrack 对象不是原生 JavaScript MediaStreamTrack 对象,当通过 JsObject.callMethod() 传递给 JS 时,它带有一个不显示预期方法的 DartObject 类型,并且MediaStreamTrack 的属性,使其在 JS 代码中不起作用。我首先尝试通过构造一个新的 JsObject 来传递给 JS 代码来解决这个问题,然后我将必要的公共方法/道具映射回原始 Dart MediaStreamTrack 的属性和方法。但是,我现在遇到了 JS 代码构造一个新的 MediaStream 对象的地方,将它希望我提供的 MediaStreamTrack 传递给它的构造函数。因此,当 JS 代码尝试创建 MediaStream 并获取这个不是真正的 JS MediaStreamTrack 的 JsObject 时,事情就会爆发。

我不确定我还能尝试什么。我在想象 Dart 类必须本质上“包装”这些原生 MediaStream 和 MediaStreamTrack 对象。而且我认为可能有一些方法可以访问那些在 JS 代码中使用的底层对象。但是我没有发现任何类似的东西,我怀疑我走错了方向。

【问题讨论】:

    标签: javascript dart interop mediastream


    【解决方案1】:

    事实证明,我可以非常简单地解决这个问题,只需添加一点 JavaScript 代码来访问 DartObject 内的 MediaStreamTrack 对象。

    let audioTrack = dartObj[Object.getOwnPropertySymbols(dartObj)[0]];
    

    我想这不适用于 Dart 中定义的类,但在这种情况下,我认为 Dart MediaStreamTrack 类本质上是一个用于访问常规 JavaScript MediaStreamTrack 对象的接口。如果有人能更好地理解这一点,我将不胜感激!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-08
      • 1970-01-01
      • 1970-01-01
      • 2013-07-02
      • 2014-01-17
      相关资源
      最近更新 更多