1. camera框架为android自带拍摄框架,可以用来拍摄及录像。
  2. camera类为摄像头类,接受框架层反馈的,由手机摄像头采集到的数据。
  3. camera采集到的数据,需要一个视图类进行解析和显示。
  4. 视图类最基本的就是surfaceview。
  5. Surfaceview是android自带的视图类,可以用来显示图像,图像不仅限于图片,还可以用来播放视频,一般用于动画播放,视频播放,摄像头显示,以及游戏。
  6. Surfaceview与普通的view不同的是,它并不是直接显示在屏幕上,而是在窗口上再开一个窗口,窗口大小与surfaceview大小相同,位置相同。
  7. Surfaceview的独立窗口为独立线程,与主线程相区别,类似游戏之类的大量数据处理用surfaceview可以一定程度的避免主线程堵塞造成的卡顿。
  8. Surfaceview不同于普通的view,并不是直接将视图显示在自身上,所以部分view的方法无效,例如view的截图方法,surfaceview调用会返回一张全黑的bitmap。
  9. 其中需要注意的是,如果你要对图像进行处理,比如旋转90度进行视频播放,对surfaceview调用旋转方法是无法改变图像的播放状态的,因为实际显示图像的是surfaceview创建的窗口,而不是surfaceview。
  10. Surfaceview有很多延伸类,例如GLSurfaceview,GLSurfaceview有使用到手机芯片中的图形加速模块,故而效率会比surfaceview高很多,相对的,消耗也会大很多。
  11. 相对surfaceview,存在另一个类,Textureview。此类由android4.0之后推出。
  12. Textureview继承于View,与surfaceview不同的是他并不会新开窗口,而是像普通的view一样将图像绘制并在自身上显示,比起surfaceview,他的消耗大,而且需要在清单文件中对此类控件存在的activity注册硬件加速,否则在一些低配手机上容易造成卡顿,优势是可以更加直观的对图像进行处理。
  13. 开发摄像头应用时,将camera与视图类进行关联,比如surfaceview有一个叫SurfaceView.Holder的,将他与camera相关联,等到确认视图初始化完成,即可开始预览。
  14. 在camera框架开发中,有两个重要的概念,即预览像素PreviewSize与拍摄像素PictureSize。
  15. 预览像素previewsize即在视图类中显示的像素,此像素需要camera从框架层中获取设备支持的预览像素。
  16. 因为现在的安卓设备的开放性,所以存在各种各样比例的像素,例如4:3 16:9 18:9。
  17. 像素的比例尤为重要,预览像素的比例若与视图控件的宽高比不相同,则会出现画面扭曲的现象。
  18. 预览像素的比例若与拍摄像素比例不相同,则会出现拍摄的照片和看到的照片尺寸不一样的问题,例如拍摄的照片实际上比看到的图像更加广。或者拍摄的照片比看到的图像小,导致看得见拍不下来的情况。
  19. 预览像素需要从框架层获取支持像素,然后进行筛选,值得注意的是,因为手机的二次开发系统不同,会导致各种各样的问题,比如a系统不存在4:3比例的像素,比如B手机不能获取500W以上的像素。
  20. 预览像素不影响录像与拍照的图像尺寸,仅影响用户看到的屏幕上的图像清晰度。
  21. 拍摄像素PictureSize,与预览像素类似,由camera从框架层中获取,然后根据开发需求计算需要的比例,实际控制拍摄的照片尺寸。
  22. 需要注意的是camera的设置都是需要从框架层中获取设置范围,此范围由系统工程师写入框架层中,根据系统的不同参数也不尽相同,若强行设置一个自定义的参数,就会报错,包括像素,聚焦方式,测光方式等,都需要去验证camera是否支持然后再进行设置。
  23. 关于照片方面,拍摄的照片质量和像素共同决定了一张照片的大小,质量会决定图像中一个像素点所包含的颜色深度,像素会决定一张照片所包含的像素点的数量。
  24. 同等像素大小的情况下,体积越大,颜色越深越清晰。体积越小,颜色越浅,达到一个范围值时会导致失真,所以质量压缩需要控制,不可以无限压缩。
  25. 一定程度的质量压缩是肉眼无法区别的。
  26. Camera框架主要的职责是获取到手机摄像头所采集的图像并解析成数据供开发者处理。
  27. 通过视频录制类可以将camera采集到的图像数据录制成视频。
  28. 视频录制类由很多,例如MediaRecord等。
  29. MediaRecord框架存在很多问题,如果有更好的,更习惯的视频录制类,可以使用其他的。
  30. 视频录制需要将camera关联的holder设置给MediaRecord,然后才能开始录制,摄前准备与拍摄照片一致。
  31. 拍照像素PictureSize不会影响录制视频。
  32. MediaRecord可以选择是否录制音频或视频,可以设置录制视频的封装格式与编码格式。
  33. 关于编码格式与封装格式是视频的两个格式,封装格式即视频的文件后缀MP4一类的。
  34. 编码格式即视频图像每一帧的编码格式,将图像进行编码写入文件中,不同的编码格式会导致画面的清晰度与文件大小的不同。
  35. 编码格式常用的有MPEG4中的H264 H263等,在清晰度方面比较有优势,但体积稍微偏大。
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄