MediaRecorder错误:setAudioSource处于无效状态(4)

时间:2016-01-31 04:07:46

标签: android runtimeexception mediarecorder android-mediarecorder

我一直试图让自定义相机屏幕工作,但由于某种原因,以下代码似乎不起作用。我最终得到了一个RuntimeException,由一个错误引起:setAudioSource called in an invalid state(4)

以下是有问题的代码:

 Preview.getRecorderInstance().setVideoSource(MediaRecorder.VideoSource.CAMERA);
 Preview.getRecorderInstance().setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
 Preview.getRecorderInstance().setAudioSource(MediaRecorder.AudioSource.MIC);
 Preview.getRecorderInstance().setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
 Preview.getRecorderInstance().setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);

 Preview.getRecorderInstance().setOutputFile(Environment.getExternalStorageDirectory().getAbsolutePath()
                            + "/test" + System.currentTimeMillis() + ".mp4"
                    );


 Preview.getRecorderInstance().prepare();
 Preview.getRecorderInstance().start();

Preview.getRecorderInstance()将单例媒体记录器绑定到Preview类(SurfaceView的子类,用于显示相机预览)。

我的权限:     <uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

我很感激任何帮助,因为我没有在这方面做任何事情,我在stackoverflow上看了类似的问题。阅读回复后我无法解决问题。

1 个答案:

答案 0 :(得分:1)

配置MediaRecorder的语句所需的顺序很棘手。 documentation表示必须在setAudioSource()之前调用setOutputFormat()。翻转语句的顺序如下:

 Preview.getRecorderInstance().setAudioSource(MediaRecorder.AudioSource.MIC);
 Preview.getRecorderInstance().setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);