工作中项目需求,在动态里面支持查看录制的小视频;录制视频主要用到Android中MediaRecorder这个类,在录制的过程中需要结合SurfaceView和Camera,Camera管理手机摄像头,SurfaceView负责将Camera捕捉到的图像渲染出来,MediaRecorder类则相当于这两者之间的枢纽,负责协调。

一、主要功能:

视频录制,可设置录制最大时长和最小时长,支持横屏竖屏录制,视频预览(录制出来的视频格式都是MP4格式。因为只是录制视频,所以对视频的后期处理都没有做,比如视频压缩,裁剪等等,这些可能都需要使用ffmpeg命令。个人感觉这个ffmpeg功能是强大,但是依赖包也挺大的,在我的项目中,拍摄出来的10s的视频大概16M的样子,就没压缩,只用到了裁剪,而裁剪我使用的是isoviewer-1.0-RC-27.jar这个jar包)

二、预览:视频录、预览、横屏录、预览

               


三、代码分析

1.视频录制的主要代码

 /*** 初始化* @throws IOException*/@SuppressLint("NewApi")private void initRecord() throws IOException {mMediaRecorder = new MediaRecorder();mMediaRecorder.reset();if (mCamera != null)mMediaRecorder.setCamera(mCamera);mMediaRecorder.setOnErrorListener(this);mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);// 视频源mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 音频源//注释掉的代码官方说这样的配置方法是Android2.2以下使用
//      mMediaRecorder.setOutputFormat(OutputFormat.MPEG_4);// 视频输出格式
//      mMediaRecorder.setAudioEncoder(AudioEncoder.AAC);// 音频格式:AAC兼容会高点
//      mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);//设置视频编码:h264在常见的网页上都可播放
//      mMediaRecorder.setVideoSize(mWidth, mHeight);// 设置分辨率:
//      mMediaRecorder.setVideoEncodingBitRate(1 * 1024 * 1024*100);// 设置帧频率//Android2.2以上直接用MediaRecorder.setProfile得到统一的配置mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_720P));mMediaRecorder.setOrientationHint(mRotationRecord);// 输出旋转90度,保持竖屏录制mMediaRecorder.setOutputFile(mRecordFile.getAbsolutePath());try {mMediaRecorder.prepare();mMediaRecorder.start();} catch (IllegalStateException e) {e.printStackTrace();} catch (RuntimeException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}

这里主要初始化录制参数,然后开始录制,注释掉的代码是2.2以前配置视频参数,在以后只需要setProfile(CamcorderProfile.get(CamcorderProfile))这个方法代替,这个会自动获取手机里面已经配置好的参数,而CamcorderProfile里面的几个参数,视情况而定,推荐 QUALITY_HIGH,直接获取手机里面支持的最高分辨率;setOrientationHint()设置视频的输出角度,这个可以控制录制出来的视频是否是横屏还是竖屏,等下说明;setOutputFile()录制的视频保存地址;


2.停止录制

/*** 停止录制*/public void stopRecord() {if (mMediaRecorder != null) {// 设置后不会崩mMediaRecorder.setOnErrorListener(null);mMediaRecorder.setPreviewDisplay(null);try {mMediaRecorder.stop();mMediaRecorder.release();} catch (IllegalStateException e) {e.printStackTrace();} catch (RuntimeException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}}

3.监控手机横竖屏录制

//手机旋转监听OrientationEventListener orientationEventListener=new OrientationEventListener(this) {@Overridepublic void onOrientationChanged(int rotation) {//录制的过程不改变if(isRecording){return;}if (((rotation >= 0) && (rotation <= 30)) || (rotation >= 330)) {// 竖屏拍摄mRotationRecord=90;} else if (((rotation >= 230) && (rotation <= 310))) {// 横屏拍摄mRotationRecord=0;} else if (rotation > 30 && rotation < 95) {// 反横屏拍摄mRotationRecord=180;}}};orientationEventListener.enable();

这里使用到的是OrientatinEvenListener手机方向事件监听器,rotation表示手机旋转角度,垂直为0,顺时针角度逐渐增加;通过对rotation的监听可以知道当前手机是竖直,横屏,还是反横屏,从而改变mRotationRecord(就是设置视频输出角度的参数),

到此视频录制的代码也就这么多了,其中录制视频的圆形按钮可以看看我的另一片博客,视频预览的代码我没有贴出,下面直接给出源码,可能很多做的不是很到,更多的是供新手参考,录制视频该怎么做,以及视频该怎么做


下载地址

Android中小视频录制,预览相关推荐

  1. Android 视频 短视频录制预览尺寸(简单几款机型测试)

    Android 视频 短视频录制预览尺寸(简单几款机型测试) 贴出下列2表目的也是便于大家对一般相机照片和预览主流尺寸有个大概了解 SurfaceView 照片支持尺寸 Picture Nexus 5 ...

  2. 【Android RTMP】Android Camera 视频数据采集预览 ( 图像传感器方向设置 | Camera 使用流程 | 动态权限申请 )

    文章目录 安卓直播推流专栏博客总结 一. Camera 传感器方向简介 二. Camera 图像传感器横向显示数据 三. Camera 图像传感器纵向显示数据 四. 设置 Camera 预览数据方向 ...

  3. 【Android RTMP】Android Camera 视频数据采集预览 ( 视频采集相关概念 | 摄像头预览参数设置 | 摄像头预览数据回调接口 )

    文章目录 安卓直播推流专栏博客总结 一. Android 端数据采集涉及到的相关概念 二. Camera 预览图像尺寸设置 三. 获取摄像头采集的数据格式 安卓直播推流专栏博客总结 Android R ...

  4. Android 使用CameraX实现预览/拍照/录制视频/图片分析/对焦/缩放/切换摄像头等操作

    1. CameraX架构 看官方文档 CameraX架构 有如下这一段话 使用CameraX,借助名为"用例"的抽象概念与设备的相机进行交互. 预览 : 接受用于显示预览的Surf ...

  5. android 录像 视频大小,Android相机 – 录制视频时预览放大

    我一直试图弄清楚一段时间,但由于某种原因,当我开始使用相机录制视频时,预览放大.我从以下示例中获取以下代码: @Override public void surfaceChanged(SurfaceH ...

  6. Android OpenGL使用GLSurfaceView预览视频

    Android OpenGL使用GLSurfaceView预览视频 第一章 相关知识介绍 在介绍具体的功能之前,先对一些主要的类和方法进行一些介绍,这样可以更好的理解整个程序 1.1 GLSurfac ...

  7. Android 10.0获取本地视频及其预览图

    打开本地视频选择器 private void openLocalVideo(){Intent intent = new Intent();intent.setAction(Intent.ACTION_ ...

  8. android 摄像头花屏_关于Android 4.4相机预览、录像花屏的问题的解决方法

    关于Android 4.4相机预览.录像花屏的问题的解决方法 系统: lc android4.4 在做前后摄像头录像的时候,发现会出现花屏的时候,但不是必现,可能会在某一次重启之后会出现,而且出现之后 ...

  9. 【流媒體】Android 实时视频采集—Camera预览采集

    [流媒體]Android 实时视频采集-Cameara预览采集 SkySeraph Mar 26th 2012  SZ Email:skyseraph00@163.com 更多精彩请直接访问SkySe ...

  10. android firefox 版本,Android版本Firefox初期预览版发布

    不久前Mozilla宣布不再为Windows Mobile开发手机版Firefox,而将大部分精力投入到Android版本的开发商.今天Android版本Firefox终于完成了初期预览版,Andro ...

最新文章

  1. Linux系统介绍(二)文件系统结构
  2. 『Lucas定理以及拓展Lucas』
  3. matlab fill 渐变,Matlab的渐变色填充(一)
  4. ICCV 2019 | 通过多标签相关性研究提升神经网络视频分类能力
  5. [转]如何将WCF服务发布到IIS中去VS2010版
  6. 算法——常用的数据结构/模板/基础知识
  7. java的原生数据类型_Java中的8种原生数据类型(Primitive Data Types)分析
  8. 201521123032 《Java程序设计》第8周学习总结
  9. 【转】xp修复win7启动项方法
  10. Eclipse安装Lombok
  11. Ubuntu18.04安装gcc——史上最全安装教程
  12. 生活-急救常识(2)
  13. 计算机一级B考试总结500字,期中考试总结与反思500
  14. Android应用调用第三方地图应用导航
  15. 超大TIF图片分割成一百张较小的图片
  16. Largest Rectangle in a Histogram 题解 Python
  17. 【vue】bable的介绍以及编写vue文件
  18. java 7 锁优化_自Java 6/Java 7开始,Java虚拟机对内部锁的实现进行了一些优化。这些优化主要包括锁消除(Lock Elision)、锁粗化(Lock Coarse...
  19. 2022年茶艺师(初级)考试题库及茶艺师(初级)作业考试题库
  20. 《华为区块链白皮书》重磅发布(4大类应用场景/5分钟上链/)

热门文章

  1. python3 array为什么不能放不同类型的数据_想快速学会数据可视化?这里有一门 4 小时的 Kaggle 微课程...
  2. iphonexs订阅显示无法连接服务器,iPhone XS/XS Max 无法连接到 App Store 怎么解决?
  3. MAX31855电路和程序,实现SPI和软件模拟时序两种方式读取数据
  4. live 555 freebsd 或centos 7.4 实现代理视频直播服务
  5. [听侯捷演讲]关于IT人士个人发展的一点思索
  6. android代码设置弹窗颜色,Android编程实现简单设置按钮颜色的方法
  7. 第三届中国CEO新年峰会参会感想一
  8. Linux centOS7.2 *64位 上面安装WordPress《个人记录》
  9. 面试官:JVM都不会,谁给你的勇气来面试?
  10. 【全栈软件测试】二、Windows服务器(1)搭建DNS服务器