Android开发 MediaRecorder使用Camera2配合录制视频

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

前言

  之前这个博客碰到了一些问题比如在获取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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值