2011-05-09 95 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

相關問題