首页 > 代码库 > 用motion实现家庭视频监控
用motion实现家庭视频监控
需求?当然不是为了艳照。你们这些猥琐的人类!
毕竟家里总会有没人的时候,出门走到半路忘记煤气灶是不是关了,还得回去看看。
在这个科技以人为本的时代,当然应该是拿出智能手机联网看看啦。还有万一有人闯空门什么的,也能有个及时报警什么的。
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实现家庭视频监控