Android MediaRecorder录制视频
今天是自己课程知识的小share吧,喜欢的话给个大大的👍
MediaRecorder
介绍
主要方法
- void prepar():准备录制
- void start():开始录制
- void stop():停止录制
- void reset():重置MediaRecorder
- void release():释放MediaRecorder占用的资源
- void setAudioEncoder(int):设置音频记录的编码格式
- void setAudioSource(int):设置音频记录的音频源
- void setOutoutFormat(int):设置记录的媒体文件的输出转换格式
- void setOutputFile(String):媒体文件输出路径
编码格式以及输出格式
编码格式
ACC、ACC-ELD、AMR_NB、AMR_WB、DEFAULT、HE_AAC、OPUS、VORBIS
输出格式
AAC_ADTS、AMR_NB、AMR_WB、DEFAULT、MPEG_2_TS、MPEG_4、OGG、THREE_GPP、WEBM
生命周期
简要实验步骤(自做)
核心代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById();
requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO, Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}
, 0x111);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 0x111
&& grantResults.length == 3
&& grantResults[0] == PackageManager.PERMISSION_GRANTED
&& grantResults[1] == PackageManager.PERMISSION_GRANTED
&& grantResults[2] == PackageManager.PERMISSION_GRANTED) {
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.record:
if (!isRecording) {
recordFile = new File(Environment.getExternalStorageDirectory() + "/record.mp4");
mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
//设置编码
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
mediaRecorder.setOutputFile(recordFile.getAbsolutePath());
mediaRecorder.setPreviewDisplay(surfaceView.getHolder().getSurface());
try {
mediaRecorder.prepare();
mediaRecorder.start();
} catch (IOException e) {
e.printStackTrace();
}
isRecording = true;
recordBtn.setEnabled(false);
stopBtn.setEnabled(true);
}
break;
case R.id.stop:
if (isRecording) {
mediaRecorder.stop();
mediaRecorder.release();
mediaRecorder = null;
recordBtn.setEnabled(true);
stopBtn.setEnabled(false);
isRecording = false;
}
break;
}
}
};
recordBtn.setOnClickListener(listener);
stopBtn.setOnClickListener(listener);
}
}
private void findViewById() {
surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
surfaceView.getHolder().setKeepScreenOn(true);
recordBtn = (ImageButton) findViewById(R.id.record);
stopBtn = (ImageButton) findViewById(R.id.stop);
}
}