Openwrt开发指南 第25章 配置OpenWrt支持网络摄像头

描述

开发环境:

主机:Ubuntu16.04

Openwrt:Openwrt19.07

1 摄像头选择

做本次实验的时候,推荐大家用 USB 免驱的摄像头,最好是支持 MJPEG 输出的摄像头类型。USB 免驱摄像头输出 YUV 格式和输出 MJPEG 格式,对无线监控的效果有什么影响呢?

首先大家要知道,同样是一帧数据,YUV 格式会比 MJPEG 格式的大得多,因此我们在视频传输的时候,一般是传输 MJPEG 格式的数据。这样,就有这样一个问题,如果摄像头是输出 YUV 格式,那么就意味着我们需要通过软件将视频数据由 YUV 格式转换成 MJPEG格式,然后传输。如果摄像头输出的是 MJPEG 格式,那个将可以直接将得到的数据进行传输。因此,使用支持 MJPEG 压缩的摄像头,比一般的摄像头,做无线监控的效果,好很多!

2 配置 OpenWrt 支持 usb 摄像头

要支持摄像头,就必须配置上摄像头的驱动,因为是免驱的 USB 摄像头,因此我们必须配置上 UVC 驱动,具体如图所示。首先,我们选中内核模块进行配置。

Kernel modules  --- >
  Video Support  --- >
  < * > kmod-video-core
  < * > kmod-video-uvc
  -*- kmod-video-videobuf2

编译。

$make V=99

将固件烧写到板子中,插入USB摄像头,接口查看是否有video0这个设备节点了。

3 配置 OpenWrt 支持 mipg-streamer 软件

mipg-streamer 就是一款用于视频数据采集、视频数据格式转换、视频数据传输的软件,服务器。因此为了让 openwrt 系统支持该软件,我们需要将它配置进去。

Multimedia  --- >
< * > mjpg-streamer

就这样,我们就让 openwrt 系统支持无线监控,按前面的方法配置好后,保存退出,然后 make V=99,最后将编译出来的固件烧写到我们的开发板上面。然后启动系统。启动完成,插入我们的摄像头,就会看到/dev/video0 这个设备节点。usb 摄像头接入开发板后提示如下:

摄像头

摄像头

如果插上提示不对,请先做上一章,再重新生成固件即可。然后运行 mipg-streamer 软件:

  • 一般摄像头:

#mjpg_streamer -i "input_uvc.so -d /dev/video0 -y" -o "output_http.so -w www"

  • 支持 MJPEG 的摄像头:

#mjpg_streamer -i "input_uvc.so -d /dev/video0" -o "output_http.so -w www"

其中: -i 表示指定输入,这里输入为:input_uvc.so 即 uvc(usb video),-d 是设备位置,我们摄像头的设备位置在:/dev/video0,-y 用于区分一般摄像头和支持 MJPEG 的摄像头,-o 指定输出,这里输出到 output_ http.so 即 http(可以理解为输出到网页上),-w指定 web 服务器为 www。运行命令后,可以得到如下图的信息:

#mjpg_streamer -i "input_uvc.so -d /dev/video0" -o "output_http.so"

摄像头

好的,电脑上必须用火狐浏览器才能看到时视频哦,我们打开网页输入:

http://192.168.2.1:8080/?action=stream

其中 192.168.2.1 是开发板的 ip 地址,8080 是 http tcp 的端口,action表示某个动作,这里表示: stream。通过这个输入我们就可以从网页完成视频的监控了!

当然,在我们的 ” Monitor.apk” 中可以进行手机安装该软件,进行安卓手机端的控制!手机上只用输入路由器的 IP 即可看到监控画面。这里 mipg-streamer 软件使用方法我们可以通过命令:mjpg_streamer -h 进行帮助!

root@OpenWrt:~# mjpg_streamer -h
-----------------------------------------------------------------------
Usage: mjpg_streamer
  -i | --input "< input-plugin.so > [parameters]"
  -o | --output "< output-plugin.so > [parameters]"
 [-h | --help ]........: display this help
 [-v | --version ].....: display version information
 [-b | --background]...: fork to the background, daemon mode
-----------------------------------------------------------------------
Example #1:
 To open an UVC webcam "/dev/video1" and stream it via HTTP:
  mjpg_streamer -i "input_uvc.so -d /dev/video1" -o "output_http.so"
-----------------------------------------------------------------------
Example #2:
 To open an UVC webcam and stream via HTTP port 8090:
  mjpg_streamer -i "input_uvc.so" -o "output_http.so -p 8090"
-----------------------------------------------------------------------
Example #3:
 To get help for a certain input plugin:
  mjpg_streamer -i "input_uvc.so --help"
-----------------------------------------------------------------------
In case the modules (=plugins) can not be found:
 * Set the default search path for the modules with:
   export LD_LIBRARY_PATH=/path/to/plugins,
 * or put the plugins into the "/lib/" or "/usr/lib" folder,
 * or instead of just providing the plugin file name, use a complete
   path and filename:
   mjpg_streamer -i "/path/to/modules/input_uvc.so"
-----------------------------------------------------------------------

【注1】输入参数

-y 是关键,默认启动是 mjpeg 格式,这个就报错。改成 YUV 格式

-d 指定设备

-f 制定帧数,默认 30 帧

-r 指定视频大小,如 320×240

-q 指定画质,默认 80

【注2】输出参数

-p 指定端口,这里是 8080

-w 指定网页目录,这里我们设置的是/www/camwww 目录

-c 设置通过密码访问

【注3】修改分辨率

#mjpg_streamer -i "input_uvc.so -r 800*600 -d /dev/video0" -o "output_http.so 8080 -w www"

提示:未做出实验效果时可以用我提供的固件先测试一下。

【注4】服务操作

/etc/init.d/mjpg-streamer enable 是设置开机自动启动

/etc/init.d/mjpg-streamer disable 是禁止开机自动启动

/etc/init.d/mjpg-streamer start 是现在启动

/etc/init.d/mjpg-streamer restart 重启

/etc/init.d/mjpg-streamer stop 停止

service mjpg-streamer start,在通常*nuix是这样的,但是openwrt的busybox是精简版的,所以变成了直接调用服务启动

审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分