[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入你Piip位置,加上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 => 手動指定camled是否要亮(有些不一定會有用),後面可以接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.htmlhttp://gsyan888.blogspot.tw/2013/04/raspberry-pi-webcam-mjpg-streamer.html

 

13 Comments

  1. 問一個很蠢的問題
    可以 mjpg-streamer 跟 motion 一起使用嗎?
    版主回覆:(08/19/2014 05:56:31 PM)
    可以,本文章就是這樣
    讓MOTION去抓MJPG-STREAMER的訊號源

  2. 感謝答復,再問一個很蠢的問題
    可以有錄影的功用嗎?
    版主回覆:(08/28/2013 04:48:57 AM)
    有,但我沒試過
    好像要透過其他套件

  3. 請問『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
    你試看看吧

  4. 改了之後他卻出現 -bash: !svn/vcc/default: event not found
    這是??謝謝。

  5. 剛剛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)
    恩恩!確實我朋友也問我這個問題,
    就直接把你的回覆給他參考確定沒問題~~
    也謝謝您的回報 ^_^

  6. 您好,請問一下~
    是不是直接輸入網址 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指令打錯或者被結束掉了

  7. 您好:
    mjpg-streamer 都成功了,就是motion有点问题,用ipad的safari可以看到,但是电脑上IE和chrome都打不开,感觉很诡异?网上查不到原因?
    版主回覆:(10/17/2013 05:29:33 PM)
    您好,你有嘗試換別台電腦或者機器連線嗎?

  8. 最近在做視訊遙控車剛好查到這篇受益良多,想請問站長有研究如何達成video和audio的輸出嗎?謝謝
    版主回覆:(11/29/2013 06:02:24 PM)
    目前還沒做過AUDIO輸出欸…SORRY幫不上忙

  9. 您好:
    想詢問近期我透過raspberry pi2 搭配 c170 使用mjpg-streamer 來做使用,但連上網頁後無法顯示出鏡頭所拍攝的畫面。鏡頭燈有亮起,試過firefox,手機內建瀏覽器皆無法觀看到畫面,請問您是否有遇上此類問題呢?謝謝!

  10. 博主你好!直接访问mjpg-streamer的8080端口,可以看到每秒30帧的视频流,但使用motion获取的mjpg-stream视频流延迟非常严重。我把motion配置文件传到了dropbox上,可否请你帮忙看看问题出在哪里?https://www.dropbox.com/s/qiki8dtwyajn0ix/motion.conf?dl=0

    非常感谢!

  11. 請問在沒有網路的情況下,
    使用樹莓派+pi camera
    透過WIFI 傳輸到手機顯示
    要使用何種軟體呢?

1 Trackback / Pingback

  1. [RPI] 支援影片播放,縮時攝影以及存檔的方法 | Pilla 技術宅

Leave a comment

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料