2013-06-30 3 views
1

J'utilise Xamarin's Mono pour Android. Lorsque j'appelle la méthode de préparation pour l'enregistreur de médias, je reçois cette erreur:MediaRecorder Préparer Échec Mono pour Android

java.io.IOException: préparation a échoué.

Voici mon code:

record.Click += delegate { 
      try { 



       path = Android.OS.Environment.ExternalStorageDirectory.Name + "/" + etVideoName.Text + ".mp4"; 
       video.StopPlayback(); 

       recorder = new MediaRecorder(); 
       recorder.SetVideoSource (VideoSource.Camera); 
       recorder.SetAudioSource (AudioSource.Mic);    
       recorder.SetOutputFormat (OutputFormat.Mpeg4); 
       recorder.SetVideoEncoder (VideoEncoder.Default); 
       recorder.SetAudioEncoder (AudioEncoder.Default);  
       recorder.SetOutputFile (path);  
       //recorder.SetPreviewDisplay (video.Holder.Surface);   
       recorder.Prepare(); 
       recorder.Start(); 
      } catch (Exception ex) { 
       MakeAlert("Error", ex.ToString()); 
      } 
     }; 
+0

S'il vous plaît poster toute StackTrace et exceptions imbriquées. – Cheesebaron

Répondre

0

c'est un enregistreur 100% étude de travail :) il

package com.camara.activity; 

    import java.io.IOException; 

    import android.content.Context; 
    import android.hardware.Camera; 
    import android.media.MediaRecorder; 
    import android.util.AttributeSet; 
    import android.util.Log; 
    import android.view.SurfaceHolder; 
    import android.view.SurfaceView; 

public class CamcorderView extends SurfaceView implements 
    SurfaceHolder.Callback { 

MediaRecorder recorder; 
SurfaceHolder holder; 
String outputFile = "/sdcard/default.mp4"; 

public CamcorderView(Context context, AttributeSet attrs) { 
    super(context, attrs); 

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

    recorder = new MediaRecorder(); 
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
    recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
    recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); 
    recorder.setVideoSize(480, 320); 
    recorder.setVideoFrameRate(10); 
    recorder.setMaxDuration(10000); 

} 

public void surfaceCreated(SurfaceHolder holder) { 

    recorder.setOutputFile(outputFile); 
    recorder.setPreviewDisplay(holder.getSurface()); 
    if (recorder != null) { 
     try { 
      recorder.prepare(); 

     } catch (IllegalStateException e) { 
      Log.e("IllegalStateException", e.toString()); 
     } catch (IOException e) { 
      Log.e("IOException", e.toString()); 
     } 
    } 
} 

public void surfaceChanged(SurfaceHolder holder, int format, int width, 
     int height) { 
} 

public void surfaceDestroyed(SurfaceHolder holder) { 
} 

public void setOutputFile(String filename) { 
    outputFile = filename; 
    recorder.setOutputFile(filename); 
} 

    public void startRecording() { 
     recorder.start(); 
} 

    public void stopRecording() { 
     recorder.stop(); 
     recorder.release(); 



    } 

    } 
+0

Merci, mais ma classe hérite de l'activité. Je n'utilise pas de vue de surface. –

+0

ouais aucun proplem, comme vous le voyez dans ce code, nous vérifions si l'enregistreur est nul d'abord peut-être cela fera un diferent et la méthode de préparation est dans un autre vide alors vous pouvez préparer d'abord et ensuite @override commencer recorde – H4F