AudioContext不允许启动。 AngularJS Recorder Chrome 71

时间:2019-03-05 12:46:23

标签: javascript angularjs html5-audio

过去四年来我一直在使用AngularAudioRecorder(AngularJS),在最近的Chrome更新中,出现以下错误:

The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page.
init @ angular-audio-recorder.js: 861

代码:

getPermission: function () {
      navigator.getUserMedia({
        "audio": true
      }, html5HandlerConfig.gotStream, html5HandlerConfig.failStream);
    },
    init: function () {
      service.isHtml5 = true;
      var AudioContext = window.AudioContext || window.webkitAudioContext;
      if (AudioContext && !html5AudioProps.audioContext) {
        html5AudioProps.audioContext = new AudioContext();
      }

      if (localStorage.getItem("permission") !== null) {
        //to get permission from browser cache for returning user
        html5HandlerConfig.getPermission();
      }
    }
  };

请在此处找到完整的代码:Angular Audio Recorder

感谢您提供的任何帮助

4 个答案:

答案 0 :(得分:0)

我已解决问题。最后使用以下命令恢复暂停的 AudioContext

html5AudioProps.audioContext.resume().then(() => {
     var audioContext = html5AudioProps.audioContext;
})

在开始录制的功能内。

答案 1 :(得分:0)

在用户按下任意键或触摸任意按钮时执行

if(audio_context.state !== 'running') { audio_context.resume(); }

答案 2 :(得分:0)

这个问题仅适用于Angular。它更通用,并且与现代浏览器已禁用自动播放声音(直到用户已交互足够的声音)有关,这样您就不会对刚打开的某些网页的声音感到烦恼。

请参阅这个旧问题here

我收到了完全相同的“不允许启动”消息,并且我没有使用Angular;我只是想让JavaScript在“足够”的用户交互之前播放声音(以编程方式)。我要解决的问题是要注意... = new AudioContext()仅在用户按下按钮或与(本机)滑块交互后才执行。上面这个老问题的公认答案暗示了基本相同的策略。

很高兴您已经解决了问题。可能(警告:未经测试),另一种解决方案是将记录器代码的加载和/或初始化延迟到用户按下某个按钮左右为止。

答案 3 :(得分:0)

我解决了我的问题:

setTimeout(() => {
  context.close();
}, timenotification);