Android-MediaRecorder录制视频

使用MediaRecorder能够通过麦克风和相机捕获音视频并保存

相关权限

1
2
3
4
5
6
7
8
9
10
<!--    写入外部储存-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- 读取外部储存-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<!-- 所有文件管理权限-->
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
<!-- 麦克风-->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<!-- 摄像头-->
<uses-permission android:name="android.permission.CAMERA"/>

动态申请就不放了,太长

调用摄像头录制

布局

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center">
<!-- TextureView展示摄像头的预览图-->
<TextureView
android:layout_weight="1"
android:id="@+id/media_textureView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<Button
android:text="开始录制"
android:id="@+id/media_btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>

在按钮的点击事件中设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
  media_btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String btnText = media_btn1.getText().toString();
if (btnText.equals("开始录制")){
media_btn1.setText("结束录制");
// 得到摄像头对象
camera = Camera.open();
// 摄像头画面预览旋转90°
camera.setDisplayOrientation(90);
camera.unlock();
// 创建录制音频和视频的类
mediaRecorder = new MediaRecorder();
// 把设置的camera给mediaRecorder
mediaRecorder.setCamera(camera);
// 设置音频源,MIC是麦克风
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
// 设置视频源,CAMERA是相机
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
// 指定输出视频最终的格式,MPEG_4是mp4格式
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
// 指定音频的编码格式
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
// 指定视频的编码格式
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
// 视频旋转90°,否则视频默认横屏播放
mediaRecorder.setOrientationHint(90);
// 设置输出文件,储存至外部储存私有目录下的test.mp4,并转换为相对路径
mediaRecorder.setOutputFile(new File(getExternalFilesDir(""),"test.mp4").getAbsolutePath());
// 设置视频长和宽尺寸
mediaRecorder.setVideoSize(1280,720);
// 设置视频帧率
mediaRecorder.setVideoFrameRate(60);
// 设置摄像头预览图像
mediaRecorder.setPreviewDisplay(new Surface(media_textureView.getSurfaceTexture()));
try {
// 进入准备阶段
mediaRecorder.prepare();
} catch (IOException e) {
e.printStackTrace();
}
// 开始录制
mediaRecorder.start();
}
else {
media_btn1.setText("开始录制");
// 停止录制
mediaRecorder.stop();
// 释放mediaRecorder
mediaRecorder.release();
// 释放摄像头对象
camera.stopPreview();
camera.release();
}
}
});

效果图