この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
MediaRecorderを使って動画撮影するAndroidアプリを作ったのですが デフォルトだと画質が悪いので高画質にする方法を調べました。 以下がサンプルになります。このビューをsetContentViewして下さい。
package sample.record;
import java.io.File;
import android.content.Context;
import android.media.CamcorderProfile;
import android.media.MediaRecorder;
import android.os.Environment;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class SurfaceViewEx extends SurfaceView
implements SurfaceHolder.Callback {
private SurfaceHolder surfaceHolder;
private MediaRecorder mediaRecorder;
public SurfaceViewEx(Context context) {
super(context);
surfaceHolder = getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setType(
SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
@Override
public void surfaceChanged(SurfaceHolder holder,
int format, int width, int height) {}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
try {
mediaRecorder.stop();
mediaRecorder.release();
} catch (Exception e) {}
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
try{
mediaRecorder=new MediaRecorder();
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
CamcorderProfile profile
= CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
mediaRecorder.setProfile(profile);
File folder = Environment.getExternalStorageDirectory();
File file = File.createTempFile("sample20110603",".mp4", folder);
mediaRecorder.setOutputFile(file.getAbsolutePath());
mediaRecorder.setPreviewDisplay(holder.getSurface());
mediaRecorder.prepare();
mediaRecorder.start();
} catch(Exception e) {}
}
}
必要なパーミッションは android.permission.RECORD_AUDIO android.permission.WRITE_EXTERNAL_STORAGE android.permission.CAMERA になります。