我正在研究xamarin。我正在使用MediaRecorder,我只是想设置帧速率但是当我设置它recorder.SetVideoFrameRate(30);
时我得到错误
Java.Lang.IllegalStateException:
我不确定它是否无法处理它或是否有某种方式让它工作。我只是使用简单的MediaRecorder。
MediaRecorder recorder;
video.StopPlayback();
recorder = new MediaRecorder();
//--
recorder.SetVideoFrameRate(30);
// recorder.SetCaptureRate(150);
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();
答案 0 :(得分:1)
您无法在SetVideoFramerate
之前致电SetOutputFormat
。在SetOutputFormat
下移动该方法调用,它将起作用。
recorder = new MediaRecorder();
recorder.SetVideoSource(VideoSource.Camera);
recorder.SetAudioSource(AudioSource.Mic);
recorder.SetOutputFormat(OutputFormat.Default);
recorder.SetVideoFrameRate(30); // Move it here
Android实际上有一个很好的文档,告诉你每个方法可以抛出什么异常。这是MediaRecorder's page:
的引用<强>抛出强>
如果在prepare()之后或setOutputFormat()之前调用它,则为IllegalStateException。注意:在某些具有自动帧速率的设备上,这会设置最大帧速率,而不是固定帧速率。实际帧率将根据照明条件而变化。