2014-11-22 9 views
1

나는 안드로이드 프로그래밍의 새로운 아기이므로 연구 프로젝트를 수행 할 때 비디오와 관련된 문제에 직면하고있다. 이 프로젝트에서 내장 프론트 카메라로 촬영 한 비디오와 내장형 가속도계에서 감지 한 가속도를 모두 사용하는 응용 프로그램을 만들고 싶습니다.다른 센서를 융합 할 때 왜 카메라 프레임 속도가 변동합니까?

제 생각에는이 비디오의 프레임 속도는 소스 코드에서 30fps로 고정 된 카메라로 설정하더라도 15fps에서 30fps로 변동됩니다. 프레임 속도의 일관성을 테스트하기 위해 가속도계의 데이터 스트림을 닫으려고했습니다. 그러나 그것은 여전히 ​​변동되었습니다. 노트 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; 
} 
비디오의 프레임 속도가 같은 방식으로 변동하는 이유 안드로이드 응용 프로그램을 프로그래밍 할 때

누군가가 나에게 설명 할 수 카메라 관련? 이 문제에 대한 해결책이 있습니까? 다른 웹 사이트에서도이 주제를 읽었지만 이해하기가 어렵지 않습니다.

미리 감사드립니다.

+0

내 질문은 일반적인 Android 지식과 관련이 있다고 생각하므로 여기에 내 코드를 추가하지 않았습니다. 실제로 디버깅 도움을 요청하지 않습니다. 비디오 가속기를 융합 한 경우 비디오의 프레임 속도가 항상 변동하는 이유에 대한 대답입니다. 감사. –

답변

0

난 그냥 카메라를 사용하여 setAutoExposureLock (true) 및 setAutoWhiteBalanceLock (true) 사용하여이 문제를 해결했습니다. 몇 가지 검색 노력을 한 후, 프레임 속도가 변동하는 이유는 밝기 조건과 관련이 있다는 것을 알았습니다 ... 카메라의 노출 제어와 관련이 있습니다.

아래에서 사용하는 코드를 첨부했습니다.

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