2016-01-31 1 views
10

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 

問題があり、撮影した動画は私のデバイスがサポートする1​​20 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の個々のフィールドをそれぞれ に設定する必要があります。

+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

関連する問題