사운드 진폭 측정 테스트중, 특정 기기에서
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
'Study > Error !' 카테고리의 다른 글
[Android Error] 버튼이 갑자기 반응이 느릴 때, 뒤로가기 버튼이 안먹힐 때, 갑자기 앱 반응이 안할 때 (0) | 2021.07.15 |
---|---|
[Android] build 에러 / Lint found fatal errors while assembling a release target (0) | 2021.03.16 |
[Android/Bluetoothe] 에러 해결 (0) | 2021.02.15 |
[Android] Unable to locate ADB 에러 / 안드로이드스튜디오 휴대폰연결 에러 (0) | 2021.01.29 |
[Android] 에러해결방법 (0) | 2021.01.15 |