什么是MediaRecorder
MediaRecorder是安卓提供的一个用于音视频采集的类
在前几篇文章中,我们已经介绍了如何进行音频和视频的采集,即通过AudioRecord采集音频,通过Camera来采集视频
那么我们还为什么要介绍MediaRecorder了
前几篇文章介绍的音视频采集,采集的都是原始数据,对于音频来说是pcm数据,对于视频来说是YUV数据,camera中获取的是NV21,camera2获取的是YUV_420_888
对于原始数据还需要进行编码和封装,才能使用
为了方便,google提供了MediaRecorder这个类,通过它会自动将原始数据进行编码和封装
MediaRecorder的优缺点
优点
使用方便,得到就是编码和封装好的音视频文件,可以直接使用
缺点
无法获取原始数据,从而无法原始数据添加一些自己的处理
音频录制
1.开始录音
从上到下依次是(注意顺序很重要)
从麦克风采集声音数据, 设置采样率, 设置文件保存格式, 设置编码格式,设备文件保存路径
private void start(){
try {
mRecorder=new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setAudioSamplingRate(44100);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mRecorder.setOutputFile(path);
mRecorder.prepare();
mRecorder.start();
} catch (IOException e) {
e.printStackTrace();
}
}
2.结束录音
private void stop(){
ToastUtil.startShort(this,"录音文件已保存至:"+path);
mRecorder.stop();
mRecorder.release();
mRecorder=null;
}
视频录制(Camera1和Camera2)
单纯的音频录制很顺利,但是我在写视频录制的代码的过程中踩了很多坑,请读者们注意了,后面我会说道
Camera1
1.开始录制
public void startRecord(String path) {
if(TextUtils.isEmpty(path)){
Log.d(TAG,"Camera1 Record path is empty");
return;
}
mVideoPath=path;
setUpMediaRecorder();
try {
mMediaRecorder.prepare();
mMediaRecorder.start();
Log.d(TAG,"Camera1 has start record");
} catch (IOException e) {
e.printStackTrace();
Log.d