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 には影響しません。

内部 TextureView でメソッドを使用することもできますがgetBitmap()、これが機能することは保証できません。
現時点では、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 に答える