1. 程式人生 > >把android 主機板打造成ip攝像頭

把android 主機板打造成ip攝像頭

好幾年沒有啟用csdn的帳號了,主要是具體技術工作做得少了點, 今天開始抽空增加一些技術文件,要重新回到程式設計師的懷抱。

專案的目標:把android 打造成為一個ip攝像頭。之所以用android,原因是現在速度快點的板子上的都是android系統,既然android是基於linux,理論上用v4l2直接從攝像頭取資料然後編碼生成rts流即可,但是麻煩的是編碼部分,方案廠家一般都不會提供針對linux的硬體編碼庫,作為ipc,不能用硬體編碼那麼就只能當玩具玩玩。所以專案要借用android編解碼庫完成這個工作。如果直接利用全套的android系統,利用網路上開源的android ipc也可以實現功能,不足就是我們的標準ipc對穩定性要求很高,最簡單的就是要能夠隨時斷電,android系統如果被頻繁斷電估計哪次開機小人就會一直向你招手,所以要對android系統進行改造,剔除掉所有不需求的應用,包括zygote,只啟動mediaservice這樣的基本服務。

專案的意義:雖然是針對ipc 進行設計,實際還是把android很強的運算能力開放給應用,比如利用多核效能去做影象識別領域,像人臉識別、車牌識別、工業中的一些利用影象的定位等。

系統組成:

硬體:android 板子,無顯示,帶網路,帶視訊輸入(模擬視訊/usb攝像頭等),帶485/232串列埠,帶gpio輸入輸出口。

軟體:andriod系統,遮蔽所有zygote啟動的服務,純c 編寫的應用程式去呼叫andriod的mediaservice 獲取攝像頭資料進行264編碼然後通過rtsp 傳送到網路。

思路:android的mediaservice接管包括攝像頭、音視訊編解碼庫等所有服務,編寫應用程式直接和這個服務進行通訊獲取資料,實現精簡版本的ipc板子。

實現:首先修改init.rc,把zygote服務停止掉------世界頓時安靜了,也簡單了。

下一步,編寫呼叫mediaservice的程式。

大致框架如下,


多核android的arm板子,android系統只剩下mediaservice幾個核心服務,剩下的包括ui等統統停用,單獨編寫純c/c++應用程式直接和mediaservice進行互動,從攝像頭獲取資料並進行編碼發給外部客戶用於預覽,同時提供原始的攝像頭資料給影象識別演算法進行影象識別。由於識別演算法的計算了很大,所有要利用多核處理器的效能來執行,如果多核處理器支援opencl的話那就更有利於提速了。