2016-01-31 4 views
10

Я пытаюсь захватить замедленное видео на моем Nexus 5x. Это, как я настройка записи на носитель:Android захват замедленного видео с использованием CamcorderProfile

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 кадров в секунду.

Я прошел через this answer, который говорит о следующих в official documentation:

Для всех профилей высокой скорости, определенных ниже ((от QUALITY_HIGH_SPEED_LOW до QUALITY_HIGH_SPEED_2160P), они похожи как нормальные профили записи, с только более высокой частотой выходных кадров и скоростью передачи . Поэтому установка этих профилей с помощью 0Profilefile (CamcorderProfile) без указания каких-либо других параметров кодирования приведет к созданию высокоскоростных видео, а не замедленному движению видео, которое hav e различные скорости кадров и воспроизведения (воспроизведения). Для записи видео медленные движения, приложение должно установить выходной (воспроизведение) частоту кадров и скорость передачи в битах соответственно с помощью 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 кадров в секунду видео, как указано в документе here

videoFrameRate

Добавлено в уровне API 8 скорость видео целевого кадра публичного INT в кадрах в секунду Зонд.

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

+0

Только предположение, но вы на самом деле пытаетесь вызвать '' setVideoFrameRate' и setVideoEncodingBitRate' вручную? Вы проверяли значения, которые отправляет ваш профиль? – damian

+0

Да @damian, я вызываю следующее непосредственно перед подготовить: 'mMediaRecorder.setVideoEncodingBitRate (profile.videoBitRate/4),' ' mMediaRecorder.setVideoFrameRate (profile.videoFrameRate/4);' Профиль 'videoBitRate' является' 27000000' и ​​'videoFrameRate'' 120' – Siddharth

+0

Привет, @Siddharth. Вы когда-нибудь придумывали решение? У меня та же проблема. – flutillie

ответ

-1
mMediaRecorder.setVideoFrameRate(QUALITY_HIGH_SPEED_LOW); 

или

mMediaRecorder.setVideoFrameRate(QUALITY_HIGH_SPEED_HIGH); 
+1

[doc] (https://developer.android.com/intl/es/reference/android/media/CamcorderProfile.html#QUALITY_HIGH_SPEED_HIGH) говорит, что значение 'CamcorderProfile.QUALITY_HIGH_SPEED_HIGH' равно' 2001'. Я сомневаюсь, что смогу установить videoFrameRate в 2001 году. Можете ли вы рассказать о своем ответе? – Siddharth

Смежные вопросы