Как получить стабильную постоянную частоту кадров с помощью Camera2 API? - PullRequest
1 голос
/ 29 апреля 2019

Я пишу свое первое приложение для 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, диапазоны

...