[Raspberry Pi]_幫Pi裝上Webcam做stream server即時傳輸監控影像
其實這個應用已經被講到爛了
但我還是打一份更新版的
順便解釋一下Motion到底跟mjpg-streamer 之間有啥關係
並且筆記一下我一連串搞懂整個運作流程以及問題解決的部分
- 一台Pi
- 一個webcam (這裡我是用Logitech C310)
- 還有一台有帶電源供應的USB HUB
先講為何要特別多了一個USB HUB
原因是因為我在一開始就碰壁,手上的PI是最早期的版本
C310直接插在上面會出現飄渺不定的問題
有時候抓的到,有時候抓不到
但可以確定的是就算抓的到,但是位置仍然無法讀取(也就是內部的IC供電還是有問題)
所以若有以上情況,請打0800092000(大誤,建議裝個hub並且提供外部電壓
接下來讓我們進入正題…,
以上硬體設備設置OK後
下lsusb確定一下系統有抓到你的WebCam
pi@raspberrypi ~ $ lsusb
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 005: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 004: ID 0b05:1786 ASUSTek Computer, Inc. USB-N10 802.11n Network Adapter [Realtek RTL8188SU]
Bus 001 Device 006: ID 046d:081b Logitech, Inc. Webcam C310
可以看到有抓到裝置了
如果有,那就接著下一步
如果沒有,試看看供電的hub,但如果供電hub都不行,那你有理由去買新的webcam了
(官方相容列表參照: http://elinux.org/RPi_VerifiedPeripherals)
接著處理軟體的部分,首先以下會介紹兩個軟體,
第一個是mjpg-streamer
第二個是motion
前者的功用是單純讓webcam能夠串流網路化,簡單來說就是把Raspberry Pi轉成本篇文章的用途:
Webcam server
因為透過專用的解碼器,所以能夠讓Raspberry Pi解到還算不錯高解析度跟畫格速率的程度。
後者的功用有點像是監視器的動態捕捉,會依照間隔時間(聽說可以調,自己感覺是2~3秒一張),做jpeg格式的照片快照。很適合當作監視保全用途,也較錄影的方式省空間。
為何要兩者一起提?,因為其實這兩者是相輔相成的,
因為motion原生帶起來webcam的解析度非常的低,而且品質也很差…
接下來要講的做法就是讓mjpg-streamer讀取webcam影像,透過專用解碼器取得高解析度跟清晰畫質的串流視訊源,在讓motion去抓取該stream來做定時監視捕捉的功用。
以上大概為此篇主要的目的。以下終於進入正題啦
首先要先把mjpg-streamer裝起來,但不要從sourceforge網頁抓r63的版本,那其實是較舊的版本,若抓那個版本,會有個.h檔無法compiler成功(但就算是這樣,仍然可以用毫無影響主要功能,但不爽!)
所以要先從放在sourceforge上的mjpg-streamer專案透過svn抓下來
有兩個方式,你要用電腦抓在copy過去
或是透過raspberry Pi都可以
我這裡是在pi上裝svn直接裝:
sudo apt-get install subversion
接著把最新版的streamer抓下來(pi做這件事情會有點小慢)
svn co https://mjpg-streamer.svn.sourceforge.net/svnroot/mjpg-streamer mjpg-streamer
svn co https://svn.code.sf.net/p/mjpg-streamer/code/ mjpg-streamer
然後先別急著進去make,有幾個套件還要跟著裝上,才不會缺東缺西:
sudo apt-get install libjpeg8-dev
sudo apt-get install imagemagick
這時可以進去裏頭的目錄開始make
cd mjpg-streamer/mjpg-streamer
sudo make
如果很不幸的你出現了少了videodev.h這個檔案
其實是個誤會,只要把第二版的videodev做個軟連結就好(沒出現缺少videodev.h的人不用打這條)
sudo ln -s /usr/include/linux/videodev2.h /usr/include/linux/videodev.h
如果編譯沒問題,那就一樣在相同目錄底下測試
./mjpg_streamer -i “./input_uvc.so” -o “./output_http.so -w ./www”
如果正確啟動(終端機當然些不要按掉)
到網址列key入你Pi的ip位置,加上port 8080
就可以看到以下畫面:
以我測試的羅技c310
最高可以支援到1280*960 @ 30fps
所以我可以這麼下:
./mjpg_streamer -i “./input_uvc.so -f 30 -r 1280×960” -o “./output_http.so -w ./www”
其中解釋一下參數,input_uvc.so後面帶的參數有以下幾種:
-d => 手動指定要取得哪個裝置的訊號(例如/dev/video0,預設不指定就是這個)
-r => 解析度,可以用以下字串直接帶入QSIF QCIF CGA QVGA CIF VGA SVGA XGA SXGA。或者你也可以手動塞進去例如1920*1080
-f => fps,不用解釋了吧
-y => 有些cam止吐YUYV格式,不支援吐mjpg的格式,如果你在開起攝影機有些狀況,可以試試看下一下這個參數
-q => 手動指定YUYV格式的JPEG品質,預設是80,如果你的裝置是支援mjpg,但還手動去指定他…可能會被換成YUYV格式輸出,這時候畫面可能會變得極度Delay..(畫質也不會比mjpg好…)
-l => 手動指定cam的led是否要亮(有些不一定會有用),後面可以接on或者off或者blink,沒指定則為auto
另外output_http.so帶的參數有:
-w => 後面接要開串流網頁的畫面(預設是放官方demo畫面)
-p => 就…要開到幾port,預設8080
-c => 看要不要啟動帳號管理功能,如果要,則後頭接 username:password(例如 –c jack:12345)
-n => 關閉可以執行的命令(例如設定攝影機曝光值等等)
有些mjpg-streamer可以自動偵測訊息的cam,若你隨便亂打解析度,他則會自動尋找並且降到該攝影機的最大支援解析度上限接著開起stream server
若沒有,可能就會無法看到影像
一開始建議不清楚最大解析度的人,可以從小的慢慢try到大的
還有官方其實有在該目錄底下有一個start.sh腳本,裡面會有一些指令
但其實你可以把你try到最後最滿意的指令給塞進去~~~,配合外部開機bash檔開機自動開啟mjpg-streamer.
我這裡配上c310真的很完美
畫質又很好,stream的情況下幾乎畫格都在20~30之間,非常流暢
若你的mjpg-streamer可以順利且流暢的運行,先別把它ctrl+c結束掉。
先開另外一個連線進入motion結合的部分
首先裝上motion
sudo apt-get install motion
接著編輯motion的編輯檔
sudo vi /etc/motion/motion.conf
在檔案前半段可以找到(善用vi搜尋功能)
daemon off
改為
daemon on
還有約414行的
webcam_localhost on
改為
webcam_localhost off
來啟動服務跟讓非local端的連線能夠進入
還有要找到netcam_url(約在86行) ,把註解拿掉
變成netcam_url http://localhost:8080/?action=stream
這樣才能讓motion吃到剛剛我們做mjpg-streamer
再來就是你必須把8080 port(motion預設管理攝影機的頁面)給換掉
這樣才不會跟上面mjpg-streamer的port衝到(也可以改mjpg-streamer啦,看心情決定)
約在427行處
control_port 8080
附近也有motion畫面的listen port,名為webcam_port
看你要改成8085之類的都可以~,不要疊到就好
最後一步就是把motion常駐服務給開啟(也可以不要,這樣開機不會自己啟動)
vi /etc/default/motion
裡面只有一行:
start_motion_daemon = yes
儲存離開後,就可以啟動motion了
sudo service motion start
去遊覽器裡面看看8081port吧!
因為我解析度相對高,所以右下角的字就變小了@@
一系列的做法做下來
會比單純安裝motion所取得的畫面還來的更清楚喔!
以上!
Thx for:
主要的翻譯內容– http://wolfpaulus.com/jounal/embedded/raspberrypi_webcam
Subversion部分– http://www.jeremymorgan.com/tutorials/raspberry-pi/raspberry-pi-how-to-svn-server/
進階的討論串– http://www.raspberrypi.org/phpBB3/viewtopic.php?p=164539
mjpg-streamer+motion的方法– http://www.lavrsen.dk/foswiki/bin/view/Motion/MjpgStreamer
最一開始motin解析度很差,第一個找到的頁面,引導我到後面的步驟– http://www.raspberrypi.org/phpBB3/viewtopic.php?f=30&t=19784
這篇是用r63版本(舊版的)做的– http://blog.miguelgrinberg.com/post/stream-video-from-the-raspberry-pi-camera-to-web-browsers-even-on-ios-and-android
這篇有一些motion的參數說明– http://www.slblabs.com/2012/09/26/rpi-webcam-stream/
這篇也講motion,但有點解略– http://techspect.co.uk/2013/how-to-raspberry-pi-webcam-server-stream/
還是講motion- http://pingbin.com/2012/12/raspberry-pi-web-cam-server-motion/
另外就是我做完才查到的雄大文章(靠,早點查我就不會走冤枉路XD)- http://gsyan888.blogspot.tw/2013/04/raspberry-pi-webcam-server.html、http://gsyan888.blogspot.tw/2013/04/raspberry-pi-webcam-mjpg-streamer.html
問一個很蠢的問題
可以 mjpg-streamer 跟 motion 一起使用嗎?
版主回覆:(08/19/2014 05:56:31 PM)
可以,本文章就是這樣
讓MOTION去抓MJPG-STREAMER的訊號源
感謝答復,再問一個很蠢的問題
可以有錄影的功用嗎?
版主回覆:(08/28/2013 04:48:57 AM)
有,但我沒試過
好像要透過其他套件
請問『svn co https://mjpg-streamer.svn.sourceforge.net/svnroot/mjpg-streamer mjpg-streamer』之後會出現『svn: E175011: Repository moved permanently to ‘https://svn.code.sf.net/p/mjpg-streamer/code/!svn/vcc/default’; please relocate』
這是怎麼了??謝謝。
版主回覆:(08/29/2013 03:43:57 AM)
代表https://mjpg-streamer.svn.sourceforge.net/svnroot/mjpg-streamer mjpg-streamer這個repo換位置到
https://svn.code.sf.net/p/mjpg-streamer/code/!svn/vcc/default了
改成
svn co https://svn.code.sf.net/p/mjpg-streamer/code/!svn/vcc/default
你試看看吧
改了之後他卻出現 -bash: !svn/vcc/default: event not found
這是??謝謝。
剛剛google到一個解決方法,也順利的可以看了
wget http://lilnetwork.com/download/raspberrypi/mjpg-streamer.tar.gz
tar xvzf mjpg-streamer.tar.gz
http://www.raspberrypi.org/phpBB3/viewtopic.php?f=38&t=48597
非常感謝您的這篇教學文~~~~~
版主回覆:(09/14/2013 12:26:33 PM)
恩恩!確實我朋友也問我這個問題,
就直接把你的回覆給他參考確定沒問題~~
也謝謝您的回報 ^_^
您好,請問一下~
是不是直接輸入網址 http://localhost:8080/?action=stream
也會有東西呢?
如果沒東西,motion 也會載不到東西,是嗎?
因為我安裝了 mjpg-streamer 成功的,可以看到 照片& 動畫
但陸續就了 motion (我改成 8081) 卻找不到說
可以請教一下,有可能的原因嗎?
非常感謝您的文章教學
版主回覆:(10/17/2013 05:26:04 PM)
你那串網址必須要在pi自己的browser打才會有用喔~
以及如果你是透過區往ip或者在pi底下打你上面那串網址
基本上如果mjpg-streamer有裝妥,是會有東西的
你檢查一下會不會是mjpg-streamer指令打錯或者被結束掉了
您好:
mjpg-streamer 都成功了,就是motion有点问题,用ipad的safari可以看到,但是电脑上IE和chrome都打不开,感觉很诡异?网上查不到原因?
版主回覆:(10/17/2013 05:29:33 PM)
您好,你有嘗試換別台電腦或者機器連線嗎?
最近在做視訊遙控車剛好查到這篇受益良多,想請問站長有研究如何達成video和audio的輸出嗎?謝謝
版主回覆:(11/29/2013 06:02:24 PM)
目前還沒做過AUDIO輸出欸…SORRY幫不上忙
您好:
想詢問近期我透過raspberry pi2 搭配 c170 使用mjpg-streamer 來做使用,但連上網頁後無法顯示出鏡頭所拍攝的畫面。鏡頭燈有亮起,試過firefox,手機內建瀏覽器皆無法觀看到畫面,請問您是否有遇上此類問題呢?謝謝!
供電有足夠嗎?
另外你可以觀察mjpg_streamer的輸出資訊,有沒有正確開啟cam
有些cam的decoder chip不被mjpg_streamer支援
參數加上 -y就可以
博主你好!直接访问mjpg-streamer的8080端口,可以看到每秒30帧的视频流,但使用motion获取的mjpg-stream视频流延迟非常严重。我把motion配置文件传到了dropbox上,可否请你帮忙看看问题出在哪里?https://www.dropbox.com/s/qiki8dtwyajn0ix/motion.conf?dl=0
非常感谢!
請問在沒有網路的情況下,
使用樹莓派+pi camera
透過WIFI 傳輸到手機顯示
要使用何種軟體呢?
請問在沒有網路的情況下,
使用樹莓派+pi camera
透過WIFI 傳輸到手機顯示
要使用何種軟體呢?