AndroidでMediaRecorderの解像度を上げる方法

2011.08.01

この記事は公開されてから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 になります。