1

因此,我遵循初學者視頻錄製應用程序的默認配方,但我遇到了一些我無法弄清楚的錯誤。我得到的錯誤是在recorder.Prepare();跟它/0/test.mp4:打開失敗:ENOENT(沒有這樣的文件或目錄)。現在,我將代碼粘貼我在下面,誤差是45行我也已設置正確的權限爲基本視頻錄製問題

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

我我認爲這很好,因爲我在recpie中添加了「CAMERA和RECORD_AUDIO」,然後在發佈之前使用Google搜索了其他三個。

using System; 

using Android.App; 
using Android.Content; 
using Android.Runtime; 
using Android.Views; 
using Android.Widget; 
using Android.OS; 
using Android.Media; 

namespace CameraTest 
{ 
    [Activity (Label = "CameraTest", MainLauncher = true, Icon = "@drawable/icon")] 
    public class MainActivity : Activity 
    { 
     MediaRecorder recorder; 

     protected override void OnCreate (Bundle bundle) 
     { 
      base.OnCreate (bundle); 

      SetContentView (Resource.Layout.Main); 
      var record = FindViewById<Button> (Resource.Id.Record); 
      var stop = FindViewById<Button> (Resource.Id.Stop); 
      var play = FindViewById<Button> (Resource.Id.Play);  
      var video = FindViewById<VideoView> (Resource.Id.SampleVideoView); 
      Android.OS.Environment.ExternalStorageDirectory.SetWritable(true); 
      string path = Android.OS.Environment.ExternalStorageDirectory.Name + "/test.mp4"; 


      // Set our view from the "main" layout resource 
      // Get our button from the layout resource, 
      // and attach an event to it 
      record.Click += delegate { 
       video.StopPlayback(); 

       recorder = new MediaRecorder(); 
       recorder.SetVideoSource (VideoSource.Camera); 
       recorder.SetAudioSource (AudioSource.Mic);    
       recorder.SetOutputFormat (OutputFormat.Default); 
       recorder.SetVideoEncoder (VideoEncoder.Default); 
       recorder.SetAudioEncoder (AudioEncoder.Default);  
       recorder.SetOutputFile (path);  
       recorder.SetPreviewDisplay (video.Holder.Surface);   
       recorder.Prepare(); 
       recorder.Start(); } ; 

      stop.Click += delegate { 
       if (recorder != null) { 
        recorder.Stop(); 
        recorder.Release(); 
       } 
      }; 

      play.Click += delegate { 
       var uri = Android.Net.Uri.Parse (path);   
       video.SetVideoURI (uri); 
       video.Start(); 
      }; 


     } 
     protected override void OnDestroy() 
     { 
      base.OnDestroy(); 

      if (recorder != null) { 
       recorder.Release(); 
       recorder.Dispose(); 
       recorder = null; 
      } 
     } 
    } 
} 

回答

1

變化

string path = Android.OS.Environment.ExternalStorageDirectory.Name + "/test.mp4"; 

要:

string path = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/test.mp4"; 

你原來的代碼只使用目錄不是完整路徑作爲輸出位置。

+0

此外,它看起來配方不正確。現在填寫錯誤報告。 – matthewrdev 2014-11-21 02:06:38

+0

錯誤報告:https://bugzilla.xamarin.com/show_bug.cgi?id = 24714 – matthewrdev 2014-11-21 02:19:15