在工業現場實際的應用中,有很多場景僅需要監測單路視頻圖像,同時對系統成本更為敏感。針對這類的應用,我們推出了一套低成本的方案,即使用ESM7000系列主板來實現相應功能。ESM7000系列主板的CPU為雙核Cortex-A7,主頻1GHz的i.MX7D,并且有著低功耗的特點,因為CPU沒有專門的硬件視頻處理單元,所以售價比ESM6802便宜。與之前英創公司推出了基于ESM6802主板的多通道網絡攝像頭方案相比較,ESM7000方案屬于低成本應用方案,而ESM6802方案則主要針對需要同時顯示多路網絡攝像頭數據的用戶,利用CPU中專門的硬件視頻處理單元來處理多路數據的輸出。
下面是對兩套方案主要性能的對比:
主板型號 | ESM6802 | ESM7000 |
CPU主頻 | 雙核Cortex A9,1GHz | 雙核Cortex A7,1GHz |
支持網絡攝像頭顯示通道數 | 最多可同時顯示1路,可以支持多路切換 | 最多可同時顯示4路,可以支持多路切換 |
百片價 | ¥710/片 | ¥540/片 |
因為ESM7000系列主板的CPU沒有硬件視頻處理單元,而網絡攝像頭傳輸過來的數據是通過了編碼(常見的H.264、MPEG-4、MJPEG等格式)的,所以需要使用軟件來進行解碼,利用軟件解碼相對來說需要消耗一定的CPU資源,并且無法支持多路攝像頭數據的拼接顯示,所以只能夠同時支持一路攝像頭數據的顯示。
實現軟件解碼的庫已經在主板中移植好了,用戶可以直接使用,經過我們測試,采用200W像素網絡攝像頭(1920×1080)和分辨率為1024×600的屏幕,將單路攝像頭數據通過軟件解碼后以分辨率800×450輸出到顯示窗口中,消耗的CPU資源大約為20%左右,內存(1GB)為4%左右。可以看出對于ESM7000系列主板來說,并沒有占用太多的硬件資源,同時還能夠進行其他的控制操作,比如配合網絡攝像頭廠商提供的API函數實現截圖,上傳,錄像等。
軟件上同樣還是使用gstreamer和Qt來實現,ESM7000系列主板的文件系統中已經集成了gstreamer和Qt5.8相關的庫和工具,并且包含了處理網絡攝像頭通訊協議rtsp和使用軟件編解碼的插件,而gstreamer能夠支持多種圖形系統包括Qt。所以利用gstreame能夠快速方便的獲取網絡攝像頭的數據并顯示到Qt界面中,關于gstreamer的詳細介紹,可以參考網站https://gstreamer.freedesktop.org/documentation/index.html?gi-language=c。
在實現ESM6802主板多路網絡攝像頭方案中,英創公司通過庫文件libemgst.so提供三個API函數和一個包含網絡攝像頭信息的結構體變量。在此基礎上,我們將ESM7000系列板卡的支持也添加進去了,對于用戶來說使用的API函數完全相同,唯一一點區別是ESM7000系列板卡只能同時支持一路網絡攝像頭的數據顯示。庫文件內部會自動判斷板卡型號,并進行對應的處理,用戶只需要專注于應用程序的開發和界面的設計上面。
關于API函數和例程在《ESM6802主板支持多路網絡攝像頭》已經有了詳細的介紹,因為API函數是相同的,所以可以使用相同的例程代碼測試,只需要更換對應的工具鏈重新編譯即可,詳細的資料可以參考《ESM6802主板支持多路網絡攝像頭》。我們在這里重復說明一下API函數的定義,方便用戶查詢:
/** * 初始化gstreamer * * 本函數在C的main函數中調用,將會初始化gstreamer庫 * * 參數說明: * 使用main函數的兩個參數填入,gstramer初始化時需要讀取main函數的兩個參數 * * 返回值說明: * 無返回值 * */ void init_emgst(int argc, char **argv); /** * 包含網絡攝像頭設備信息的結構體 * 訪問網絡攝像頭需要有ip地址,用戶名和密碼。如果是播放錄像文件,還需要填入 * 錄像文件的地址,如果是播放實時數據,路徑填寫為NULL即可。 * * 參數說明: * ip:指向網絡攝像頭ip地址的指針 * user:指向網絡攝像頭的用戶名的指針 * passwd:指向網絡攝像頭密碼的指針 * file:指向錄像文件路徑的指針,如果播放實時圖像,賦值為NULL * */ typedef struct _Rtsp_config { char *ip; char *user; char *passwd; char *file; } Rtsp_config; /** * 配置gstreamer,并顯示到指定Qt窗口 * * 函數會配置gstreamer,顯示多個網絡攝像頭的數據到xwinid所指定的窗口,窗口的大 * 小通過參數width和height來確定,而網絡攝像頭的信息由指針rtsp_config傳入,listsize * 指定同時顯示的通道數量。因為要動態建立網絡攝像頭的連接,函數不會退出,所以 * 需要在線程中調用。 * * 參數說明: * xwinid:Qt窗口的id號,每一個窗口類中都包含這個成員變量。 * width:顯示視頻數據所使用的窗口控件的寬度,單位pixel * height:顯示視頻數據所使用的窗口控件的高度,單位pixel * rtsp_config:指向設備信息結構體的指針,通常是一組包含設備信息的結構體指針。 * 詳細解釋可以查看對結構體Rtsp_config的說明 * listsize:ESM7000系列主板視頻通道數最多支持同時顯示1路,超過1路會返回-1報錯。 * * 返回值說明: * 0 表示正常退出gstreamer * -1 表示填入參數出現錯誤,啟動gstreamer失敗 * */ int config_emrtsp(unsigned int xwinid, int width, int height, Rtsp_config *rtsp_config, int listsize); /** * 關閉gstreamer,釋放資源 * * 函數會關閉gstreamer輸出,并釋放相關資源 * * 返回值說明: * 無返回值 * */ void release_emrtsp(void); |
例程運行效果截圖:
-
嵌入式主板
+關注
關注
7文章
6086瀏覽量
35619
發布評論請先 登錄
相關推薦
評論