ビデオ録画を複数回開始および停止し、ビデオ データを .csv に蓄積できる機能を実装しようとしていFile
ます。
これは、メディアレコーダーを準備する方法です。
private boolean prepareVideoRecorder(){
mMediaRecorder = new MediaRecorder();
//0 for landscape
//90 for portrait
//Check for available profile
CamcorderProfile profile = null;
if(CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_480P)){
Log.d(TAG, "480p");
profile = CamcorderProfile.get(CamcorderProfile.QUALITY_480P);
}else if(CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_720P)){
Log.d(TAG, "720p");
profile = CamcorderProfile.get(CamcorderProfile.QUALITY_720P);
}else{
Log.d(TAG, "LOW");
profile = CamcorderProfile.get(CamcorderProfile.QUALITY_LOW);
}
// Step 1: Unlock and set camera to MediaRecorder
mCamera.unlock();
mMediaRecorder.setCamera(mCamera);
// Step 2: Set sources
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
// Step 3: Set profile
mMediaRecorder.setProfile(profile);
// Step 4: Set output file and pass media recorder the file descriptor
if(mStoreFile == null){
mStoreFile = MediaUtil.getOutputMediaFile(MediaUtil.MEDIA_TYPE_VIDEO);
try {
mStoreFile.createNewFile();
} catch (Exception e) {
e.printStackTrace();
}
}
try {
mOutputStream = new FileOutputStream(mStoreFile, true);
mMediaRecorder.setOutputFile(mOutputStream.getFD());
} catch (Exception e1) {
e1.printStackTrace();
}
mMediaRecorder.setMaxDuration(30000);
// Step 5: Set the preview output
mMediaRecorder.setPreviewDisplay(mPreviewSurface.getHolder().getSurface());
//Check orientation and set hint
switch(mOrientation){
case ORIENTATION_PORTRAIT_NORMAL:
mMediaRecorder.setOrientationHint(90);
break;
case ORIENTATION_PORTRAIT_INVERTED:
mMediaRecorder.setOrientationHint(270);
break;
case ORIENTATION_LANDSCAPE_NORMAL:
mMediaRecorder.setOrientationHint(0);
break;
case ORIENTATION_LANDSCAPE_INVERTED:
mMediaRecorder.setOrientationHint(180);
break;
}
// Step 6: Prepare configured MediaRecorder
try {
mMediaRecorder.prepare();
} catch (IllegalStateException e) {
Log.d(TAG, "IllegalStateException preparing MediaRecorder: " + e.getMessage());
releaseMediaRecorder();
return false;
} catch (IOException e) {
Log.d(TAG, "IOException preparing MediaRecorder: " + e.getMessage());
releaseMediaRecorder();
return false;
}
return true;
}
これはクリック コードのボタンです。
@Override
public void onClick(View v) {
if (isRecording) {
try{
mOutputStream.close();
}catch(Exception ee){
}
// stop recording and release camera
mMediaRecorder.stop(); // stop the recording
mMediaRecorder.reset();
mCamera.lock(); // take camera access back from MediaRecorder
// inform the user that recording has stopped
mRecordButton.setImageResource(R.drawable.record_button);
isRecording = false;
} else {
// initialize video camera
if (prepareVideoRecorder()) {
// Camera is available and unlocked, MediaRecorder is prepared,
// now you can start recording
mMediaRecorder.start();
// inform the user that recording has started
mRecordButton.setImageResource(R.drawable.record_button_on);
isRecording = true;
} else {
// prepare didn't work, release the camera
releaseMediaRecorder();
// inform user
}
}
}
});
MediaUtil.getOutputMediaFile(MediaUtil.MEDIA_TYPE_VIDEO)
次のようなものが表示されます: /storage/sdcard0/Pictures/Project/VID_2013.mp4
現在の問題:
現時点でテストする方法は次のとおりです。
- 録音開始
- 記録を停止
- 録音開始
- 録音を停止
- /Pictures/Project パスの Android のファイル マネージャーに移動します。
- 作成され、複数のデータ セグメントが「追加」されたファイルを確認できます。しかし、それは再生されません。また、他のビデオ ファイルのようなカバー画像はありません。
どこかで、ファイルが壊れていますか? 一度録音してストレージ内のファイルを確認するだけではうまくいきません。に を定義するだけでビデオを録画できますが、複数の撮影のFile
ためにビデオ データを追加しようとしていますMediaRecorder
。setOutputFile
これは可能ですか?