【发布时间】:2022-01-25 12:49:08
【问题描述】:
我已经使用 MediaCodec 创建了一个表面并将其作为目标添加到 camera2 api。现在我想暂停 MediaCodec 编码,然后恢复它。我期望的是编码的视频在我暂停时变黑并在我恢复时继续。使用MediaCodec.PARAMETER_KEY_SUSPEND 不起作用,因为输出是一个冻结的帧,如果在编码开始时发生暂停,则时间在我恢复时开始。所以我想给编码器提供黑色图像,但我怎样才能在表面上画画呢?谢谢!
编辑:这是我用来使 camera2 与 MediaCodec 一起工作的一些代码。
-
我创建了一个简单的 MediaCodec:
try { mediaCodec = MediaCodec.createEncoderByType(mime) Logger.d(TAG, "MediaCodec info " + mediaCodec.codecInfo.name) } catch (e: IOException) { e.printStackTrace() } mediaCodec.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE) val inputSurface = mediaCodec.createInputSurface() //<-- this is passed to the camera2 -
我将表面添加到相机:
captureRequestBuilder.addTarget(inputSurface); List<Surface> surfaceList = new ArrayList<>(); surfaceList.add(cameraFrame.getSurface()); surfaceList.add(inputSurface); camera.createCaptureSession( surfaceList, captureSessionObserver, cameraThreadHandler );
然后在循环中我读取 mediaCodec 输出缓冲区并将它们写入多路复用器。
【问题讨论】:
标签: android android-mediacodec glsurfaceview