从SurfaceView获取框架

时间:2015-04-16 15:00:20

标签: android screenshot surfaceview

我现在遇到的困难是截取SurfaceView的截图。有人可以帮忙吗?

我的团队正在进行Android项目,我们使用MediaCodec解码视频Feed并将Feed渲染到Surface上。 活动实现

SurfaceHolder.Callback

然后我们创建了一个SurfaceView并添加了Callback:

mySurfaveView.getHolder().addCallback(this);

然后我们开始解码视频输入(我们有一个解码方法)

surfaceChanged(SurfaceHolder holder, int format, int width, int height)

视频工作正常,现在我想截取渲染到SurfaceView上的内容。我已经尝试了几种方法来做到这一点,但我没有成功。以下是我的尝试:

  1. 我已经厌倦了获取rootView的drawingcache。
  2. 尝试直接从MediaCodec获取框架。
  3. 尝试使用draw()方法在画布上绘图。
  4. 到目前为止,我想创建一个自定义SurfaceView并覆盖那里的onDraw方法。但是,我从未创建过自定义SurfaceView。我正朝着正确的方向前进吗?

    请帮助。谢谢!

1 个答案:

答案 0 :(得分:3)

您无法捕获SurfaceView,如此other question中所述。

SurfaceViews很少想要覆盖onDraw()。通常,SurfaceView的View部分是一个透明孔。

对于MediaCodec输出的特定情况,您有几个选择。您可以将输出定向到SurfaceTexture,然后使用OpenGL ES渲染视频帧两次。一旦进入SurfaceView进行显示,一次到屏幕外缓冲区,您可以从中捕获像素。

另一种方法是使用TextureView替换SurfaceView,然后使用getBitmap()调用来抓取视频帧。

可以在Grafika中找到各种示例。