从零开发一款相机APP 第九篇: Camera2相机 录像功能实现
【小驰笔记】【Android Camera开发】【Android Camera2】【camera2】
本课程内容由 @小驰笔记 出品,欢迎关注,获取更多交流信息~
欢迎访问个人博客:www.xiaochibiji.com
我们先来看下MediaRecorder状态图:
一、正常录像
把mediaRecorder的surface,传入到当前session中。该surface是mediaRecorder录像的数据来源。
Surface recorderSurface = mMediaRecorder.getSurface();
surfaces.add(recorderSurface);
mPreviewBuilder.addTarget(recorderSurface);mCameraDevice.createCaptureSession(surfaces, new CameraCaptureSession.StateCallback() {@Overridepublic void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {mPreviewSession = cameraCaptureSession;updatePreview();getActivity().runOnUiThread(new Runnable() {@Overridepublic void run() {// Start recordingmMediaRecorder.start();}});}
}
二、MediaRecorder
//1) 创建MediaRecorder对象
mMediaRecorder = new MediaRecorder();//2) 设置Audio数据来源,这里设置来自MIC
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);//3) 设置Video数据来源,这里设置来自SURFACE
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);//4) 设置录像格式
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);//5) 创建录像文件路径,这里是绝对路径
if (mNextVideoAbsolutePath == null || mNextVideoAbsolutePath.isEmpty()) {mNextVideoAbsolutePath = getVideoFilePath(getActivity());
}
//6) 设置文件路径
mMediaRecorder.setOutputFile(mNextVideoAbsolutePath);//7)设置录像编码码率,这里是10M
mMediaRecorder.setVideoEncodingBitRate(10000000);//8) 设置录像帧率
mMediaRecorder.setVideoFrameRate(30);//9) 设置录像分辨率
mMediaRecorder.setVideoSize(mVideoSize.getWidth(), mVideoSize.getHeight());//10) 设置录像编码格式
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);//11) 设置录音编码格式
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);//12) 设置视频方向
mMediaRecorder.setOrientationHint(DEFAULT_ORIENTATIONS.get(rotation));//13) prepare并开始录像
mMediaRecorder.prepare();
mMediaRecorder.start();//14) 停止并释放录像
mMediaRecorder.stop();
mMediaRecorder.reset();
三、 慢动作录像
关于高通平台的慢动作录像,前面专门写过一篇文章:
https://mp.weixin.qq.com/s/vpGHY_N1rE-_0CPKQmzOpw
1)从Android 6.0开始,Camera相关的,添加了一个新的类CameraConstrainedHighSpeedCaptureSession,从描述上看,我们就可以知道,这个是专门为高速、高帧率录像准备的。换一句话说,也就是Android 6.0以上,Android本身才支持这个高速、高帧率录像。
2)通过CONTROL_AVAILABLE_HIGH_SPEED_VIDEO_CONFIGURATIONS来获取available size。如果存在available,则判断为支持。
3)获取支持的高帧率录像videoSize
从map.getHighSpeedVideoSizes()中获取支持的videoSize,然后选择个合适的size,注意这里的previewSize需要和videoSize保持一致。
4)CONTROL_AE_TARGET_FPS_RANGE设置为高帧率范围(120,120)
5)创建session采用createConstrainedHighSpeedCaptureSession
高帧率录像创建session,使用专门提供的api接口。
6)采用setRepeatingBurst session
configure成功后,调用setRepeatingBurst不停的request,这个和正常模式有点区别,正常模式是调用的 setRepeatingRequest。
7)MediaRecorder相关参数设置为对应的高帧率参数
相关视频持续录制中…
推荐阅读:
关于我
博客大更新_
今年,做好一件事情
一篇文章带你了解Android 最新Camera框架
深圳上班,
从事Android Camera相关软件开发工作,
记录生活和工作的点滴,
点击关注“小驰笔记”,期待和你相遇~
从零开发一款相机APP 第九篇: Camera2相机 录像功能实现相关推荐
- 从零开发一款笔记APP——神马笔记WhatsNote
从零开发一款笔记APP--神马笔记WhatsNote 一.主要功能 二.开发过程 三.优质的笔记应用 四.附录 一.主要功能 笔记的主要功能分为三个部分: 管理 目录--多层目录结构 标签--单层结构 ...
- Android Camera:从零开发一款相机APP
从零开发一款相机APP Day 1: 前言 一.Android Camera开发前景: 1)camera相关应用的领域 2)相关岗位介绍: 3)市场招聘介绍: 4)发展前景介绍: 二.学习这门课的重要 ...
- 从零开发一款相机 第五篇:Camera api1实现预览、拍照、录像功能
本课程内容由 @小驰笔记 出品,欢迎关注,获取更多交流信息~ 欢迎访问个人博客:www.xiaochibiji.com 这节课,我们主要讲解如果使用camera api1接口,实现预览.拍照以及录像功 ...
- 手牵手,使用uni-app从零开发一款视频小程序 (系列上 准备工作篇)
系列文章 手牵手,使用uni-app从零开发一款视频小程序 (系列上 准备工作篇) 手牵手,使用uni-app从零开发一款视频小程序 (系列下 开发实战篇) 前言 好久不见,很久没更新博客了,前段时间 ...
- 开发一款外卖App应该具备哪些功能?
手机app的出现改变了每个人的消费习惯,也改变了每个人的日常生活方式,没有遗漏任何东西.你是否还记的你上次中午下班去吃饭的情景?我不记得我上次中午下班出去吃饭是什么时候了,因为我已经习惯了打开外卖Ap ...
- 开发一款旅游APP应包含哪些功能板块呢?
现在生活节奏快.工作高强度往往压的我们喘不过气,甚至已经严重影响我们的身心健康.旅游出行这件事已经出现在越来越多人的生活计划里.随着国民旅游意愿高涨,旅游行业市场增长十分迅猛,面对急剧上升的旅游需求, ...
- 打车类app怎么获取司机位置 开发_详谈开发一款打车APP应用的解决方案
随着移动互联网的发展,使得人们的日常生活越来越便捷,其中改变最大的便是交通出行.正是如此,有些企业于是联想到其中的商机,想要借助于长沙APP开发,打造一款打车APP应用.那么接下来,长沙APP制作创研 ...
- 安卓新手如何学习开发一款游戏APP呢?
毫无疑问,开发一款自己的App对于初学者来说,无论从技术学习,还是找工作,开发手机游戏而言,都是一大利器.那么如何才能快速上手,开发一款属于自己的app.本篇文章仅以自己的一些经验给更多的Androi ...
- html+css+js+Hbuilder开发一款安卓APP,根本不用学Android开发!
我们知道,要做一款安卓APP,咱们得先学安卓开发语言,例如java,前端后端.那么没有这些开发语言基础,咱们怎么做呢?其实现在有比较好的开发方案就是做webAPP,咱们可以用web前端知识构建安卓客户 ...
最新文章
- 设计模式之简单工厂模式学习笔记
- python闭环最短路径_python实现最短路径的实例方法
- win10浏览器_Win10系统中ie浏览器的证书错误应该如何解决?
- 关于nodejs中npm命令没有反应的解决方法
- dijkstra算法代码_深度好文:改变了我们生活方式最有影响力的5种图算法
- 05.SpringBoot的yml配置详解
- Hbase分布式列存储数据库
- Office 365 之 Skype For Business电话功能试用
- Java完全自学手册,一册在手,offer我有(附程序员书单)
- 合格PLC电气工程师需要会什么?
- 论文中期报告要怎么写?
- iText 7 html2pdf 使用总结
- 计算机光纤接口网卡,光纤网卡是什么?
- ReactNative常用插件使用
- st3搭建python开发环境
- 设计模式学习系列6 原型模式(prototype)
- 大数据之直播平台数据统计
- AI人工智能机器人教室方案(含全套配置)
- 痞子衡嵌入式:ARM Cortex-M文件那些事(4)- 可重定向文件(.o/.a)
- 计算机专业英语推荐信,关于英文推荐信范文3篇
热门文章
- python sklearn 置信概率
- js对象继承的方式-三种 +三种
- 怎么样在Window10桌面查找显示“此电脑”或“我的电脑”图标?
- 爬虫实战3—微博的抓取
- centos7配置好网络后,重启网络不可用问题(Failed to start LSB: Bring up/down networking.)
- 智能物联网试验箱 CY-TIY简介
- 玉米社:直播间很冷清?8大抖音直播话术,喜欢得收藏
- 【教学类-32-02】十二生肖2.0版(绘画+手工+排序+左右分类+玩牌)(中班:偏科学-数)
- 麦包包CEO叶海峰:从互联网走出来的中国第一箱包品牌
- 借助ChatGPT爆火,股价暴涨又暴跌后,C3.ai仍面临巨大风险