天天看點

Linux網絡攝像頭裝置端調試過程

轉載請标明出處:https://blog.csdn.net/u013752202/article/details/96502576

簡介

        網絡攝像頭,即常說的免驅攝像頭,其采用UVC協定通過USB跟主機通信,因其不需要編寫單獨的驅動,友善使用而得到廣泛使用。

        主機端無論是windows還是linux使用UVC攝像頭都非常簡單,也有很多文章詳細介紹使用方法。但如何使自己的裝置變成一個網絡攝像頭,卻鮮有文章提及,本文重點分析如何建構一台網絡攝像頭。

硬體和軟體基礎

        硬體:一套帶有MIPI/DVP攝像頭模組和USB接口的嵌入式主機闆

        軟體:系統linux,MIPI/DVP驅動是通的(本文不做介紹)

系統結構

        網絡攝像頭涉及到兩套linux驅動架構,V4L2視訊采集架構,USB驅動架構。兩套架構在linux系統中已經非常成熟,我們隻需要會配置和應用就可以搭建出一個網絡攝像頭了。網絡攝像頭的系統結構如圖1所示。

Linux網絡攝像頭裝置端調試過程

                                                   圖1 網絡攝像頭系統結構

驅動配置

         網絡攝像頭系統結構分為兩部分,即驅動和應用。

         驅動又分為視訊采集驅動和視訊輸出驅動,如果隻想從檔案中讀取視訊然後通過USB傳輸到電腦上觀看的話,那麼視訊采集驅動不是必需的。

         視訊采集驅動的功能是通過i2c配置CMOS模組的寄存器并采集圖像資料,如果有需要編碼的話,還負責編碼資料。該驅動需要根據CMOS寄存器實作一個v4l2的子裝置即可。具體目錄為:drivers/media/i2c/soc_camera

         視訊輸出驅動配置

         在linux中已經實作了webcam的虛拟攝像頭驅動,隻要配置打開即可。這裡有兩種配置方法,linux原生驅動和Android usb驅動。這裡先介紹linux原生驅動。

Linux網絡攝像頭裝置端調試過程

                                         圖2 linux原生webcam驅動配置

         執行make menuconfig,按照圖2 webcam配置即可。配置完成後編譯kernel。源碼目錄位于:drivers/usb/gadget

應用編寫

         根據圖1結構圖,網絡攝像頭需要一個應用程式uvc_gadget來從視訊輸入裝置或者檔案中擷取視訊流,然後通過視訊輸出裝置向電腦或其他USB主機輸出視訊。

         視訊輸入裝置的打開、配置和讀取跟平常一樣操作,分為Open->format setting->request buffer(mmap) ->stream on->read frame->stream off。裝置緩存類型配置為:V4L2_BUF_TYPE_VIDEO_CAPTURE

         視訊輸出裝置會複雜一點,需要根據UVC建立連接配接的過程來配置和打開裝置,UVC的事件包括:CONNECT/DISCONNECT/SETUP/DATA/STREAMON/STREAMOFF。

其中虛拟攝像頭的配置需要在STREAMON的時候配置,STREAMOFF的時候關閉,否則隻能打開一次攝像頭,重新打開隻能重新插拔USB了。裝置緩存類型配置為:V4L2_BUF_TYPE_VIDEO_OUTPUT

         可以用select()監控視訊輸出裝置的事件狀态和寫狀态,當可寫時候,即可把視訊輸入裝置讀取到的視訊流填充到輸出裝置的緩存中,這樣電腦上就能看到畫面了。

Linux網絡攝像頭裝置端調試過程
Linux網絡攝像頭裝置端調試過程
Linux網絡攝像頭裝置端調試過程
Linux網絡攝像頭裝置端調試過程

網絡攝像頭源碼:待釋出……(可與作者聯系)

轉載請标明出處:https://blog.csdn.net/u013752202/article/details/96502576

繼續閱讀