如何在Android上无需root权限捕获Canvas视频?

3

我是一名开发绘画应用程序的人,使用canvas和SurfaceView技术,并希望记录用户的操作并生成视频。

目前我正在尝试:

public static Bitmap captureView(View v) {
    Log.v(CAPTURE_TAG, "init");
    v.setDrawingCacheEnabled(true);
    v.buildDrawingCache(true);
    Bitmap b = Bitmap.createBitmap(v.getDrawingCache());
    //v.destroyDrawingCache();
    v.setDrawingCacheEnabled(false); // clear drawing cache
    Log.v(CAPTURE_TAG, "Fin:");
    return b;
}

我使用定时器和AsynTask,每50毫秒调用一次该方法,并在AsynkTask中的onPostExecute方法中将位图保存到外部存储器:

public class takeCaptureTask extends AsyncTask<View, Void, Bitmap> {

    @Override
    protected void onPostExecute(Bitmap result) {
        Log.v("taskCapt", "Fin - InitSave");
        new saveCaptureTask().execute(result);
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        Log.v("taskCapt", "init");
    }

    @Override
    protected Bitmap doInBackground(View... params) {
        return Utils.captureView(params[0]);
    }
}

最后使用NDK和FFmpeg生成视频。
我的问题是性能,使用此方法,每个截图需要200毫秒(5FPS),而我至少需要15 FPS。
我的问题是:
1- 我使用的方法正确吗?可以在没有root权限的情况下录制屏幕吗?
2- 是否可以使用其他方法对画布进行截图?
3- 是否可以在没有root权限的情况下从NDK中获取截图?如果可以,怎么做?
4- 使用NDK将数据保存到外部存储器是否更快?
5- 如何缓冲大量的图片以便稍后处理?
非常抱歉我的英语不好。
非常感谢您的帮助!

仅在释放所有触摸点时进行捕获,怎么样? - Hans
我想要重现用户的操作,但如果用户绘制了一条长路径,那么我只能重现最终结果,无法重现如何绘制这条路径。 - helbaroudy
1个回答

0
这取决于你的绘图方式。你可以使用位图和画布作为绘制缓冲区,这样非常容易捕捉。有很多方法可以做到这一点,包括只在视图发生变化时进行屏幕截图。

1
我正在使用该应用作为白板,但我无法预测用户的绘图方式。如果我只在更改时进行屏幕截图,那么我将无法重现用户的操作,只能显示用户操作结果。 - helbaroudy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接