Подтвердить что ты не робот

Android фиксирует замедленное видео с помощью CamcorderProfile

Я пытаюсь захватить медленное видео на моем Nexus 5x. Вот как я настраиваю медиа-рекордер:

CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH_SPEED_HIGH);

mMediaRecorder = new MediaRecorder();

// Step 1: Unlock and set camera to MediaRecorder
mCamera.unlock();
mMediaRecorder.setCamera(mCamera);

// Step 2: Set sources
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

// Step 3: Set the high speed CamcorderProfile
mMediaRecorder.setProfile(profile);

// Step 4: Set output file
// Step 5: Prepare media recorder
// Step 6: Capture video

Проблема заключается в том, что захваченные видео не являются видеороликами с медленным движением на 120 кадров в секунду, поддерживаемыми моим устройством. Это обычные 29 кадров в секунду.

Я прошел этот ответ, в котором говорится о следующем в официальной документации :

Для всех профилей высокой скорости, определенных ниже ((от QUALITY_HIGH_SPEED_LOW до QUALITY_HIGH_SPEED_2160P), они аналогичны как обычные профили записи, с более высокой выходной частотой кадров и бит. Поэтому, устанавливая эти профили с помощью setProfile (CamcorderProfile) без указания какой-либо другой кодировки параметры будут производить видео высокой скорости, а не замедленное видео, которые имеют разные частоты кадров и воспроизведения (воспроизведения). Чтобы записать видео с замедленным воспроизведением, приложение должно установить видеовыход (воспроизведения) и скорости передачи битов соответственно через setVideoFrameRate (int) и setVideoEncodingBitRate (int) на основе коэффициент замедленного действия. Если приложение намерено сделать видео запись с кодировщиком MediaCodec, он должен устанавливать каждое отдельное поле MediaFormat аналогичным образом в соответствии с этим примером CamcorderProfile.

То, чего я не получаю, setProfile уже вызывает два метода setVideoFrameRate и setVideoEncodingBitRate с параметрами, полученными из выбранного CamcorderProfile. Зачем мне снова звонить? Что мне здесь не хватает?

Любая помощь будет принята с благодарностью. Для жизни меня я не могу заставить это работать!

EDIT: Я пробовал вызывать подобные методы, но он по-прежнему захватывает видео с нормальной скоростью:

mMediaRecorder.setVideoFrameRate(profile.videoFrameRate/4); 
mMediaRecorder.setVideoEncodingBitRate(profile.videoBitRate/4);

1/4, так как объявленная частота кадров с помощью CamcorderProfile.QUALITY_HIGH_SPEED_HIGH равна 120, и я хочу записать видео с частотой 30 кадров в секунду, как указано в документе здесь

public int videoFrameRate

Добавлен в уровень API 8 Целевая частота кадров видео в кадрах в секунду.

Это фиксированная частота кадров видеоизображения в секунду, если приложение настраивает видеозапись через setProfile (CamcorderProfile) без указания каких-либо других Параметры кодирования MediaRecorder. Например, для высокоскоростного качества профили (от QUALITY_HIGH_SPEED_LOW до QUALITY_HIGH_SPEED_2160P), это частота кадров, когда видео записывается и воспроизводится с. Если приложение намеревается создать случай замедленного движения с высокоскоростных профилей качества, он должен установить другой видеокадр скорость, соответствующая требуемой частоте кадров (воспроизведения) через setVideoFrameRate (int). Например, если QUALITY_HIGH_SPEED_720P рекламирует 240fps videoFrameRate в CamcorderProfile и приложение предназначено для создания видеороликов с замедленным замещением 1/8, приложение должно установить 30fps через setVideoFrameRate (int). Не удалось это приведет к высокоскоростным видео с нормальным воспроизведением скорости частота кадров (240 кадров в секунду для примера выше). Если приложение намеревается сделать видеозапись с помощью кодировщика MediaCodec, он должен установить каждый индивидуальное поле MediaFormat аналогично в соответствии с этим CamcorderProfile.

4b9b3361

Ответ 1

mMediaRecorder.setVideoFrameRate(QUALITY_HIGH_SPEED_LOW);

или

mMediaRecorder.setVideoFrameRate(QUALITY_HIGH_SPEED_HIGH);