MediaRecorder start failed: -22

1,报错:

start failed: -22

出现这个问题,一直搜索百度google,还是找不到对应的信息。后面再看到采样率的问题上,看到采样率在特定机型上是支持和不支持之分。

然后查了下自己手上的三星采样率,支持的是8000。于是改了后就可以了。

改前:

 File file = new File(context.getExternalCacheDir(), "record-cache");
 mRecorder = new MediaRecorder();
 // 如果不存在要创建
 if (!file.exists()) file.mkdirs();
 mPath = file.getAbsolutePath() + "/" + System.currentTimeMillis() + ".amr";
 //设置音源为麦克风
 mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
 //设置封装格式      
 mRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);
 //设置所录制的声音的采样率
 mRecorder.setAudioSamplingRate(16000);
 //设置编码格式
 mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
 //输出文件
 mRecorder.setOutputFile(mPath);
 try {
      mRecorder.prepare();
      mStartTime = System.currentTimeMillis();
 } catch (IOException e) {
      Tools.SystemOut.out("录音失败");
 }
 //录音
 mRecorder.start();

改后:

 File file = new File(context.getExternalCacheDir(), "record-cache");
 mRecorder = new MediaRecorder();
 // 如果不存在要创建
 if (!file.exists()) file.mkdirs();
 mPath = file.getAbsolutePath() + "/" + System.currentTimeMillis() + ".amr";
 //设置音源为麦克风
 mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
 //设置封装格式      
 mRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);
 //设置所录制的声音的采样率
 mRecorder.setAudioSamplingRate(8000);
 //设置编码格式
 mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
 //输出文件
 mRecorder.setOutputFile(mPath);
 try {
      mRecorder.prepare();
      mStartTime = System.currentTimeMillis();
 } catch (IOException e) {
      Tools.SystemOut.out("录音失败");
 }
 //录音
 mRecorder.start();

最后:

运行以后就不会报错了。

你可能感兴趣的:(MediaRecorder start failed: -22)