如何获得更高的相机预览fps,例如Snapchat



在Android上,

有人知道,Snapchat可以在相机预览中获得如此高的FPS的功能吗?我尝试了各种方法:

  • 使用纹理视图而不是表面视图
  • 强制硬件加速
  • 使用较低的分辨率
  • 使用不同的预览格式(YV12,NV21掉落帧)
  • 改变聚焦模式

没有一个让我接近常数30fps,甚至在Snapchat上方似乎都在任何地方。我几乎可以达到与库存的Google Camera应用程序相同的FPS,但这不是很好,并且我的分辨率要低得多。

编辑:

所使用的方法与官方Android视频录制应用程序使用的方法相同。那里的预览具有相同的图像质量,并锁定为30fps。

尝试一下,它起作用

public void takeSnapPhoto() {
camera.setOneShotPreviewCallback(new Camera.PreviewCallback() {
    @Override
    public void onPreviewFrame(byte[] data, Camera camera) {
        Camera.Parameters parameters = camera.getParameters();
        int format = parameters.getPreviewFormat();
        //YUV formats require more conversion
        if (format == ImageFormat.NV21 || format == ImageFormat.YUY2 || format == ImageFormat.NV16) {
            int w = parameters.getPreviewSize().width;
            int h = parameters.getPreviewSize().height;
            // Get the YuV image
            YuvImage yuv_image = new YuvImage(data, format, w, h, null);
            // Convert YuV to Jpeg
            Rect rect = new Rect(0, 0, w, h);
            ByteArrayOutputStream output_stream = new ByteArrayOutputStream();
            yuv_image.compressToJpeg(rect, 100, output_stream);
            byte[] byt = output_stream.toByteArray();
            FileOutputStream outStream = null;
            try {
                // Write to SD Card
                File file = createFileInSDCard(FOLDER_PATH, "Image_"+System.currentTimeMillis()+".jpg");
                //Uri uriSavedImage = Uri.fromFile(file);
                outStream = new FileOutputStream(file);
                outStream.write(byt);
                outStream.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
            }
        }
    }
});}

我相信他们使用了Android NDK。您可以在Android开发人员中找到更多信息。

在性能关键任务(例如图像和视频处理)中,使用纯C/C 比Java代码快。

您还可以尝试通过使用另一个编译器(例如Intel编译器)来提高性能。

相关内容

最新更新