【发布时间】:2015-08-06 23:51:43
【问题描述】:
如何使用 MediaProjectionManager 将屏幕捕获为原始 rgba 缓冲区(无编码)?
我已经看到很多关于如何捕获屏幕并使用 MediaCodec 对其进行编码的示例,但我想改用我自己的编码器。
【问题讨论】:
-
一种方法是使用 GLES 渲染帧并使用
glReadPixels()提取它们,例如 bigflake.com/mediacodec/#ExtractMpegFramesTest,尽管这感觉有点漫长。理论上你可以创建一个 ImageReader 并通过它访问数据,但我还没有尝试过——stackoverflow.com/questions/31687259 似乎让它工作了。 -
ImageReader 能够处理 20 fps 的帧速率吗?
-
ImageReader 只是包装了 Surface,它不复制数据,因此不会增加太多开销。另一方面,听起来您将使用您的应用程序在软件中处理视频帧(而不是基于硬件的视频编码器),这可能很昂贵。因此,您的应用能否处理 20 fps 取决于您的应用对帧的处理方式。
标签: android android-mediaprojection