一、介绍
Android系统提供了多种方式实现音视频录制,其中比较常用的一种是使用MediaRecorder类。
MediaRecorder类提供了对音视频的配置以及录制功能的实现,可以通过设置各种参数来满足不同的需求。
二、实现步骤
1、准备工作
在AndroidManifest.xml文件中添加录音和摄像头权限。
<uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.CAMERA"/>
2、初始化MediaRecorder对象
在需要录制音视频的Activity中创建MediaRecorder对象,并设置相关参数。
private MediaRecorder mMediaRecorder; private void initRecorder() { mMediaRecorder = new MediaRecorder(); //设置音频来源 mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); //设置视频来源 mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); //设置输出格式 mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); //设置音频编码格式 mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); //设置视频编码格式 mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); //设置输出文件路径 mMediaRecorder.setOutputFile(getVideoFilePath()); }
3、开始录制
在需要开始录制的地方调用MediaRecorder对象的start()方法。
private void startRecording() { try { mMediaRecorder.prepare(); mMediaRecorder.start(); //显示录制图标 mRecordButton.setImageResource(R.drawable.ic_recording); mIsRecording = true; } catch (IOException e) { e.printStackTrace(); } }
4、停止录制
在需要停止录制的地方调用MediaRecorder对象的stop()方法,并释放资源,同时更新UI。
private void stopRecording() { mMediaRecorder.stop(); mMediaRecorder.release(); mMediaRecorder = null; //显示录制按钮 mRecordButton.setImageResource(R.drawable.ic_record); mIsRecording = false; }
三、实例代码
public class MainActivity extends AppCompatActivity { private MediaRecorder mMediaRecorder; private boolean mIsRecording = false; private Button mRecordButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mRecordButton = findViewById(R.id.record_button); mRecordButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mIsRecording) { stopRecording(); } else { startRecording(); } } }); } private void initRecorder() { mMediaRecorder = new MediaRecorder(); //设置音频来源 mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); //设置视频来源 mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); //设置输出格式 mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); //设置音频编码格式 mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); //设置视频编码格式 mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); //设置输出文件路径 mMediaRecorder.setOutputFile(getVideoFilePath()); } private void startRecording() { try { mMediaRecorder.prepare(); mMediaRecorder.start(); //显示录制图标 mRecordButton.setImageResource(R.drawable.ic_recording); mIsRecording = true; } catch (IOException e) { e.printStackTrace(); } } private void stopRecording() { mMediaRecorder.stop(); mMediaRecorder.release(); mMediaRecorder = null; //显示录制按钮 mRecordButton.setImageResource(R.drawable.ic_record); mIsRecording = false; } private String getVideoFilePath() { File file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM); String fileName = "Record_" + new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()) + ".mp4"; return file.getAbsolutePath() + "/" + fileName; } }
四、小结
通过MediaRecorder类的使用,我们可以快速实现Android音视频录制功能,并且可以根据需要对录制参数进行自定义设置。
需要注意的是,在Android 7.0及以上版本中,需要特殊处理录音权限。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (checkSelfPermission(Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) { requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO}, REQUEST_RECORD_AUDIO_PERMISSION); } else { initRecorder(); } } else { initRecorder(); }
如果没有录音权限,则需要申请录音权限。