Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从SurfaceView获取帧_Android_Screenshot_Surfaceview - Fatal编程技术网

Android 从SurfaceView获取帧

Android 从SurfaceView获取帧,android,screenshot,surfaceview,Android,Screenshot,Surfaceview,我现在面临的困难是拍摄SurfaceView的截图。有人能帮忙吗 我的团队正在做一个Android项目,我们使用MediaCodec对视频提要进行解码,并将提要渲染到表面上。 活动实现 SurfaceHolder.Callback 然后我们创建了一个SurfaceView并添加回调: mySurfaveView.getHolder().addCallback(this); 然后,我们开始解码视频馈送(我们有一个方法进行解码) 这段视频很好,现在我想截取在SurfaceView上渲染的内容。我

我现在面临的困难是拍摄SurfaceView的截图。有人能帮忙吗

我的团队正在做一个Android项目,我们使用MediaCodec对视频提要进行解码,并将提要渲染到表面上。 活动实现

SurfaceHolder.Callback
然后我们创建了一个SurfaceView并添加回调:

mySurfaveView.getHolder().addCallback(this);
然后,我们开始解码视频馈送(我们有一个方法进行解码)

这段视频很好,现在我想截取在SurfaceView上渲染的内容。我试过几种方法来做这件事,但没有成功。以下是我尝试过的:

  • 我已经厌倦了获取rootView的drawingcache
  • 尝试直接从MediaCodec获取帧
  • 尝试使用draw()方法在画布上绘制
  • 到目前为止,我正在尝试创建一个自定义的SurfaceView,并覆盖那里的onDraw方法。但是,我从未创建过自定义的SurfaceView。我的方向对吗


    请帮忙。谢谢大家!

    如本文所述,您无法捕获SurfaceView

    SurfaceView很少希望覆盖
    onDraw()
    。通常,SurfaceView的视图部分是一个透明的孔

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

    另一种方法是用替换SurfaceView,然后使用
    getBitmap()
    调用捕获视频帧


    可以在中找到各种示例。

    这里很好地解释了您要做的事情:谢谢您的帮助。我使用了一个TextureView,它起作用了。你能给出一个示例代码,说明如何将
    TextureView
    替换为
    surfaceView
    MediaCodec.configure
    函数仅获取
    SurfaceObject
    作为输入,我不知道如何以及在何处将其替换为
    TextureView
    surfaceChanged(SurfaceHolder holder, int format, int width, int height)