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"/>

Я бы признателен за любую помощь в этом, так как я не получаю нигде в этой работе, и я посмотрел на подобные вопросы на StackOverflow. Я не смог решить проблему после прочтения ответов.

ответ

0

Требуемый порядок инструкций для настройки MediaRecorder является сложным. В documentation указано, что setAudioSource() необходимо называть до setOutputFormat(). Отверните порядок этих утверждений:

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

Спасибо за помощь! Это избавляет от этой ошибки, но, с другой стороны, теперь я получаю сообщение об ошибке «start failed: -19'. Проблема в том, что я начинаю записывать рекордер, и я не могу понять, почему. – adilipan

+0

@adilipan: Другие сообщения SO указывают на то, что эта ошибка может быть связана с размером видео в соответствии с параметром 'MediaRecorder.setVideoSize()'. Вы называете этот метод в своем коде? –

+0

Нет, я вообще не называю этот метод в своем коде. – adilipan