我正在开发一个简单的应用程序,在此我尝试使用getUserMedia
访问摄像头和麦克风。它适用于桌面Chrome和Android Chrome,但在iPhone和iPad Chrome中无效。
navigator.getUserMedia = navigator.getUserMedia
|| navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
var constraints = "";
if (mediaType === "audio,video") {
constraints = {
audio : true,
video : true
};
} else {
constraints = {
audio : true,
video : false
};
}
navigator.getUserMedia(constraints, successCallback, errorCallback);
答案 0 :(得分:15)
...但它在iPhone和iPad Chrome中无效。
iPhone或iPad上的Chrome应用未运行“完整”版Chrome。它的功能仅限于iOS平台。因此getUserMedia
之前可能无法使用{{1}}等。
Apple政策强制其他浏览器使用不支持webRTC的webkit版本,因此您不会很快在iOS上的Web应用程序中获得webRTC支持。 webkit中的活动暗示作为一种变化,但是时间到了,这将是几个月。
答案 1 :(得分:8)
我的理解(我是Mozilla工程师)是iOS上的Chrome目前不支持webrtc或getUserMedia。
答案 2 :(得分:3)
由于不建议使用“ navigator.getUserMedia”,因此应使用“ navigator.mediaDevices.getUserMedia”。 这似乎仍然是个问题。只要您在Safari中使用它,iOS 11.4上的摄像头访问就可以正常工作。如果要在其他任何浏览器(Chrome,Firefox)中使用它,则不支持。您可以尝试以下示例:
if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
var constraints = {
audio: true,
video: true
};
navigator.mediaDevices.getUserMedia(constraints)
.then(function(stream) {
var video = document.querySelector('video');
video.srcObject = stream;
video.onloadedmetadata = function(e) {
video.play();
};
})
.catch(function(err) {
console.log (err);
});
}
else {
console.log ("navigator.mediaDevices not supported")
}
<video id="video" width="200" height="200" autoplay playsinline></video>
此代码可在任何台式机设备,Android移动设备和Safari中的iPhone移动设备上正常运行,但不适用于Chrome / Firefox:将立即跳转到其他情况:“不支持navigator.mediaDevices”
由于iOS 11.x支持WebRTC,所以我不确定问题出在哪里:Apple还是Google / Mozilla?此外,如果还有其他可行的解决方案,我很高兴听到它。
答案 3 :(得分:2)
更新:我知道这是一个非常老的帖子,但是从IOS 11.4 beta开始,
我一直希望!
答案 4 :(得分:2)
从 iOS 14 开始,情况发生了变化。现在 WKWebView 添加了对 getUserMedia 的支持。 @Marcus 在这里解释得很好:https://stackoverflow.com/a/63092094/6931862
TLDR;
<块引用>WKWebView 可以在 iOS 14.3 beta 1 中使用 getUserMedia。
答案 5 :(得分:1)
WebRTC(包括getUserMedia)将在iOS11上发布,但将使用h264 / h265编解码器,即没有VP8 / VP9。