Front Camera2 API GLSurfaceview

时间:2016-06-01 14:44:00

标签: android opengl-es android-camera glsurfaceview camera2

我尝试使用实际设备通过 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");
        }

Cameramanager说

  

I / CameraManagerGlobal:连接到相机服务

来自此 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:

  • 适用于后置摄像头
  • 适用于nexus 6 API 23仿真器
  • Android M
  • 在运行时请求权限
  • 我使用 GLSurfaceView 作为取景器
  • 使用普通 CameraAPI TextureView
  • ,前置摄像头在同一台设备上完美运行
  • 尝试卸载/重新启动/清除缓存
  • 我使用的设备是 Sony Z5 premium

我正在使用此示例Render camera preview using OpenGL ES 2.0 on Android API 21 or higher

3 个答案:

答案 0 :(得分:1)

如果你只是复制那个例子,我注意到它有以下几行:

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

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

也就是说,如果值不好,你应该收到一个错误,但它可能会在CameraCaptureSession.CaptureListener.onCaptureFailed中出现,并且示例没有收听那些。如果您查看所有日志记录,可能还有一些来自摄像头服务的logcat,而不仅仅是您自己的应用程序日志。

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

答案 1 :(得分:0)

我最终将 Sony Xperia Z5 premium 更改为另一台设备,但效果非常好。 看起来索尼正面临着新API的一些问题,正如我在以下链接中看到的那样:

Sony Camera2 API limitations

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

答案 2 :(得分:0)

首先获得Camera这样的服务

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