[Android] start failed: -1004 error / AudioEncoding에러, 오디오 에러

사운드 진폭 측정 테스트중, 특정 기기에서

start failed: -1004 error

그외 키워드 : AudioEncodingError, encodingError...

 

와 같은 에러가 발생했다. 똑같은 에러코드를 가진 사람의 해결법은 없었으나..

찾아보니 기기마다 지원되는 오디오 인코딩 방식이 다르기 때문이라고 한다.

 

 

기존 코드

MediaRecorder recorder;
 
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

 

변경 코드

recorder.setOutputFormat(MediaRecorder.OutputFormat.OGG); //THREE_GPP
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.OPUS); // AMR_NB

 

 

보통 THREE_GPP, AMR_NB정도면 거의 지원을 한다고 하는데...

아직 기기에서 지원하는 오디오코딩의 종류를 찾아 예외처리 하거나 그런 방법은 모르겠다.

(혹시 누가 이 문제에 대해서 알고 계시다면 알려주세요!)

 

하여튼.. 다른 기기에선 멀쩡히 작동되다가 특정 기기에서만 그렇다면? 인코딩 방식을 바꿔보자!

 

 

** (03.09) 추가

Note8, Note10에서 테스트 해본 결과, 역시 두개의 인코딩 적용방식을 다르게 해줘야 했는데..

휴대폰 인코딩 종류를 먼저 알아내야하는지(??) 어떤식으로 인코딩 체크를 하면 좋을까 고민하다가 간단하게 해결했다.

 

try-catch를 통해 에러가 날경우엔 또다른 인코딩 방법으로 적용하는 걸로..!

(이때 new MediaRecoder(); 와 MIC 설정또한 같이 해주지 않으면 null 에러가 발생할테니 아래와 같이 테스트해보세요~)

            try {
                mRecorder = new MediaRecorder();
                mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
                mRecorder.setOutputFormat(MediaRecorder.OutputFormat.OGG);
                mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.OPUS);
            } catch (Exception e){
                mRecorder = new MediaRecorder();
                mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
                mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
                mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
            }

 


참고1 : stackoverflow.com/questions/25993094/java-lang-runtimeexception-start-failed

참고2 : developer.android.com/guide/topics/media/media-formats

참고3 : codetravel.tistory.com/11