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
如何使用 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