MediaRecorder:开始失败:-2147483648

时间:2015-12-16 16:52:43

标签: android mediarecorder android-mediarecorder

我在23+ api上捕获此异常。在api 22及更少,一切正常。你能帮帮我,找到解决方案吗? 我正在使用23 api目标并尝试了不同的配置,但仍有问题

E/MediaRecorder: start failed: -2147483648
W/System.err: java.lang.RuntimeException: start failed. W/System.err: at android.media.MediaRecorder.start(Native Method)
W/System.err: at com.ksy.recordlib.service.recoder.RecoderVideoSource.prepare(RecoderVideoSource.java:105)
W/System.err: at com.ksy.recordlib.service.recoder.RecoderVideoSource.run(RecoderVideoSource.java:173) 
W/System.err: at java.lang.Thread.run(Thread.java:818)

我发现,崩溃的原因是我的输出

 >try {
 >   this.piple = ParcelFileDescriptor.createPipe();
 >} catch (IOException e) {
 >   e.printStackTrace();
 >}
 >mediaRecorder.setOutputFile(this.piple[1].getFileDescriptor());

如何解决此问题?

2 个答案:

答案 0 :(得分:4)

由于Android API级别= 23,因此在编码MPEG4视频时不再可能使用不可搜索的文件描述符(也包括ParcelFileDescriptor)。从这个commit可以看出,MPEG4Writer被修改为打印错误并在检测到不可搜索的文件描述符时退出。

为方便起见,粘贴下面提到的代码:

// Verify mFd is seekable
off64_t off = lseek64(mFd, 0, SEEK_SET);
if (off < 0) {
    ALOGE("cannot seek mFd: %s (%d)", strerror(errno), errno);
    release();
}

答案 1 :(得分:0)

对我来说,MediaRecorder 启动失败:-2147483648 错误 取决于设备和操作系统级别。通常,录音机 将启动 1 次,随后的启动将失败。 修复方法是添加对 MediaRecorder.release() 的调用。 这允许后续开始正常工作。

...
try {
   audioRecorderType_MR.stop();
   audioRecorderType_MR.release();  // <<-- ADD THIS LINE
} catch (Exception e) {
   J42CallerId.printStackTrace(new J42ProgramCheck("J42VM0072E:", e));
}
audioRecorderType_MR = null;
...