1

저는 MediaRecorder를 사용하여 오디오를 녹음하고 AAC 오디오가 포함 된 .mp4로 저장합니다. Android 4.1을 사용하는 Nexus S를 제외한 모든 기기에서 문제없이 작동합니다. 그 장치에서 나는 start() (나는 생각한다)에서 에러 (1, -2147483648)를 받거나 계속 잘하지만, 출력 파일은 항상 비어있다. 앱이 다른 기기에서 작동하므로 필요한 권한이 있습니다.Android MediaRecorder 오류 (1, -2147483648)

mRecorder.reset(); 
mRecorder.setOnErrorListener(new MediaRecorder.OnErrorListener() { 

     @Override 
     public void onError(MediaRecorder mr, int what, int extra) { 
      Log.e("sagasg", what + " " + extra); 

     } 
    }); 
    mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
    mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 
    mRecorder.setAudioSamplingRate(SAMPLING_RATE); 
    mRecorder.setAudioEncodingBitRate(BIT_RATE); 
    mFileName = "unnamed-" + mTimeStarted.year + "-" + mTimeStarted.month + "-" + mTimeStarted.monthDay 
      + "-" + mTimeStarted.hour + "-" + mTimeStarted.minute + "-" + mTimeStarted.second; 

    mRecorder.setOutputFile(mFilePath + mFileName + mExtension); 

    try { 
     mRecorder.prepare(); 
    } catch (IOException e) { 
     Log.e(LOG_TAG, "prepare() failed"); 
    } 

    mRecorder.start(); 

답변

3

설정을 임의로 변경하여 해결했습니다. 샘플링 속도는 문서 AAC에 따르면

public static final int SAMPLING_RATE = 48000; 

입니다 어디 8-48 kHz에서 지원

mRecorder.setAudioSamplingRate(SAMPLING_RATE); 

을 제거 할 때 일을 시작하지만, 어떤 이유로 그렇지 않습니다. 이제 Nexus S에서만 나타나는 또 다른 버그를 수정해야합니다. 이제 개발자가 iOS를 선호하는 이유를 알았습니다.

편집 : 이제이 옵션으로 인해 충돌이 발생하지 않으며 녹음은 빈 파일입니다. 24000과 같은 다른 값을 사용해 보았습니다. 같은 결과가 나타납니다. 기본 샘플링 속도를 고수해야합니다.

2

이러한 오류는 디버그하는 데는 고통이지만,이 방법은 유용 할 것으로 생각됩니다.

FileInputStream inputStream = new FileInputStream(mFilePath + mFileName + mExtension); 
mRecorder.setDataSource(inputStream.getFD()); 

또는 당신은 또한 FileOutputStream 시도 할 수 있습니다 : 당신은 FileInputStream를 사용해야 하나

mRecorder.setOutputFile(mFilePath + mFileName + mExtension); 

:

FileOutputStream outputStream = new FileOutputStream(mFilePath + mFileName + mExtension); 
mRecorder.setOutputFile(outputStream.getFD()); 

참고

이 내가 당신을 제안 라인이 변경입니다 이러한 솔루션 중 하나에 대해서는 IllegalArgumentException, SecurityException, IllegalStateExceptionIOException입니다.

+0

FileOutputStream도 동일한 결과를 제공합니다. 음, 똑같은지 모르겠다. 여기에 넥서스가 없기 때문에 휴대 전화에서 작동하고 넥서스 S에서 충돌이 발생한다. – DariusL