如何从android中的onPreviewFrame中获取视频帧?

时间:2013-06-11 06:54:41

标签: android surfaceview video-processing

在我的应用程序中,我使用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帧。有什么解决方案吗?

1 个答案:

答案 0 :(得分:0)

使用时间戳(System.currentTimeMillis())检查执行此代码所需的时间。将其乘以30,它应低于1秒。也许你的Android设备没有那么快将原始预览数据转换为jpg并将其写入磁盘。你在哪里写sd-card?