用motion實現家庭視頻監控

需求?當然不是爲了豔照!你們這些猥瑣的人類!

畢竟家裏總會有沒人的時候,出門走到半路忘記煤氣竈是不是關了,還得回去看看。在這個科技以人爲本的時代,當然應該是拿出智能手機聯網看看啦。還有萬一有人闖空門什麼的,也能有個及時報警什麼的。

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

支持USB攝像頭和webcam(可通過HTTP查看實時視頻直播的攝像頭)
支持多攝像頭
提供web訪問實時視頻功能(可以把USB攝像頭變成webcam)
重點是運動檢測,可以在畫面中出現活動物體時纔開始拍攝並記錄,以節約存儲空間
可以配置在運動事件發生時拍照(連續拍照,可選保存全部照片或只保存一張,保存一張可選保存第一張,最好的一張,或是運動在畫面中央的一張)
可以配置各種事件觸發(比如在運動檢測發生時或者視頻照片保存後發個郵件什麼的)
可以配置web遠程管理(用處不大,建議關閉)
可以配置使用數據庫(支持MySQL和PostgreSQL)
……

當然,其中的web實時視頻和web管理默認都只能本機訪問,不建議配置爲直接允許遠程訪問,不安全。更安全的做法是:通過一個加密的web代理提供遠程訪問,或者乾脆就只能通過ssh tunnel連到本地訪問。爲了手機訪問方便的話,還是前者吧。

開工。

LinuxMint上安裝很簡單,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吧,省事很多。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章