0

我一直在试图让自定义相机屏幕工作,但由于某种原因,下面的代码似乎不工作。我最终得到一个RuntimeException,由一个错误导致:setAudioSource called in an invalid state(4)MediaRecorder错误:setAudioSource处于无效状态(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"/>

我会很感激任何帮助,因为我没有在这方面成气候,我已经看了看计算器类似的问题。阅读回复后我无法解决问题。

回答

0

所需的语句配置MediaRecorder的顺序很棘手。 documentation指出必须在setOutputFormat()之前调用setAudioSource()。翻转陈述的顺序是这样的:

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

感谢您的帮助!这消除了这个错误,但另一方面现在我得到一个错误,说'开始失败:-19'。问题是当我开始记录器时,我无法弄清楚为什么。 – adilipan

+0

@adilipan:其他SO帖子显示此错误可能与MediaRecorder.setVideoSize()设置的视频大小有关。你是否在你的代码中调用该方法? –

+0

不,我根本没有在我的代码中调用该方法。 – adilipan

相关问题