2009-11-30 2 views
0

J'essaye d'employer android.media.MediaRecorder pour enregistrer la vidéo, et peu importe ce que je fais les défauts de segmentation d'exécution androïde quand j'appelle prepare(). Voici un exemple:Comment utiliser MediaRecorder pour enregistrer de la vidéo sans provoquer de problème de segmentation?

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

S'il s'agit d'un téléphone Droid s'attendre à des problèmes avec votre appel à .getSurface(); salutations, Ari – BeMeCollective

Répondre

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

cela a aidé pour moi. Regardez dans logcat pendant le débogage

+0

suis ajouter cette propriété mon application est forcer à fermer l'exception est illegalstateexception recorder.setVideoFrameRate (20); s'il vous plaît aidez-moi –

Questions connexes