首页 > 解决方案 > API <23 的 Android MediaRecorder setMaxDuration 失败

问题描述

我正在使用此代码录制音频文件。适用于最近的设备,但适用于较旧的设备。MediRecorder 在 1 秒后停止,而不是在 setMaxDuration() 中设置的 1 分钟。以及播放录制文件时。每录制 1 秒就变成 1 分钟播放时间。例如,如果我录制 5 分钟,当我尝试在播放器中播放录制的文件时,持续时间变为 5 分钟。

public void startRecording() {
    mFileName=this.getNewRecordFilePath(mContext);       
    mediaRecorder = new MediaRecorder();
    mediaRecorder.setOnErrorListener(this);
    try {
        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mediaRecorder.setOutputFormat(AudioFormat.ENCODING_PCM_16BIT);
        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
        mediaRecorder.setAudioChannels(1);
        mediaRecorder.setAudioEncodingBitRate(128000);
        mediaRecorder.setAudioSamplingRate(getValidSampleRates());
        mediaRecorder.setOutputFile(mFileName);
        mediaRecorder.setMaxDuration(Max_Record_Time_Minute * 60000);
        mediaRecorder.setOnInfoListener(this);
        mediaRecorder.prepare();
        mediaRecorder.start();
        chronometerReset();
        chronometer.start();

        if(this.mRecorderListener!=null){
           this.mRecorderListener.onRecordStart(mFileName);
        }

    } catch (IllegalStateException e) {
        releaseMediaRecorder();
        if(this.mRecorderListener!=null){
            mRecorderListener.onRecordError(e.getMessage());
        }

    } catch (IOException e) {
        releaseMediaRecorder();
        if(this.mRecorderListener!=null){
            mRecorderListener.onRecordError(e.getMessage());
        }

    }catch(Exception ex){
       ex.printStackTrace();
       if(this.mRecorderListener!=null){
          mRecorderListener.onRecordError(ex.getMessage());
       }
    }
}

private int getValidSampleRates() {
    int bfs=8000;
    for (int rate : new int[]{48000, 16000, 8000}) {  // add the rates you wish to check against
        int bufferSize = AudioRecord.getMinBufferSize(rate, AudioFormat.CHANNEL_CONFIGURATION_DEFAULT, AudioFormat.ENCODING_PCM_16BIT);
        if (bufferSize > 0) {
            // buffer size is valid, Sample rate supported
            return rate;
        }
    }
    return bfs;
}

谁能帮我找到解决方案。

标签: androidandroid-mediarecorder

解决方案


推荐阅读