2011-11-24 164 views
5

中從前置攝像頭錄製時,無法獲得高fps(幀每秒)的速率(約30fps),我觀察到從前置攝像頭錄製的視頻正在以7-10 fps而後置攝像頭的工作正常,本機相機應用程序確實以29fps的速度記錄前置攝像頭的視頻。我的Android應用程序在我的Android應用程序

我用下面的函數來設置幀速率

myRecorder.setVideoFrameRate(30); 

但不知何故,在8FPS記錄它。問題是什麼?此外,照明條件似乎將其提高到15fps,但我希望它至少> 25fps,我該如何實現這一目標?我們可以使用NDK來達到這個目的嗎?

回答

2

我在探索同樣的問題。由於MediaRecorder已經具有本地實現,所以使用NDK似乎不是增加每秒幀數的有前途的方法。在http://www.androidadb.com/source/cellbots-read-only/experimental/android/ioio/samples/ShootOnSight/src/com/cellbots/ioioshoot/CameraView.java.html的代碼中使用setPreviewCallbackWithBuffer改善緩衝看起來很有前途,但我首先想要更好地理解許多攝像機參數以及它們如何影響幀速率。

正如你所知道的那樣,有各種各樣的Android設備具有廣泛的相機功能。要查看特定前置攝像頭和後置攝像頭的功能,可以使用以下代碼(例如,將mCameraId設置爲0表示朝後,對於前置設置爲1)。

Camera mCamera = Camera.open(mCameraId); 
    Camera.Parameters cp = mCamera.getParameters(); 
    Log.d(TAG, "camera parameters: " + cp.flatten()); 

例如,下面是我的Nexus S(運行OS 4.0.4)轉儲的相機參數。

NEXUS-S的前置攝像頭參數:
06-16 15:14:16.909:d/SENSORS_PLUS(24583):照相機參數:
圖象尺寸值= 640×480;
preview-fps-range = 7500,30000;
min-exposure-compensation = -4;
vertical-view-angle = 39.4;
水平視角= 51.2;
whitebalance = auto;
jpeg-thumbnail-height = 120;
jpeg-quality = 100;
preview-format-values = yuv420sp,yuv420p;
rotation = 0;
jpeg-thumbnail-quality = 100;
focus-mode = fixed;
preview-format = yuv420sp;
preview-size = 640x480;
焦距= 0.9;
video-frame-format = yuv420p;
picture-format-values = jpeg;
max-exposure-compensation = 4;
曝光補償= 0;
preview-frame-rate-values = 15;
曝光補償步長= 0。5;
preview-frame-rate = 15;
效果值=無,單聲道,負片,棕褐色;
focus-mode-values = fixed;
picture-size = 640x480;
效果=無;
jpeg-thumbnail-width = 160;
whitebalance-values =自動,白熾燈,熒光燈,日光,陰天,
picture-format = jpeg;
焦點距離= 0.20,0.25,無窮遠;
preview-fps-range-values =(7500,30000);
jpeg-thumbnail-size-values = 160x120,0x0;
預覽大小值= 640x480,320x240,176x144

NEXUS-S後襯相機參數:
06-16 15:46:55.315:d/SENSORS_PLUS(24732):照相機參數:
圖像 - 大小值= 2560x1920,2048x1536,1600x1200,1280x960,640x480;
preview-fps-range = 15000,30000;
min-exposure-compensation = -4;
vertical-view-angle = 39.4;
水平視角= 51.2;
whitebalance = auto;
jpeg-thumbnail-height = 240;
scene-mode = auto;
jpeg-quality = 100;
preview-format-values = yuv420sp,yuv420p;
rotation = 0;
jpeg-thumbnail-quality = 100;
focus-mode = auto;
preview-format = yuv420sp;
preview-size = 720x480;
焦距= 3.43;
video-frame-format = yuv420p;
picture-format-values = jpeg;
max-exposure-compensation = 4;
flash-mode-values =開,關,自動,手電筒;
曝光補償= 0;
preview-frame-rate-values = 30;
曝光補償步長= 0.5;
preview-frame-rate = 30;
flash-mode = off;
效果值=無,單聲道,負片,棕褐色;
focus-mode-values = auto,infinity,macro;
picture-size = 2560x1920;
效果=無;
jpeg-thumbnail-width = 320;
whitebalance-values =自動,白熾燈,熒光燈,日光,陰天,
scene-mode-values = auto,portrait,landscape,night,beach,snow,sunset,fireworks,sports,party,candlelight;
picture-format = jpeg;
焦點距離= 0.10,1。20,無限;
preview-fps-range-values =(15000,30000);
jpeg-thumbnail-size-values = 320x240,0x0;
預覽大小值= 720x480,640x480,352x288,176x144

+0

這是很好的和自我解釋,但如何增加幀頻?你嘗試過cellbots代碼嗎?我懷疑它是否有效。 也許應該由Google Android團隊提供對攝像頭參數的一些控制。 –

+0

我應該總結這個長答案。總之,我只是開始考慮增加幀速率,但我很確定NDK不是最好的路徑。在我看來,攝像機參數是應該首先嚐試的低懸水果。設置相機參數的示例位於http://developer.android.com/guide/topics/media/camera.html#using-features – gregS

1

以下爲一些移動30 FPS設置的工作原理。

Camera.Parameters parms = camera.getParameters(); 
    parms.setRecordingHint(true); 
    camera.setParameters(parms); 
相關問題