因為 MJPG-streamer 在 Raspberry PI 中並沒有已編譯好的 package ,所以我們只好自己抓 source 來編譯。
準備編譯環境
首先要準備好編譯所需的環境,登入 Raspberry PI 以後,執行底下的安裝指令安裝一些必要的 packages:
sudo apt-get update
sudo apt-get install subversion
sudo apt-get install libjpeg8-dev
sudo apt-get install imagemagick
抓 source 並編譯
接著我們利用 SVN 將 MJPG-streamer 的 source 抓回來,執行底下的指令:
svn co https://mjpg-streamer.svn.sourceforge.net/svnroot/mjpg-streamer mjpg-streamer
source 抓回來後,切換到裡面並開始進行編譯,依序執行底下的指令:
cd mjpg-streamer/mjpg-streamer
make
如果編譯成功,目錄中應該會多出類似:mjpg_streamer , input_uvc.so , output_http.so ......,其中的 mjpg_streamer 是主程式,而那些 input_xxxx.so 、output_xxxx.so 則是輸出、輸入的 plugins。有了這些檔案,我們就可以將 Webcam 插入 Raspberry PI 的 USB 插槽中來測試了。
進行測試
將 Webcam 插入 USB 以後,我們可以利用「lsusb」這個指令來查看 Raspberry PI 是否抓到硬體了,類似底下的訊息:
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Bus 001 Device 007: ID 0c45:6310 Microdia Sonix USB 2.0 Camera
最後一行 (Device 007) 是我的 Webcam。
接著我們在剛剛編譯程式的目錄中執行底下的指令:
./mjpg_streamer -i "./input_uvc.so" -o "./output_http.so -w ./www"如果出現的訊息是像我這樣:
MJPG Streamer Version: svn rev: 3:172
i: Using V4L2 device.: /dev/video0
i: Desired Resolution: 640 x 480
i: Frames Per Second.: 5
i: Format............: MJPEG
Unable to set format: 1196444237 res: 640x480
Init v4L2 failed !! exit fatal
i: init_VideoIn failed
有類似「Unable to set format: 1196444237 res: 640x480」這行的訊息,表示 Webcam 不支援輸出 MJPEG 的格式,那就在指令裡加個「-y」的參數,讓它改用 YUYV 的格式。指令變成:
./mjpg_streamer -i "./input_uvc.so -y" -o "./output_http.so -w ./www"
如果 stream server 正常啟動的話,應該會在最後面看到底下的訊息:
o: www-folder-path...: ./www/
o: HTTP TCP port.....: 8080
o: username:password.: disabled
o: commands..........: enabled
如何看 Webcam 抓到的影像呢?我們可以利用由 MJPG-streamer output_http.so plugin 所提供的 HTTP server ,用網頁瀏覽器來當 client,以底下的網址觀看 Demo 的網站(假設 Raspberry PI 的 IP 為 192.168.2.1):
http://192.168.2.1:8080/在這個 MJPG-streamer Demo Pages 中,我們可以看到它示範靜態影像的顯示、stream、Java、Javscript ...... 的語法,可以依需求選用。
另外,我們也可以用類似 VLC 這種有支援 Motion JPEG Video (MJPG) 編碼的播放器來看,觀看的網址如下:
http://192.168.2.1:8080/?action=stream
服務啟動了卻看不到影像
如果 streamer server 好像啟動了,卻仍然看不到影像,只好像我一樣,把解析度降低。
先按「Ctrl + C」中止服務程式,然後再加入「-r」的參數,例如,將啟動指令改為:
./mjpg_streamer -i "./input_uvc.so -y -r QSIF -f 15" -o "./output_http.so -w ./www"
這樣,影像解析度變為 160x120 (QSIF) ,程式回應的訊息如下:
MJPG Streamer Version: svn rev: 3:172
i: Using V4L2 device.: /dev/video0
i: Desired Resolution: 160 x 120
i: Frames Per Second.: 15
i: Format............: YUV
i: JPEG Quality......: 80
-r 的參數後面可以使用底下的關鍵字:
- QSIF
- QCIF
- CGA
- QVGA
- CIF
- VGA
- SVGA
- XGA
- SXGA
也可以使用數字來自訂解析度: ??? x ??? (例如:240x200),基本上如果影像出不來,可以改變 -r 和 -f ,將數字減小一點試試。
其它參數
輸入的 plugin input_uvc.so 除了前面提過的 -y 、-r 參數以外,還有其它可設定,例如:
- -d : 用來指定要使用哪一個 Webcam,預設是使用 /dev/video0
- -f : 用來設定每秒鐘要抓多少 frames,預設是 5 frames/sec。
- -q : 用來設定 JPEG 的品質(百分比),預設是 80。
輸出的 plugin 除了前面指令中用的 -w 參數以外,還可以使用底下的參數來自訂組態:
- -w : 指定 MJPG-streamer HTTP server 網頁儲存的目錄名稱。
- -p : 指定 HTTP server 要在哪一個 TCP port 提供服務,預設為 8080
- -c : 設定 client 連線時要經過帳號密碼驗證過才可以觀看影像,例如 -c abc:123
- -n : 不包含讓 client 透過 HTTP 來控制 Webcam 參數的功能。
相關文章
謝謝~
回覆刪除满天都是用motion做的,终于有人分享用mjpeg streamer做的了,多谢
回覆刪除您好, 請問在有接樹莓派的案子嗎?
回覆刪除您好:
刪除抱歉,電腦方面並不是我的工作,Raspberry PI 純屬興趣,玩一玩而已。
先生你好
回覆刪除照著你的流程我成功的啟動CAMERA
但出現
o: www-folder-path...: ./www/
o: HTTP TCP port.....: 8080
o: username:password.: disabled
o: commands..........: enabled
這樣就不能繼續打指令只能ctrl+C
但我想要同時開著攝影機又能同時打指令
還是說有什麼指令能關掉網路攝影機
您可以開別的 console 來 login , 再繼續下指令進行別的操作, 或者是在原本的指令後加個 & 讓它變成背景執行。我的話, 會用前者。
刪除請問如果解析度不管更改多少,當我進入stream頁面,它就會顯示頁面錯誤的訊息,是什麼原因
刪除請問我要如何將 Webcam 抓到的畫面從網頁上傳到opencv做處理
回覆刪除請問,有辦法在同一個port啟動二台webcam?利用變數切換觀看畫面
回覆刪除