前言
之前这个博客碰到了一些问题比如在获取mMediaRecorder.getSurface();的时候老实提示没有初始化导致报错。然后个人因为业务也没需求要Camera2录像,所以一直没有深究。但是最近有大神(感谢利工)指出其实是因为之前用这个行代码设置
这行代码有一个大问题我一致没有注意到,这个MediaRecorder.VideoSource.CAMERA 属性其实是给Camera1使用的。
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
需要修改成Camera2的
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
这个在官方注释里也有说明,如下
public final class VideoSource {
/* Do not change these values without updating their counterparts
* in include/media/mediarecorder.h!
*/
private VideoSource() {}
public static final int DEFAULT = 0;
/** Camera video source
* <p>
* Using the {
@link android.hardware.Camera} API as video source.
* </p>
*/
public static final int CAMERA = 1;
/** Surface video source
* <p>
* Using a Surface as video source.
* </p><p>
* This flag must be used when recording from an
* {
@link android.hardware.camera2} API source.
* </p><p>
* When using this video source type, use {
@link MediaRecorder#getSurface()}
* to retrieve the surface created by MediaRecorder.
*/
public static final int SURFACE = 2;
}
现在主要问题解决了,我在详细讲解如何使用Camera2配合MediaRecorder录制视频
详解部分
需要的权限
<uses-permission android:name="android.permission.RECORD_AUDIO"/><!--音频录制权限-->
<uses-permission android:name="android.permission.CAMERA"/><!--摄像头权限-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><!--存储权限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Xml布局
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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=".MedioRecorderCamera2Activity">
<TextureView
android:id="@+id/textureview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<Button
android:id="@+id/btn_start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开始"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"/>
<Button
android:id="@+id/btn_finish"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="结束"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintRight_toRightOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
代码部分
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.a

本文详述了使用Android Camera2 API与MediaRecorder结合进行视频录制的方法,包括权限设置、XML布局、代码实现及摄像头分辨率配置等关键步骤。

4887

被折叠的 条评论
为什么被折叠?



