我正尝试使用getUserMedia在iOS Safari上访问麦克风。以下是我的代码片段。
这种行为是iOS Safari独有的,在其他浏览器(Chrome,Firefox,Safari osX)上都可以正常工作。实际上,我的问题很像这个问题 => 如何解决iOS 11 Safari getUserMedia“无效约束”问题,但我并不想使用相机,唯一关心的是麦克风。
我正在使用真正的iPhone进行测试(5和X,均已更新到最新版本),因此与iPhone模拟器无关。
对麦克风的访问权限已被授予,并且权限请求弹出窗口也显示出来了,因此不是权限问题。
if (navigator.mediaDevices === undefined) {
navigator.mediaDevices = {};
}
if (navigator.mediaDevices.getUserMedia === undefined) {
navigator.mediaDevices.getUserMedia = function(constraints) {
// First get ahold of the legacy getUserMedia, if present
let getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
// Some browsers just don't implement it - return a rejected promise with an error
// to keep a consistent interface
if (!getUserMedia) {
return Promise.reject(new Error('getUserMedia is not implemented in this browser'));
}
// Otherwise, wrap the call to the old navigator.getUserMedia with a Promise
return new Promise(function(resolve, reject) {
getUserMedia.call(navigator, constraints, resolve, reject);
});
}
}
navigator.mediaDevices.getUserMedia({
audio: true
}).then(function(stream) {
successCallBack(.......);
}).catch(function(error) {
debug.log(error);
..........
});
然而,这个承诺总是会遇到一个错误,更具体地说是一个OverConstraintError(超出限制错误)。
{message: "Invalid constraint", constraint: ""}
这种行为是iOS Safari独有的,在其他浏览器(Chrome,Firefox,Safari osX)上都可以正常工作。实际上,我的问题很像这个问题 => 如何解决iOS 11 Safari getUserMedia“无效约束”问题,但我并不想使用相机,唯一关心的是麦克风。
我正在使用真正的iPhone进行测试(5和X,均已更新到最新版本),因此与iPhone模拟器无关。
对麦克风的访问权限已被授予,并且权限请求弹出窗口也显示出来了,因此不是权限问题。
UIWebView
而非WKWebView
,则其他一些功能也将无法使用。 - Jesper