<strike id="kiyse"></strike>
  • <tr id="kiyse"></tr>
  • <strike id="kiyse"></strike><samp id="kiyse"><tbody id="kiyse"></tbody></samp>
    <strike id="kiyse"><s id="kiyse"></s></strike>
    <tr id="kiyse"></tr>
    <noframes id="kiyse"><code id="kiyse"></code></noframes>
    <th id="kiyse"></th>
    <samp id="kiyse"></samp>
  • <th id="kiyse"><s id="kiyse"></s></th>
  • 英創Linux主板低成本網絡視頻監控實現方案

     2019-9-10     作者:黃志超         

      在工業現場實際的應用中,有很多場景僅需要監測單路視頻圖像,同時對系統成本更為敏感。針對這類的應用,我們推出了一套低成本的方案,即使用ESM7000系列主板來實現相應功能。ESM7000系列主板的CPU為雙核Cortex-A7,主頻1GHz的i.MX7D,并且有著低功耗的特點,因為CPU沒有專門的硬件視頻處理單元,所以售價比ESM6802便宜。與之前英創公司推出了基于ESM6802主板的多通道網絡攝像頭方案相比較,ESM7000方案屬于低成本應用方案,而ESM6802方案則主要針對需要同時顯示多路網絡攝像頭數據的用戶,利用CPU中專門的硬件視頻處理單元來處理多路數據的輸出。


      下面是對兩套方案主要性能的對比:


    主板型號ESM6802ESM7000
    CPU主頻雙核Cortex A9,1GHz雙核Cortex A7,1GHz
    支持網絡攝像頭顯示通道數最多可同時顯示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);


      例程運行效果截圖:


    英創Linux主板低成本網絡攝像頭實現方案.png

    亚洲视频国产精品| 中文字幕日韩专区精品系列| 国精品午夜福利视频不卡| 曰产无码久久久久久精品| 国语自产拍精品香蕉在线播放| 精品久久久久久久免费人妻 | 99er热精品视频| 久久精品视频观看| 亚洲第一永久AV网站久久精品男人的天堂AV| 亚洲精品国产手机| 免费精品久久天干天干| 国产精品无码aⅴ嫩草| 精品国产V无码大片在线看| 中日精品无码一本二本三本| 国产精品无码aⅴ嫩草| 99精品国产第一福利网站| 国产精品免费福利久久| 四虎影视精品永久免费网站| 无码成人精品区在线观看| 99热在线精品播放| 黑人精品videos亚洲人| 精品久久久久久无码中文字幕| 国产精品扒开腿做爽爽的视频| 久久伊人精品一区二区三区| 国产一精品一av一免费爽爽| 国产精品videossex白浆| 国产综合精品一区二区| 91情侣在线精品国产免费| 久久精品99久久香蕉国产色戒 | 国产三级精品三级在线观看| 国内精品福利视频| 国产1024精品视频专区免费| 91精品国产自产在线观看永久∴| 国产精品国色综合久久| 伊人久久国产精品| 久久久无码精品亚洲日韩软件| 国产精品一区二区综合| 国产欧美一区二区精品仙草咪| 日本尤物精品视频在线看| 久久Av无码精品人妻系列| 国产精品99精品久久免费|