Android通过Camera2录制视频,写了个工具类,需要时直接拿来用

import android.Manifest;
import android.annotation.SuppressLint;
import android.content.pm.PackageManager;
import android.graphics.SurfaceTexture;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCaptureSession;
import android.hardware.camera2.CameraDevice;
import android.hardware.camera2.CameraManager;
import android.hardware.camera2.CaptureFailure;
import android.hardware.camera2.CaptureRequest;
import android.hardware.camera2.CaptureResult;
import android.hardware.camera2.TotalCaptureResult;
import android.media.MediaRecorder;
import android.os.Handler;
import android.util.Log;
import android.util.Size;
import android.view.Surface;import androidx.annotation.NonNull;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;public class RecordUtil {private static final String TAG = "RecordUtil";private MediaRecorder mMediaRecorder;private CameraManager cameraManager;private CameraDevice cameraDevice;private CameraCaptureSession mPreviewSession;private CaptureRequest.Builder mPreviewBuilder;private CameraCaptureSession.StateCallback mSessionStateCallback;private CameraCaptureSession.CaptureCallback mSessionCaptureCallback;private Handler mChildHandler;private SurfaceTexture surfaceTexture;private String mCameraId;private String fileName;private Size previewSize = new Size(1920, 1080);;public RecordUtil(CameraManager cameraManager, SurfaceTexture surfaceTexture, String mCameraId, Size previewSize) {this.cameraManager = cameraManager;this.surfaceTexture = surfaceTexture;this.mCameraId = mCameraId;this.previewSize = previewSize;initSessionCaptureCallback();initSessionStateCallback();}@SuppressLint("MissingPermission")public void initCamera(String fileName) {this.fileName = fileName;try {cameraManager.openCamera(mCameraId, new CameraDevice.StateCallback() {@Overridepublic void onOpened(@NonNull CameraDevice camera) {cameraDevice = camera;createBuild();}@Overridepublic void onDisconnected(@NonNull CameraDevice camera) {Log.i(TAG, "onDisconnected");}@Overridepublic void onError(@NonNull CameraDevice camera, int error) {Log.i(TAG, "onError = " + error);}}, null);} catch (CameraAccessException e) {e.printStackTrace();}}private void createBuild() {setUpMediaRecorder();try {mPreviewBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD);List<Surface> surfaces = new ArrayList<>();Surface previewSurface = new Surface(surfaceTexture);Surface recorderSurface = mMediaRecorder.getSurface();surfaces.add(recorderSurface);surfaces.add(previewSurface);mPreviewBuilder.addTarget(recorderSurface);mPreviewBuilder.addTarget(previewSurface);cameraDevice.createCaptureSession(surfaces, mSessionStateCallback, mChildHandler);mMediaRecorder.start();} catch (CameraAccessException e) {e.printStackTrace();}}private void setUpMediaRecorder() {mMediaRecorder = new MediaRecorder();mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);mMediaRecorder.setOutputFile(fileName);mMediaRecorder.setVideoEncodingBitRate(10000000);mMediaRecorder.setVideoFrameRate(25);mMediaRecorder.setVideoSize(previewSize.getWidth(), previewSize.getHeight());mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);try {mMediaRecorder.prepare();} catch (IOException e) {e.printStackTrace();}}private void initSessionStateCallback() {mSessionStateCallback = new CameraCaptureSession.StateCallback() {@Overridepublic void onConfigured(@NonNull CameraCaptureSession session) {mPreviewSession = session;try {mPreviewSession.setRepeatingRequest(mPreviewBuilder.build(), mSessionCaptureCallback,mChildHandler);} catch (CameraAccessException e) {e.printStackTrace();}}@Overridepublic void onConfigureFailed(@NonNull CameraCaptureSession session) {}};}private void initSessionCaptureCallback() {mSessionCaptureCallback = new CameraCaptureSession.CaptureCallback() {@Overridepublic void onCaptureStarted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request,long timestamp, long frameNumber) {super.onCaptureStarted(session, request, timestamp, frameNumber);}@Overridepublic void onCaptureProgressed(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request,@NonNull CaptureResult partialResult) {super.onCaptureProgressed(session, request, partialResult);}@Overridepublic void onCaptureCompleted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request,@NonNull TotalCaptureResult result) {super.onCaptureCompleted(session, request, result);}@Overridepublic void onCaptureFailed(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request,@NonNull CaptureFailure failure) {super.onCaptureFailed(session, request, failure);}};}public void stopRecord() {if (mMediaRecorder != null) {mMediaRecorder.setOnInfoListener(null);mMediaRecorder.setPreviewDisplay(null);mMediaRecorder.setOnErrorListener(null);mMediaRecorder.reset();mMediaRecorder.release();mMediaRecorder = null;}if (mPreviewSession != null) {mPreviewSession.close();}if (cameraDevice != null) {cameraDevice.close();cameraDevice = null;}}
}

Camera2视频录制工具类相关推荐

  1. android语音播放工具类,Android开发之MediaPlayer多媒体(音频,视频)播放工具类

    本文实例讲述了Android开发之MediaPlayer多媒体(音频,视频)播放工具类.分享给大家供大家参考,具体如下: package com.android.imooc.chat; import ...

  2. Android Camera2拍照录制工具

    工具类 import android.Manifest; import android.content.Context; import android.content.pm.PackageManage ...

  3. java 视频录制软件有哪些_有哪些好用的视频录制工具?

    我是岳航运: 大家好,在猴子数据分析学院毕业后,在零售行业从事数据分析工作多年,这期间也在参与了"睡后收入项目",也就是畅销书<数据分析思维>中有一章是我写的. 正是因 ...

  4. php滑动换视频,php工具类之【视频变换类】

    ? ? ? 在这里简要介绍一下搭建视频网站所需要的软件,这些软件包括ffmpeg.mplayer.它们主要用来负责视频的转码工作,ffmpeg基本上对所有格式的视频文件都可以处理,但是对rmvb和rm ...

  5. html 视频录制插件,网页视频录制插件工具(浏览器插件 Recorder)

    网页视频录制插件工具(浏览器插件 Recorder)Loom Video Recorder是一款视频录制工具扩展插件,可以一键录制浏览器的单个标签页,,也支持摄像头录制,能够将录制的视频内容下载道本地 ...

  6. 抖音视频解析的工具类

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 一.一个解析抖音分析链接的工具类 import java.io.IOException; import java.util.HashM ...

  7. 类似于快手、美拍、抖音短视频录制SDK接入教程

    这几年抖音短视频非常火爆,所以很多公司也希望开发短视频录制功能,现在大部分企业是通过第三方视频SDK来完成的,当然不考虑成本的,公司也可以自己开发. 先给大家看下短视频效果,没法插入视频,直接贴视频地 ...

  8. Android 系统工具类SystemUtils

    包含的功能有: 获取系统中所有APP应用.获取用户安装的APP应用.根据包名和Activity启动类查询应用信息.跳转到WIFI设置.WIFI网络开关.移动网络开关.GPS开关 当前若关则打开 当前若 ...

  9. Bandicam_v4.6.5便携特别版 高清视频录制工具

    软件介绍: Bandicam是一款由韩国开发的高清游戏及视频录制工具.它录制的视频文件不仅体积小,而且画质相当清晰,支持H.264预制高清,以较高的压缩率可录制超过分辨率高达2560×1600高画质视 ...

最新文章

  1. JSP基本语法:文件结构、脚本元素、指令元素、动作元素
  2. 【运筹学】线性规划数学模型 ( 单纯形法原理 | 单纯形法流程 | 查找初始基可行解 )
  3. 23种设计模式C++源码与UML实现--外观模式
  4. 零基础学习WinCE开发
  5. Junit4常用注解
  6. 【转】深入理解JavaScript闭包(closure)
  7. html5头像裁剪,移动端 上传头像 并裁剪功能(h5)
  8. 基于Python+Django的电影推荐系统毕业设计源码
  9. 引物设计-Primer6.0
  10. 加点字符就能让qq昵称很酷的神奇代码?
  11. Unity Decal 贴花效果测试
  12. 【First-order Methods】 5 Smoothness and Strong Convexity
  13. Ace - Responsive Admin Template
  14. 原生JS【fiveKeyPress】2秒内五次点击键盘任意键(或组合键)触发自定义事件(以Pause/Break键为例)
  15. 操作系统银行家算法计算机四级,【NCRE四级网络工程师】操作系统多选题
  16. 更改Windows鼠标滑轮滚动方向
  17. 制作一个简单的新闻客户端
  18. 数字化孪生管理平台运用现状及技术前景
  19. 详解GloVe词向量模型
  20. Matlab函数学习---sum函数(计算矩阵、数组和向量元素总和)

热门文章

  1. php 小程序 运动步数_微信小程序获取微信运动步数的实例代码
  2. 杭州电子科技大学计算机转专业,杭州电子科技大学可以转专业吗,杭州电子科技大学新生转专业政策...
  3. QT操作Excel封装类(包含高级功能:合并单元格,文本及单元格格式设定等)
  4. 数据分析——使用pandas进行数据处理
  5. Python定时任务
  6. 自学Python后,获得人生的第一桶金!
  7. MySQL日期时间带T_Mysql 时间和日期函数
  8. 私有化属性-- 私有化方法
  9. 力扣小白刷题之714题买卖股票的最佳时机含手续费
  10. 雪碧动画:吸血鬼凯蒂的生活