我正在开发一个带有画布和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;
}
我每 50 毫秒调用一次,使用计时器和 AsynTask,在 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-如何缓冲大量图像以供以后处理?
我为我糟糕的英语道歉。
非常感谢你的帮助!