2009-11-30 5 views
0

나는 비디오를 녹화하기 위해 android.media.MediaRecorder를 사용하려고하는데, prepare()를 호출 할 때 안드로이드 런타임 세그먼트 화 오류가 무엇이든지간에. 다음은 그 예입니다.분할 오류가 발생하지 않고 MediaRecorder를 사용하여 비디오를 녹화하는 방법은 무엇입니까?

public void onCreate(Bundle savedInstanceState) 
{ 
    Log.i("video test", "making recorder"); 
    MediaRecorder recorder = new MediaRecorder(); 
    contentResolver = getContentResolver(); 
    try { 
     super.onCreate(savedInstanceState); 
     Log.i("video test", "--------------START----------------"); 
     SurfaceView target_view = new SurfaceView(this); 
     Log.i("video test", "making surface"); 
     Surface target = target_view.getHolder().getSurface(); 
     Log.i("video test", target.toString()); 
     Log.i("video test", "new recorder"); 
     recorder = new MediaRecorder(); 
     Log.i("video test", "set display"); 
     recorder.setPreviewDisplay(target); 
     Log.i("video test", "pushing surface"); 
     setContentView(target_view); 
     Log.i("video test", "set audio source"); 
     recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
     Log.i("video test", "set video source"); 
     recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); 
     Log.i("video test", "set output format"); 
     recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
     Log.i("video test", "set audio encoder"); 
     recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
     Log.i("video test", "set video encoder"); 
     recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); 
     Log.i("video test", "set max duration"); 
     recorder.setMaxDuration(3600); 
     Log.i("video test", "set on info listener"); 
     recorder.setOnInfoListener(new listener()); 
     Log.i("video test", "set video size"); 
     recorder.setVideoSize(320, 240); 
     Log.i("video test", "set video frame rate"); 
     recorder.setVideoFrameRate(15); 
     Log.i("video test", "set output file"); 
     recorder.setOutputFile(get_path(this, "foo.3gp")); 
     Log.i("video test", "prepare"); 
     recorder.prepare(); 
     Log.i("video test", "start"); 
     recorder.start(); 
     Log.i("video test", "sleep"); 
     Thread.sleep(3600); 
     Log.i("video test", "stop"); 
     recorder.stop(); 
     Log.i("video test", "release"); 
     recorder.release(); 
     Log.i("video test", "-----------------SUCCESS------------------"); 
     finish(); 
    } catch (Exception e) { 
     Log.i("video test", e.toString()); 
     recorder.reset(); 
     recorder.release(); 
     Log.i("video tets", "-------------------FAIL-------------------"); 
     finish(); 
    } 
} 

public static String get_path (Context context, String fname) { 
    String path = context.getFileStreamPath("foo").getParentFile().getAbsolutePath(); 
    String res = path+"/"+fname; 
    Log.i("video test", "path: "+res); 
    return res; 
} 

class listener implements MediaRecorder.OnInfoListener { 
    public void onInfo(MediaRecorder recorder, int what, int extra) { 
     Log.i("video test", "Video Info: "+what+", "+extra); 
    } 
} 
+0

Droid 전화 인 경우 .getSurface(); 안부, 아가 – BeMeCollective

답변

1
recorder.setVideoSize(176, 144); 
recorder.setVideoFrameRate(20); 
recorder.setAudioChannels(1); 
recorder.setPreviewDisplay(mHolder.getSurface());//<- I believe this helped 

이 나를 위해 도움이되었다. 디버그 중 logcat 살펴보기

+0

오전 내 응용 프로그램은 예외를 강제로 닫습니다 예외입니다 illegalstateexception recorder.setVideoFrameRate (20); 도와주세요 –

관련 문제