Nexus 5xでスローモーションビデオをキャプチャしようとしています。これは私がメディアレコーダーを設定しています方法です: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 fpsのスローモーション動画がありません。通常の29 fpsの動画です。
私はofficial documentationに次の話これは、this answerを経て:
(( QUALITY_HIGH_SPEED_LOWからQUALITY_HIGH_SPEED_2160Pまで)の下に定義されているすべての高速プロファイルのために、彼らは通常の録画プロファイルとして 似ています、したがって、これらのプロファイルを他のエンコーディング パラメータを指定せずに のsetProfile(CamcorderProfile)に設定すると、スローモーションではなく高速ビデオが生成されます ビデオはhav異なるキャプチャおよび出力(再生)フレームレート。 スローモーションビデオを記録するには、アプリケーションは、 スローモーションファクタに基づいて、 setVideoFrameRate(int)およびsetVideoEncodingBitRate(int)によって、ビデオ出力 (再生)フレームレートとビットレートを適切に設定する必要があります。アプリケーションがMediaCodecエンコーダでビデオ の録画を行う予定の場合、このCamcorderProfileに従ってMediaFormatの個々のフィールド を同様に設定する必要があります。
私は、setProfileはすでに選ばれたCamcorderProfileから導出されたパラメータを持つ2つの方法のsetVideoFrameRateとsetVideoEncodingBitRateを呼び出して取得しない事。なぜ私はそれらをもう一度呼び出す必要がありますか?私はここで何が欠けていますか?
ご協力いただければ幸いです。私の人生のために、私はこれを動作させることができません!
編集:私はそうのようなメソッドを呼び出して試してみましたが、それでも通常の速度ビデオキャプチャ:
mMediaRecorder.setVideoFrameRate(profile.videoFrameRate/4);
mMediaRecorder.setVideoEncodingBitRate(profile.videoBitRate/4);
1/4 CamcorderProfile.QUALITY_HIGH_SPEED_HIGHによってアドバタイズされたフレームレートは120であるために、私はキャプチャしたいです文書APIレベル8でhere
公共INT videoFrameRate
追加された秒当たりのフレームにおけるターゲットビデオフレームレートに述べたように30 fpsビデオond。
アプリケーションが他 MediaRecorderの符号化パラメータを指定せずに setProfile(CamcorderProfile)を介してビデオ録画を設定場合、これは、毎秒ターゲット記録されたビデオ出力のフレームレートです。たとえば、高速品質の プロファイル(QUALITY_HIGH_SPEED_LOWからQUALITY_HIGH_SPEED_2160Pまで)の場合、 は、ビデオが記録されて再生されるフレームレートで、 となります。アプリケーションが のスローモーションユースケースを高速品質プロファイルで作成しようとする場合、setVideoFrameRate(int)を使用して希望の出力(再生)フレームレート に対応する別のビデオフレーム レートを設定する必要があります。たとえば、QUALITY_HIGH_SPEED_720P がCamcorderProfileで240fpsのvideoFrameRateを宣言し、 アプリケーションが1/8ファクタスローモーション録画ビデオを作成する予定の場合、 アプリケーションはsetVideoFrameRate(int)を使用して30fpsに設定する必要があります。 に失敗すると、通常のスピード再生の高速ビデオである のフレームレート(上記の例では240fps)になります。アプリケーションが にMediaCodecエンコーダを使用してビデオ録画を行う場合は、 CamcorderProfileに従って、Media Formatの個々のフィールドをそれぞれ に設定する必要があります。
だけで推測していますが、実際には手動で 'setVideoFrameRate'と' setVideoEncodingBitRate'を呼び出そうとしましたか?あなたのプロフィールが提出している値をチェックしましたか? – damian
はい@damian、私は準備の直前に次の呼び出し: 'mMediaRecorder.setVideoEncodingBitRate(profile.videoBitRate/4);' ' mMediaRecorder.setVideoFrameRate(profile.videoFrameRate/4);' プロファイル 'videoBitRate'は' 27000000'と 'videoFrameRate'は' 120'です。 – Siddharth
こんにちは、@Siddharth。あなたはこれに対する解決策を見つけましたか?私は同じ問題を抱えている。 – flutillie