android 5,将屏幕捕获为原始 rgb 缓冲区

android 5 , capture screen as raw rgb buffers

如何使用 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 有一个锁Canvas,它可能是 API 用于通过 Canvas.

写入您的编解码器

表面: https://developer.android.com/reference/android/view/Surface.html

Canvas: https://developer.android.com/reference/android/graphics/Canvas.html

我很想看看你的结果。

我最终按照 fadden 的建议使用了 ImageReader