安卓 USB網路攝影機 開源庫 UVCCamera 教程

來源:互聯網
上載者:User

標籤:通用   roi   服務   set   acl   弱引用   over   網路攝影機   block   

https://github.com/saki4510t/UVCCamera

UVCCamera 聽名字就知道使用UVC( USB VEDIO CLASS) 協議的通用類庫。linux原生支援,基本支援市面上所有免區USB網路攝影機。

此開源庫包含JNI及android封裝的類庫。是目前最好用的安卓USB網路攝影機類庫。

 

UVCCamera來控制、管理與外接裝置的串連,
UVCCamera.setFrameCallback(final IFrameCallback callback, final int pixelFormat)擷取每一幀資料;

 PIXEL_FORMAT_RAW = 0;
PIXEL_FORMAT_YUV = 1;
PIXEL_FORMAT_RGB565 = 2;
PIXEL_FORMAT_RGBX = 3;
PIXEL_FORMAT_YUV420SP = 4;
PIXEL_FORMAT_NV21 = 5;

UVCCameraTextureView控制項進行映像的預覽,

USBMonitor進行驅動的串連和斷開

 

UVCCamera Test4 類的耦合性很差

Test4是在後台服務中操作網路攝影機,而後台服務與前台進程不是同一個進程名,所以通過aidl進行service的ibinder對象的定義,並通過aidl定義的介面,生產的ibinder對象來操作後台服務。而網路攝影機的操作又不直接在service中操作,service負責偵測USB的連結情況,在usb串連到裝置後台,建立一個handler(cameraserver)來操作網路攝影機。

 

要增加一個網路攝影機的操作,要疊層好幾層才能封裝完畢。類與類之間的依賴很嚴重!!!覺得作者設計的有問題。為了增加一個網路攝影機操作,我一共要花8個步驟才能添加完整。

 

 

1.在CameraServer—>CameraThread 添加相關操作
注意:操作網路攝影機的實際的操作是CameraServer(handler類)-->CameraThread(類)。
互相參考關聯性:CameraServer的執行個體通過弱引用WeakReference引用期內部類CameraThread的執行個體;CaeraThread通過強引用即直接引用的方式引用其外部內CameraServer執行個體

2.在CameraServer(handler)類裡添加handler處理,通過handler發送Message,調用CameraServer-->CameraThread類中的操作

1)在CameraServer類中添加發送Message時的MessageType常量

2)在CameraServer#handleMessage()方法裡添加處理增加的MeassageType常量的處理方式,類似thread.xxxx()

3)添加相關操作方法,用於封裝對應MeassageType常量,CameraServer#handleMessage()的方法。

3.在IUVCService.aidl中添加相關方法聲明
注意:IUVCSerice.aidl定義的介面就是UVCService反饋的ibinder,因為服務於前台UI的進程名不一樣,所以用AIDL定義的介面,引用UVCService的ibinder對象。用於用戶端Cameraclient訪問。

4.UVCService#mUSBMonitorUVCService#mBasicBinder4.在UVCService中對UVCService#mBasicBinder匿名類執行個體,overrid實現IUVCService.aidl中添加的方法聲明。
注意:UVCService是控制USB裝置的後台服務,通過UVCService#mUSBMonitor監控USB裝置,UVCService#mOnDeviceConnectListener(UVCService#mUSBMonitor的回調)#onConnect()時初始化一個CameraServer執行個體並塞入UVCService#sCameraServers集合中。UVCService#mUSBMonitor所有所有操作都在UVCService主線程上。UVCService#sCameraServers#CameraServer是真正操作USB網路攝影機的Handler類,而用戶端CameraCilent通過UVCService#mBasicBinder調用UVCService#sCameraServers#CameraServer,從而調用UVCService#sCameraServers#CameraServer#CameraThread操作網路攝影機.

 

5.在CameraClient#CameraHandler(handler類,CameraClient的靜態內部類)#CameraTask(Thread類,CameraClient#CameraHandler的靜態內部類)中添加調用IUVCSerice.aidl添加方法的方法。
注意:CameraClinet是對應前台UI的操作後台服務的類,CameraClient通過handler類發送message的方式讓線程類CameraTask實際操作後台服務。

6.在CameraClient中添加對應操作服務的MessageType常量

7.在CameraClient#CameraHandler(handler類,CameraClient的靜態內部類)#handleMessage()方法中添加處理CameraClient#MessageType常量的代碼

8.在View中添加操作cameraClinet的相關代碼

安卓 USB網路攝影機 開源庫 UVCCamera 教程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.