我正在开发 Android 应用程序,在其中我需要在录制视频时对 CameraConstrainedHighSpeedCaptureSession 中的预览进行实时、逐帧分析。该框架确保在 120 FPS 的视频录制会话期间保持一致的 30 FPS 预览帧速率。
我也尝试过 CameraX api,但它无法配置为 120FPS。因此,我使用 ConstrainedHighSpeed API。
我已经使用 ImageReader 来捕获预览帧,但它给出了不支持该表面的错误。
mImageReader = ImageReader.newInstance(
mVideoSize!!.width, mVideoSize!!.height,
ImageFormat.YUV_420_888, /*maxImages*/2
)
mImageReader!!.setOnImageAvailableListener(
mOnImageAvailableListener, mBackgroundHandler
)
为了实现这一点,我利用 AutoFitSurfaceView 进行预览。这个类的代码来自谷歌相机样本。
但是,我目前在从预览中捕获帧进行分析时遇到困难。
谢谢
不灵活: 应用程序通过 CameraDevice.createConstrainedHighSpeedCaptureSession(List, StateCallback, Handler) 创建一个不超过 2 个表面的相机捕获会话。目标表面必须是预览表面(来自 SurfaceView 或 SurfaceTexture)或记录表面(来自 MediaRecorder.getSurface() 或 MediaCodec.createInputSurface())。
因此,您也许可以通过 SurfaceTexture 在 GPU 上运行分析(或者从 GPU 进行读回,当然这会带来更多开销)。但 ImageReader 不太可能工作。