【问题标题】:How to get supported video camera resolutions in android?如何在 android 中获得支持的摄像机分辨率?
【发布时间】:2011-08-21 13:07:16
【问题描述】:

我正在编写一个应用程序,允许用户使用手机摄像头捕捉视频。我使用自己的代码来录制视频,而不是 Android 内置的相机应用程序。

一切正常,只是我需要能够访问支持的相机分辨率列表,以便在运行时选择要使用的分辨率。我正在寻找类似 @​​987654321@ 的东西,但要寻找视频。 Android 3.0 有这个功能,但我正在寻找 2.2 的东西。

截至目前,我正在使用CamcorderProfile.QUALITY_HIGH / QUALITY_LOW,但这仅给了我两个选项,并且在我一直在测试的手机上,文件大小处于每个极端。(QUALITY_LOW 是 216 kb/s,QUALITY_HIGH 是 > 3 MB/秒)

任何帮助将不胜感激, 谢谢!

【问题讨论】:

    标签: java android camera


    【解决方案1】:

    您是否尝试使用 Camera.Parameters 类中的 getSupportedVideoSizes() method

    public List<Camera.Size> getSupportedVideoSizes()
    

    此方法返回 Size 对象的列表。如果相机没有单独的预览和视频输出,它将返回nullThe answer here 表示当它返回null 时,您可以使用getSupportedPreviewSizes() 列表。

    【讨论】:

    • 谢谢!但不幸的是,直到 API 11(Android 3)才实现,而我使用的是 API 8(2.2)。我发现那天晚上我花了半个小时的诅咒才发现它不在我的 api 中。
    • 好吧,我想我明白了。它似乎在我一直在测试的手机上正常工作。
    • 我在装有 Android 4.0.3 的 Nexus S 上试过这个,它总是返回 null!
    • 因为:返回:如果相机具有单独的预览和视频输出,则为 Size 对象的列表;否则,返回 null。
    【解决方案2】:

    好吧,我想我明白了。它似乎在我一直在测试的手机上正常工作。

    List<Size> tmpList = camera.getParameters().getSupportedPreviewSizes();
    
        final List<Size> sizeList = new Vector<Size>();
    
        //compair the apsect ratio of the candidate sizes against the real ratio
        Double aspectRatio = (Double.valueOf(getWindowManager().getDefaultDisplay().getHeight()) / getWindowManager().getDefaultDisplay().getWidth());
        for(int i=0; i<tmpList.size(); i++){
            Double tmpRatio = Double.valueOf(tmpList.get(i).height) / tmpList.get(i).width;
            if(Math.abs(aspectRatio - tmpRatio) < .15){
                sizeList.add(tmpList.get(i));
            }
        }
    

    【讨论】:

    • 这仅适用于某些手机。设置此方法列出的许多模式时,我的 HTC Desire Z 会崩溃。
    • 我相信这是我仍在使用的代码。在某些设备上(Motorolla 设备似乎这样做) getSupportedPreviewSizes() 似乎返回一些不起作用的尺寸,导致视频被绿线等损坏。你有什么问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    • 2023-04-04
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多