Android MediaRecorder错误(1,-2147483648)

时间:2012-10-04 21:12:44

标签: android android-4.2-jelly-bean android-mediarecorder

我正在使用MediaRecorder录制音频并将其保存为带有AAC音频的.mp4。除了使用Android 4.1的Nexus S之外,我尝试过的所有设备都能正常运行。在那些设备上,我在start()(我认为)上得到一个错误(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();

2 个答案:

答案 0 :(得分:3)

我通过随机更改设置解决了这个问题。它在我删除时开始工作

mRecorder.setAudioSamplingRate(SAMPLING_RATE);

采样率

public static final int SAMPLING_RATE = 48000;

根据文档,AAC支持8-48 kHz,但由于某种原因,它不支持。现在我只需修复另一个只出现在Nexus S上的错误。现在我明白为什么开发人员更喜欢iOS。

编辑:现在它不会因为这个选项而崩溃,只是录制是一个空文件。尝试了其他值,如24000.相同的结果。我必须坚持使用默认的采样率。

答案 1 :(得分:2)

这些错误很难调试,但我认为这样做会有所帮助。

这是我建议你改变的一句话:

mRecorder.setOutputFile(mFilePath + mFileName + mExtension);

您应该使用FileInputStream

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

或者您也可以尝试FileOutputStream

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

请注意,对于这些解决方案中的任何一个,您可能必须抓住IllegalArgumentExceptionSecurityExceptionIllegalStateExceptionIOException中的一个或多个。