基于安卓otg接口驅(qū)動多個攝像頭的方法和系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及安卓(Android)嵌入式驅(qū)動開發(fā)技術(shù)領(lǐng)域。
【背景技術(shù)】
[0002] 隨著安卓平臺的發(fā)展,軟件功能和硬件擴展性都有了巨大的提高。在軟件方面,安 卓系統(tǒng)應用層提供了豐富的應用程序,已經(jīng)能夠滿足用戶入場使用的絕大部分需求;在系 統(tǒng)底層,我們知道,安卓系統(tǒng)內(nèi)核采用改進的Linux內(nèi)核,隨著安卓系統(tǒng)更新較新版本并且 更穩(wěn)定的內(nèi)核,從系統(tǒng)底層為系統(tǒng)整體功能提升支持。從安卓4.0以上版本開始,系統(tǒng)提供 對0TG接口的支持,利用0TG接口,使得安卓系統(tǒng)能夠?qū)χ苓?、外設(shè)提供了更好的支持,例如 0TG鍵盤、連接OTGU盤等。目前市場上,已經(jīng)存在基于安卓系統(tǒng),利用0TG攝像頭進行錄像的 應用,此類應用的主要方法為利用安卓內(nèi)核V412功能,以及對UVC攝像頭的支持,能夠?qū)崿F(xiàn) 利用該攝像頭進行圖像、視頻采集工作。
[0003]利用單一0TG攝像頭在安卓平臺進行圖像采集,雖然能夠在一定程度上滿足用戶 對圖像錄制、處理的便攜性的需求,但在使用中無法滿足用戶對多角度、廣角和多攝像頭圖 像處理方面的應用。在中國專利CN201310111522.4(鐘芹盛.基于安卓系統(tǒng)終端的外置攝像 系統(tǒng)及方法:CN201310111522.4[P]. 2013-08-07)中,作者提出了一種利用0TG攝像頭進行 圖像采集的方法,該方法驅(qū)動開發(fā)比較復雜,該發(fā)明中提出的方法的擴展性受到驅(qū)動開發(fā)、 多設(shè)備0TG通信方面的限制,不能很好的對安卓平臺多攝像頭或多個攝像頭提供支持。
[0004]本發(fā)明針對單一0TG攝像頭圖像采集存在的問題,提出一種基于安卓系統(tǒng)利用0TG 接口實現(xiàn)多攝像頭圖像采集的框架和系統(tǒng)。本發(fā)明提出的方法,僅通過USBHUB擴展0TG接 口的數(shù)目,不涉及其他接口的擴展和轉(zhuǎn)換。該方法在能夠支持多攝像頭的基礎(chǔ)上,同時兼容 單個攝像頭采集的需求,通過在安卓手機或者平板0TG接口連接一個HUB,用來擴展多個攝 像頭。攝像頭視頻采用Η. 264壓縮方式,音頻采用AAC壓縮方式,封裝為MP4格式。本系統(tǒng)為其 他功能的擴展提供了平臺基礎(chǔ),如利用多攝像頭實現(xiàn)的一些功能:圖像配準、廣角攝影、雙 目測距、圖像去模糊等。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的目的是提供一種基于安卓平臺利用0TG接口擴展多個攝像頭進行圖像、 視頻拍攝的方法和系統(tǒng),用戶可以基于此系統(tǒng)的方法,開發(fā)基于安卓平臺多攝像頭的應用。
[0006]本發(fā)明的目的是提供一種基于安卓0TG接口驅(qū)動多個攝像頭的方法,所述方法包 括以下步驟:
[0007] a.搭建硬件平臺,使用0TG線和USBHUB將安卓設(shè)備和多個攝像頭連接起來;
[0008] b.移植圖像庫、視頻庫,對視頻庫進行編譯獲得安卓系統(tǒng)視頻編碼的靜態(tài)庫并且 對圖像庫進行編譯獲得安卓系統(tǒng)圖像壓縮的靜態(tài)庫;
[0009]c.編寫JNI,調(diào)用該視頻編碼的靜態(tài)庫和圖像壓縮的靜態(tài)庫,編譯成能夠被安卓系 統(tǒng)調(diào)用的動態(tài)庫,提供被應用層調(diào)用的接口函數(shù);
[0010]d.采集及封裝音視頻,安卓系統(tǒng)利用所述接口函數(shù)進行攝像頭的識別和初始化, 打開攝像頭獲得圖像和視頻,利用麥克風進行音頻錄制,同時進行視頻封裝,形成可播放的 視頻文件。
[0011]優(yōu)選地,在步驟a之后在步驟b之前還包括獲得安卓系統(tǒng)ROOT權(quán)限的步驟,其中所 述獲得安卓系統(tǒng)ROOT權(quán)限的步驟包括:
[0012]a.下載所述平臺設(shè)備對應的內(nèi)核文件;
[0013]b.在Ubuntu系統(tǒng)下,通過命令makemenuconfig進行內(nèi)核配置如下:
[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形式,不需要在使用中進行驅(qū)動的插入;
[0021]c.將內(nèi)核刷入手機中。
[0022] 優(yōu)選地,所述USBHUB還包括一個供電接口。
[0023]其中所述接口函數(shù)包括攝像頭初始化、YUV轉(zhuǎn)化RGB、JPEG圖像壓縮、視頻錄制接口 函數(shù)。
[0024]其中所述攝像頭初始化包括攝像頭通信協(xié)議、分辨率、輸出數(shù)據(jù)格式、編碼器的初 始化。
[0025]其中通信協(xié)議采用v412,分辨率采用640X480,輸出格式采用YUV格式。
[0026] 其中所述編碼器采用H264編碼方式,設(shè)置幀率為25幀每秒,編碼等級為baseline。 [0027]本發(fā)明還提供一種基于安卓0TG接口驅(qū)動多個攝像頭的系統(tǒng),所述系統(tǒng)包括:多個 支持UVC的攝像頭、一臺安卓4.0以上平臺的安卓設(shè)備,一條0TG連接線、一個USBHUB,其特 征在于:
[0028] 0TG連接線的一端連接至安卓設(shè)備,0TG連接線的另一端連接至USBHUB,所述USBHUB連接至多個UVC攝像頭;
[0029]所述安卓設(shè)備的內(nèi)核對UVC支持,安卓系統(tǒng)可調(diào)用JNI提供的接口函數(shù)利用已經(jīng)移 植的圖像庫和視頻庫來米集圖像和視頻。
[0030] 優(yōu)選地,所述USBHUB還包括一個供電接口。
[0031] 在本發(fā)明提出的一種基于安卓平臺利用多攝像頭進行圖像采集的系統(tǒng)和方法中, 通過0TG連接線,擴展一個HUB,將多個UVC攝像頭連接至此HUB上,通過針對多個攝像頭進行 驅(qū)動及應用開發(fā),實現(xiàn)能夠通過多個攝像頭同時進行圖像、視頻的采集,在圖像采集階段, 采用jpeg圖像格式,音視頻采集階段,采用Η. 264編碼和AAC音頻編碼,封裝為Mp4格式。本方 法擴展了安卓系統(tǒng)應用,方便用戶圖像采集,同時,利用多攝像頭進行圖像采集,也是進行 雙目測距、圖像拼接、防抖等方面算法開發(fā)的硬件基礎(chǔ)。本發(fā)明利用安卓0TG接口擴展多個 攝像頭,提出一種能夠不受0TG同時通信設(shè)備數(shù)目限制的方法,達到對兩個或者多個攝像頭 的支持,結(jié)構(gòu)簡單,擴展性強,操作方便,適用于公安執(zhí)法、視頻監(jiān)控及普通用戶拍照、錄像。 同時,用戶可以在本發(fā)明提出的多攝像頭圖像采集平臺的基礎(chǔ)上,對系統(tǒng)進行修改、開發(fā), 擴展更豐富的應用。
【附圖說明】
[0032]圖1是本發(fā)明的整體系統(tǒng)框架圖。
[0033]圖2是JNI完成C/C++層與JAVA層通信的框圖。
[0034]圖3是系統(tǒng)硬件連接示意圖。
[0035]圖4是正確連接手機后,打開ROOT工具的界面。
[0036]圖5是點擊獲取ROOT權(quán)限后,軟件對連接的手機進行權(quán)限破解的界面。
【具體實施方式】
[0037]基于安卓平臺多攝像頭圖像采集方法共有四個步驟,如圖1所示。下面是對這四個 步驟的詳細描述:
[0038]步驟一:系統(tǒng)開發(fā)軟、硬件平臺搭建
[0039]為了能夠進行安卓平臺多攝像頭開發(fā),需要準備相應的硬件設(shè)備,本發(fā)明需要多 個支持UVC的攝像頭102, 一臺安卓4.0以上平臺的安卓設(shè)備105, 一條0TG連接線104, 一個 USBHUB103。本系統(tǒng)通過0TG連接線104連接安卓設(shè)備105和USBHUB103,然后將多個UVC攝 像頭102連接至USBHUB103上,至此,硬件準備完畢。在軟件開發(fā)環(huán)境方面,我們基于Ubuntu 12.04系統(tǒng)通過利用eclipse進行開發(fā),配置安卓開發(fā)所需要的Java環(huán)境和安卓SDK。同時, 為了能夠進行C/C++函數(shù)及模塊的開發(fā)和調(diào)用,還需要配置NDK交叉編譯環(huán)境。
[0040] 為了保證安卓應用程序?qū)ν庠O(shè)正常通信,首先需要對安卓系統(tǒng)進行權(quán)限解鎖,也 稱作ROOT,這里只要使用網(wǎng)絡(luò)上提供的系統(tǒng)ROOT軟件即可簡單完成系統(tǒng)權(quán)限的解鎖。目前 安卓4.0以上平臺大部分都已經(jīng)提供了內(nèi)核對UVC的支持,解鎖完成后,插入攝像頭通過查 看系統(tǒng)terminal,如果有新設(shè)備產(chǎn)生,說明系統(tǒng)已經(jīng)提供UVC支持,如果沒有新設(shè)備的產(chǎn)生, 說明內(nèi)核沒有開啟攝像頭UVC功能,此時,需要通過刷新內(nèi)核開啟內(nèi)核對UVC的支持。例如在 三星s4手機上,部分機器需要開啟內(nèi)核對UVC的支持,在三星官網(wǎng)下載S4手機對應的內(nèi)核文 件,在Ubuntu系統(tǒng)下,通過命令makemenuconfig進行內(nèi)核配置如下:
[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形式,不需要在使用中進行驅(qū)動的插入,然后將內(nèi)核刷 入手機中。這個方法相對比較復雜,在使用中,用戶盡量選用內(nèi)核已經(jīng)提供UVC支持的安卓 手機或者pad,目前主流的手機大部分已經(jīng)提供該功能的支持。
[0048]步驟二:圖像壓縮庫、視頻壓縮庫移植
[0049]在進行音視頻編碼的過程,需要用到對應的編碼庫。在本發(fā)明中,視頻編碼采用了 開源的x264編碼庫,圖像編碼采用libjpeg實現(xiàn),音頻利用手機自帶的麥克風和編碼接口, 進行AAC音頻編碼。為了能夠在安卓平臺上使用x264和libjpeg開源庫,需要進行部分代碼 的修改和移植。首先,從網(wǎng)絡(luò)上獲取x264的開源實現(xiàn),在Ubuntu系統(tǒng)的終端中,進入x264代 碼的根目錄,其中提供了文件編譯需要的config文件,這里需要根據(jù)專利需要進行配置,首 先將x264編譯成后綴名為.a的靜態(tài)庫,然后在JNI編寫階段,調(diào)用該靜態(tài)庫,跟其他函數(shù)一 齊編譯成能夠被安卓系統(tǒng)調(diào)用的動態(tài)庫。針對libjped,進行與x264類似的交叉編譯獲取能 夠在安卓系統(tǒng)運行的靜態(tài)庫。獲取了視頻編碼和jpeg圖像壓縮需要的靜態(tài)庫之后,在進行 JNI編寫時,通過包含這兩個庫的頭文件,即可進行庫函數(shù)的調(diào)用。
[0050]圖像壓縮庫、視頻壓縮庫移植過程為:
[0051] (1)χ264編碼器Android平臺移植
[0052]本文使用的χ264版本為 1264-81^口811〇卜20131228-2245,_1(的版本:311辦〇1(1-ndk_r9,Ubuntu12.0432位系統(tǒng)編寫腳本文件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