MediaRecorder录制视频
权限设置
相机和录音权限
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
XML布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".RecordActivity">
<SurfaceView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/my_surface"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal">
<Button
android:id="@+id/start"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:text="开始"/>
<Button
android:id="@+id/stoping"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:text="停止"/>
</LinearLayout>
</RelativeLayout>
Activity代码
package com.example.plusapplication;
import android.Manifest;
import android.media.MediaRecorder;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.io.File;
import java.io.IOException;
public class RecordActivity extends AppCompatActivity implements View.OnClickListener, SurfaceHolder.Callback {
private Button start,stop;
private SurfaceView surfaceView;
private MediaRecorder mediaRecorder;
private boolean isStart = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_record);
// 设置横屏显示
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
surfaceView = findViewById(R.id.surface_id);
// 设置全屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
// 选择支持半透明模式,在有surfaceview的activity中使用。
getWindow().setFormat(PixelFormat.TRANSLUCENT);
surfaceView = findViewById(R.id.my_surface);
start = findViewById(R.id.start);
start.setOnClickListener(this);
stop = findViewById(R.id.stoping);
stop.setOnClickListener(this);
SurfaceHolder holder = surfaceView.getHolder();
holder.addCallback(this);
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
requestPermissions(new String[]{Manifest.permission.CAMERA,Manifest.permission.RECORD_AUDIO},100);
}
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.start:
try {
mediaRecorder.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mediaRecorder.start();
isStart = true;
Toast.makeText(this, "开始录音", Toast.LENGTH_SHORT).show();
break;
case R.id.stop:
if (isStart){
mediaRecorder.stop();
Toast.makeText(this, "结束录音", Toast.LENGTH_SHORT).show();
isStart = false;
}
break;
}
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
File file = new File(Environment.getExternalStorageDirectory().getPath(),"aaa.mp4");
if (!file.exists()){
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
mediaRecorder = new MediaRecorder();
/*
MediaRecorder 媒体录制
AudioSoure 音源
VideoSource 视频来源
AudioChannels声频通道
OutputFormat 输出格式
AudioEncoder 音频编码
VideoEncoder 视频编码
*/
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediaRecorder.setAudioChannels(2);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mediaRecorder.setPreviewDisplay(holder.getSurface());
mediaRecorder.setOutputFile(file.getPath());
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
}
功能方法
//重低音调节
BassBoost bassBoost = new BassBoost(0, 1);
bassBoost.setEnabled(true);
bassBoost.getRoundedStrength();
//自动增强控制器
AutomaticGainControl automaticGainControl;
//噪音消除器
NoiseSuppressor noiseSuppressor;
//回声消除器
AcousticEchoCanceler canceler;