基于安卓otg接口驱动多个摄像头的方法和系统的制作方法
【技术领域】
[0001] 本发明涉及安卓(Android)嵌入式驱动开发技术领域。
【背景技术】
[0002] 随着安卓平台的发展,软件功能和硬件扩展性都有了巨大的提高。在软件方面,安 卓系统应用层提供了丰富的应用程序,已经能够满足用户入场使用的绝大部分需求;在系 统底层,我们知道,安卓系统内核采用改进的Linux内核,随着安卓系统更新较新版本并且 更稳定的内核,从系统底层为系统整体功能提升支持。从安卓4.0以上版本开始,系统提供 对0TG接口的支持,利用0TG接口,使得安卓系统能够对周边、外设提供了更好的支持,例如 0TG键盘、连接OTGU盘等。目前市场上,已经存在基于安卓系统,利用0TG摄像头进行录像的 应用,此类应用的主要方法为利用安卓内核V412功能,以及对UVC摄像头的支持,能够实现 利用该摄像头进行图像、视频采集工作。
[0003]利用单一0TG摄像头在安卓平台进行图像采集,虽然能够在一定程度上满足用户 对图像录制、处理的便携性的需求,但在使用中无法满足用户对多角度、广角和多摄像头图 像处理方面的应用。在中国专利CN201310111522.4(钟芹盛.基于安卓系统终端的外置摄像 系统及方法:CN201310111522.4[P]. 2013-08-07)中,作者提出了一种利用0TG摄像头进行 图像采集的方法,该方法驱动开发比较复杂,该发明中提出的方法的扩展性受到驱动开发、 多设备0TG通信方面的限制,不能很好的对安卓平台多摄像头或多个摄像头提供支持。
[0004]本发明针对单一0TG摄像头图像采集存在的问题,提出一种基于安卓系统利用0TG 接口实现多摄像头图像采集的框架和系统。本发明提出的方法,仅通过USBHUB扩展0TG接 口的数目,不涉及其他接口的扩展和转换。该方法在能够支持多摄像头的基础上,同时兼容 单个摄像头采集的需求,通过在安卓手机或者平板0TG接口连接一个HUB,用来扩展多个摄 像头。摄像头视频采用Η. 264压缩方式,音频采用AAC压缩方式,封装为MP4格式。本系统为其 他功能的扩展提供了平台基础,如利用多摄像头实现的一些功能:图像配准、广角摄影、双 目测距、图像去模糊等。
【发明内容】
[0005]本发明的目的是提供一种基于安卓平台利用0TG接口扩展多个摄像头进行图像、 视频拍摄的方法和系统,用户可以基于此系统的方法,开发基于安卓平台多摄像头的应用。
[0006]本发明的目的是提供一种基于安卓0TG接口驱动多个摄像头的方法,所述方法包 括以下步骤:
[0007] a.搭建硬件平台,使用0TG线和USBHUB将安卓设备和多个摄像头连接起来;
[0008] b.移植图像库、视频库,对视频库进行编译获得安卓系统视频编码的静态库并且 对图像库进行编译获得安卓系统图像压缩的静态库;
[0009]c.编写JNI,调用该视频编码的静态库和图像压缩的静态库,编译成能够被安卓系 统调用的动态库,提供被应用层调用的接口函数;
[0010]d.采集及封装音视频,安卓系统利用所述接口函数进行摄像头的识别和初始化, 打开摄像头获得图像和视频,利用麦克风进行音频录制,同时进行视频封装,形成可播放的 视频文件。
[0011]优选地,在步骤a之后在步骤b之前还包括获得安卓系统ROOT权限的步骤,其中所 述获得安卓系统ROOT权限的步骤包括:
[0012]a.下载所述平台设备对应的内核文件;
[0013]b.在Ubuntu系统下,通过命令makemenuconfig进行内核配置如下:
[0014] C0NFIG_VIDE0_DEV=y
[0015] C0NFIG_VIDE0_V4L2_C0MM0N=y
[0016] C0NFIG_VIDE0_MEDIA=y
[0017] C0NFIG_USB_VIDE0_CLASS=y
[0018] C0NFIG_V4L_USB_DRIVERS=y
[0019] C0NFIG_USB_VIDE0_CLASS_INPUT_EVDEV=y
[0020] 并且将UCV配置成build-in形式,不需要在使用中进行驱动的插入;
[0021]c.将内核刷入手机中。
[0022] 优选地,所述USBHUB还包括一个供电接口。
[0023]其中所述接口函数包括摄像头初始化、YUV转化RGB、JPEG图像压缩、视频录制接口 函数。
[0024]其中所述摄像头初始化包括摄像头通信协议、分辨率、输出数据格式、编码器的初 始化。
[0025]其中通信协议采用v412,分辨率采用640X480,输出格式采用YUV格式。
[0026] 其中所述编码器采用H264编码方式,设置帧率为25帧每秒,编码等级为baseline。 [0027]本发明还提供一种基于安卓0TG接口驱动多个摄像头的系统,所述系统包括:多个 支持UVC的摄像头、一台安卓4.0以上平台的安卓设备,一条0TG连接线、一个USBHUB,其特 征在于:
[0028] 0TG连接线的一端连接至安卓设备,0TG连接线的另一端连接至USBHUB,所述USBHUB连接至多个UVC摄像头;
[0029]所述安卓设备的内核对UVC支持,安卓系统可调用JNI提供的接口函数利用已经移 植的图像库和视频库来米集图像和视频。
[0030] 优选地,所述USBHUB还包括一个供电接口。
[0031] 在本发明提出的一种基于安卓平台利用多摄像头进行图像采集的系统和方法中, 通过0TG连接线,扩展一个HUB,将多个UVC摄像头连接至此HUB上,通过针对多个摄像头进行 驱动及应用开发,实现能够通过多个摄像头同时进行图像、视频的采集,在图像采集阶段, 采用jpeg图像格式,音视频采集阶段,采用Η. 264编码和AAC音频编码,封装为Mp4格式。本方 法扩展了安卓系统应用,方便用户图像采集,同时,利用多摄像头进行图像采集,也是进行 双目测距、图像拼接、防抖等方面算法开发的硬件基础。本发明利用安卓0TG接口扩展多个 摄像头,提出一种能够不受0TG同时通信设备数目限制的方法,达到对两个或者多个摄像头 的支持,结构简单,扩展性强,操作方便,适用于公安执法、视频监控及普通用户拍照、录像。 同时,用户可以在本发明提出的多摄像头图像采集平台的基础上,对系统进行修改、开发, 扩展更丰富的应用。
【附图说明】
[0032]图1是本发明的整体系统框架图。
[0033]图2是JNI完成C/C++层与JAVA层通信的框图。
[0034]图3是系统硬件连接示意图。
[0035]图4是正确连接手机后,打开ROOT工具的界面。
[0036]图5是点击获取ROOT权限后,软件对连接的手机进行权限破解的界面。
【具体实施方式】
[0037]基于安卓平台多摄像头图像采集方法共有四个步骤,如图1所示。下面是对这四个 步骤的详细描述:
[0038]步骤一:系统开发软、硬件平台搭建
[0039]为了能够进行安卓平台多摄像头开发,需要准备相应的硬件设备,本发明需要多 个支持UVC的摄像头102, 一台安卓4.0以上平台的安卓设备105, 一条0TG连接线104, 一个 USBHUB103。本系统通过0TG连接线104连接安卓设备105和USBHUB103,然后将多个UVC摄 像头102连接至USBHUB103上,至此,硬件准备完毕。在软件开发环境方面,我们基于Ubuntu 12.04系统通过利用eclipse进行开发,配置安卓开发所需要的Java环境和安卓SDK。同时, 为了能够进行C/C++函数及模块的开发和调用,还需要配置NDK交叉编译环境。
[0040] 为了保证安卓应用程序对外设正常通信,首先需要对安卓系统进行权限解锁,也 称作ROOT,这里只要使用网络上提供的系统ROOT软件即可简单完成系统权限的解锁。目前 安卓4.0以上平台大部分都已经提供了内核对UVC的支持,解锁完成后,插入摄像头通过查 看系统terminal,如果有新设备产生,说明系统已经提供UVC支持,如果没有新设备的产生, 说明内核没有开启摄像头UVC功能,此时,需要通过刷新内核开启内核对UVC的支持。例如在 三星s4手机上,部分机器需要开启内核对UVC的支持,在三星官网下载S4手机对应的内核文 件,在Ubuntu系统下,通过命令makemenuconfig进行内核配置如下:
[0041 ] C0NFIG_VIDE0_DEV = y
[0042] C0NFIG_VIDE0_V4L2_C0MM0N=y
[0043] C0NFIG_VIDE0_MEDIA = y
[0044] C0NFIG_USB_VIDE0_CLASS = y
[0045]C0NFIG_V4L_USB_DRIVERS=y
[0046] C0NFIG_USB_VIDE0_CLASS_INPUT_EVDEV = y
[0047] 并且将UCV配置成build-in形式,不需要在使用中进行驱动的插入,然后将内核刷 入手机中。这个方法相对比较复杂,在使用中,用户尽量选用内核已经提供UVC支持的安卓 手机或者pad,目前主流的手机大部分已经提供该功能的支持。
[0048]步骤二:图像压缩库、视频压缩库移植
[0049]在进行音视频编码的过程,需要用到对应的编码库。在本发明中,视频编码采用了 开源的x264编码库,图像编码采用libjpeg实现,音频利用手机自带的麦克风和编码接口, 进行AAC音频编码。为了能够在安卓平台上使用x264和libjpeg开源库,需要进行部分代码 的修改和移植。首先,从网络上获取x264的开源实现,在Ubuntu系统的终端中,进入x264代 码的根目录,其中提供了文件编译需要的config文件,这里需要根据专利需要进行配置,首 先将x264编译成后缀名为.a的静态库,然后在JNI编写阶段,调用该静态库,跟其他函数一 齐编译成能够被安卓系统调用的动态库。针对libjped,进行与x264类似的交叉编译获取能 够在安卓系统运行的静态库。获取了视频编码和jpeg图像压缩需要的静态库之后,在进行 JNI编写时,通过包含这两个库的头文件,即可进行库函数的调用。
[0050]图像压缩库、视频压缩库移植过程为:
[0051] (1)χ264编码器Android平台移植
[0052]本文使用的χ264版本为 1264-81^口811〇卜20131228-2245,_1(的版本:311办〇1(1-ndk_r9,Ubuntu12.0432位系统编写脚本文件x264config.sh,本文使用的脚本文件代码 为:
[0053]exportNDK= /home/syan/android/android-ndk_r9
[0054] exportPREBUILT=$NDK/toolchains/arm-linux-androideabi-4.6/prebuilt
[0055] exportPLATFORM= $NDK/platforms/android-8/arch-arm
[0056] exportPREFIX:/home/syan/Desktop/2013-10-27
[0057] ./configure-prefix= $PREFIX\
[0058] --enab1e-pic\
[0059] --host=arm-linux\
[0060] --cross-prefix=$PREBUILT/linux-x86/bin/arm-linux-androideabi-\
[0061 ] --sysroot= $PL