我是Xamarin工作室的初学者,我正在尝试制作一个视频录制应用程序,但它总是抛出异常。
以下是用于设置布局和点击事件的代码:
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" />
提前致谢,
凤梨
最佳答案
我终于解决了。事实证明,这部分内容:
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使用摄像机。