2014-04-16 3 views
1

Я довольно новичок в студии Xamarin, и я пытаюсь сделать приложение для записи видео, но он продолжает бросать исключения. Вот код для настройки макета и нажмите мероприятие:Mediarecorder IllegalStateException on SetProfile

base.OnCreate(bundle); 
     string path = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/MyCamera/test.mp4"; 

     // Set our view from the "main" layout resource 
     SetContentView(Resource.Layout.Main); 

     tView = new TextureView(this); 
     tView.SurfaceTextureListener = this; 
     tView.Click += delegate 
     { 
      RecordVideo(path); 
     }; 

     SetContentView(tView); 

и метод записи:

public void RecordVideo(string path) 
    { 
     mRecorder = new MediaRecorder(); 
     mRecorder.SetAudioSource(AudioSource.Mic); 
     mRecorder.SetVideoSource(VideoSource.Camera); 
     mRecorder.SetOutputFormat(OutputFormat.Default); 
     mRecorder.SetAudioEncoder(AudioEncoder.Default); 
     mRecorder.SetVideoEncoder(VideoEncoder.Default); 
     mRecorder.SetProfile(CamcorderProfile.Get(CamcorderQuality.High)); 
     mRecorder.SetOutputFile(path); 
     mRecorder.SetMaxDuration (10000); 
     mRecorder.Prepare(); 
     try{ 
      mRecorder.Start(); 
     }catch(Exception ex) { 
      ex.GetType(); 
     } 
    } 

и разрешения:

<uses-permission android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 

Спасибо заранее, Pineapplez

ответ

2

У меня, наконец, все получилось. Оказывается, что эта часть:

mRecorder.SetOutputFormat(OutputFormat.Default); 
    mRecorder.SetAudioEncoder(AudioEncoder.Default); 
    mRecorder.SetVideoEncoder(VideoEncoder.Default); 

также содержится в методе Setprofile, который вызывает, чтобы установить выходной формат и кодер дважды. в результате чего было исключено незаконное государство. Теперь мой код выглядит следующим образом:

mRecorder = new MediaRecorder(); 
    mCamera.Unlock(); 
    mRecorder.SetCamera(mCamera); 
    mRecorder.SetAudioSource(AudioSource.Mic); 
    mRecorder.SetVideoSource(VideoSource.Camera); 
    mRecorder.SetProfile(CamcorderProfile.Get(CamcorderQuality.High)); 
    mRecorder.SetOutputFile(path); 
    mRecorder.SetMaxDuration (10000); 
    mRecorder.Prepare(); 
    mRecorder.Start(); 

И я добавил mCamera.Unlock();, чтобы позволить mRecorder использовать его. И mRecorder.SetCamera (mCamera);, чтобы убедиться, что mRecorder использует камеру.

0

Я на самом деле не вхожу в Xamarin, но я hink это потому, что поток еще не готов - так что вы вызываете начало слишком рано. Используйте метод PrepareAsync, затем подключите обратный вызов, когда он будет готов, затем нажмите кнопку «Пуск»().

Смежные вопросы