我的用例是当用户开始录制视频时,我需要录制视频并使用 Firebase 人脸检测处理帧内用户脸部的预览帧。我尝试按照以下方式执行此操作,但某些预览已暂停。
我正在使用googlesamples/android-Camera2Video代码库和我在其中添加了以下代码。
Camera2VideoFragment
类内部:
private ImageReader mYUVImageReader;
private final ImageReader.OnImageAvailableListener mOnYUVImageAvailableListener
= new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
Log.d(Camera2VideoFragment.TAG, "Bipin - onImageAvailable ");
}
}
内部openCamera
方法:
mYUVImageReader = ImageReader
.newInstance(mPreviewSize.getWidth()/16, mPreviewSize.getHeight()/16,ImageFormat.YUV_420_888, 2);
mYUVImageReader.setOnImageAvailableListener(
mOnYUVImageAvailableListener, mBackgroundHandler);
内部startRecording
方法:
Surface imageSurface = mYUVImageReader.getSurface();
surfaces.add(imageSurface);
mPreviewBuilder.addTarget(imageSurface);
我也尝试在 startPreview 中设置 imageSurface
但没有运气,面临相同的预览问题。请提供您的意见或纠正我这种情况的最佳方法是什么?
此处演示应用程序代码:https://github.com/bipinvaylu/Camera2Demo/tree/bipin
更新:[2019 年 1 月 10 日] 我已将其重命名为 mYUVImageReader,请在此处查找详细信息: 初始化:https://github.com/bipinvaylu/Camera2Demo/blob/bipin/app/src/main/java/com/camerademo/Camera2VideoFragment.java#L477 在此处添加 ImageReaderSurface:https://github.com/bipinvaylu/Camera2Demo/blob/bipin/app/src/main/java/com/camerademo/Camera2VideoFragment.java#L540
我主要关心的是,是否可以通过使用同时向预览表面(mTextureView.getSurfaceTexture())、记录(mMediaRecorder.getSurface())和连续图像(mYUVImageReader.getSurface())提供输出相机 2 API?
最佳答案
您还需要将新的 ImageReader Surface 添加到捕获 session 创建中。您不能将 Surface 包含在捕获请求构建器中,除非它也包含在 session 中。
一次可以设置的同步输出数量以及分辨率也受到限制。这些取决于支持的硬件级别和相机设备功能。请参阅 createCaptureSession 的文档对于那些表。
关于android - Camera 2 API 可同时预览、记录和提取预览帧以进行 Firebase 人脸检测处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54091648/