一、介绍
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();
}
如果没有录音权限,则需要申请录音权限。
原创文章,作者:FCKT,如若转载,请注明出处:https://www.506064.com/n/135345.html
微信扫一扫
支付宝扫一扫