Front Camera2 API GLSurfaceview
Posted
技术标签:
【中文标题】Front Camera2 API GLSurfaceview【英文标题】: 【发布时间】:2016-10-01 00:20:00 【问题描述】:我正在尝试使用实际设备通过 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:连接到相机服务
来自这个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" />
附注:
可与后置摄像头配合使用 它适用于 nexus 6 API 23 模拟器 Android M 在运行时请求权限 我正在使用 GLSurfaceView 作为取景器 前置摄像头在使用普通 CameraAPI 和 TextureView 的设备上完美运行 尝试卸载/重启/清除缓存 我使用的设备是 Sony Z5 高级版我正在使用这个例子Render camera preview using OpenGL ES 2.0 on Android API 21 or higher
【问题讨论】:
明确一点:您将 Camera2 输出提供给 SurfaceTexture,然后使用 GLES 渲染外部纹理?您尝试过的事情列表看起来相当不错......如果确切的设置适用于后置摄像头,但不适用于前置摄像头,那么这有点奇怪。如果改变的只是相机选择常数,那么这限制了可能出错的事情的集合。为什么不只使用 TextureView?你在应用着色器吗? @fadden 我正在尝试将 Camera2 输出提供给 GLSurfaceView,我使用的是普通的 TextureView,它运行良好,但我需要绘制/截取屏幕截图,这就是我要迁移到 GLSurfaceView 的原因带着色器 【参考方案1】:如果您只是复制该示例,我注意到它具有以下行:
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
前置摄像头可能不支持这一点,因为它可能没有闪光灯。您需要检查实际支持哪些 AE 模式 - 样本集的各种其他设置也是如此,它不检查设备实际支持的设置。
也就是说,如果值不正确,您应该会收到错误消息,但它可能会出现在 CameraCaptureSession.CaptureListener.onCaptureFailed 上,并且示例没有监听这些错误。如果您查看所有日志记录,而不仅仅是您自己的应用程序的日志,则可能还有来自相机服务的一些 logcat。
但是尝试删除该行,看看它是否有效。
【讨论】:
谢谢你的建议,是的,我相信这也是一个很好的提及。但它甚至没有达到那个功能。无论如何我都试图删除它,但它没有工作 请添加更多关于您在哪里看到第一个问题的详细信息,最好带有链接以完成启动 logcat 输出。【参考方案2】:我已将 Sony Xperia Z5 高级版 更改为另一台设备,它运行良好。 正如我在以下链接中看到的那样,索尼似乎在使用新 API 时遇到了一些问题:
Sony Camera2 API limitations
可能有一个变通办法,但无论如何我正在为特定目的制作应用程序,我不希望它在所有设备上工作
【讨论】:
【参考方案3】:先得到Camera
这样的服务
CameraManager cameraManager = (CameraManager)getSystemService(Context.CAMERA_SERVICE);
【讨论】:
以上是关于Front Camera2 API GLSurfaceview的主要内容,如果未能解决你的问题,请参考以下文章
Android Camera API/Camera2 API 相机预览及滤镜贴纸等处理
Android 10(api 29)camera2 api回归与广角相机
Android Camera API/Camera2 API 相机预览及滤镜贴纸等处理