我一直试图让自定义相机屏幕工作,但由于某种原因,以下代码似乎不起作用。我最终得到了一个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上看了类似的问题。阅读回复后我无法解决问题。
答案 0 :(得分:1)
配置MediaRecorder
的语句所需的顺序很棘手。 documentation表示必须在setAudioSource()
之前调用setOutputFormat()
。翻转语句的顺序如下:
Preview.getRecorderInstance().setAudioSource(MediaRecorder.AudioSource.MIC);
Preview.getRecorderInstance().setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);