我有一个应用程序,可以让用户重复记录音频片段以进行语音识别/评估。在所有其他主要浏览器上,系统都会提示用户一次使用麦克风的权限,然后可以继续进行其余过程而不会出现任何问题。但是,在Android版Firefox上,系统会提示用户是否在每次录制会话之间授予使用麦克风的权限。就上下文而言,每条记录只有几秒钟长,并且可能有30-60条记录,因此这可能会造成破坏。
我正在使用javascript库RecordRTC在Angular 4环境中管理与浏览器麦克风的交互。我已经在Chrome,Android Chrome,Edge,Firefox和Android Firefox应用程序上测试了该Web应用程序,只有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以外的所有浏览器中都可以正常工作。