这可能是全网关于Camera慢动作录像(SlowMotion)介绍最全的文章了

34 篇文章 97 订阅
订阅专栏

这是一篇关于慢动作录像(slowmotion)的文章,看完后相信你对慢动作录像不会再感到陌生了~

这篇文章针对下面几点来展开:
1)写这篇文章的原由?
2)什么是慢动作录像(SlowMotionRecord)?
3)Android上如何实现慢动作录像?
4)调试demo下载地址?
5)调试遇到的问题及解决?

一、写这篇文章的原由?

2月份的时候,在一个音视频开发的学习交流群里,有位网友问到**“Android相机有啥设置可以做到slow motion?”**,我认真的想了下,然后又简单看了下高通的晓龙相机源码,大概知道是怎么实现后,给了下思路。

后面我还一直在想这个事情,觉的自己给的思路太简单了,有时间还是得再研究研究,自己得敲下代码跑通下才好,于是就有了这篇文章。
image.png

二、什么是慢动作录像(SlowMotionRecord)?

通常我们人眼能够接受的最好的视频帧速率是24帧/每秒左右。那如果我们用120帧/秒拍摄一个动作,再用24帧每秒来播放的话,视频就放慢了5倍,这个就是慢动作录像了。

慢动作录像,又叫高帧率录像(HFR),也就是以高fps(运行速率)捕获、编码并保存为30 fps(目标速率),这种情况运行速率大于目标速率。

还有一种模式叫做高速录制(HSR) : 即以高fps(运行速率)捕获、编码并保存为高 fps(目标速率),运行速率等于目标速率。

这篇文章只介绍慢动作录像。(调试环境基于高通晓龙865芯片 Android9.0)

三、Android上如何实现视频慢动作?

有了上面关于慢动作的概念后,那在Android上如何用代码来实现呢?说到录像,那我们应该要想到MediaRecorder了。慢动作,也就是高帧率录像,那肯定得调用mediaRecorder设置高帧率了。

好了,我们还得再有一个概念,数据是从摄像头sensor出来的,那我们需要120fps,总得摄像头支持才行吧。所以呢,就有一个先决条件了,硬件得支持才行,下面会讲如何查询当前硬件是否支持。

假设硬件支持的情况下,我们来看下软件上应用的调用情况。
1、新类CameraConstrainedHighSpeedCaptureSession
查看Android的开发文档,我们可以看到,从Android 6.0开始,Camera相关的,添加了一个新的类CameraConstrainedHighSpeedCaptureSession,从描述上看,我们就可以知道,这个是专门为高速、高帧率录像准备的。换一句话说,也就是Android 6.0以上,Android本身才支持这个高速、高帧率录像。(我在自己早年用的nubiya手机上看了下,Android 5.1的系统,系统相机也带了慢动作功能,不过它这个慢动作应该是厂家自己定制开发的,那会Android还没提供相关接口)
https://developer.android.google.cn/reference/android/hardware/camera2/package-summary.html

2、查询当前硬件是否支持高帧率录像
通过CONTROL_AVAILABLE_HIGH_SPEED_VIDEO_CONFIGURATIONS来获取available size。如果存在available,则判断为支持。

 public static boolean hasHighSpeedVideoConfigs(Context context, String cameraId) {
        try {
            CameraManager cameraManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
            CameraCharacteristics characteristics = cameraManager.getCameraCharacteristics(cameraId);
            HighSpeedVideoConfiguration[] highSpeedVideoConfigs = characteristics.get(
                    CameraCharacteristics.CONTROL_AVAILABLE_HIGH_SPEED_VIDEO_CONFIGURATIONS);
            return highSpeedVideoConfigs != null && highSpeedVideoConfigs.length > 0;
        } catch (Exception e) {
     
        }
        return false;
    }

3、获取支持的高帧率录像videoSize
从map.getHighSpeedVideoSizes()中获取支持的videoSize,然后选择个合适的size,注意这里的previewSize需要和videoSize保持一致。

  CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId);
            StreamConfigurationMap map = characteristics
                    .get(SCALER_STREAM_CONFIGURATION_MAP);

  mVideoSize = chooseVideoSize(map.getHighSpeedVideoSizes());
  mPreviewSize = mVideoSize;//这里需要保持previewSize 和videoSize一致

4、CONTROL_AE_TARGET_FPS_RANGE设置为高帧率范围(120,120)

   Range aeFps = new Range(120, 120);
   mPreviewBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, aeFps);

5、创建session采用createConstrainedHighSpeedCaptureSession
高帧率录像创建session,使用专门提供的api接口。

 // Start a capture session
   mCameraDevice.createConstrainedHighSpeedCaptureSession(surfaces, new CameraCaptureSession.StateCallback() {
      @Override
      public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {
         ......
      }

     @Override
     public void onConfigureFailed(@NonNull CameraCaptureSession cameraCaptureSession) {
          ......
     }
   }, mBackgroundHandler);

6、采用setRepeatingBurst
session configure成功后,调用setRepeatingBurst不停的request,这个和正常模式有点区别,正常模式是调用的setRepeatingRequest。

   CaptureRequest request = mPreviewBuilder.build();
   List<CaptureRequest> slowMoRequests = ((CameraConstrainedHighSpeedCaptureSession) mPreviewSession)
                       .createHighSpeedRequestList(request);

    mPreviewSession.setRepeatingBurst(slowMoRequests, null,
                     mBackgroundHandler);

7、MediaRecorder相关参数设置为对应的高帧率参数
相对应的,mediaRecorder的一些参数也需要设置为高帧率参数。

    mProfile = getProfile();
    int bitRate = getHighSpeedVideoEncoderBitRate(mProfile, 
    mProfile.videoFrameRate,
               VEDIO_HIGH_SPEED_FRAME_RATE);

    mMediaRecorder.setVideoEncodingBitRate(bitRate);
    mMediaRecorder.setVideoFrameRate(mProfile.videoFrameRate);
    mMediaRecorder.setCaptureRate(VEDIO_HIGH_SPEED_FRAME_RATE);

五、调试遇到的问题及解决方法

》》》》问题1:

Process: com.xcbj.camera, PID: 21818
   java.lang.IllegalArgumentException: Surface size 1440x1080 is not part of the high speed supported size list [1280x720, 720x480, 640x480, 1920x1080]
       at android.hardware.camera2.utils.SurfaceUtils.checkConstrainedHighSpeedSurfaces(SurfaceUtils.java:193)
       at android.hardware.camera2.impl.CameraDeviceImpl.createCaptureSessionInternal(CameraDeviceImpl.java:881)
       at android.hardware.camera2.impl.CameraDeviceImpl.createConstrainedHighSpeedCaptureSession(CameraDeviceImpl.java:627)

[分析]

》》》》问题2: Fps rang[30,30] in the request is not a supported hight speed fps range…

 Process: com.xcbj.camera, PID: 27138
   java.lang.IllegalArgumentException: Fps range [30, 30] in the request is not a supported 
high speed fps range [[120, 120], [240, 240], [480, 480], [30, 120], [30, 240], [30, 480]]
       at android.hardware.camera2.utils.SurfaceUtils.checkConstrainedHighSpeedSurfaces(SurfaceUtils.java:180)
       at android.hardware.camera2.impl.CameraConstrainedHighSpeedCaptureSessionImpl.createHighSpeedRequestList(CameraConstrainedHighSpeedCaptureSessionImpl.java:89)

[分析]


*本人从事Android Camera相关开发已有5年,
*目前在深圳上班,
*小伙伴记得点我头像,看【个人介绍】进行关注哦,希望和更多的小伙伴一起交流 ~
在这里插入图片描述

-------- 2021.03.25 深圳 00:53·

**

欢迎关注我的个人博客:http://www.xiaochibiji.com

**

小驰私房菜_29_app设置帧率相关接口
欢迎关注,期待一起见证彼此的成长~
07-01 215
全网最具价值的Android Camera开发资料。欢迎订阅~
python视频补帧_AI 复原 100 年前的京城老视频,靠这三个开源工具
weixin_39856265的博客
12-09 2090
近日,一段拍摄于 100 年前的老北京城影像被央视转发,在微博上火了。据了解,该视频出自一位 B 站的 UP 主大谷的游戏创作小屋。作者大谷利用 AI 技术,把一段拍摄于 1920 年的北京城黑白视频,渲染成了高清流畅的彩色视频,配以颇具地方特色的 BGM,还原了百年前老北京城的民风民俗,颇有内味。据大谷介绍,这部拍摄于百年前的黑白视频由于年代久远,视频画质有很多噪点,帧数、分辨率都很低。于是他使...
Camera 慢动作实现流程
程序员Android
10-17 521
和你一起终身学习,这里是程序员Android经典好文推荐,通过阅读本文,您将收获以下知识点:一、高帧率录像简介二、代码流程分析三、高通平台如何获取platform和camera sensor的capabilities?一、高帧率录像简介高帧率录像慢动作拍摄,通常人眼能够接受的最好的视频帧速率是24帧/每秒。如果用120帧/秒拍摄一个动作,再用24帧每秒来播放的话,视频就放慢了5倍。高通平台的 S...
缓动动画原理
sfx_ss的博客
09-05 569
  offset 偏移量  只读不能写 一, offsetLeft/offsetTop 返回距离上级盒子(带有定位的左边/顶端的距离(若无定位,则以浏览器为标准)  offsetLeft和style.left的区别 (1) style.left只能获取行内样式,offsetLeft 可以获取行内样式和内嵌样式 (2) offsetLeft 只读,style.left可读可写 (3) o...
CaptureRequest部分参数说明
最新发布
qq_31123505的博客
01-24 1783
用于指定相机在处理图像时如何映射颜色和亮度的范围(色调映射)。色调映射是一个很重要的后期处理步骤,它影响图像的最终外观,特别是在高动态范围(HDR)图像处理中。这个设置允许开发者控制相机输出图像的对比度和颜色调整。色调映射可以用来增强图片的视觉效果,使之在不同的显示设备上呈现出更加逼真和丰富的色彩。sRGBREC709在创建拍摄请求时,可以通过用来控制相机对图像阴影或镜头阴影的校正。镜头阴影是由于镜头光学特性造成的,通常在图像边缘处出现,表现为角落变暗。
camera2的一些参数
fuyinghaha的专栏
03-24 2647
虽然HAL层负责实现3A算法,但HAL interface定义了一个高层次的状态机描述,允许HAL层设备和framework层交流3A当前状态和3A事件的触发情况。 当设备被打开时,所有3A状态都应该是STATE_INACTIVE。码流配置不需重置3A。例如,需要通过调用configure()来修改固定焦点。 要触发3A行为,需要为下一个请求简单地设置相关触发器实体,以引导触发器的启动。例如,...
第32讲 Android Camera2 API AE自动曝光 第2部分
qq_42194101的博客
10-20 3161
本讲是Android Camera专题系列的第32讲,我们介绍Android Camera2 API专题的AE自动曝光第2部分,AE自动曝光包括如下内容,第二部分介绍后5章节: AE是什么 3A总开关 AE模式 AE状态 拍照前AE测光 曝光补偿(EV) AE Lock AE状态转换 AE测光区域 帧率控制 视频在线观看: 视频观看: 加入知识星球与更多Camera同学交流 – 星球名称:深入浅出Android Camera – 星球ID: 17296815 曝光补偿(EV)
设置Android Camera2预览画面的帧率(FPS)
dream_caoyun的博客
08-07 4635
1、声明变量全局存储相机的FPS范围 private static Range<Integer>[] fpsRanges; 2、在setUpCameraOutputs中获取相机的FPS范围 // 该相机的FPS范围 fpsRanges = characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET 3、在createCameraPreviewSession中设置预览画面的帧率 // 设置预览画面的帧率 视实际
android camera慢动作,关于android:这可能全网关于Camera慢动作录像SlowMotion介绍最全文章了...
weixin_42465953的博客
05-28 1363
这是一篇对于慢动作录像(slowmotion)的文章,看完后置信你对慢动作录像不会再感到生疏了~这篇文章针对上面几点来开展:1)写这篇文章的原由?2)什么是慢动作录像(SlowMotionRecord)?3)Android上如何实现慢动作录像?4)调试demo下载地址?5)调试遇到的问题及解决?一、写这篇文章的原由?2月份的时候,在一个音视频开发的学习交换群里,有位网友问到“Android相机有啥...
Android MediaRecorder slowmotion
05-23
To record slow motion videos using MediaRecorder in Android, you need to set the video frame rate to a higher value than the default frame rate. Here's an example code snippet to record slow motion ...
Android5.0_camera2Api
西瓜cc Blog
06-03 1718
Android -- Camera2(Android5.0)   Camera2 Camera2是Android5.0中的其中一个新的特性,新的API。与原来的camera API相比,不同之处在于: 原生支持RAW照片输出突发拍摄模式 制约拍照速度的不再是软件而是硬件。以Nexus 5为例,分辨率全开下Andorid L的连拍速度可达到30fps。 全手动控制 快门
Android Camera2拍照时照片拍出来特别暗
qq_33209777的博客
05-20 2045
Camera2,拍照,照片变暗
Camera2学习笔记
qq_45682662的博客
07-18 2021
实现思路这里只是简单的前后摄像头的切换,首先通过cameraManager.getCameraIdList()获取当前设备摄像头ID列表,然后遍历该列表,通过当前Camera的ID来判断当前摄像头是前置还是后置,如果是前置则查询到后置摄像头ID并将其赋值为当前Camera的ID,反之亦然,拿到要切换摄像头ID后就是去调用manager.openCamera方法打开指定ID的摄像头,再调用此方法之前要把当前摄像头关闭即调用closeCamera,再调用reopenCamera,主要实现代码如下。.......
如何设置Android Camera2预览画面的帧率(FPS)?
热门推荐
tonydandelion2014的博客
12-26 1万+
参考链接 声明变量全局存储相机的FPS范围 private static Range&lt;Integer&gt;[] fpsRanges; 在setUpCameraOutputs中获取相机的FPS范围 // 该相机的FPS范围 fpsRanges = characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TA...
Android Camera2 实现高帧率预览录制(附源码)
音视频开发进阶
06-05 5314
公众号回复:666,领取学习资源大礼包来源:svvvvvvvL地址:https://www.jianshu.com/p/0d2f200ab374Android的相机 Camera2 在 ...
NDK Android平台camera2采集视频
u010140427的博客
02-05 3873
Android平台开发实时音视频项目,摄像头的采集是一个必不可少的流程;通常在Android平台上采集摄像头数据可以使用Camera1接口、Camera2接口或者CameraX接口。Camera1接口只支持java语言的接口,是Android最开始支持的相机接口,在Android 5.0 以后逐步废弃;Camera2是替代Camera1的接口,不仅支持java语言的接口也支持c/c++的接口;CameraX 是一个 Jetpack 库,Camera2使用比较复杂,CameraX对Camera2的API 进
camera framework configure流程分析
haodada1226的博客
12-04 1401
应用层通过createCaptureSession来配置流: mCameraDevice.createCaptureSession(Arrays.asList(mImageReader.getSurface()), new CameraCaptureSession.StateCallback() { @Override public void onConfig...
Android Camera2 API 学习笔记2
少年的此间
06-05 8065
CameraCharacteristics.Key Public methods CameraConstrainedHighSpeedCaptureSession Public methods CameraDevice CameraCharacteristics.Key Public methods Return Name Descripti...
rk3288 双摄使用camera2开发
lb5761311的专栏
05-09 3029
本文是基于rk3288 usbcamera这篇文章的更新版本,上篇文章 是基于第三方框架UvcCameraDemo开发的。自己想基于Android系统提供的camera2的接口开发。 由于我们的usb接口不是在主host上,报错如下 02-27 06:36:02.674 2425 2494 E RequestThread-0: Timed out while waiting for request...
写文章

热门文章

  • 【干货】github上十二款最著名的Android播放器开源项目 20086
  • Ubuntu 下 触摸板不能使用 解决方法 15441
  • Android Camera开发系列(干货满满) 14975
  • Android 4.4 模拟 home键、back键等keyEvent 14005
  • 高通平台Camera录像过程-- 数据流浅析 9922

分类专栏

  • Android Camera开发【小驰私房菜系列】 付费 44篇
  • Camx入门初认识 付费 7篇
  • MTK Camera开发学习 付费 11篇
  • Camera驱动BringUp 1篇
  • Android Camera 开发 34篇
  • Android Camera 开发入门 12篇
  • 高通CamX框架学习 2篇
  • 个人成长 6篇
  • Android Uvc UsbCamera开发系列 3篇
  • Android 系统开发备忘录 1篇
  • Android 音视频开发 4篇
  • Android NDK开发 3篇
  • 软件工具 4篇
  • WebRtc 3篇

最新评论

  • 这可能是介绍Android UvcCamera最详细的文章了

    lilushu: 这个项目在Gitee上好像找不到了,博主有安装包吗,有的话可以发我邮箱吗1299731686@qq.com,谢谢!

  • 这可能是介绍Android UvcCamera最详细的文章了

    Jack11998: 你好,我打包成aar在新项目中使用会报没有授予usb设备权限的错误,可是明明new usbmonitor时已经申请了

  • 这可能是介绍Android UvcCamera最详细的文章了

    xvxingxing: https://github.com/yorkZJC/UvcCameraDemo这个链接失效了,去哪里找

  • 这可能是介绍Android UvcCamera最详细的文章了

    小驰行动派: 有些三方的资源,比如引用的github的,可能会因为网络原因,访问不到。你网上找找,应该都能找到解决方法。

  • 这可能是介绍Android UvcCamera最详细的文章了

    乌鱼i: 您好,我导入后发现aar里面第三方的aar内容找不到,导致了upertypes of the following classes cannot be resolved.这样的错误

大家在看

  • 学习信息学竞赛最后拿不到金牌保送银牌强基,是不是就白学了? 546
  • Android 13 SPRD 如何临时修改 Android 系统版本 2
  • python画图|图例设置基础教程
  • 如何看待AI技术的应用前景? 453
  • C++ -string -常见用法3 1279

最新文章

  • 无人机我只知道大疆,别的还真不知道
  • ViVo X200,2亿像素APO超级长焦镜头,APO是啥意思?
  • 智能电子后视镜,汽车驾驶更安全,会是一种趋势
2024
10月 5篇
09月 7篇
08月 18篇
07月 19篇
06月 24篇
05月 6篇
04月 18篇
03月 16篇
02月 13篇
01月 10篇
2023年68篇
2022年18篇
2021年30篇
2020年15篇
2019年14篇
2016年2篇
2015年15篇
2014年6篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小驰行动派

谢谢老板,今晚吃鸡~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

玻璃钢生产厂家济宁制作玻璃钢雕塑报价哪家好宜春环保玻璃钢雕塑哪家便宜玻璃钢室内雕塑合肥人物玻璃钢雕塑河北玻璃钢仿铜雕塑厂家云南生产玻璃钢雕塑厂家哪家专业通辽小品系列玻璃钢雕塑制作松原景区玻璃钢雕塑制作吉安环保玻璃钢雕塑生产厂家沈阳环保玻璃钢雕塑生产厂家玻璃钢大型户外植物雕塑深圳商业商场美陈市场价玻璃钢雕塑国产品牌宣武区公园玻璃钢花盆合肥商场中秋美陈洛阳民族玻璃钢人物雕塑杭州春节商场美陈吉祥物卡通玻璃钢雕塑武汉玻璃钢雕塑品厂阳泉玻璃钢卡通雕塑厂家平凉市玻璃钢雕塑艺术玻璃钢花盆欧式玻璃钢雕塑价格合理商场泛喜女装美陈春天的图片兴城玻璃钢牌匾雕塑扬州玻璃钢卡通雕塑价格登封大型玻璃钢雕塑滁州小品系列玻璃钢雕塑安装玻璃钢红军人物雕塑的用途是什么江苏玻璃钢雕塑设计制作香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化