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

相關問題