在我的应用程序中,我使用surfaceiew在android中拍摄视频。在onpreviewFrame方法中我编写了抓取帧的代码,但问题是我无法获取所有视频帧。我正在捕捉大约14秒的视频,但我只得到大约90帧。帧速率为30 fps,图像尺寸为800 x 480。
下面的代码是onPreviewFrame方法中的f帧:
formattedFileCount = fileCountFormatter.format(fileCount);
jpegFile = new File(Environment
.getExternalStorageDirectory().getPath()
+ "/abc/foo-"
+ formattedFileCount + ".jpg");
fileCount++;
Camera.Parameters parameters = camera.getParameters();
Size size = parameters.getPreviewSize();
YuvImage image = new YuvImage(b,
parameters.getPreviewFormat(), 800,
480, null);
fos = new FileOutputStream(jpegFile);
bos = new BufferedOutputStream(fos);
image.compressToJpeg(
new Rect(0, 0, image.getWidth(), image.getHeight()),
90, bos);
因此对于大约14秒的视频,总帧数将是420,但我只得到不到100帧。有什么解决方案吗?
答案 0 :(得分:0)
使用时间戳(System.currentTimeMillis())检查执行此代码所需的时间。将其乘以30,它应低于1秒。也许你的Android设备没有那么快将原始预览数据转换为jpg并将其写入磁盘。你在哪里写sd-card?