1. 程式人生 > >用motion實現家庭視頻監控

用motion實現家庭視頻監控

ash 什麽 建議 var 事件觸發 硬件 圖片文件 硬件驅動 output

需求?當然不是為了艷照。你們這些猥瑣的人類!

畢竟家裏總會有沒人的時候,出門走到半路忘記煤氣竈是不是關了,還得回去看看。

在這個科技以人為本的時代,當然應該是拿出智能手機聯網看看啦。還有萬一有人闖空門什麽的,也能有個及時報警什麽的。

motion是什麽?motion是一個提供視頻監控解決方式的開源軟件。支持Linux/FreeBSD/MacOS等多個平臺。本文以Linux為例,測試平臺是LinuxMint17。motion的功能主要有下面幾個:

支持USB攝像頭和webcam(可通過HTTP查看實時視頻直播的攝像頭)
支持多攝像頭
提供web訪問實時視頻功能(能夠把USB攝像頭變成webcam)
重點是運動檢測,能夠在畫面中出現活動物體時才開始拍攝並記錄。以節約存儲空間

能夠配置在運動事件發生時拍照(連續拍照,可選保存全部照片或僅僅保存一張。保存一張可選保存第一張,最好的一張,或是運動在畫面中央的一張)
能夠配置各種事件觸發(比方在運動檢測發生時或者視頻照片保存後發個郵件什麽的)
能夠配置web遠程管理(用處不大。建議關閉)
能夠配置使用數據庫(支持MySQL和PostgreSQL)
……

當然,當中的web實時視頻和web管理默認都僅僅能本機訪問,不建議配置為直接同意遠程訪問,不安全。更安全的做法是:通過一個加密的web代理提供遠程訪問,或者幹脆就僅僅能通過ssh tunnel連到本地訪問。

為了手機訪問方便的話。還是前者吧。

開工。

LinuxMint上安裝非常easy,apt-get就可以,只是它還依賴了ffmpeg,會自己主動裝上。

然後是配置,有好幾種配置方式,比方常見的配置到~/.motion下什麽的,只是我還是建議直接改動/etc/motion/motion.conf比較好。否則搞出太多配置文件,會搞不清終於生效的是哪個。

配置文件中每一個選項都有備註說明。就不一一介紹了。通常須要改的幾個參數有:

daemon off - 一般就off好了,須要後臺執行能夠用 service motion start 來啟動

videodevice /dev/video0 - 一般USB攝像頭默認就是這個,假設有多個的話就以此類推

v4l2_palette 8 - 一般就用8好了,盡管並非全部的攝像頭都是這個模式(至少我手裏兩個各自是3和6)。但事實上motion會自己主動檢測選擇合適的。關於這個參數有一點須要說明的是,在motion的早期版本號中支持了18種,如今僅僅有9種,當中有一些老式攝像頭使用的SGBRG8模式(GBRG)在新版本號的motion中已經不再被支持,請更換新的攝像頭。不建議使用motion文檔評論區有人提供的補丁。

眼下市場上常見的RGB24或YUY2之類的都沒問題

width/height - 建議依據攝像頭改動,默認的320x240太低了。如今最低端的攝像頭也至少是640x480的,連352x288的都已經沒有了

framerate 2 - 默認的2有點低。可是太高的話占用的存儲空間也會大。自己考慮決定吧

output_normal on - 檢測到運動時拍照,on為保存全部拍的照片(會非常多)。可選關閉。第一張,最佳。中央

ffmpeg_cap_new on - 檢測到運動時錄像

ffmpeg_video_codec swf - 支持多種視頻文件格式。只是要通過網頁看的話,推薦還是swf格式

target_dir - 照片和視頻的默認存放路徑。註意:motion 默認以motion用戶執行。所以這個路徑的權限要註意一下

webcam_port 8081 - 實時查看視頻的HTTP端口

control_port 8080 - 管理motion的WEB頁面端口

以上兩個設置為0就可以關閉對應功能

配置文件最後的 thread 參數用於指定多個攝像頭時其他攝像頭使用的配置文件

按自己的須要改動好配置文件以後就能夠啟動motion了:

sudo service motion start

命令行上會有一些提示信息,可是不太全,只是沒關系,還有日誌嘛:

tail -f /var/log/syslog

假設有錯誤。請依據錯誤信息檢查改動配置文件,直到服務正常啟動。

如今就能夠用瀏覽器打開: http://localhost:8080 查看實時視頻,假設是一塊灰圖,說明攝像頭配置不正確,請查看日誌。

事件觸發的配置也在配置文件中。經常使用的有:

on_event_start - 運動事件開始
on_event_end - 運動事件結束
on_picture_save - 圖片保存後(可選參數 %f 為對應的圖片文件名稱)
on_movie_end - 視頻保存後(可選參數 %f 為對應的視頻文件名稱)

這幾個選項的參數都是可執行文件名稱,能夠自己寫一些腳本觸發執行,比方發個郵件以便及時收到通知(或利用手機運營商提供的郵箱轉成短信提醒),或上傳到雲端(防止丟失證據)。

至此大功告成。

補充說明:

眼下我僅僅在Linux下測試成功,FreeBSD下有困難。原因在於攝像頭驅動不好搞。盡管我一向喜歡FreeBSD多些,可是碰到硬件驅動問題還真是沒辦法。

FreeBSD版的motion本身應該是沒有多大問題。問題在於它使用一個叫PWCBSD的東西來做攝像頭兼容處理。由於大部分攝像頭都能夠被V4L(Video for Linux)所驅動,這個PWCBSD則是實現了部分攝像頭的V4L驅動在BSD上的兼容,問題在於它實現的型號太少,反正我手頭上的幾個都不行。所以全然沒法用。

更坑的是PWCView倒是支持的攝像頭比較多一些——註意,是ports裏另外一個單獨的PWCView。不是PWCBSD自帶的那個PWCView。

所以我眼下的辦法是用一個python程序去調用PWCView來實現部分motion功能,由於功能非常簡陋。就不獻醜了。

推薦還是用Linux吧,省事非常多。

用motion實現家庭視頻監控