【问题标题】:How to get higher camera preview fps like snapchat?如何像 snapchat 一样获得更高的相机预览 fps?
【发布时间】:2014-02-05 20:17:48
【问题描述】:

在 Android 上,

有人知道 snapchat 使用什么技巧在他们的相机预览中获得如此高的 fps 吗?我尝试了各种方法:

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

没有人让我接近恒定的 30 fps 或什至高于 snapchat 似乎得到的速度。我几乎可以达到与谷歌相机应用程序相同的 fps,但这不是很好,而且我的显示器分辨率要低得多。

编辑:

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

【问题讨论】:

    标签: android camera


    【解决方案1】:

    试试这个吧

    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 {
                }
            }
        }
    });}
    

    【讨论】:

    • 嗨罗希特!我有点不清楚你会在哪里使用这个代码?你必须先打开相机,还是什么?或者 - 只是调用这个例程?干杯!
    • 澄清一下——在这种情况下,“打开相机”是什么意思? (对不起,如果你没有时间!:))干杯...
    • @JoeBlow 感谢您添加赏金...我将尝试为您制作一个更完整的示例,并感谢 Rohit 的代码!
    • @ROHITPARMAR 这不是在按下按钮时拍一张照片并保存到 SD 卡吗?
    • 不,你可以通过连续点击一个按钮来拍摄多张照片。
    【解决方案2】:

    我相信他们使用的是 android NDK。您可以找到更多信息in android developer

    在图像和视频处理等性能关键任务中,使用纯 C/C++ 比 JAVA 代码更快。

    您也可以尝试通过使用其他编译器编译应用程序来提高性能,例如the Intel compiler

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-04
      • 1970-01-01
      • 2014-11-16
      相关资源
      最近更新 更多