Я пишу свое первое приложение для Android, и в моем приложении есть функция записи видео. Поэтому я провел небольшое исследование, чтобы подготовить и запустить «материал», и мне удалось изучить пример google на github:
https://github.com/googlesamples/android-Camera2Video
Итак, я глубоко погрузился в код и да, довольно много, просто чтобы сделать видео ..
Итак, у меня есть некоторые ограничения на функцию камеры, которая заключается в том, что она работает плавно с некоторой стабильной постоянной 25 кадрами в секунду ...
И что я видел до сих пор, есть некоторые сеттеры из класса MediaRecorder (см. https://developer.android.com/reference/android/media/MediaRecorder.html)
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mMediaRecorder.setOutputFile(mNextVideoAbsolutePath);
mMediaRecorder.setVideoEncodingBitRate(10000000);
mMediaRecorder.setCaptureRate(25);
mMediaRecorder.setVideoFrameRate(25);
mMediaRecorder.setVideoSize(mVideoSize.getWidth(), getHeight());
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
, чтобы установить частоту кадров, но, следовательно, они наплевать на мои 25 кадров в секунду - так что обычно вывод "как" 29,36 кадров в секунду или 29,54 кадров в секунду
Я сделал несколько повторных поисков в диапазоне поддержки кадров на моем устройстве, а P30 Pro поддерживает 25 кадров в секунду, а на пикселе 3 XL нет. Я даже не понимаю, почему существуют такие различия в устройстве (может, кто-то может объяснить?).
Поэтому API-интерфейс Camera2 предоставляет так много всего, что существует CaptureRequest.Builder, и поэтому я немного погуглил и установил свой captureRequestBuilder с этими дополнительными строками
closePreviewSession();
setUpMediaRecorder();
SurfaceTexture texture = mTextureView.getSurfaceTexture();
assert texture != null;
texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
mPreviewBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD);
mPreviewBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, new Range<Integer>(25,25));
mPreviewBuilder.set(
CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
mPreviewBuilder.set(CaptureRequest.CONTROL_AE_LOCK, false);
Но ничего не изменилось ... Есть ли кто-нибудь, кому удалось получить стабильную постоянную частоту кадров с помощью camera2 api?
Я надеюсь, что есть! Спасибо, если вы уже прочитали!
РЕДАКТИРОВАТЬ Возможные дубликаты:
Camera2 MediaRecorder изменяет частоту кадров на Galaxy S9
Как использовать Android Camera2 API для записи видео 60 кадров в секунду с фиксированным временем экспозиции
РЕДАКТИРОВАТЬ Ради полноты:
Диапазоны от P30 Pro:
P30 Pro диапазоны
Диапазоны от Pixel 3 XL:
Пиксель 3 XL, диапазоны