从Android 4.3(API 18)开始,

bigflake CameraToMpegTest方法是正确的.

EGL / SurfaceTexture开销目前是不可避免的,特别是对于您在目标2中要做的事情.想法是:

>配置相机将输出发送到SurfaceTexture.这使得相机输出可用于GLES作为“外部纹理”.

将SurfaceTexture渲染到MediaCodec#createInputSurface()返回的Surface上.它为视频编码器供电.

>再次将SurfaceTexture渲染到GLSurfaceView.它将其放在显示屏上进行实时预览.

所发生的唯一数据复制由GLES驱动程序执行,因此您正在进行硬件加速的blits,这将很快.

唯一棘手的一点是您希望外部纹理可用于两个不同的EGL上下文(一个用于MediaCodec,一个用于GLSurfaceView).您可以在bigflake的“Android Breakout游戏记录器补丁”示例中看到一个创建共享上下文的示例 – 它将游戏两次呈现给屏幕,一次到MediaCodec编码器.

更新:这是在Grafika(“显示捕获相机”)中实现的.

更新:“显示捕捉相机”方法的多上下文方法是somewhat flawed.“连续捕获”活动使用一个简单的SurfaceView,并且能够使用单个EGL上下文进行屏幕渲染和视频录制.这是推荐的.

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐