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