相关疑难解决方法(0)

Camera2 将图像从 ImageReader 传递到 MediaRecorder

我正在尝试创建一个CameraCaptureSession具有四个输出的 Camera2:

  1. 屏幕预览(SurfaceView,最高 1080p)
  2. 照片拍摄(ImageReader,最多 8k 照片)
  3. 视频捕捉(MediaRecorder/ MediaCodec,最多 4k 视频)
  4. 帧处理(ImageReader最多 4k 视频帧)

不幸的是,Camera2 不支持同时连接所有这四个输出(表面),因此我必须做出妥协。

对我来说最合乎逻辑的妥协是将两个视频捕获管道合并为一个,以便帧处理输出(#4,ImageReader)将帧重定向到视频捕获输出(#3,MediaRecorder)。

如何从 ImageReader 写入图像:

val imageReader = ImageReader.newInstance(4000, 2256, ImageFormat.YUV_420_888, 3)
imageReader.setOnImageAvailableListener({ reader ->
  val image = reader.acquireNextImage() ?: return@setOnImageAvailableListener
  callback.onVideoFrameCaptured(image)
}, queue.handler)

val captureSession = device.createCaptureSession(.., imageReader.surface)
Run Code Online (Sandbox Code Playgroud)

..进入SurfaceMediaRecorder

val surface = MediaCodec.createPersistentInputSurface()
val recorder = MediaRecorder(context)
..
recorder.setInputSurface(surface)
Run Code Online (Sandbox Code Playgroud)

我想我可能需要一个带有直通着色器的 OpenGL 管道 - 但我不知道如何从ImageReader …

android opengl-es surfaceview android-camera android-camera2

10
推荐指数
1
解决办法
514
查看次数