山西旅游景点摄像头Camera视频源数据采集解析
⼀、前⾔
在视频直播中⼀般都是两种视频数据源,⼀个是摄像头数据,⼀个是录制桌⾯数据,⽽⼀般来说美⼥妹⼦直播都是来⾃于摄像头数据,游戏直播都是录制桌⾯数据的,那么今天就来看看第⼀个数据源数据采集分析,Android中使⽤摄像头的场景很多,在没有直播这个⾏业出现之前,之前⽤到摄像头的最多就两个场景,⼀个是⼆维码扫描,⼀个是美颜拍照类的应⽤。那么这⾥就来看看Android中的摄像头的⽤法,以及如何进⾏数据采集进⾏数据的⼆次加⼯。
⼆、知识点概述
本篇⽂章主要通过如下⼏个⽅向去介绍Android中的摄像头Camera知识:
1、Camera摄像头的基本操作
2、Camera摄像头的前置和后置区分
3、Camera摄像头的数据格式
4、Camera摄像头⽅向和数据尺⼨
5、Camera摄像头的对焦拍照
6、Camera摄像头的数据采集以及⼆次加⼯
先来看看⼀张效果图:
三、知识点详解
通过上⾯的效果图,可以看到,可以切换前置和后置摄像头,可以对焦拍照,可以加⽔印效果。下⾯就来⼀⼀介绍内容缝扣子
第⼀、Camera摄像头的基本操作
Android中使⽤⼀个摄像头其实很简单,⾸先需要在l中声明权限:
然后代码中进⾏初始化操作即可:
初始化操作⽐较简单,就⼏步:
1、第⼀步:打开摄像头,使⽤open⽅法
zippo鉴别这个⽅法有两种形式,⼀种是⽆参数形式的,默认打开是后置摄像头,还有⼀种⽅式是有参数像是,可以通过传递的参数来决定打开是前置还是后置摄像头,0代表后置摄像头,1代表前置摄像头。
2、第⼆步:设置摄像头的预览数据界⾯
可以不进⾏设置的,如果预览⼀般有两种⽅式,⼀种是调⽤setPreviewDisplay⽅法设置SurfaceHolder,也就是和SurfaceView进⾏绑定了,还有⼀种就是调⽤setPreviewTexture⽅法设置SurfaceTexture的,这个就和GLSurfaceView以及TextureView绑定了,这两种⽅式在介绍视频直播的基础知识的时候已经介绍了,还不了解的同学可以点击这⾥:基础知识介绍。后续如果要做美颜效果的话GLSurfaceView⽤的就⽐较多了,因为他本⾝集成了OpenGL的功能,⽽且⼆次处理的数据可以进⾏回显的。
3、第三步:获取到Camera.Parameters参数信息
通过getParameters⽅法获取摄像头已有的参数信息,然后进⾏相关设置,⽐如尺⼨⼤⼩,⽅向,数据格式等信息。
4、第四步:在把添加好的参数信息设置回去,调⽤startPreview开始预览效果了
同样的摄像头的销毁⽅法也很简单:
也就四步:
1、第⼀步:将摄像头的预览清空天龙八部二代神器
2、第⼆步:停⽌预览效果
3、第三步:释放摄像头
因为系统默认只能同时开启⼀个摄像头不管是前置摄像头还是后置摄像头,所以不⽤的时候⼀定要释放
4、第四步:置空摄像头对象
第⼆、Camera摄像头的前置和后置区分
Android中的摄像头Camera是区分前置和后置的,所以这⾥就要做⼀个前置和后置摄像头的切换功能了,我们可以通过⼀个⽅法来获取当前系统的摄像头个数,以及摄像头的信息:
这个⽅法先获取当前设备中有多少个摄像头,⼀般现在设备都是两个,⼀个是前置,⼀个是后置的,我们得到信息之后在打印看看效果:
看到了,只有两个摄像头,⽽且通过默认的旋转⾓度得知,后置摄像头是90,前置是270,他们始终相差180度,不过这些和后⾯要说到的设置摄像头⽅向的效果没关系的。
那么切换摄像头Android中的做法是把之前的摄像头先销毁在重新初始化下⼀个摄像头:
然后⽤⼀个全局的变量来记录当前是前置还是后置,在初始化⽅法中直接使⽤这个变量:中国古迹
第三、Camera摄像头的数据格式
Android中摄像头的数据格式是指原⽣的每⼀帧数据,他是有指定格式的,⽽这些原⽣的每⼀帧数据可以有两个地⽅获取,⼀个是添加回调,在onPreviewFrame(byte[] data, Camera camera)回调⽅法中获取,还有⼀个就是拍照的时候回调⽅法:onPictureTaken(byte[] data, Camera camera),当然如果想处理数据的话,肯定是在第⼀个回调⽅法中去进⾏操作了,第⼆种必须在拍照的时候把当前拍照的⼀帧数据拿到,这明显不靠谱。不管是那种获取⼀帧数据,这些都是有⼀定格式的,如果要后期处理的话,那么必须要做⼀次格式转
化,Android中的摄像头数据的格式有两种,可以进⾏设置,当然直接使⽤代码可以获取到摄像头可以⽀持的数据格式:在
Camera.Parameters类的getSupportedPreviewFormats⽅法即可获得:
看⼀下运⾏结果:
有两种格式,这⾥打印出来的是⼀个int值,如何查看这个int值对应的格式呢?可以去ImageFormat类中去查:
第⼀种格式:
这个就是17对应16进制值,也就是ImageFormat.NV21格式的
第⼆种格式:
这个就是842094169对应的16进制值,也就是ImageFormat.YV12格式的。
上⾯了解了摄像头只⽀持这两种数据格式,那么我们后续肯定需要做数据处理,数据处理⼀般是和ARGB,以及后续的视频编码格式
YUV420之间的转化,不过还好的是,这个转化格式⽹上已经有很多的,⽽且后续看到⼀些美颜功能都是处理这些数据格式的,同时这些操作最好放到native层做,因为效率会⾼⼀些。
第四、Camera摄像头⽅向和数据尺⼨
如何恢复删除的视频Android中摄像头如果我们想要得到预期的数据的话,那么⽅向和尺⼨⾮常关键,Camera中提供了⼀些⽅法可以进⾏这些参数的设置的,⾸先来看⼀下摄像头的⽅向问题:
我们看到这⾥有两个⽅法可以来设置摄像头的⽅向信息,⼀个是Camera类本⾝的setDisplayOrientation⽅法,⼀个是
Camera.Parameters类的setRotation⽅法,那么这两个⽅法有什么区别呢?
⾸先第⼀个⽅法:setDisplayOrientation⽅法是设置摄像头数据预览的⽅向的
就是我们⽤⼀个SurfaceView作为预览界⾯,在界⾯看到的⽅向。
Android中默认的预览⽅向是:横屏,旋转度是:0,所以如果你把当前Activity设置成横屏,不调⽤这个⽅法的话,效果是正常的:
但是,如果现在不设置横屏,因为Activity默认是竖屏的:
看到了效果,摄像头的预览⽅向没有发⽣变化的,所以这时候就需要调⽤setDisplayOrientation进⾏设置了,这个⽅法是按照逆时针旋转的,所以如果想让预览⽅向变正的话,就需要逆时针旋转90度即可:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论