在android中记录所选择的屏幕区域

问题描述 投票:0回答:1

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

我尝试通过以下用户链接了解。 How does an output surface of a Decoder is passed to an input surface of an Encoder?

Android: Is it possible to create a SurfaceTexture without a SurfaceView?

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

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

android opengl-es grafika android-mediacodec
1个回答
1
投票

我认为正确的方法如下:

  1. 使用oes纹理创建SurfaceTexture。
  2. 将VirtualDisplay连接到在步骤1中创建的surfacetexture,因此框架将转到oes纹理
  3. 在surfacetexture上注册onFrameAvailable监听器,然后您将连续获得回调
  4. 将oes纹理中的帧渲染到编码器的输入表面。

关键过程是步骤4.在渲染过程中,您可以通过修改纹理坐标来裁剪框架。

下面有一个作物示例:Crop video before encoding with MediaCodec for Grafika's "Continuous Capture" Activity

© www.soinside.com 2019 - 2024. All rights reserved.