当前位置: 首页 > 知识库问答 >
问题:

如何获得更高的相机预览fps,如snapchat?

经佐
2023-03-14

在Android上,

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

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

没有人能让我达到30帧/秒的恒定速度,甚至可能超过snapchat的速度。我可以获得与谷歌相机应用程序相同的fps,但这并不好,我的显示分辨率要低得多。

编辑:

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

共有2个答案

冀弘厚
2023-03-14

我相信他们使用了android NDK。你可以在android developer中找到更多信息。

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

您还可以尝试通过使用其他编译器(如英特尔编译器)编译应用程序来提高性能。

葛承教
2023-03-14

试试这个它很管用

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上制作我的自定义相机活动,但当旋转相机时,表面视图的纵横比会变得混乱。 在我的oncreate for the activity中,我设置了framelayout,它保存了显示相机参数的曲面视图。 然后,在曲面视图中,我设置要显示的相机参数 您可以看到,当手机旋转时,乐高男会变得更高、更瘦: 如何确保相机视图的纵横比正确?

  • 我是GLM新手,正在尝试编写fps风格的相机类 移动鼠标时是否需要重新计算上方向向量? 然而,在我改变向上向量后,一切看起来都很奇怪 但是当我保持向上向量时我的程序看起来有问题 文件:FPSCAMER。cpp公司 您可以在此处下载源代码和二进制文件 https://docs.google.com/file/d/0B9givuJvSet8ekRReWtRM29ldzg/edit?usp=sharin

  • 问题内容: 不同的iOS设备上的键盘高度不同。有人知道我如何以编程方式获取设备键盘的高度吗? 问题答案: 在Swift中: 您可以通过订阅通知来获取键盘高度。(假设您想知道显示的高度是多少)。 像这样: 迅捷2 迅捷3 斯威夫特4 然后,您可以使用以下功能访问高度: 迅捷2 迅捷3 斯威夫特4

  • 标题问题99.9%的答案如下: 当您在

  • CameraToMpegTest的示例。bigflake中的java。com或Grafika中的“Show capture camera”使用该摄像机。预览以获取帧数据。实验表明(Nexus 4,Android 4.4.2)的帧速率为10fps。这没有预期的那么高。 如果我们使用相同的设备(Nexus 4、Android 4.4.2)使用摄像头录制视频,帧速率为30fps。 所以我假设使用came

  • null null 当然,任何其他建议都将不胜感激。 注意:也有类似的问题,我花了几个小时来研究,但没有一个正确地解决了我的问题,也没有给出足够的细节。