get high

更新时间:2022-12-27 20:17:19 阅读: 评论:0


2022年12月27日发(作者:小猪佩奇社会)

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

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

这篇⽂章针对下⾯⼏点来展开:

1)写这篇⽂章的原由?

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

3)Android上如何实现慢动作录像?

4)调试demo下载地址?

5)调试遇到的问题及解决?

⼀、写这篇⽂章的原由?

2⽉份的时候,在⼀个⾳视频开发的学习交流群⾥,有位⽹友问到**“Android相机有啥设置可以做到slowmotion?”**,我认真的想了下,然

后⼜简单看了下⾼通的晓龙相机源码,⼤概知道是怎么实现后,给了下思路。

后⾯我还⼀直在想这个事情,觉的⾃⼰给的思路太简单了,有时间还是得再研究研究,⾃⼰得敲下代码跑通下才好,于是就有了这篇⽂章。

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

通常我们⼈眼能够接受的最好的视频帧速率是24帧/每秒左右。那如果我们⽤120帧/秒拍摄⼀个动作,再⽤24帧每秒来播放的话,视频就

放慢了5倍,这个就是慢动作录像了。

慢动作录像,⼜叫⾼帧率录像(HFR),也就是以⾼fps(运⾏速率)捕获、编码并保存为30fps(⽬标速率),这种情况运⾏速率⼤于⽬标

速率。

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

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

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

有了上⾯关于慢动作的概念后,那在Android上如何⽤代码来实现呢?说到录像,那我们应该要想到MediaRecorder了。慢动作,也就是

⾼帧率录像,那肯定得调⽤mediaRecorder设置⾼帧率了。

好了,我们还得再有⼀个概念,数据是从摄像头nsor出来的,那我们需要120fps,总得摄像头⽀持才⾏吧。所以呢,就有⼀个先决条件

了,硬件得⽀持才⾏,下⾯会讲如何查询当前硬件是否⽀持。

假设硬件⽀持的情况下,我们来看下软件上应⽤的调⽤情况。

1、新类CameraConstrainedHighSpeedCaptureSession

查看Android的开发⽂档,我们可以看到,从Android6.0开始,Camera相关的,添加了⼀个新的类

CameraConstrainedHighSpeedCaptureSession,从描述上看,我们就可以知道,这个是专门为⾼速、⾼帧率录像准备的。换⼀句话

说,也就是Android6.0以上,Android本⾝才⽀持这个⾼速、⾼帧率录像。(我在⾃⼰早年⽤的nubiya⼿机上看了下,Android5.1的系

统,系统相机也带了慢动作功能,不过它这个慢动作应该是⼚家⾃⼰定制开发的,那会Android还没提供相关接⼝)

2、查询当前硬件是否⽀持⾼帧率录像

通过CONTROL_AVAILABLE_HIGH_SPEED_VIDEO_CONFIGURATIONS来获取availablesize。如果存在available,则判断为⽀持。

publicstaticbooleanhasHighSpeedVideoConfigs(Contextcontext,StringcameraId){

try{

CameraManagercameraManager=(CameraManager)temService(_SERVICE);

CameraCharacteristicscharacteristics=eraCharacteristics(cameraId);

HighSpeedVideoConfiguration[]highSpeedVideoConfigs=(

L_AVAILABLE_HIGH_SPEED_VIDEO_CONFIGURATIONS);

returnhighSpeedVideoConfigs!=null&&>0;

}catch(Exceptione){

}

returnfal;

}

3、获取⽀持的⾼帧率录像videoSize

从hSpeedVideoSizes()中获取⽀持的videoSize,然后选择个合适的size,注意这⾥的previewSize需要和videoSize保持⼀致。

CameraCharacteristicscharacteristics=eraCharacteristics(cameraId);

StreamConfigurationMapmap=characteristics

.get(SCALER_STREAM_CONFIGURATION_MAP);

mVideoSize=chooVideoSize(hSpeedVideoSizes());

mPreviewSize=mVideoSize;//这⾥需要保持previewSize和videoSize⼀致

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

RangeaeFps=newRange(120,120);

(L_AE_TARGET_FPS_RANGE,aeFps);

5、创建ssion采⽤createConstrainedHighSpeedCaptureSession

⾼帧率录像创建ssion,使⽤专门提供的api接⼝。

//Startacapturession

ConstrainedHighSpeedCaptureSession(surfaces,allback(){

@Override

publicvoidonConfigured(@NonNullCameraCaptureSessioncameraCaptureSession){

......

}

@Override

publicvoidonConfigureFailed(@NonNullCameraCaptureSessioncameraCaptureSession){

......

}

},mBackgroundHandler);

6、采⽤tRepeatingBurst

ssionconfigure成功后,调⽤tRepeatingBurst不停的request,这个和正常模式有点区别,正常模式是调⽤的

tRepeatingRequest。

CaptureRequestrequest=();

ListslowMoRequests=((CameraConstrainedHighSpeedCaptureSession)mPreviewSession)

.createHighSpeedRequestList(request);

eatingBurst(slowMoRequests,null,

mBackgroundHandler);

7、MediaRecorder相关参数设置为对应的⾼帧率参数

相对应的,mediaRecorder的⼀些参数也需要设置为⾼帧率参数。

mProfile=getProfile();

intbitRate=getHighSpeedVideoEncoderBitRate(mProfile,

rameRate,

VEDIO_HIGH_SPEED_FRAME_RATE);

eoEncodingBitRate(bitRate);

eoFrameRate(rameRate);

tureRate(VEDIO_HIGH_SPEED_FRAME_RATE);

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

》》》》问题1:

Process:,PID:21818

lArgumentException:Surfacesize1440x1080isnotpartofthehighspeedsupportedsizelist[1280x720,720x480,640x480,1920x1080]

onstrainedHighSpeedSurfaces(:193)

CaptureSessionInternal(:881)

ConstrainedHighSpeedCaptureSession(:627)

[分析]

》》》》问题2:Fpsrang[30,30]intherequestisnotasupportedhightspeedfpsrange…

Process:,PID:27138

lArgumentException:Fpsrange[30,30]intherequestisnotasupported

highspeedfpsrange[[120,120],[240,240],[480,480],[30,120],[30,240],[30,480]]

onstrainedHighSpeedSurfaces(:180)

HighSpeedRequestList(CameraConstrainedHighSpeedC

:89)

[分析]

*本⼈从事AndroidCamera相关开发已有5年,

*⽬前在深圳上班,

*⼩伙伴记得点我头像,看【个⼈介绍】进⾏关注哦,希望和更多的⼩伙伴⼀起交流~

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

本文发布于:2022-12-27 20:17:19,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/42410.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

下一篇:antcity
标签:get high
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图