下面我们来详细介绍一下 Camera1 的使用步骤。
如图所示,使用 Camera1 的步骤包括下面几大步:
设置Camera权限
检查Camera是否可用
打开摄像头
设置摄像头参数
设置预览
采集数据过程
详细介绍
第一步,在 AndroidManifast.xml中添加下面设置权限的语句。
第二步,动态申请Camera权限。
Android在Android 6.0后,对权限的管理更严格了,除了上面要静态申请权限外,还要通过调用 requestPermissions 函数动态申请Camera权限。requestPermissions函数如下:
为了程序的健壮性,在使用Camera之前我们最好检测一下设备是否可用。检测代码中下:
如果Camera服务可用,则还要检查一下Camera的个数是否为 0 ? 如果为0 ,说明Camera也是不可用的。代码如下:
我们在打开Camera判断是否打开成功,是通过Camera对象是否为null来判断的。因为通过捕获异常有时候是不准确的。
设置摄像头参数主要是设置图像的宽、高、帧率。设置的基本步骤为:1. 从摄像头取出现有参数。2. 修改参数。3. 设置参数。
开启预览的步骤如下:1. 通过 OpenGL ES生成外部纹理。 2. 通过纹理ID行成SurfaceTexture。 3. 将生成的纹理设置到Camera中。 4. 开启预览。5. 当有视频帧到达后,使用OpengGL ES绘制图片。
绘制图片
通过上面的步骤,就将 OpenGL ES 、EGL、NativeWindow以及Camera之间建立起了联接。
1)打开Camera后,Camera开始采集数据。
2)Camera会将数据存放到 mCameraTexture 中,也就是SurfaceTexture中。
3)Camera完成一帧数据的采集后,通知应用程序有一帧数据已经准备好了。
4)应用程序收到通知后,调用mCameraTexture.updateTexImage(); 将SurfaceTexture中的数据输出到外部纹理(也就是GLES20.glGenTextures函数产生的纹理中)。
5)通过 OpenGL ES 程序将外部纹理渲染到 EGL 的 EGLSurface中。
6)并最终调用 EGL14.eglSwapBuffers(mEGLDisplay, eglSurface); 将 EGLSurface中的内容输出到 NativeWindow,最终显示出来。
7)循环执行 1-6 步。
联系客服