1

在我的应用程序中,我使用 surfaceiew 在 android 中拍摄视频。在 onpreviewFrame 方法中,我编写了代码来抓取帧,但问题是我无法获取所有视频帧。我正在捕捉大约 14 秒的视频,但我只得到大约 90 帧。帧速率为 30 fps,图像尺寸为 800 x 480。

下面的代码在 onPreviewFrame 方法中分解帧:

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 帧。有什么解决方案吗?

4

1 回答 1

0

使用时间戳 (System.currentTimeMillis()) 检查执行此代码需要多长时间。将其乘以 30,它应该小于 1 秒。也许您的 Android 设备无法将原始预览数据转换为 jpg 并将其写入磁盘。你在哪里写它的sd卡?

于 2013-06-11T07:25:00.840 回答