1

是否可以截取 WeemoVideoInFrame 的屏幕截图?我试过下面的代码,它给了我这个。我想我需要获取底层 Surface 的参考才能截取屏幕截图,但真的没有办法实现这一点吗?有人可以推荐一种解决方法吗?

    view.setDrawingCacheEnabled(true);
    Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    view.draw(canvas);

4

1 回答 1

2

不幸的是,用于渲染视频帧的内部视图是 TextureView,因此您无法请求绘图缓存(TextureView 是 HardwareAccelerated)。
此外,该文档指定:

public final void draw(画布画布)

TextureView 的子类不能使用 Canvas 对象进行自己的渲染。

因此,您的draw()调用对 TextureView 没有影响。

也许您可以尝试getBitmap()在内部 TextureView 上使用该方法,但我不能保证这会奏效。
目前,Weemo SDK 上还没有这样的功能,但我们正在研究提供一种更方便的方式来捕获这些帧。

此外,更好地了解您的用例对我们来说会很有趣。也许你可以分享更多关于你想要实现的目标。这可以帮助我们设计最适合您需求的新 SDK 功能。

编辑: 要获得对 this 的引用TextureView,只需浏览视图层次结构。例如,您可以这样做:

WeemoVideoInFrame videoFrame = getView().findViewById(R.id.video_frame);
findTextureView(videoFrame);

/* ... */

TextureView findTextureView(WeemoVideoInFrame frame) {
    for (int index = 0; index < frame.getChildCount(); index++) {
        View child = frame.getChildAt(index);
        if(child instanceof TextureView) {
            return (TextureView) child;
        }
    }
    return null;
}

但请记住,不能保证这种行为。

于 2014-08-01T09:54:07.207 回答