安卓 USB攝像頭 開源庫 UVCCamera 教程

来源:http://www.cnblogs.com/edzjx/archive/2017/06/29/7093761.html
-Advertisement-
Play Games

https://github.com/saki4510t/UVCCamera UVCCamera 聽名字就知道使用UVC( USB VEDIO CLASS) 協議的通用類庫。linux原生支持,基本支持市面上所有免區USB攝像頭。 此開源庫包含JNI及android封裝的類庫。是目前最好用的安卓US... ...


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的相關代碼


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近做了一個用canvas合成海報圖片的移動端項目,由於一點canvas基礎都沒有,所以去網上搜了一位前輩的demo,但是開發過程中遇到了很多問題,現將所遇問題及解決方法總結如下: 1、移動端canvas項目適配全屏問題 問題描述:由於canvas的width和height只能設置px值,不支持re ...
  • 恢復內容開始 覽器相容性問題是前端的一個重要部分。 在國內的瀏覽器中,360瀏覽器,QQ瀏覽器等絕大部分都是雙核瀏覽器。雙核瀏覽器即擁有IE相容內核和非IE極速內核兩個內核,分別對應相容模式和極速模式。相容模式時使用IE內核,極速模式採用webkit內核。而目前大部分網站為了性能和用戶體驗,預設使用 ...
  • 移動頁面經常會做到這樣一個效果,看下麵的圖片,重點就是那個固定定位的底部,裡面有個input輸入框,在輸入字元的時候,安卓手機看著是完全沒有問題! 1、頁面沒有點擊底部input的初始狀態 2、安卓手機下的樣子,一切都是那麼的正常,簡直是完美。 3、ios手機下,就是這麼任性,沒有辦法,完全擋著了, ...
  • 數據綁定的方法: 1、利用動態創建元素節點和把它追加到頁面中的方式實現數據綁定(將動態添加的li添加到ul中) 優勢:把需要動態綁定的內容一個個的追加到頁面中,對原來的元素沒有任何的影響 弊端:每當創建一個li,我們就添加到頁面中,引發一次DOM的迴流,最後引發迴流次數過多,影響我們的性能。 2、字 ...
  • 目錄: 一、介紹 二、node安裝 三、webstorm配置node環境 四、代碼介紹 五、如何使用 六、自定義功能變數名稱 七、其他 一、介紹 1、背景 日常工作中,跟後端商定好介面格式後;通常採用的開發方式,就是自己新建一個json文件,手動的模擬一批數據,進行ajax調用。 但是如果遇到後端提供的介面 ...
  • 浮動 會使當前標簽產生上浮效果,從而導致父標簽高度塌陷的問題 1. 給父元素指定高度 <div style="height:200px"> <div style="float:right"></div> </div> 簡單粗暴!高度不定時,如果內部高度大於父級時,容易產生問題 2. 在浮動元素後邊添 ...
  • appcan的 uexXmlHttpMgr.send 或者 appcan.ajax無法同步請求(沒有找到這個屬性),只能非同步,造成迴圈多次提交時由於延遲或網路堵塞等原因無法同步響應,導致提交順序混亂,執行完後回調錯誤或丟數據,如傳統方法(這裡已經引用的JQ包) 1 var data=[]; 2 va ...
  • 編寫存儲過程分頁(此處使用T-SQL) 1 CREATE PROC [dbo].[Common_PageList] 2 ( 3 @tab nvarchar(max), 表名 4 @strFld nvarchar(max), --欄位字元串 5 @strWhere varchar(max), --wh ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...