如何使用 MediaProjectionManager 将屏幕捕获为原始 rgba 缓冲区(无编码)?
我已经看到了许多如何使用 MediaCodec 捕获屏幕并对其进行编码的示例,但我想使用我自己的编码器。
如何使用 MediaProjectionManager 将屏幕捕获为原始 rgba 缓冲区(无编码)?
我已经看到了许多如何使用 MediaCodec 捕获屏幕并对其进行编码的示例,但我想使用我自己的编码器。
MediaCodec 支持 RAW MIME 类型 MIMETYPE_VIDEO_RAW,如果您查看http://developer.android.com/reference/android/media/MediaFormat.html#MIMETYPE_VIDEO_RAW
但是,如果您甚至想使用可以替换 MediaCodec 的自定义编解码器,那么整个事情都应该连接到 mInputSurface。
mMediaProjection.createVirtualDisplay("Recording Display",
screenWidth, screenHeight, screenDensity, 0 /* flags */,
mInputSurface, null /* callback */, null /* handler */);
您可能会注意到 Surface API 有一个 lockCanvas,它可能是通过 Canvas 写入您的编解码器的 API。
表面: https ://developer.android.com/reference/android/view/Surface.html
画布: https ://developer.android.com/reference/android/graphics/Canvas.html
我很想看看你的结果。
我最终按照fadden的建议使用了ImageReader