如何在没有根的情况下从Android画布捕获视频?
我正在开发一个绘画应用程序,带有canvas和SurfaceView,我想记录用户操作并生成视频 在这一刻,我正在尝试:如何在没有根的情况下从Android画布捕获视频?,android,android-canvas,screen-capture,Android,Android Canvas,Screen Capture,我正在开发一个绘画应用程序,带有canvas和SurfaceView,我想记录用户操作并生成视频 在这一刻,我正在尝试: public static Bitmap captureView(View v) { Log.v(CAPTURE_TAG, "init"); v.setDrawingCacheEnabled(true); v.buildDrawingCache(true); Bitmap b = Bitmap.createBitmap(v.getDrawing
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]);
}
}
公共类takeCaptureTask扩展了AsyncTask{
@凌驾
受保护的void onPostExecute(位图结果){
Log.v(“taskCapt”、“Fin-InitSave”);
新建saveCaptureTask()。执行(结果);
}
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
Log.v(“taskCapt”、“init”);
}
@凌驾
受保护位图doInBackground(视图…参数){
返回Utils.captureView(参数[0]);
}
}
最后使用NDK和ffmpeg生成视频
我的问题是性能,使用这个,每截图200毫秒(5帧),我需要至少15帧
我的问题是:1-我在没有root的情况下进行屏幕录制的方式是否正确
2-我可以用其他方法拍摄画布截图吗?
3-可以不使用root从NDK截图吗?在这种情况下,如何处理?
4-使用NDK更快地将数据保存到外部存储?
5-如何缓冲大量图像以便以后处理 我对我糟糕的英语感到抱歉
非常感谢你的帮助 这取决于您的绘图方式。实际上,您可以使用位图和画布作为绘图缓冲区,这将非常容易捕获。有很多方法可以做到这一点,包括在视图发生变化时只做屏幕封盖在释放所有触摸点时进行捕获如何?我想重现用户操作,如果用户绘制一条长路径,那么我无法重现如何绘制这条路径,只有最终结果我将应用程序用作白板,我无法预测用户是如何绘制的。如果仅在更改时进行屏幕捕获,则不会再现用户操作,只显示用户操作结果