Я новый ребенок в программировании на Android, так что перед выполнением своего исследовательского проекта перед лицом проблем с видео. В проекте мы хотели бы создать приложение, которое использует как видео, записанное встроенной передней камерой, так и ускорение, воспринимаемое встроенным акселерометром.Почему частота кадров камеры колеблется при слиянии другого датчика?
Моя проблема в том, что частота кадров этих видеороликов обычно колеблется от 15 до 30 кадров в секунду, хотя я установил камеру в 30 кадров в секунду в исходном коде. Я попытался закрыть поток данных акселерометра, чтобы проверить согласованность частоты кадров. Однако он все еще колебался. Я тестировал эту проблему как в Note 3, Galaxy S4, так и в S5.
Следующий код является функцией I используется для настройки передней камеры в моих устройствах
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 связанные с камерой? Есть ли решение для этой проблемы, которое вы можете мне предложить? Я читал эту тему и на других сайтах, но мне непонятно и трудно понять.
Заранее спасибо.
Поскольку я думаю, что мой вопрос связан с общим знанием Android, я не добавил сюда свой код. Я действительно не ищу отладочную помощь, просто ответ на вопрос, почему частота кадров видео всегда колеблется при записи в моем случае слияния акселерометра. Благодарю. –