Camera 为什么在熔合另一个传感器时相机帧速率会波动?

Camera 为什么在熔合另一个传感器时相机帧速率会波动?,camera,sensors,frame-rate,Camera,Sensors,Frame Rate,我是Android编程的新手,所以在做研究项目时,我面临着一个与视频相关的问题。在该项目中,我们希望构建一个应用程序,该应用程序使用内置前置摄像头录制的视频和内置加速计感知的加速度 我的问题是,这些视频的帧速率通常在15 fps到30 fps之间波动,即使我在源代码中将相机设置为30 fps。我试图关闭加速计的数据流以测试帧速率的一致性。然而,它仍然是波动的。我在注3、星系S4和S5中测试了这个问题 以下代码是我用来在设备中设置前置摄像头的功能 private boolean prepareVi

我是Android编程的新手,所以在做研究项目时,我面临着一个与视频相关的问题。在该项目中,我们希望构建一个应用程序,该应用程序使用内置前置摄像头录制的视频和内置加速计感知的加速度

我的问题是,这些视频的帧速率通常在15 fps到30 fps之间波动,即使我在源代码中将相机设置为30 fps。我试图关闭加速计的数据流以测试帧速率的一致性。然而,它仍然是波动的。我在注3、星系S4和S5中测试了这个问题

以下代码是我用来在设备中设置前置摄像头的功能

private boolean prepareVideoRecorder(String filename, boolean isFrontCam){
    mCamera = Camera.open;
    mMediaRecorder = new MediaRecorder();

    if(mCamera == null) return false;

    Camera.Size size = getBestPreviewSize(1280, 720, mCamera.getParameters());

    if(IS_TABLET){
        mCamera.setDisplayOrientation(0);
    }else{
        mCamera.setDisplayOrientation(90);
    }

    // Step 1: Unlock and set camera to MediaRecorder
    mCamera.unlock();
    mMediaRecorder.setCamera(mCamera);

    // Step 2: Set sources
    mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

    // Step 3: Set a CamcorderProfile (requires API Level 8 or higher)
    CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);

    mMediaRecorder.setOutputFormat(profile.fileFormat);
    mMediaRecorder.setVideoEncoder(profile.videoCodec);
    mMediaRecorder.setVideoEncodingBitRate(profile.videoBitRate);
    mMediaRecorder.setVideoFrameRate(profile.videoFrameRate);
    mMediaRecorder.setVideoSize(profile.videoFrameWidth, profile.videoFrameHeight);

    // Step 4: Set output file
    mMediaRecorder.setOutputFile(filename);

    // Step 5: Set the preview output
    mMediaRecorder.setPreviewDisplay(mPreview.getHolder().getSurface());

    if(isFrontCam){

        if(IS_TABLET){
            mMediaRecorder.setOrientationHint(180);
        }else{
            mMediaRecorder.setOrientationHint(270);
        }
    }
    else{
        if(IS_TABLET){
            mMediaRecorder.setOrientationHint(0);
        }else{
            mMediaRecorder.setOrientationHint(90);
        }
    }

    mMediaRecorder.setVideoSize(size.width, size.height);
    mMediaRecorder.setVideoFrameRate(30);

    // Step 6: Prepare configured MediaRecorder
    try {
        mMediaRecorder.prepare();
    } catch (IllegalStateException e) {
        Log.d(TAG, "IllegalStateException preparing MediaRecorder: " + e.getMessage());
        Toast.makeText(getBaseContext(), "IllegalStateException preparing MediaRecorder", Toast.LENGTH_SHORT).show();
        releaseMediaRecorder();
        return false;
    } catch (IOException e) {
        Log.d(TAG, "IOException preparing MediaRecorder: " + e.getMessage());
        Toast.makeText(getBaseContext(), "IOException preparing MediaRecorder", Toast.LENGTH_SHORT).show();
        releaseMediaRecorder();
        return false;
    }
    return true;
}
有谁能向我解释一下,为什么在编写与摄像头相关的Android应用程序时,视频的帧速率会以这种方式波动?这个问题有什么解决办法可以向我推荐吗?我在其他网站上也读过这个话题,但它并不清晰,我很难理解


提前谢谢。

我刚刚通过对Camera.Parameters使用setAutoExposureLock(true)和setAutoWhiteBalanceLock(true)解决了这个问题。经过搜索,我发现帧速率波动的原因与光线条件有关。。。因此,作为相机的曝光控制

我在下面附上了我使用的代码

Camera.Parameters params = mCamera.getParameters();
params.setAutoExposureLock(true);
params.setAutoWhiteBalanceLock(true);
mCamera.setParameters(params);

因为我认为我的问题与Android的一般知识有关,所以我没有在这里添加代码。我实际上并没有寻求调试帮助,只是回答了为什么在我融合加速计的情况下录制视频时帧速率总是波动。谢谢