safari - 尝试捕获音频但 navigator.mediaDevices.enumerateDevices() 在 Safari 12 上为 NULL,即使已授予麦克风权限
问题描述
请参阅相关问题:Navigator.mediaDevices.getUserMedia not working on iOS 12 Safari
我们正在尝试从用户输入用户 MediaDevices.getUserMedia 和音频上下文中捕获音频
当用户单击按钮时,我们会检查可用设备,然后捕获他们的音频流
let enumDevicePromise = navigator.mediaDevices.enumerateDevices()
.then(devices => devices.find(d => d.kind === "audioinput" && d.label !== "" && d.deviceId === "default"))
.catch((error) => {
// handle error
});
this.handleCheckEnumeratedDevices(enumDevicePromise); // capture device in backend
.....
navigator.mediaDevices
.getUserMedia({
audio: true,
video: false,
})
.then(stream => {
let AudioContext = window.AudioContext || window.webkitAudioContext;
if (AudioContext) {
let context = new AudioContext();
let source = context.createMediaStreamSource(stream);
let processor = context.createScriptProcessor(4096, 1, 1);
source.connect(processor);
processor.connect(context.destination);
processor.onaudioprocess = (event) => {
let audioIn = event.inputBuffer.getChannelData(0);
this.sendMessage(this.toInt16(audioIn));
}
} else {
// handle error, ie, Audio Context not supported
}
}).catch((error) => {
// handle error
});
});
这在 Chrome 和 Firefox 上运行良好,但在 Safari 12 上,我们从枚举设备承诺中得到了Null响应——尽管允许麦克风权限——因此我们无法捕获音频流
解决方案
发生这种情况是因为 Mobile Safari 没有公开“音频输入”类型的媒体设备。这是一个已知的限制。
推荐阅读
- r - 在 geom_density_ridges 上画线
- python - 如何在基类中声明子类对象而不导致递归错误?
- hockeyapp - 使用 SVProgrssHUD 的通用签名在 iOS 12 上崩溃
- javascript - JS onKeyup Counter - 当他变成负数时如何改变计数器的颜色?
- python-2.7 - 将绘图外的点设置为下限和上限
- php - 仅显示随机数组中特定数量的问题
- php - 更新 php 脚本中的重复键
- java - 詹金斯给出 FileNotFoundException 错误
- java - JAVA Spring Rest API 环境升级计划
- python - 如何将我的文件传递给顶部函数来拆分它?