MediaRecorder 准备失败:牛轧糖为 -2147483648
MediaRecorder prepare failed: -2147483648 for nougat
我正在编写一个应用程序来通过表面从相机录制视频。
以下代码用于准备MediaRecorder。
MediaRecorder mediaRecorder;
mediaRecorder = new MediaRecorder();
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setOutputFile(videoFilename);
mediaRecorder.setVideoEncodingBitRate(1000000);
mediaRecorder.setVideoFrameRate(30);
mediaRecorder.setVideoSize(videoSize.getWidth(), videoSize.getHeight());
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
try {
mediaRecorder.prepare();
} catch (IOException e) {
e.printStackTrace();
}
像这样获取 outfile(videoFilename),
File defaultExternalFolder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
File videoFolder = new File(defaultExternalFolder, "My-Vids");
if (!videoFolder.exists()) {
videoFolder.mkdir();
}
String timestemp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String prepend = "MyVid_" + timestemp + "_";
File videoFile = File.createTempFile(prepend, ".mp4", videoFolder);
videoFilename = videoFile.getAbsolutePath();
return videoFile;
videoSize 只是一个对象大小 class。
当我尝试启动 MediaRecorder 时,我得到 java.io.IOException: prepare failed.
奇怪的是它仅在 Nougat OS 中崩溃,在其他设备中它工作正常。
我猜你是 运行 模拟器上的这段代码。实际上,模拟器不支持 MediaRecorder。
见:MediaRecorder
Note: Currently, MediaRecorder does not work on the emulator.
嗯,你可以通过评论 Mic config 来测试它,你会看到它的工作。
MediaRecorder mediaRecorder;
mediaRecorder = new MediaRecorder();
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
//mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setOutputFile(videoFilename);
mediaRecorder.setVideoEncodingBitRate(1000000);
mediaRecorder.setVideoFrameRate(30);
mediaRecorder.setVideoSize(videoSize.getWidth(), videoSize.getHeight());
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
//mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
try {
mediaRecorder.prepare();
} catch (IOException e) {
e.printStackTrace();
}
我已经在 Android 7.1 (Samsung Galaxy S8) 上测试了您的代码及其工作情况。仅在模拟器上发布。
对我来说,MediaRecorder -2147483648 错误
取决于设备和 OS 级别。通常,录音机
将启动 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;
...
我正在编写一个应用程序来通过表面从相机录制视频。
以下代码用于准备MediaRecorder。
MediaRecorder mediaRecorder;
mediaRecorder = new MediaRecorder();
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setOutputFile(videoFilename);
mediaRecorder.setVideoEncodingBitRate(1000000);
mediaRecorder.setVideoFrameRate(30);
mediaRecorder.setVideoSize(videoSize.getWidth(), videoSize.getHeight());
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
try {
mediaRecorder.prepare();
} catch (IOException e) {
e.printStackTrace();
}
像这样获取 outfile(videoFilename),
File defaultExternalFolder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
File videoFolder = new File(defaultExternalFolder, "My-Vids");
if (!videoFolder.exists()) {
videoFolder.mkdir();
}
String timestemp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String prepend = "MyVid_" + timestemp + "_";
File videoFile = File.createTempFile(prepend, ".mp4", videoFolder);
videoFilename = videoFile.getAbsolutePath();
return videoFile;
videoSize 只是一个对象大小 class。
当我尝试启动 MediaRecorder 时,我得到 java.io.IOException: prepare failed.
奇怪的是它仅在 Nougat OS 中崩溃,在其他设备中它工作正常。
我猜你是 运行 模拟器上的这段代码。实际上,模拟器不支持 MediaRecorder。 见:MediaRecorder
Note: Currently, MediaRecorder does not work on the emulator.
嗯,你可以通过评论 Mic config 来测试它,你会看到它的工作。
MediaRecorder mediaRecorder;
mediaRecorder = new MediaRecorder();
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
//mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setOutputFile(videoFilename);
mediaRecorder.setVideoEncodingBitRate(1000000);
mediaRecorder.setVideoFrameRate(30);
mediaRecorder.setVideoSize(videoSize.getWidth(), videoSize.getHeight());
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
//mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
try {
mediaRecorder.prepare();
} catch (IOException e) {
e.printStackTrace();
}
我已经在 Android 7.1 (Samsung Galaxy S8) 上测试了您的代码及其工作情况。仅在模拟器上发布。
对我来说,MediaRecorder -2147483648 错误 取决于设备和 OS 级别。通常,录音机 将启动 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;
...