編輯:關於android開發
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,如果你的項目需要對那些不支持連續對焦模式的手機也要實現連續對焦的功能,通常有下面幾種途徑:
圖像識別這個辦法我是沒有任何建議,我也玩不來這麼高逼格的東西,後面會有一片文章通過結合第二和第三種來實現連續自動對焦,效果差強人意。
最後,還有兩個可能對短視頻有用的設置。
開啟HDR:
if (parameters.getSupportedSceneModes().contains(Camera.Parameters.SCENE_MODE_HDR)) { parameters.setSceneMode(Camera.Parameters.SCENE_MODE_HDR); }
開啟防抖動:
if (parameters.isVideoStabilizationSupported()) { parameters.setVideoStabilization(true); }
Android 不一樣的原生分享,android分享Android做分享功能百度一下就兩種方案,其一是用系統原生的Activity,最終彈出一個對話框,下面這種的還好,像
HTML5實現3D和2D可視化QuadTree四叉樹碰撞檢測QuadTree四叉樹顧名思義就是樹狀的數據結構,其每個節點有四個孩子節點,可將二維平面遞歸分割子區域。Qua
MSM8909+Android5.1.1之bootloader---修改UART0時鐘頻率致無法下載問題解決 MSM8909+Android5.1.1之bootloade
融雲如何實現文件發送(高級進階) 干貨來啦~! 想在聊天中發 小視頻?gif 動圖? 發紅包? 發 自定義表情? 沒有問題!在融雲統統都可以實現! 以上不管是 小視頻