Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android視頻錄制從不入門到入門系列教程(四)————Camera Parameter,androidparameter

Android視頻錄制從不入門到入門系列教程(四)————Camera Parameter,androidparameter

編輯:關於android開發

Android視頻錄制從不入門到入門系列教程(四)————Camera Parameter,androidparameter


Camera提供了一個叫做setParameters的方法幫助開發者設置相機的相關參數。

通過Camera的getParameters方法可以獲取到當前為相機設置的相關參數。

下面簡單介紹下,視頻錄制會用到的幾個參數的用法。

一、設置PreviewSize,即視頻預覽大小,也即輸出到SurfaceView的視頻圖片的分辨率大小。

需要注意的是,PreviewSize只有那麼有限的幾種,各個手機的值也不近相同,不是隨便傳進去個Size都行的。當然你非得隨便搞個Size傳進去,編譯時不會出現任何問題,只是運行時會拋出一個異常,告訴你這個參數不被接受。

通常,在設置PreviewSize之前,需要調用getSupportedPreviewSizes來獲取Camera支持的Size列表。非常不推薦設置一個固定的Size,因為會導致在其他Android手機上由於不支持這個Size導致程序異常的問題。

下面的代碼打印出了本手機支持的所有PreviewSize:

Camera.Parameters parameters = camera.getParameters();
List<Camera.Size> previewSizeList = parameters.getSupportedPreviewSizes();
for (int i = 0; i < previewSizeList.size(); i++)
{
    Camera.Size size = previewSizeList.get(i);
    Log.i("PREVIEW_SIZE", String.format("camera preview width=%d,height=%d",size.width,size.height));
}

在我的手機上輸出如下:

camera preview width=1920,height=1080
camera preview width=1440,height=1080
camera preview width=3840,height=2160
camera preview width=1280,height=720
camera preview width=960,height=720
camera preview width=864,height=480
camera preview width=800,height=480
camera preview width=768,height=432
camera preview width=720,height=480
camera preview width=640,height=480
camera preview width=576,height=432
camera preview width=176,height=144
camera preview width=480,height=320
camera preview width=384,height=288
camera preview width=352,height=288
camera preview width=240,height=160
camera preview width=320,height=240

可以看到,其寬高比以16:9和4:3為主。請注意,結合上篇文章說到的,這些寬高比都是橫向的寬高比,這裡的width對應的是手機屏幕的height,這裡的height對應手機屏幕的width。

二、設置FPS,即視頻預覽幀率。

 同樣的,FPS的值也只有有限的幾種,我們可以通過getSupportedPreviewFpsRange獲取手機支持的預覽FPS。

下面的代碼打印出了本手機支持的所有Fps:

List<int[]> fpsList = parameters.getSupportedPreviewFpsRange();
for (int i = 0; i < fpsList.size(); i++)
{
    int[] fps = fpsList.get(i);
    Log.i("FPS", String.format("camera preview fps min=%d,max=%d",fps[0],fps[1]));
}

 在我的手機上輸出如下:

camera preview fps min=7500,max=30000
camera preview fps min=8000,max=30000
camera preview fps min=30000,max=30000

我測試過很多手機,最大幀率幾乎都是30FPS。不過對於移動端的短視頻錄制,24-30FPS都可以接受。

三、設置對焦模式

通過getSupportedFocusModes()可以獲取到手機支持的對焦模式。

下面的代碼打印出了本手機支持的所有FocusMode:

List<String> focusModeList = parameters.getSupportedFocusModes();
for (int i = 0; i < focusModeList.size(); i++)
{
    String focusMode = focusModeList.get(i);
    Log.i("FOCUS_MODE", String.format("camera focusMode=%s",focusMode));
}

 在我的手機上輸出如下:

camera focusMode=auto
camera focusMode=infinity
camera focusMode=macro
camera focusMode=continuous-video
camera focusMode=continuous-picture
camera focusMode=manual

這幾個單詞都不復雜,對於移動短視頻錄制來說,使用的對焦模式應該是continuous-video。這個模式會在錄制過程中自動對焦,默認對焦點為Camera坐標系的原點。Camera坐標系後面會說到。

值得一提的是,不是所有的手機都支持continuous-video,如果你的項目需要對那些不支持連續對焦模式的手機也要實現連續對焦的功能,通常有下面幾種途徑:

  • 圖像識別,大意就是通過各種XX算法判斷當前幀是否已對焦。
  • 定時器對焦,大意就是整個計時器,每過一定時間就讓Camera對焦一次。
  • 傳感器,通過Android提供的各種傳感器來判斷手機是否有過移動,進而實現連續對焦。

圖像識別這個辦法我是沒有任何建議,我也玩不來這麼高逼格的東西,後面會有一片文章通過結合第二和第三種來實現連續自動對焦,效果差強人意。

最後,還有兩個可能對短視頻有用的設置。

開啟HDR:

if (parameters.getSupportedSceneModes().contains(Camera.Parameters.SCENE_MODE_HDR))
{
    parameters.setSceneMode(Camera.Parameters.SCENE_MODE_HDR);
}

開啟防抖動:

if (parameters.isVideoStabilizationSupported())
{
    parameters.setVideoStabilization(true);
}

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved