带有getUsermedia()的前置摄像头错误错误:“不可读取错误:无法启动视频源”

时间:2019-10-31 10:26:24

标签: javascript android-camera

在我的html代码中,我有3个视频标签,在桌面上,视频可以正常工作,但是当我在移动设备上尝试时,只能工作在前两个摄像头上,当我在最后一个摄像头中指定“用户”摄像头时,会跳出下一个错误android“ Notvisibleerror:无法启动视频源”。

function enableCam() {

video = document.getElementById('video');
// Get access to the camera!
if(navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {

    var constraints;
    var isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);
    if (isMobile) {
        constraints = {video: {width: {
            exact: 256
        },
        height: {
            exact: 192
        }, facingMode: "user"}};

    }else {
       constraints = {video: {width: {
           exact: 256
       },
       height: {
           exact: 192
       }, facingMode: "environment"}};
    }

    navigator.mediaDevices.getUserMedia(constraints).then(function(stream) {

        readFile(video,stream);//This method plays the video and save the image
    });
}
}

2 个答案:

答案 0 :(得分:4)

如果getUserMedia运行过多,此错误将在iOS 13.3上发生。 13.4已修复。

此外,再次运行getUserMedia之前,停止先前的流可能会有所帮助。

ie)由于您连续两次运行getUserMedia,也许第一次捕获流,将其停止,然后以setTimeout延迟运行第二个getUserMedia可能有助于解除阻塞。

约束也可能是一个问题:传递空约束“ {}”可能会有所帮助。传递“ {audio:true,video:true}”可能也有帮助。

尝试使用其他浏览器也可能有所帮助; chrome,firefox,Safari,甚至Opera。

我有一个开放源代码的移动网络应用程序,可以使用智能手机摄像头。我不得不考虑不同浏览器,相机,电话和约束的许多特殊性。如果再次遇到问题,该代码可能会派上用场:https://github.com/steveseguin/obsninja

答案 1 :(得分:0)

您是否授予权限?

config.xml

<platform name="ios">
 ...
 <custom-config-file parent="NSCameraUsageDescription" platform="ios" target="*-Info.plist">
   <string>Access to camera to make video calls.</string>
 </custom-config-file>
 <custom-config-file parent="NSMicrophoneUsageDescription" platform="ios" target="*-Info.plist">
   <string>Access to microphone to make calls.</string>
 </custom-config-file>
</platform>

以下适用于Android: AndroidManifest.xml

<platform name="android">
 ...
 <custom-preference name="android-minSdkVersion" value="21" />
 <custom-preference name="android-targetSdkVersion" value="28" />
 <custom-config-file parent="/*" target="AndroidManifest.xml">
   <uses-permission android:name="android.webkit.PermissionRequest" />
   <uses-permission android:name="android.permission.INTERNET" />
   <uses-permission android:name="android.permission.RECORD_AUDIO" />
   <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
   <uses-permission android:name="android.permission.CAMERA" />
   <uses-feature android:name="android.hardware.camera" />
   <uses-feature android:name="android.hardware.camera.autofocus" />
 </custom-config-file>
</platform>

来自

https://developers.connectycube.com/cordova/code-samples-videochat-cordova