我有两台Android 大屏,用renderjs实现了录音获得频流后语音识别功能,一台设备上正常能用,另一台设备上没任何反应,
我用uni.getRecorderManager() 来实现录音时没问题都能收到音,也能播放很正常,但是用renderjs录音就不行,刚开始只开启了【RECORD_AUDIO】时直接报错,无权限,后来加上【MODIFY_AUDIO_SETTINGS】权限后不报无权限的错误了,但是录音后播放无声,语音识别也同样无反应,有问题的那台大屏只有USB接口,我买了usb公对公的数据线,但连接后,adb devices 里无任何设备,不知道什么原因,所以也无法跟踪代码,知道代码到哪里报的错。两台Android 版本均为 7.1.2,内核版本 均为4.4.126。 代码里的 mediaRecorder.ignoreMutedMedia = true; 这个是我后加的,不过, 加不加这一行,录音播放都是无声音。
if(navigator.mediaDevices) {
// 获取打开麦克风权限,以及stream对象
navigator.mediaDevices.getUserMedia({audio: true})
.then((stream) => {
console.log(11)
var chunks = [];
// 创建MediaRecorder对象,需要传入stream对象
var mediaRecorder = new MediaRecorder(stream);
mediaRecorder.ignoreMutedMedia = true;
var startBtn = document.createElement('button');
var stopBtn = document.createElement('button');
document.body.append(startBtn);
document.body.append(stopBtn);
startBtn.innerText = '开始';
stopBtn.innerText = '结束';
// 开始
startBtn.onclick = () => {
// 开始录音
try {
mediaRecorder.start();
} catch (error) {
alert(error);
}
}
// 结束
stopBtn.onclick = () => {
// 停止录音
try {
mediaRecorder.stop();
} catch (error) {
alert(error);
}
}
// 添加事件监听
mediaRecorder.onstart = () => {
console.log('start', mediaRecorder.state);
}
mediaRecorder.onstop = () => {
console.log('stop', mediaRecorder.state);
// 数据块合成blob对象
var blob = new Blob(chunks, {type: 'audio/webm;codecs=opus'});
console.log(blob)
var audio = document.createElement('audio');
var url = (window.URL || webkitURL).createObjectURL(blob);
audio.src = url;
audio.controls = true;
document.body.appendChild(audio);
console.log(audio, url)
}
mediaRecorder.ondataavailable = (e) => {
console.log('data');
console.log(e);
chunks.push(e.data);
}
}).catch((e) => {
console.log(e);
alert(e);
})
}
0 个回复