Android中小视频录制,预览
工作中项目需求,在动态里面支持查看录制的小视频;录制视频主要用到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中小视频录制,预览相关推荐
- Android 视频 短视频录制预览尺寸(简单几款机型测试)
Android 视频 短视频录制预览尺寸(简单几款机型测试) 贴出下列2表目的也是便于大家对一般相机照片和预览主流尺寸有个大概了解 SurfaceView 照片支持尺寸 Picture Nexus 5 ...
- 【Android RTMP】Android Camera 视频数据采集预览 ( 图像传感器方向设置 | Camera 使用流程 | 动态权限申请 )
文章目录 安卓直播推流专栏博客总结 一. Camera 传感器方向简介 二. Camera 图像传感器横向显示数据 三. Camera 图像传感器纵向显示数据 四. 设置 Camera 预览数据方向 ...
- 【Android RTMP】Android Camera 视频数据采集预览 ( 视频采集相关概念 | 摄像头预览参数设置 | 摄像头预览数据回调接口 )
文章目录 安卓直播推流专栏博客总结 一. Android 端数据采集涉及到的相关概念 二. Camera 预览图像尺寸设置 三. 获取摄像头采集的数据格式 安卓直播推流专栏博客总结 Android R ...
- Android 使用CameraX实现预览/拍照/录制视频/图片分析/对焦/缩放/切换摄像头等操作
1. CameraX架构 看官方文档 CameraX架构 有如下这一段话 使用CameraX,借助名为"用例"的抽象概念与设备的相机进行交互. 预览 : 接受用于显示预览的Surf ...
- android 录像 视频大小,Android相机 – 录制视频时预览放大
我一直试图弄清楚一段时间,但由于某种原因,当我开始使用相机录制视频时,预览放大.我从以下示例中获取以下代码: @Override public void surfaceChanged(SurfaceH ...
- Android OpenGL使用GLSurfaceView预览视频
Android OpenGL使用GLSurfaceView预览视频 第一章 相关知识介绍 在介绍具体的功能之前,先对一些主要的类和方法进行一些介绍,这样可以更好的理解整个程序 1.1 GLSurfac ...
- Android 10.0获取本地视频及其预览图
打开本地视频选择器 private void openLocalVideo(){Intent intent = new Intent();intent.setAction(Intent.ACTION_ ...
- android 摄像头花屏_关于Android 4.4相机预览、录像花屏的问题的解决方法
关于Android 4.4相机预览.录像花屏的问题的解决方法 系统: lc android4.4 在做前后摄像头录像的时候,发现会出现花屏的时候,但不是必现,可能会在某一次重启之后会出现,而且出现之后 ...
- 【流媒體】Android 实时视频采集—Camera预览采集
[流媒體]Android 实时视频采集-Cameara预览采集 SkySeraph Mar 26th 2012 SZ Email:skyseraph00@163.com 更多精彩请直接访问SkySe ...
- android firefox 版本,Android版本Firefox初期预览版发布
不久前Mozilla宣布不再为Windows Mobile开发手机版Firefox,而将大部分精力投入到Android版本的开发商.今天Android版本Firefox终于完成了初期预览版,Andro ...
最新文章
- Linux系统介绍(二)文件系统结构
- 『Lucas定理以及拓展Lucas』
- matlab fill 渐变,Matlab的渐变色填充(一)
- ICCV 2019 | 通过多标签相关性研究提升神经网络视频分类能力
- [转]如何将WCF服务发布到IIS中去VS2010版
- 算法——常用的数据结构/模板/基础知识
- java的原生数据类型_Java中的8种原生数据类型(Primitive Data Types)分析
- 201521123032 《Java程序设计》第8周学习总结
- 【转】xp修复win7启动项方法
- Eclipse安装Lombok
- Ubuntu18.04安装gcc——史上最全安装教程
- 生活-急救常识(2)
- 计算机一级B考试总结500字,期中考试总结与反思500
- Android应用调用第三方地图应用导航
- 超大TIF图片分割成一百张较小的图片
- Largest Rectangle in a Histogram 题解 Python
- 【vue】bable的介绍以及编写vue文件
- java 7 锁优化_自Java 6/Java 7开始,Java虚拟机对内部锁的实现进行了一些优化。这些优化主要包括锁消除(Lock Elision)、锁粗化(Lock Coarse...
- 2022年茶艺师(初级)考试题库及茶艺师(初级)作业考试题库
- 《华为区块链白皮书》重磅发布(4大类应用场景/5分钟上链/)
热门文章
- python3 array为什么不能放不同类型的数据_想快速学会数据可视化?这里有一门 4 小时的 Kaggle 微课程...
- iphonexs订阅显示无法连接服务器,iPhone XS/XS Max 无法连接到 App Store 怎么解决?
- MAX31855电路和程序,实现SPI和软件模拟时序两种方式读取数据
- live 555 freebsd 或centos 7.4 实现代理视频直播服务
- [听侯捷演讲]关于IT人士个人发展的一点思索
- android代码设置弹窗颜色,Android编程实现简单设置按钮颜色的方法
- 第三届中国CEO新年峰会参会感想一
- Linux centOS7.2 *64位 上面安装WordPress《个人记录》
- 面试官:JVM都不会,谁给你的勇气来面试?
- 【全栈软件测试】二、Windows服务器(1)搭建DNS服务器