博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android视频录制从不入门到入门系列教程(四)————Camera Parameter
阅读量:5222 次
发布时间:2019-06-14

本文共 3155 字,大约阅读时间需要 10 分钟。

Camera提供了一个叫做setParameters的方法帮助开发者设置相机的相关参数。

通过Camera的getParameters方法可以获取到当前为相机设置的相关参数。

下面简单介绍下,视频录制会用到的几个参数的用法。

一、设置PreviewSize,即视频预览大小,也即输出到SurfaceView的视频图片的分辨率大小。

需要注意的是,PreviewSize只有那么有限的几种,各个手机的值也不近相同,不是随便传进去个Size都行的。当然你非得随便搞个Size传进去,编译时不会出现任何问题,只是运行时会抛出一个异常,告诉你这个参数不被接受。

通常,在设置PreviewSize之前,需要调用getSupportedPreviewSizes来获取Camera支持的Size列表。非常不推荐设置一个固定的Size,因为会导致在其他Android手机上由于不支持这个Size导致程序异常的问题。

下面的代码打印出了本手机支持的所有PreviewSize:

Camera.Parameters parameters = camera.getParameters();List
previewSizeList = parameters.getSupportedPreviewSizes();for (int i = 0; i < previewSizeList.size(); i++){ Camera.Size size = previewSizeList.get(i); Log.i("PREVIEW_SIZE", String.format("camera preview width=%d,height=%d",size.width,size.height));}

在我的手机上输出如下:

camera preview width=1920,height=1080camera preview width=1440,height=1080camera preview width=3840,height=2160camera preview width=1280,height=720camera preview width=960,height=720camera preview width=864,height=480camera preview width=800,height=480camera preview width=768,height=432camera preview width=720,height=480camera preview width=640,height=480camera preview width=576,height=432camera preview width=176,height=144camera preview width=480,height=320camera preview width=384,height=288camera preview width=352,height=288camera preview width=240,height=160camera preview width=320,height=240

可以看到,其宽高比以16:9和4:3为主。请注意,结合上篇文章说到的,这些宽高比都是横向的宽高比,这里的width对应的是手机屏幕的height,这里的height对应手机屏幕的width。

二、设置FPS,即视频预览帧率。

 同样的,FPS的值也只有有限的几种,我们可以通过getSupportedPreviewFpsRange获取手机支持的预览FPS。

下面的代码打印出了本手机支持的所有Fps:

List
fpsList = parameters.getSupportedPreviewFpsRange();for (int i = 0; i < fpsList.size(); i++){ int[] fps = fpsList.get(i); Log.i("FPS", String.format("camera preview fps min=%d,max=%d",fps[0],fps[1]));}

 在我的手机上输出如下:

camera preview fps min=7500,max=30000camera preview fps min=8000,max=30000camera preview fps min=30000,max=30000

我测试过很多手机,最大帧率几乎都是30FPS。不过对于移动端的短视频录制,24-30FPS都可以接受。

三、设置对焦模式

通过getSupportedFocusModes()可以获取到手机支持的对焦模式。

下面的代码打印出了本手机支持的所有FocusMode:

List
focusModeList = parameters.getSupportedFocusModes();for (int i = 0; i < focusModeList.size(); i++){ String focusMode = focusModeList.get(i); Log.i("FOCUS_MODE", String.format("camera focusMode=%s",focusMode));}

 在我的手机上输出如下:

camera focusMode=autocamera focusMode=infinitycamera focusMode=macrocamera focusMode=continuous-videocamera focusMode=continuous-picturecamera focusMode=manual

这几个单词都不复杂,对于移动短视频录制来说,使用的对焦模式应该是continuous-video。这个模式会在录制过程中自动对焦,默认对焦点为Camera坐标系的原点。Camera坐标系后面会说到。

值得一提的是,不是所有的手机都支持continuous-video,如果你的项目需要对那些不支持连续对焦模式的手机也要实现连续对焦的功能,通常有下面几种途径:

  • 图像识别,大意就是通过各种XX算法判断当前帧是否已对焦。
  • 定时器对焦,大意就是整个计时器,每过一定时间就让Camera对焦一次。
  • 传感器,通过Android提供的各种传感器来判断手机是否有过移动,进而实现连续对焦。

图像识别这个办法我是没有任何建议,我也玩不来这么高逼格的东西,后面会有一片文章通过结合第二和第三种来实现连续自动对焦,效果差强人意。

最后,还有两个可能对短视频有用的设置。

开启HDR:

if (parameters.getSupportedSceneModes().contains(Camera.Parameters.SCENE_MODE_HDR)){    parameters.setSceneMode(Camera.Parameters.SCENE_MODE_HDR);}

开启防抖动:

if (parameters.isVideoStabilizationSupported()){    parameters.setVideoStabilization(true);}

 

转载于:https://www.cnblogs.com/DoNetCoder/p/5559848.html

你可能感兴趣的文章
iostat参数说明
查看>>
Python-Mac 安装 PyQt4
查看>>
实验2-2
查看>>
String,StringBuffer与StringBuilder的区别?? .
查看>>
MongoDB遇到的疑似数据丢失的问题。不要用InsertMany!
查看>>
JQuery 学习
查看>>
session token两种登陆方式
查看>>
IntelliJ IDEA 12集成Tomcat 运行Web项目
查看>>
android smack MultiUserChat.getHostedRooms( NullPointerException)
查看>>
实用的VMware虚拟机使用技巧十一例
查看>>
监控工具之---Prometheus 安装详解(三)
查看>>
不错的MVC文章
查看>>
网络管理相关函数
查看>>
IOS Google语音识别更新啦!!!
查看>>
20190422 T-SQL 触发器
查看>>
[置顶] Linux终端中使用上一命令减少键盘输入
查看>>
poj1422_有向图最小路径覆盖数
查看>>
BootScrap
查看>>
[大牛翻译系列]Hadoop(16)MapReduce 性能调优:优化数据序列化
查看>>
WEB_点击一百万次
查看>>