开发环境:
主机: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是精简版的,所以变成了直接调用服务启动
审核编辑:汤梓红
-
usb
+关注
关注
60文章
7888浏览量
263918 -
摄像头
+关注
关注
59文章
4806浏览量
95389 -
Ubuntu
+关注
关注
5文章
560浏览量
29548 -
开发环境
+关注
关注
1文章
220浏览量
16580 -
OpenWrt
+关注
关注
10文章
127浏览量
39261
发布评论请先 登录
相关推荐
评论