2011-05-09 87 views
7

我正在编写一个应用程序,允许用户使用手机相机捕捉视频。我使用自己的代码来录制视频,而不是使用相机应用中的Android。如何在android中获得支持的视频摄像头分辨率?

一切工作正常,除了我需要能够访问支持的相机分辨率列表,所以我可以选择在运行时使用哪一个。我正在寻找像getSupportedPictureSizes(),但视频。 Android 3.0有这个功能,但我正在寻找2.2的东西。

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

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

回答

9

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

public List<Camera.Size> getSupportedVideoSizes() 

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

+1

谢谢!但不幸的是,直到API 11(Android 3)和我在API 8(2.2)上才实现。我发现那天晚上,我花了半个小时的咒骂才发现它不在我的api里。 – jln646v 2011-05-09 12:57:45

+0

好吧,我想我明白了。它似乎在我一直在测试的手机上正常工作。 – jln646v 2011-05-10 07:46:04

+0

我在Android 4.0.3的Nexus S上试过了,它*总是*返回null! – 2012-05-31 16:25:17

5

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

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)); 
     } 
    } 
+0

这只适用于某些电话。设置许多使用此方法列出的模式时,我的HTC Desire Z会崩溃。 – 2012-06-01 01:26:54

+0

@ jln646v,这个解决方案仍然适合你吗? – Felix 2013-05-06 22:26:22

+0

我相信这是我仍在使用的代码。在某些设备上(Motorolla设备似乎这样做)getSupportedPreviewSizes()似乎返回了一些不起作用的大小,导致视频被绿线等损坏。你有什么问题? – jln646v 2013-05-07 12:41:51