2009-11-30 87 views
0

我試圖使用android.media.MediaRecorder錄製視頻,並且無論我在調用prepare()時執行的android運行時分段錯誤。這裏有一個例子:如何使用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();問候,Ari – BeMeCollective 2009-12-02 00:04:17

回答

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

幫我。在調試過程中在logcat中查找

+0

am添加此屬性我的應用程序是強制關閉異常是非法stateexception recorder.setVideoFrameRate(20);請幫助我 – 2013-11-29 14:31:52