前言
废话不多数直接看需要啥,有啥问题。代码粘出来就完事。
需要啥
1、需要一个SurfaceView看看自己录的什么熊样
2、存储文件的路径
3、MediaRecorder录制的工具
4、Camera调调角度,前后摄像头
都啥问题注意
1、视频的预览角度
有可能你的预览角度和播放角度都有问题,跟机型有关,也是因为机型的不同可能你们的选择角度还不一样呢,那怎么处理呢?好办法当然是去找算法,去自适应的调整。这里就简单告诉你咋用就完事了,
想要调整捕获的预览角度就要申请Camera对象进行参数调整,
/**
* 调整视频角度
* @param orientation
*/
private void setCameraOrientation(int orientation) {
//打开摄像头
camera = Camera.open(cameraId);
Camera.Parameters parameters = camera.getParameters();
//设置分辨率
parameters.setPreviewSize(1280, 720);
parameters.setPictureSize(1280,720);
//旋转预览角度
camera.setDisplayOrientation(orientation);
camera.setParameters(parameters);
camera.unlock();
}
2、视频的播放角度
有可能你的视频播放时候会有角度的旋转问题,这里可以用VideoView、mediaPlayer、Ijkplayer进行播放。不会的看我后面的博文。那怎么调整播放角度呢?
//设置视频输出角度
mRecorder.setOrientationHint(270);
//在进入准备状态之前去调整
mRecorder.prepare();
//看不明白mRecorder是啥的看后面整体代码,就是MediaRecorder
完整代码
肯定存在很多优化,整多了也没用,咱们那就是学学MediaRecorder录个视频,剩下的处理后续再说,在学。代码都备注好了,有啥旋转问题啥的,自己调调。
Java代码
public class MediaRecorderVideoCapture extends Activity {
private SurfaceView surfaceView;
private SurfaceHolder holder;
private String videoFileSavePath = Environment.getExternalStorageDirectory().getPath() + "/video.mp4";;
private File videoFile;
private MediaRecorder mRecorder;
private Button record;
private Button stop;
private boolean isRecordIng;
private Camera camera;
private int cameraId = Camera.CameraInfo.CAMERA_FACING_FRONT;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_media_recorder_video);
record = findViewById(R.id.record);
record.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startRecorder();
}
});
stop = findViewById(R.id.stop);
stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopRecorder();
}
});
//旋转摄像头角度
setCameraOrientation(90);
// 让stop按钮不可用。
stop.setEnabled(false);
surfaceView = findViewById(R.id.sView);
holder = surfaceView.getHolder();
//设置预览的分辨率,跟我们下面录的是一样的
holder.setFixedSize(1280, 720);
//设置该组件让屏幕不会自动关闭
holder.setKeepScreenOn(true);
}
/**
* 设置前后摄像头
* @param cameraId
*/
private void setCameraId(int cameraId){
this.cameraId = cameraId;
}
/**
* 调整视频角度
* @param orientation
*/
private void setCameraOrientation(int orientation) {
//打开摄像头
camera = Camera.open(cameraId);
Camera.Parameters parameters = camera.getParameters();
//设置分辨率
parameters.setPreviewSize(1280, 720);
parameters.setPictureSize(1280,720);
//旋转预览角度
camera.setDisplayOrientation(orientation);
camera.setParameters(parameters);
camera.unlock();
}
/**
* 开始录制
*/
private void startRecorder() {
try {
//创建保存录制视频的视频文件
videoFile = new File(videoFileSavePath);
//创建MediaPlayer对象
mRecorder = new MediaRecorder();
if (camera != null) {
//设置camera参数
mRecorder.setCamera(camera);
}
mRecorder.reset();
//设置从麦克风采集声音
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//设置视频采集来源
mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
//设置视频输出格式
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
//设置编码格式
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
//设置图像编码的格式
mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
//采集的分辨率
mRecorder.setVideoSize(1280, 720);
//采集的帧率(看看你设备支持Camera.getParameters.getSupportedPreviewSizes()
// 获取支持的帧率列表,你瞅瞅行不行)
mRecorder.setVideoFrameRate(30);
//设置视频输出角度
mRecorder.setOrientationHint(270);
//设置输出路径
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
mRecorder.setOutputFile(videoFile.getAbsoluteFile());
}
//指定个surface预览一下子
mRecorder.setPreviewDisplay(surfaceView.getHolder().getSurface());
//进入准备状态
mRecorder.prepare();
//开始录制
mRecorder.start();
record.setEnabled(false);
stop.setEnabled(true);
isRecordIng = true;
} catch (Exception e){
Log.e("Exception", "startRecorder: EEr");
}
}
/**
* 停止播放
*/
private void stopRecorder(){
if (isRecordIng){
//停止录制
mRecorder.stop();
//释放资源
mRecorder.release();
mRecorder = null;
record.setEnabled(true);
stop.setEnabled(false);
if (camera != null)
{
camera.release();
}
}
isRecordIng = false;
}
@Override
protected void onDestroy() {
super.onDestroy();
if (isRecordIng) {
stopRecorder();
}
}
}
XML代码
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!-- 显示视频预览的SurfaceView -->
<SurfaceView
android:id="@+id/sView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<Button
android:id="@+id/record"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="fitCenter"
android:text="开始录制" />
<Button
android:id="@+id/stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:scaleType="fitCenter"
android:text="停止" />
</RelativeLayout>
录制画面,方方面面
录完了看看
第一种方法:直接去你存储目录去看去,就在你文件的根目录下,叫video.mp4
第二种方法:
上这个目录下找找video.mp4
第三种方法:看我下一篇博文,我给你整给播放器,你播就完事了。