雙目攝像頭的實時圖像傳輸-Pcduino平台下的智能小車


一、Mjpg-Streamer開源庫

由於開發實時視頻推送系統,可能會涉及到流媒體服務器的實現,但是通過“MJPG-streamer”開源工具可以快捷地實現。“MJPG-streamer”是成熟的輕量級的視頻服務器軟件,可以利用它獲取攝像頭畫面然后發布在實時視頻服務器。MJPG-streamer采用模塊化的設計思路,包括輸入模塊和輸出模塊,輸入模塊定義了輸入來源,比如攝像頭、文件等等,MJPG-streamer然后將視頻通過輸出模塊輸出,比如有http等網絡輸出,也有文件的本地輸出[8]。

本文采用支持UVC協議的雙目攝像頭作為圖像數據的輸入來源,選用http協議推送視頻流,所以涉及的組件有output_http輸出組件和input_uvc輸入組件。通過MJPG-streamer,可以方便地將pcDuino上雙目攝像頭的視頻通過http協議推送。

二、實現與測試

使用MJPG-streamer庫開發實時圖像傳輸系統方便高效,其安裝命令如下:

sudo apt-get install cmake libjpeg8-dev -f
sudo mkdir -p /home/workspace/mjpg-streamer
cd /home/workspace/mjpg-streamer
sudo git clone https://github.com/jacksonliam/mjpg-streamer.git
cd mjpg-streamer/mjpg-streamer-experimental/
sudo make && sudo make install

安裝完畢可以使用命令:

mjpg_streamer -i "input_uvc.so -d /dev/video0 -y -r 1280x480 -f 10" -o "output_http.so -p 8090 -w /var/www/mjpg_streamer"

mjpg_streamer安裝后可作為系統服務啟動,同時配置輸入輸出參數才能正常工作。在上述命令上涉及以下命令:

-i "input_uvc.so -d /dev/video0 -y -r 1280x480 -f 10"部分是輸入參數,

  • so表示使用input_uvc.so作為輸入模塊
  • -d /dev/video0 定義了訪問的攝像頭的設備路徑為/dev/video0。
  • -r 1280x480 定義了攝像頭的分辨率為1280x480
  • -f 定義了實時視頻的幀率為每秒10幀
  • -y 表示啟用mjpg_streamer的YUV模式。由於mjpg_streamer處理的視頻數據格式為MJPEG,而本設計采用的攝像頭是YUV格式,啟用mjpg_streamer的YUV模式就是為了兼容攝像頭的視頻流格式。

-o "output_http.so -p 8090 -w /var/www/mjpg_streamer"部分是輸出參數,

  • so表示使用output_http.so作為輸出模塊
  • -p定義了http輸出端口為8090
  • -w 定義了http服務的根目錄

在命令行中啟動后如下:

 

【5】雙目攝像頭的實時圖像傳輸-Pcduino平台下的智能小車

啟動mjpg_streamer視頻服務器后,可以在Chrome瀏覽器中輸入智能車的IP和服務端口測試。mjpg_streamer默認視頻端口是8090,當然也可以在啟動參數進行設置。

假設智能車IP為192.168.137.2,則可訪問http://192.168.137.2:8090/?action=stream訪問動態的視頻流,訪問http://192.168.137.2:8090/?action=snapshot訪問靜態的抓拍圖片。

當在瀏覽器訪問上面的URL時,瀏覽器實際上渲染的頁面源代碼是:

<img src=”http://192.168.137.2:8090/?action=snapshot ”/>

<img src=”http://192.168.137.2:8090/?action=stream”/>

也就是說瀏覽器使用了img圖片標簽顯示雙目攝像頭視頻,值得注意的是即使是當action參數為stream時,這個img標簽竟然可以持續地、動態地拉取和顯示來自與服務器的視頻流,這是一件很有趣的現象:

【5】雙目攝像頭的實時圖像傳輸-Pcduino平台下的智能小車

當然,使用img標簽顯示動態視頻流並不是在所有瀏覽器都得到支持,例如IE就不行。

為了研究img標簽顯示視頻流問題,可使用Chrome調試工具“審查元素”對這個HTTP請求進行分析:

【5】雙目攝像頭的實時圖像傳輸-Pcduino平台下的智能小車

依上圖所示,根據這個HTTP請求的響應頭,可以知道其文件擴展名Content-Type(Mime-Type)為multipart/x-mixed-replace。

HTTP超文本協議中,HTTP請求的響應消息由狀態行、消息報頭、正文組成 [10] ,其中消息報頭是一些描述響應數據的描述性信息,包括服務器信息、狀態碼、緩存控制策略等等,其中包括的Content-Type(Mime-Type)是為了告知瀏覽器當前傳輸數據的數據格式、類型。

Web服務器在響應客戶端的HTTP請求時,返回的數據使用MIME報文格式進行封裝。一般來說,一個HTTP響應只能包含一個數據塊,但是,MIME有一種特殊的MIME類型:“multipart/mixed”, 這種MIME類型可用一個HTTP響應數據塊來表示多個數據塊。其中 multipart/x-mixed-replace MIME類型就是 “multipart/mixed”中的一種,其中 “replace”表示每一個新數據塊都會代替前一個數據塊,這告訴瀏覽器,這種類型的新數據塊不是追加到舊數據塊后面,而是替代它[15]。本文中瀏覽器中img標簽顯示視頻流也正是這個原因,它意味着視頻圖片幀會被不斷刷新,最后形成連貫的視頻。

https://wangbaiyuan.cn/5-of-binocular-camera-pcduino-real-time-image-transmission-platform-of-smart-car.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM