【问题标题】:web worker not communicating with react component网络工作者不与反应组件通信
【发布时间】:2020-03-09 09:17:03
【问题描述】:

我在我的 React 项目中使用 audio-recorder-polyfill,以便为 Safari 录制音频。它似乎可以进行录制,但是没有可用的音频数据。 “dataavailable”事件永远不会被触发,停止记录后似乎也没有数据被“编译”。

   recordFunc() {
      navigator.mediaDevices.getUserMedia({ audio: true }).then(stream => {
         recorder = new MediaRecorder(stream);
         // Set record to <audio> when recording will be finished
         recorder.addEventListener('dataavailable', e => {
           this.audio.current.src = URL.createObjectURL(e.data);
         })
         // Start recording
         recorder.start();
       })
   }
   stopFunc() {
      // Stop recording
      recorder.stop();
      // Remove “recording” icon from browser tab
      recorder.stream.getTracks().forEach(i => i.stop());
   }

【问题讨论】:

  • 始终检查 caniuse。在这种情况下:caniuse.com/#search=dataavailable,因此可以肯定的是,这在 Safari/webkit 中完全不受支持,您将不得不说服 webkit 问题跟踪器上的人们,这甚至应该被处理
  • 据说 polyfill 会增加对原生不支持它的浏览器的支持。但是最好知道它是否在支持它的浏览器中完全有效,或者它是否是 polyfill 的问题。
  • 官方演示的polyfill在safari中无法正常工作(13.0.5) ai.github.io/audio-recorder-polyfill
  • 您是否尝试将您的处理程序指定为recorder.ondataavailable = ( e =&gt; { ... } );
  • 你能再添加一些你的反应代码吗?也许是代码沙箱链接,问题可能出在其他地方。它是否适用于本机支持此功能的其他浏览器?

标签: javascript reactjs web-mediarecorder


【解决方案1】:

audio-recorder-polyfill's issue tracker 上发布了许多类似的问题。 a b c d e

根本原因

其中一个问题,#4 (not listed above),仍然存在。该问题跟踪器上的几个 cmets 暗示根本问题是 Safari 取消 AudioContext 如果它不是在处理程序中为用户交互(例如单击)创建的。

可能的解决方案

如果你满足以下条件,你也许可以让它工作:

  1. 在处理程序中为用户交互进行初始化(即&lt;button onclick="recordFunc()"&gt;
  2. 请勿尝试重复使用从getUserMedia() 返回的MediaStream 进行多次录制
  3. 请勿在同一页面上尝试超过 4 个(或 6 个?)录音(来源 [1]、[2] 提到 Safari 会阻止此)

替代库

您也可以尝试RecordRTC 软件包中的StereoAudioRecorder class,该软件包拥有更多用户 (3K),但似乎维护较少,并且可能会起作用

即将提供的支持

如果您希望坚持使用 MediaRecorder API 并且上述提示对您不起作用,好消息是有 experimental support for MediaRecorder in Safari 12.4 and up (iOS and macOS),并且似乎在最新的 Safari 技术预览版中得到支持。

另见

comments in this issue 也可能有用

【讨论】:

  • 非常感谢,一天左右会更彻底地看你的答案。
  • @display-name-is-missing 听起来不错。如果您有任何问题或不清楚的地方,请告诉我
  • 正如人们在您链接到的问题中所说,不同的问题可能是问题的原因。就我而言,是 1。谢谢你的帮助,伙计!
猜你喜欢
  • 1970-01-01
  • 2014-01-22
  • 2015-03-16
  • 1970-01-01
  • 2017-01-03
  • 2013-10-10
  • 2013-05-18
  • 2014-07-20
相关资源
最近更新 更多