前置摄像头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:
- 支持后置摄像头
- 它适用于 nexus 6 API 23 模拟器
- 在运行时为 Android M
请求权限
- 我正在使用 GLSurfaceView 作为取景器
- 前置摄像头在使用普通 CameraAPI 和 TextureView[=55 的同一设备上运行完美=]
- 已尝试 Uninstall/Reboot/Clear 缓存
- 我使用的设备是 Sony Z5 premium
我正在使用这个例子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:
可能有解决方法,但无论如何我正在为特定目的制作应用程序我不希望它在所有设备上工作
首先得到Camera
这样的服务
CameraManager cameraManager = (CameraManager)getSystemService(Context.CAMERA_SERVICE);
我正在尝试使用实际设备通过 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:
- 支持后置摄像头
- 它适用于 nexus 6 API 23 模拟器
- 在运行时为 Android M 请求权限
- 我正在使用 GLSurfaceView 作为取景器
- 前置摄像头在使用普通 CameraAPI 和 TextureView[=55 的同一设备上运行完美=]
- 已尝试 Uninstall/Reboot/Clear 缓存
- 我使用的设备是 Sony Z5 premium
我正在使用这个例子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:
可能有解决方法,但无论如何我正在为特定目的制作应用程序我不希望它在所有设备上工作
首先得到Camera
这样的服务
CameraManager cameraManager = (CameraManager)getSystemService(Context.CAMERA_SERVICE);