Openwrt路由器挂载摄像头教程

December 30th, 2012 Leave a comment Go to comments

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/)的原创文章,转载请注明出处!

声明: 本文采用 BY-NC-SA 协议进行授权. 转载请注明转自: Openwrt路由器挂载摄像头教程
  1. Paublo | #1
    January 12th, 2013 at 12:07 |

    motion自动上传,调试了么?
    我测试了个用mjgp-streamer+wget+curl,上传yeelink网站。可以看一下连接:
    http://www.yeelink.net/devices/1656
    我也装了motion,取到了network camera 的视频流,并且可以做运动检测,可以利用8081端口输出一个jpg流,但是暂时还没实现motion的输出和上传。
    我的邮箱是paublo@163.com。
    期待与你的交流。

    Google Chrome 23.0.1271.64 Google Chrome 23.0.1271.64 Windows XP Windows XP
    • youran | #2
      January 12th, 2013 at 12:24 |

      暂时还没测试,这两天测一下。
      motion.conf有个参数on_picture_save,应该可以用来自动执行上传脚本。
      另外还有个简单的方法是用cron定期执行一个脚本,检测motion的jpg输出目录里有无新文件,如果有则上传后删除。感觉这个方法比较适合在图像频繁变动,导致motion短时间内大量生成图片文件的时候。用上面那个参数的话,不知道motion能不能同时处理那么多。

      Google Chrome 24.0.1312.2 Google Chrome 24.0.1312.2 Mac OS X  10.7.5 Mac OS X 10.7.5
    • youran | #3
      January 12th, 2013 at 17:33 |

      折腾了一下,成功了。见我新写的博文:
      http://wordpress.youran.me/openwrt-webcam-motion/
      在我的HG255D Openwrt-Dreambox下测试通过。

      Google Chrome 23.0.1271.97 Google Chrome 23.0.1271.97 Windows 7 x64 Edition Windows 7 x64 Edition
  2. yangqun | #4
    November 6th, 2013 at 01:11 |

    大神,膜拜!
    我的摄像头是ZC0305,可以在op下正常驱动。不过我发现同样环境下,win下要比op下亮。是驱动的原因么?求赐教。thx……

    Google Chrome 30.0.1599.101 Google Chrome 30.0.1599.101 Windows 8 Windows 8
    • youran | #5
      November 6th, 2013 at 14:46 |

      估计是驱动的问题,如果觉得linux下的比较暗影响到了mjpeg-streamer的监控效果,有个[-m | –minimum_size ]选项可以尝试下。

      Google Chrome 30.0.1599.101 Google Chrome 30.0.1599.101 Windows 7 x64 Edition Windows 7 x64 Edition
  3. yangqimeng | #6
    April 19th, 2014 at 20:48 |

    你好,我用的固件和路由都和你一样,可是我没有挂载成功,我想把我的截图给你看看,你能教教我,怎么挂载上去么

    Firefox 28.0 Firefox 28.0 Windows 7 x64 Edition Windows 7 x64 Edition
  4. yangqimeng | #7
    April 19th, 2014 at 20:51 |

    我的QQ214053573,希望你能指导指导我这个新人,学过linux,但不能理解博客里面的“首先要去mjpeg-streamer的sourceforge网站下载它的最新源码解压,只需要其中的www目录。此处,我们将其放到路由器的/www目录下,并且改名为camwww。”这句话

    Firefox 28.0 Firefox 28.0 Windows 7 x64 Edition Windows 7 x64 Edition
  5. renbinsheng | #8
    August 21st, 2014 at 10:33 |

    您好,我严格按你描述的方法操作,但挂载不了摄像头。选用同样的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:~#

    请指导,谢谢!

    Google Chrome 21.0.1180.89 Google Chrome 21.0.1180.89 Windows 7 Windows 7
    • youran | #9
      August 21st, 2014 at 14:05 |

      操作和硬件完全一样的话,不会有问题的啊。摄像头有问题?
      加-y参数的话可以正常启动摄像头吗?
      插入摄像头的时候,dmesg里关于此usb设备的输出是什么?

      Firefox 30.0 Firefox 30.0 Windows XP Windows XP
      • renbinsheng | #10
        August 21st, 2014 at 17:11 |

        一、以下为执行 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]

        Google Chrome 21.0.1180.89 Google Chrome 21.0.1180.89 Windows 7 Windows 7
  6. renbinsheng | #11
    August 21st, 2014 at 10:37 |

    我用
    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 摄像头却测试通过了!

    Google Chrome 21.0.1180.89 Google Chrome 21.0.1180.89 Windows 7 Windows 7
  7. renbinsheng | #12
    August 21st, 2014 at 17:14 |

    同样的方法:我的VU002摄像头可以挂载成功并且能够看到图像。难不成我花129元买了一只假货HD-3000?

    Google Chrome 21.0.1180.89 Google Chrome 21.0.1180.89 Windows 7 Windows 7
    • youran | #13
      August 21st, 2014 at 22:06 |

      我也是100出头买的HD3000,mjpeg没问题。如果你加-y参数可以正常启动摄像头,那就是买到假货了。

      Google Chrome 36.0.1985.143 Google Chrome 36.0.1985.143 Windows 7 x64 Edition Windows 7 x64 Edition
  8. renbinsheng | #14
    August 21st, 2014 at 17:24 |

    我这可是参考了许多网上的帖子,经过慎重考虑后刚刚从TB上花129元买的这款摄像头。因为,最近正在测试一款叫mySCADA的移动组态软件,这款软件只支持MJPEG STREAMER摄像头。正好手头有一台HG255D 64M的,于是就想到用这种方法造一台MJPEG STREAMER IP摄像头。现在看来有问题,难道还得买一台真正的支持MJPEG STREAMER 的IP摄像头?

    Google Chrome 21.0.1180.89 Google Chrome 21.0.1180.89 Windows 7 Windows 7
    • renbinsheng | #15
      August 22nd, 2014 at 08:57 |

      我加-y也一样的问题,为什么?让小白无从下手!

      UC Browser 9.9.2.467 UC Browser 9.9.2.467 Android 4.2.2 Android 4.2.2
  9. renbinsheng | #16
    August 22nd, 2014 at 09:00 |

    难道我刷的0909版有问题?我可是找到的两个版本都试了。各位大侠刷的时哪个版本,给个提示吧,谢谢!

    UC Browser 9.9.2.467 UC Browser 9.9.2.467 Android 4.2.2 Android 4.2.2
  10. renbinsheng | #17
    August 22nd, 2014 at 13:01 |

    因为从2012年12月份后HD-3000改版了,现在怀疑我购买的新版HD-3000无法在HG255D上挂载!有什么好办法呢?大家指导一下。

    Google Chrome 21.0.1180.89 Google Chrome 21.0.1180.89 Windows 7 Windows 7
    • youran | #18
      August 22nd, 2014 at 13:51 |

      连-y都不行,那就是路由不支持这个摄像头了。这你只能在电脑上同样用mjpeg-streamer测试下,看看是摄像头问题还是路由器固件问题。

      Firefox 30.0 Firefox 30.0 Windows XP Windows XP
      • enxi | #19
        May 13th, 2015 at 22:16 |

        楼主,你好。我碰到了renbinsheng同样的问题,我用ls /etc/dev/video* 能看到/dev/video0,但是无论是mjpg方式还是YUYV方式输出,都会出现错误代码。不加-y的时候错误代码是1196444237,加-y的时候错误代码是1448695129,请问这是因为摄像头的原因吗?如果不支持,为什么还会出现/dev/video0?麻烦楼主了,谢谢!@youran

        Firefox 38.0 Firefox 38.0 Windows 7 Windows 7
        • youran | #20
          May 13th, 2015 at 23:09 |

          @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

          Google Chrome 42.0.2311.135 Google Chrome 42.0.2311.135 Mac OS X  10.9.5 Mac OS X 10.9.5
          • enxi | #21
            May 14th, 2015 at 16:27 |

            谢谢楼主,问题解决了。用的下面的方法,碰到类似问题的人可以参考下。
            摄像头不支持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

            Firefox 38.0 Firefox 38.0 Windows 7 Windows 7
  11. tomatowrt | #22
    December 12th, 2014 at 10:56 |

    谢谢楼主的教程!等下我自己弄试试看!~

    Google Chrome 27.0.1453.116 Google Chrome 27.0.1453.116 Windows 7 x64 Edition Windows 7 x64 Edition
  1. No trackbacks yet.