Firefox для Android неоднократно запрашивает разрешение микрофона - PullRequest
0 голосов
/ 22 мая 2019

У меня есть приложение, в котором пользователь неоднократно записывает аудиоклипы для распознавания / оценки речи.Во всех других основных браузерах пользователю предлагается один раз получить разрешение на использование микрофона, а затем он может выполнить оставшуюся часть процесса без каких-либо проблем.Однако в Firefox для Android пользователю предлагается ввести разрешение на использование микрофона между сеансами записи.Для контекста, каждая запись длится всего несколько секунд, и их может быть 30-60, так что это может быть довольно разрушительным.

Я использую библиотеку javascript RecordRTC для управления взаимодействием с микрофоном браузера вУгловая 4 среда.Я тестировал веб-приложение на Chrome, Android Chrome, Edge, Firefox и приложении Android Firefox, и эта проблема возникает только на Android Firefox.

Вот соответствующий код службы, которая захватывает микрофон,инициализация объекта recordRTC и фактическая запись данных.

    this._elementRef = elementRef;
      this.captureMicrophone().then(() => {
          this.microphoneDataStreamService.setStream('mic', this.microphone);
          this.recordRtcInit(this.microphone);
          this._recordRtc.startRecording();
          this._recordRtc.microphone = this.microphone;
          this._recordedAudio = null;
          this._recordedAudio = new Audio();
      }); 
  }

    private recordRtcInit(microphone: MediaStream): void {
        if (!this._recordRtc) {
            this._recordRtc = RecordRTC(microphone, {
                type: 'audio',
                recorderType: RecordRTC.StereoAudioRecorder,
                numberOfAudioChannels: 1
            });
        } else {
            this._recordRtc.reset();
        }
    }

    captureMicrophone(){
        console.log(navigator.mediaDevices);
        navigator.mediaDevices.enumerateDevices().then((data) => {
            console.log(data);
        });
        return navigator.mediaDevices.getUserMedia({audio: true})
           .then(microphone => {
                this.microphone = microphone;
            })
            //.then(() => console.log("It worked"))
          .catch((error) => {
            console.log('Unable to access your microphone.');
            alert('Unable to access your microphone.');
            console.error(error);
          });
    }

Я подозреваю, что это строка "this._recordRtc.reset ();", но я не уверен, почему это будет работать нормально во всех браузерахкроме Android Firefox специально.

...