Openwrt可以做的事情很多:VPN、离线下载、VLAN、无线中继、多拨,等等。因为比较折腾,所以适合喜欢钻研,知道怎么找资料,并且对Linux较熟悉的人使用。一般用户还是用普通路由器,或者别人帮刷好固件的路由器吧~
Openwrt还有一项功能比较吸引人,那就是挂载摄像头,实现远程实时监控。本文介绍通过mjpeg-streamer输出摄像头的实时图像,从而实现远程监控。最近还会写一篇使用motion实现自动拍照上传的教程,敬请关注本博客。
一、准备工作
首先就是要有一个刷了openwrt的路由器,固件里至少要包括下面的两个摄像头相关的内核模块:
kmod-video-core, kmod-video-uvc,
以及mjpeg-streamer软件。DreamBox的0909版固件就不错,本人的HG255D路由器目前用的就是这款固件。其他型号的路由器,可以去OpenWrt中文网,以及恩山无线论坛寻找相应固件。当然,路由器自身至少要有一个USB 2.0接口。
其次,一个免驱并支持MJPEG输出的摄像头。这个就需要仔细挑选了。可以参考这个帖子,选择适合自己的摄像头。注意:不支持MJPEG输出的摄像头,以路由器CPU的能力,每秒也就能输出2-3帧,几乎不可用,所以务必选择正确的摄像头。本人使用的是微软的HD3000 720P高清摄像头,免驱并支持MJPEG,去除了HD5000里作用不大的自动对焦功能,价格比HD5000更加亲民。
二、测试摄像头
将摄像头插到路由器上,然后ssh到路由器上,执行logread命令,会打印出路由器开机后的终端log。在里面寻找”usbcore: registered new interface driver uvcvideo”,以及含有”/dev/video0″的字样。如果有,则说明免驱摄像头挂载成功,没有的话肯定是摄像头不支持了。
三、配置执行监控软件
首先要去mjpeg-streamer的sourceforge网站下载它的最新源码解压,只需要其中的www目录。此处,我们将其放到路由器的/www目录下,并且改名为camwww。
mjpeg-streamer的用法比较简单,参数直接写在命令行里就可以了。下面给出几个常见的参数组合:
mjpg_streamer -i “input_uvc.so -d /dev/video0” -o “output_http.so -p 8080 -w /www/camwww”
上面这行命令是让mjpeg-streamer以默认的640×480分辨率、30fps显示图像,并且监听8080端口的http请求。其自带的一个小型web页面所在的地址为/www/camwww。
mjpg_streamer -i “input_uvc.so -f 15 -r 320*240 -d /dev/video0” -o “output_http.so -p 8080 -w /www/camwww”
上面这个就是较为完整的,自定义了分辨率和帧率。另外还有-c参数可以设置使用密码访问。具体参数可以加上–help来运行mjpeg-streamer查看,或者这个网站。
注意:如果你的摄像头必须像下面这样加上-y参数才能正常开启的话,就说明它不支持MJPEG输出,只能以YUV形式每秒2、3帧的速度输出:
mjpg_streamer -i “input_uvc.so -y -d /dev/video0” -o “output_http.so -p 8080 -w /www/camwww”
正常完成了mjpeg-streamer的执行后,就可以用浏览器(最好是firefox或者chrome)访问路由器的8080端口(由-p参数指定),查看摄像头的图像。
若想实现远程监控,可以在路由器上配置一下花生壳之类的动态域名服务,就能在外网通过域名访问路由器。
本文为悠然居(https://wordpress.youran.me/)的原创文章,转载请注明出处!
motion自动上传,调试了么?
我测试了个用mjgp-streamer+wget+curl,上传yeelink网站。可以看一下连接:
http://www.yeelink.net/devices/1656
我也装了motion,取到了network camera 的视频流,并且可以做运动检测,可以利用8081端口输出一个jpg流,但是暂时还没实现motion的输出和上传。
我的邮箱是paublo@163.com。
期待与你的交流。
暂时还没测试,这两天测一下。
motion.conf有个参数on_picture_save,应该可以用来自动执行上传脚本。
另外还有个简单的方法是用cron定期执行一个脚本,检测motion的jpg输出目录里有无新文件,如果有则上传后删除。感觉这个方法比较适合在图像频繁变动,导致motion短时间内大量生成图片文件的时候。用上面那个参数的话,不知道motion能不能同时处理那么多。
折腾了一下,成功了。见我新写的博文:
http://wordpress.youran.me/openwrt-webcam-motion/
在我的HG255D Openwrt-Dreambox下测试通过。
大神,膜拜!
我的摄像头是ZC0305,可以在op下正常驱动。不过我发现同样环境下,win下要比op下亮。是驱动的原因么?求赐教。thx……
估计是驱动的问题,如果觉得linux下的比较暗影响到了mjpeg-streamer的监控效果,有个[-m | –minimum_size ]选项可以尝试下。
你好,我用的固件和路由都和你一样,可是我没有挂载成功,我想把我的截图给你看看,你能教教我,怎么挂载上去么
我的QQ214053573,希望你能指导指导我这个新人,学过linux,但不能理解博客里面的“首先要去mjpeg-streamer的sourceforge网站下载它的最新源码解压,只需要其中的www目录。此处,我们将其放到路由器的/www目录下,并且改名为camwww。”这句话
您好,我严格按你描述的方法操作,但挂载不了摄像头。选用同样的HG255D、刷DreamBox的0909版固件、选用微软HD-3000 720P摄像头。
显示信息如下:
root@DreamBox:~# mjpg_streamer -i “input_uvc.so -f 30 -r 1280*720 -d /dev/video
0” -o “output_http.so -p 8080 -w /www/camwww”
MJPG Streamer Version: svn rev: exported
i: Using V4L2 device.: /dev/video0
i: Desired Resolution: 1280 x 720
i: Frames Per Second.: 30
i: Format…………: MJPEG
Unable to set format: 1196444237 res: 1280×720
Init v4L2 failed !! exit fatal
i: init_VideoIn failed
root@DreamBox:~#
请指导,谢谢!
操作和硬件完全一样的话,不会有问题的啊。摄像头有问题?
加-y参数的话可以正常启动摄像头吗?
插入摄像头的时候,dmesg里关于此usb设备的输出是什么?
一、以下为执行 dmesg 的结果:
usb 1-1: new high speed USB device using dwc_otg and address 2
usb 1-1: New USB device found, idVendor=045e, idProduct=0779
usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 1-1: Product: Microsoft庐 LifeCam HD-3000
usb 1-1: Manufacturer: Microsoft
usb 1-1: configuration #1 chosen from 1 choice
uvcvideo: Found UVC 1.00 device Microsoft庐 LifeCam HD-3000 (045e:0779)
input: Microsoft庐 LifeCam HD-3000 as /devices/platform/dwc_otg.0/usb1/1-1/1-1:1.0/input/input1
2:3:1: cannot get freq at ep 0x82
二、以下为执行 lsusb 的结果:
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 045e:0779 Microsoft Corp.
三、以下为执行 mjpg_streamer -i "input_uvc.so -yuv -f 30 -r 320*240 -d /dev/video0" -o "output_http.so -p 8080 -w /www/camwww" 的结果:
MJPG Streamer Version: svn rev: exported
i: Using V4L2 device.: /dev/video0
i: Desired Resolution: 320 x 240
i: Frames Per Second.: 30
i: Format…………: YUV
i: JPEG Quality……: 80
Unable to set format: 1448695129 res: 320×240
Init v4L2 failed !! exit fatal
i: init_VideoIn failed
四、以下为执行 mjpg_streamer -i "input_uvc.so -f 15 -r 320*240 -d /dev/video0" -o "output_http.so -p 8080 -w /www/camwww"的结果
MJPG Streamer Version: svn rev: exported
i: Using V4L2 device.: /dev/video0
i: Desired Resolution: 320 x 240
i: Frames Per Second.: 15
i: Format…………: MJPEG
Unable to set format: 1196444237 res: 320×240
Init v4L2 failed !! exit fatal
i: init_VideoIn failed
[By Moderator: comment too long, truncated]
我用
1.mjpg_streamer -i “input_uvc.so -f 30 -r 320*240 -d /dev/video0” -o “output_http.so -p 8080 -w /www/camwww”
2.mjpg_streamer -i “input_uvc.so -f 30 -r 640*480 -d /dev/video0” -o “output_http.so -p 8080 -w /www/camwww”
3.mjpg_streamer -i “input_uvc.so -yuv -f 30 -r 320*240 -d /dev/video0” -o “output_http.so -p 8080 -w /www/camwww”
4.mjpg_streamer -i “input_uvc.so -yuv -f 30 -r 640*480 -d /dev/video0” -o “output_http.so -p 8080 -w /www/camwww”
这些命令测试也一样的问题
另外,我有一台老的罗技 vu002 摄像头却测试通过了!
同样的方法:我的VU002摄像头可以挂载成功并且能够看到图像。难不成我花129元买了一只假货HD-3000?
我也是100出头买的HD3000,mjpeg没问题。如果你加-y参数可以正常启动摄像头,那就是买到假货了。
我这可是参考了许多网上的帖子,经过慎重考虑后刚刚从TB上花129元买的这款摄像头。因为,最近正在测试一款叫mySCADA的移动组态软件,这款软件只支持MJPEG STREAMER摄像头。正好手头有一台HG255D 64M的,于是就想到用这种方法造一台MJPEG STREAMER IP摄像头。现在看来有问题,难道还得买一台真正的支持MJPEG STREAMER 的IP摄像头?
我加-y也一样的问题,为什么?让小白无从下手!
难道我刷的0909版有问题?我可是找到的两个版本都试了。各位大侠刷的时哪个版本,给个提示吧,谢谢!
因为从2012年12月份后HD-3000改版了,现在怀疑我购买的新版HD-3000无法在HG255D上挂载!有什么好办法呢?大家指导一下。
连-y都不行,那就是路由不支持这个摄像头了。这你只能在电脑上同样用mjpeg-streamer测试下,看看是摄像头问题还是路由器固件问题。
楼主,你好。我碰到了renbinsheng同样的问题,我用ls /etc/dev/video* 能看到/dev/video0,但是无论是mjpg方式还是YUYV方式输出,都会出现错误代码。不加-y的时候错误代码是1196444237,加-y的时候错误代码是1448695129,请问这是因为摄像头的原因吗?如果不支持,为什么还会出现/dev/video0?麻烦楼主了,谢谢!@youran
@enxi
好久没搞openwrt了,我的HG255D都坏掉了。Google了一下错误代码,看到两处都提到了一个偏方:拔掉摄像头再重新插上貌似就好了。
http://www.openwrt.org.cn/bbs/thread-10047-1-1.html
https://discuss.ninjablocks.com/t/fixed-webcam-issue-mjpg-streamer-unable-to-set-format-1196444237-res-640×480/257/3
谢谢楼主,问题解决了。用的下面的方法,碰到类似问题的人可以参考下。
摄像头不支持MJPEG格式,需要以YUV方式支持启动。
编辑文件/etc/init.d/mjpg-streamer
[ -n “$fps” ] && input_arg=”${input_arg} –fps $fps ”
上面这句修改为
[ -n “$fps” ] && input_arg=”${input_arg} –fps $fps –y”
完成后重新启动mjpg-streamer服务
root@OpenWrt:~# /etc/init.d/mjpg-streamer restart
谢谢楼主的教程!等下我自己弄试试看!~