Мой вариант использования - когда пользователь начинает запись видео, мне нужно записать видео, а также обработать кадры предварительного просмотра для лица пользователя внутри кадров, используя функцию распознавания лица 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);
Я также пытался установить imageSurface
внутри startPreview, но безуспешно, но все еще остается проблема с тем же предварительным просмотром. Пожалуйста, предоставьте свой вклад или поправьте меня о том, каков наилучший подход для этого сценария?
Код демонстрационного приложения: https://github.com/bipinvaylu/Camera2Demo/tree/bipin
Обновлено: [10-Jan-2019]
Я переименовал его в 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 ()) одновременно с помощью Camera 2 API?