【发布时间】:2016-04-15 22:24:27
【问题描述】:
是否可以将Android中某些视图内的所有动作录制为视频?也许使用 C/C++ 或其他任何东西?
我知道有办法使用 shell 进行录制,但需要 root。没有它会更好。我们也将从 SDK 版本 16 开始。
【问题讨论】:
是否可以将Android中某些视图内的所有动作录制为视频?也许使用 C/C++ 或其他任何东西?
我知道有办法使用 shell 进行录制,但需要 root。没有它会更好。我们也将从 SDK 版本 16 开始。
【问题讨论】:
您可以使用 javacv 库来组合从视图中获取的一组位图; 代码将如下所示:
FFmpegFrameRecorder recorder = new FFmpegFrameRecorder("/sdcard/test.mp4",256,256);
try {
recorder.setVideoCodec(avcodec.AV_CODEC_ID_MPEG4);
recorder.setFormat("mp4");
recorder.setFrameRate(30);
recorder.setPixelFormat(avutil.PIX_FMT_YUV420P10);
recorder.setVideoBitrate(1200);
recorder.startUnsafe();
for (int i=0;i< 5;i++)
{
view.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
view.setDrawingCacheEnabled(false);
recorder.record(bitmap);
}
recorder.stop();
}
catch (Exception e){
e.printStackTrace();
}
这里有一个full example关于如何录制
【讨论】:
Bitmap.createBitmap(view.getDrawingCache()); 30 次?它对性能有何影响?
v1 是你从你想要截取屏幕的视图 =)
您可以通过well-known technique 获取应用视图的屏幕截图。如果您连续拍摄多张图像,您可以将它们组合成一个视频。
如果您想以更高的帧速率实时执行此操作,推荐的方法是通过MediaProjection 类使用虚拟显示器,将输出馈送到视频编码器。这需要 API 21。
在 API 16 设备上录制屏幕需要本机代码并使用 non-public interfaces。这是可能的,但并不容易。
【讨论】: