一、效果展示
略 (动图录制忒麻烦,大家跑通项目自己看吧!)
二、案例中的实现步骤
一般情况下我们都使用系统相机 , 如果做美颜相机我们就会用到Camera和Camera2里面的API ,
或者使用C去调用我们相机的硬件 , 当然还会使用OpenGL ES 和 OpenCV 对预览帧做处理...
- 获取视频数据
- 让TextureView的大小和视频数据的大小 进行等比缩放 ( 自定义TextureView )
- 设置预览界面 (自定义的 TextureView )
- 打开相机
- 在Activity上 对 相机的生命周期 进行管理
三、案例源代码分析
干货都在图上,步骤很清晰,这里源代码不贴代码了 (偷懒) ,大家可以在源码上搜着看!
四、关于SurfaceView和TextureView的选择
1. SurfaceView和Textureview的区别
相同点:SurfaceView和Textureview都继承自View
SurfaceView优缺点
优点:SurfaceView专门提供了嵌入视图层级的绘制界面,
开发者可以控制该界面像Size等的形式,能保证界面在屏幕上的正确位置。
SurfaceView的双缓冲功能,可以使画面更加流畅的运行,
缺点:由于其holder的存在导致画面更新会存在间隔,
并且不能加上动画、平移、缩放;两个SurfaceView不能相互覆盖。
Textureview的优缺点:
优点:TextureView更像是一般的View,
可以像TextView那样能被缩放、平移,也能加上动画。
缺点:TextureView只能在开启了硬件加速的Window中使用,
并且消费的内存要比SurfaceView多,并伴随着1-3帧的延迟。
在Andriod4.0之后的API中才能使用 ,
在5.0以前在主线程渲染, 5.0以后有单独的渲染线程。
2. 性能比较