如何编写摄像头应用程序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何编写摄像头应用程序相关的知识,希望对你有一定的参考价值。
参考技术A编写一个可预览的Camera应用需要哪些步骤呢:
1、首先我们需要创建一个布局文件,也就是我们打开apk后显示的画面,因为是一个demo,所以我们的布局文件也很简单,就一个SurfaceView,用来现实Camera预览画面的,代码如下:
2、接下来就是在主类中onCreat加载布局文件,同时初始化控件调用initView(),在android6.0 之后要求app需要获取系统权限,比如打开camera的权限,读写sdcard的权限等(用来存图,读取配置文件等)
3、 在initView中初始化了SurfaceView控件,同时需要装载SurfaceHold对象,用来监听SurfaceView的生命周期,我们可以把camera相关的初始化流程(initCamera2)装载在这个位置,为后面的camera打开流程做准备
4、在Camera的初始化流程中,我们启动了一个线程,同时设置了图像的数据格式和分辨率,建立一个图像可用监听器,为后面需要拍照或者做帧数据处理提供接口,如果你仅仅是为了预览,就只用建立一个线程就可以了,直接跳过第5步,看第6步就行
5、重写onImageAvailable 方法,可以在此处做一些你需要的处理,需要注意的是要这里能获取到数据,在后面需要将ImageRead的对象装载到后面previewRequestBuilder 中才行
6、在onCreat中我们去申请了权限,在权限申请ok后,会到下面这个回调函数中,我们在这个函数中去开启camera
7、开启camera的方法也很简单,就是获取到系统的Camera服务,然后直接调用openCamera方法开启,注意第一个参数cameraId就是camera的id号,一般1是前置,0是后置
8、在openCamera函数执行成功后,会进入stateCallback回调函数,这个里面就有三个方法,分别对应打开摄像头,断开摄像头以及报错的回调,我们在打开摄像头中加载预览函数,进入预览流程,同时要在断开摄像头中将CameraDevice释放
9、现在进入了Camera的预览流程了,我们依然使用系统的接口,首先是获取到CaptureRequest的builder,然后将surfaceView的对象加载进入,最后调用setRepeatingRequest方法进行数据预览。
(如果想让第5步中的方法也能跑起来,这里需要装载进ImageRead的对象,增加方法是
将
Arrays.asList(outputTarget)
修改为:
Arrays.asList(outputTarget,mImageReader.getSurface())
如何使用小程序从 Java 中的网络摄像头捕获视频?
【中文标题】如何使用小程序从 Java 中的网络摄像头捕获视频?【英文标题】:How can I capture video from a webcam in java with an applet? 【发布时间】:2011-08-07 13:34:45 【问题描述】:我希望使用 java 小程序通过网络捕获和流式传输视频。到目前为止,JMF 似乎已经过时,FMJ 无法以任何合理的速度进行捕捉。是否有任何其他库可用于以每秒至少 10-15 帧的速度从网络摄像头捕获和/或流式传输视频?
【问题讨论】:
【参考方案1】:我最近这样做了,不得不编写一个 JNI 来捕获视频并对其进行编码或解码。
这很痛苦,因为您必须为每个平台编写 JNI,例如 Windows 32 和 64 位、OSX 32 和 64 位以及 Linux 32 和 64 位。
使用 JNLP(Java Web 启动)是比小程序更好的选择,因为它允许您对其进行设置,以便自动为当前操作系统下载和安装正确的 JNI。
JNLP 或 Applet 都需要您生成签名的 jar 才能工作。
【讨论】:
在这种情况下,我可能只使用 OpenCV 进行捕获。 是的,如果还没有 JNI 包装器,您可以将 OpenCV 包装在 JNI 中,您也可以考虑使用 JNA 直接调用 OpenCV。以上是关于如何编写摄像头应用程序的主要内容,如果未能解决你的问题,请参考以下文章