前置摄像头2 API GLSurfaceview

Front Camera2 API GLSurfaceview

我正在尝试使用实际设备通过 Camera2 API 访问前置摄像头

尝试

时出现问题

cameraManager.openCamera(..,..,..)

try {
        CameraCharacteristics characteristics = manager.getCameraCharacteristics(mCameraID);
            if (!mCameraOpenCloseLock.tryAcquire(2500, TimeUnit.MILLISECONDS)) {
                throw new RuntimeException("Time out waiting to lock camera opening.");
            }
            manager.openCamera(mCameraID, mStateCallback, mBackgroundHandler);
        } catch (CameraAccessException e) {
            Log.e("mr", "OpenCamera - Camera Access Exception");
        } catch (IllegalArgumentException e) {
            Log.e("mr", "OpenCamera - Illegal Argument Exception");
        } catch (SecurityException e) {
            e.printStackTrace();
            Log.e("mr", "OpenCamera - Security Exception:");
        } catch (InterruptedException e) {
            Log.e("mr", "OpenCamera - Interrupted Exception");
        }

摄像师说

I/CameraManagerGlobal: Connecting to camera service

来自这个 CameraManager.java 函数

private void connectCameraServiceLocked() {
            // Only reconnect if necessary
            if (mCameraService != null) return;

            Log.i(TAG, "Connecting to camera service");

然后我的 GLSurfaceView 仍然是 空白

AndroidMainfest.xml

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.google.android.permission.PROVIDE_BACKGROUND" />

    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

P.S:

我正在使用这个例子Render camera preview using OpenGL ES 2.0 on Android API 21 or higher

如果您只是复制该示例,我注意到它有以下行:

mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);

前置摄像头可能不支持,因为它可能没有闪光灯。您需要检查实际支持哪些 AE 模式 - 示例集的各种其他设置也是如此,它不检查设备实际支持的内容。

就是说,如果该值不正确,您应该会收到错误消息,但它可能会在 CameraCaptureSession.CaptureListener.onCaptureFailed 上出现,而样本并未收听这些内容。如果您查看所有日志记录,而不仅仅是您自己的应用程序的日志,那么相机服务可能还有一些 logcat。

但请尝试删除该行,看看它是否有效。

我已将 Sony Xperia Z5 premium 更换为另一台设备,并且效果很好。 正如我在下面看到的那样 link:

Sony Camera2 API limitations

可能有解决方法,但无论如何我正在为特定目的制作应用程序我不希望它在所有设备上工作

首先得到Camera这样的服务

CameraManager cameraManager = (CameraManager)getSystemService(Context.CAMERA_SERVICE);