首页 > 解决方案 > 在android中记录屏幕的选定区域

问题描述

我正在尝试实现屏幕录像机。我跟着grafika。只需将 Surface 提供encoder.getInputSurface()给 VirtualDisplay 即可。现在我的任务是对屏幕的某个部分进行编码。因此,我试图使用 SurfaceTexture 修改编码器的输入 Surface(我认为这是正确的方法)。但我无法使用创建的表面来记录屏幕,当我将此表面传递给 VirtualDisplay 时,我没有得到任何回调。我也尝试使用 TextureMovieEncoder(来自 grafika)进行录制,但可能我不知道正确的方法。

我试图通过以下有用的链接来理解。 解码器的输出表面如何传递到编码器的输入表面?

Android:是否可以在没有 SurfaceView 的情况下创建 SurfaceTexture?

而且我确信 grafika 是一个很棒的教程,但我被卡住了。

请提出解决方案或其他可行的方法。我现在被困了好几天。

标签: androidopengl-esgrafikaandroid-mediacodec

解决方案


我认为正确的方法如下:

  1. 创建一个带有 oes 纹理的 SurfaceTexture。

  2. 将 VirtualDisplay 连接到步骤 1 中创建的表面纹理,因此 frame 将转到 oes 纹理

  3. 在surfacetexture上注册onFrameAvailable监听器,就会不断的得到回调

  4. 将 oes 纹理中的帧渲染到编码器的输入表面。

关键过程是第4步。在渲染过程中,可以通过修改纹理坐标来裁剪帧。

下面有一个裁剪示例: 使用 MediaCodec 为 Grafika 的“连续捕获”活动进行编码之前裁剪视频


推荐阅读