一、MediaRecorder 简介
Android MediaRecorder 是一个提供基于音频和视频录制功能的 API 类。MediaRecorder 的调用顺序和生命周期方法比较多且复杂,调用错误或使用不当容易导致无法录制或录制的媒体文件损坏。而使用 MediaRecorder 的前提是具备合适的权限,需要在 AndroidManifest.xml 文件中申请。
二、准备录制
使用 MediaRecorder 要先准备要录制的相关配置,例如文件路径和名称,音视频编码的格式,输出的多媒体文件类型等等。以下是一个常见的初始化 MediaRecorder 的示例代码:
private MediaRecorder prepareMediaRecorder() throws IOException { MediaRecorder recorder = new MediaRecorder(); // 设置音频源为麦克风 recorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 设置视频源为摄像头 recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); // 设置输出文件的格式 recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); // 设置音频编码格式 recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); // 设置视频编码格式 recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); // 设置输出文件的路径,这里是在外部私有存储空间的应用目录下新建一个文件夹进行存储 File mediaFile = new File(getExternalFilesDir(null), "/video/test.mp4"); recorder.setOutputFile(mediaFile.getAbsolutePath()); // 设置预览界面 recorder.setPreviewDisplay(mSurfaceHolder.getSurface()); // 准备开始录制 recorder.prepare(); return recorder; }
三、开始和停止录制
MediaRecorder 开始和停止录制的方法都围绕着 start() 和 stop() 方法展开。在录制时需要注意控制录制时间和媒体文件的大小,结束录制方法需要在录制停止后进行资源的释放。以下是一个常见的开始和停止 MediaRecorder 的示例代码:
// 开始录制 private void startRecording() { try { mMediaRecorder = prepareMediaRecorder(); mMediaRecorder.start(); } catch (IOException e) { e.printStackTrace(); } } // 停止录制 private void stopRecording() { if (mMediaRecorder != null) { mMediaRecorder.stop(); mMediaRecorder.reset(); mMediaRecorder.release(); mMediaRecorder = null; } }
四、控制录制过程
除了开始和停止录制外,MediaRecorder 还支持在录制过程中进行不同的控制,例如暂停和恢复录制等。以下是一个常见的控制录制过程的示例代码:
// 暂停录制 private void pauseRecording() { if (mMediaRecorder != null) { mMediaRecorder.pause(); } } // 继续录制 private void resumeRecording() { if (mMediaRecorder != null) { mMediaRecorder.resume(); } } // 更新录制过程的时间和大小信息 private void updateRecordingInfo() { long fileSize = new File(mMediaRecorder.getOutputFile().getAbsolutePath()).length(); long duration = (System.currentTimeMillis() - mStartTime) / 1000; String info = getString(R.string.recording_info, fileSize / 1024, duration); mRecordingInfo.setText(info); }
五、处理异常情况
在使用 MediaRecorder 进行录制过程中,很容易遇到一些异常情况,例如没有合适的音视频数据输入、没有合适的输出路径等等。这时候可以通过 try-catch 语句来捕获异常,以保证程序的稳定性和健壮性。
private void handleException(Exception e) { e.printStackTrace(); mMediaRecorder.reset(); mMediaRecorder.release(); mMediaRecorder = null; Toast.makeText(this, R.string.recording_failed, Toast.LENGTH_SHORT).show(); }
六、总结
以上就是关于 Android MediaRecorder 的多方位使用指南。MediaRecorder 是一个强大的录制 API 类,但是调用顺序繁琐且容易出错。在进行应用开发中使用 MediaRecorder 需要严格按照流程进行调用,并注意处理异常情况,以保证程序的稳定性和健壮性。