나는 안드로이드 프로그래밍의 새로운 아기이므로 연구 프로젝트를 수행 할 때 비디오와 관련된 문제에 직면하고있다. 이 프로젝트에서 내장 프론트 카메라로 촬영 한 비디오와 내장형 가속도계에서 감지 한 가속도를 모두 사용하는 응용 프로그램을 만들고 싶습니다.다른 센서를 융합 할 때 왜 카메라 프레임 속도가 변동합니까?
제 생각에는이 비디오의 프레임 속도는 소스 코드에서 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;
}
비디오의 프레임 속도가 같은 방식으로 변동하는 이유 안드로이드 응용 프로그램을 프로그래밍 할 때
누군가가 나에게 설명 할 수 카메라 관련? 이 문제에 대한 해결책이 있습니까? 다른 웹 사이트에서도이 주제를 읽었지만 이해하기가 어렵지 않습니다.
미리 감사드립니다.
내 질문은 일반적인 Android 지식과 관련이 있다고 생각하므로 여기에 내 코드를 추가하지 않았습니다. 실제로 디버깅 도움을 요청하지 않습니다. 비디오 가속기를 융합 한 경우 비디오의 프레임 속도가 항상 변동하는 이유에 대한 대답입니다. 감사. –