如何在Chrome for iOS中使用getUserMedia

Rao*_*Rao 13 iphone google-chrome ipad ios webrtc

我正在开发一个简单的应用程序,在此我试图访问相机和麦克风使用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);
Run Code Online (Sandbox Code Playgroud)

wpp*_*wpp 15

...但它不适用于iPhone和iPad Chrome.

iPhone或iPad上的Chrome应用程序未运行"完整"版本的chrome.它的功能仅限于iOS平台.因此getUserMedia,在Safari/Apple支持之前,它们可能无法使用.

引用另一个问题:

Apple政策强制其他浏览器使用其不支持webRTC的webkit版本,因此您不会很快在iOS上的Web应用程序中获得webRTC支持.webkit中的活动暗示作为一种变化,但是时间到了,这将是几个月.


jes*_*sup 8

我的理解(我是Mozilla工程师)是iOS上的Chrome目前不支持webrtc或getUserMedia.


Jon*_*nny 5

由于不建议使用“ 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")
            }
Run Code Online (Sandbox Code Playgroud)
<video id="video" width="200" height="200" autoplay playsinline></video>
Run Code Online (Sandbox Code Playgroud)

此代码在Safari上的任何台式机设备,Android移动设备和iPhone移动设备上均能正常运行,但在Chrome / Firefox中则不能:会立即跳至其他情况:“不支持navigator.mediaDevices”

由于iOS 11.x支持WebRTC,所以我不确定问题出在哪里:Apple还是Google / Mozilla?此外,如果还有其他可行的解决方案,我很高兴听到它。

  • 2020 年 4 月,iOS Chrome 上仍然存在同样的问题 - 有这方面的消息吗? (3认同)

Her*_*mes 5

从 iOS 14 开始,这种情况发生了变化。现在 WKWebView 添加了对 getUserMedia 的支持。@Marcus在这里解释得很好:/sf/answers/4416446611/

太长了;

WKWebView 在 iOS 14.3 beta 1 中可以使用 getUserMedia。