MediaRecorderによる録画の解像度について教えてください。

1,059 views
Skip to first unread message

toshi

unread,
Feb 17, 2011, 11:45:06 AM2/17/11
to 日本Androidの会
こんにちわ。
吉田と申します。
現在、カメラから動画を撮影して保存するアプリを開発しています。
撮影自体はできるのですが、解像度の変更がどうしてもうまくいきません。

setVideoSizeで設定するように考えていましたが、
この数値を変更しても取得できる動画の解像度に変化がありません。。。
何か全く別の部分で設定すべきなのでしょうか?

以下が、今の実装コードになります。

------------------------------------------------

package test.video;

import java.io.File;

import android.os.Environment;
import android.content.Context;
import android.media.MediaRecorder;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class RecordView extends SurfaceView implements
SurfaceHolder.Callback{
private MediaRecorder recorder;
private boolean isRecord;

public RecordView(Context context){
super(context);
isRecord = false;

SurfaceHolder holder = getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

public void surfaceCreated(SurfaceHolder holder) {
recorder = new MediaRecorder();
recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);

recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);

recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
}

public void surfaceChanged(SurfaceHolder holder, int format, int
width, int height) {
recorder.setOutputFile(createPath());
recorder.setVideoFrameRate(15);
recorder.setVideoSize(width, height);
recorder.setPreviewDisplay(holder.getSurface());

try{
//プレビュー開始
recorder.prepare();
}catch(Exception e){
android.util.Log.e("Error", e.getMessage());
}
}

public void surfaceDestroyed(SurfaceHolder holder) {

}

@Override
public boolean onTouchEvent(MotionEvent event){

if(event.getAction() == MotionEvent.ACTION_DOWN){
if(!isRecord){
isRecord = true;

//撮影開始
recorder.start();
}else{
recorder.stop();
recorder.release();
}
}
return true;
}

private String createPath(){
File dir = Environment.getExternalStorageDirectory();
File appDir = new File(dir, "VideoTest");

if(!appDir.exists()){
appDir.mkdir();
}

String name = System.currentTimeMillis() + ".3gp";
return new File(appDir, name).getAbsolutePath();
}
}

-----------------------------------------

よろしくお願いします。



Takuya Endo

unread,
Jul 24, 2013, 10:31:18 PM7/24/13
to android-g...@googlegroups.com
CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);

ここのQUALITY_HIGHの部分をいじると解像度変わります。
以下のサイトが参考になりました。

Reply all
Reply to author
Forward
0 new messages