开发环境:
主机:Ubuntu16.04
Openwrt:Openwrt19.07
做本次实验的时候,推荐大家用 USB 免驱的摄像头,最好是支持 MJPEG 输出的摄像头类型。USB 免驱摄像头输出 YUV 格式和输出 MJPEG 格式,对无线监控的效果有什么影响呢?
首先大家要知道,同样是一帧数据,YUV 格式会比 MJPEG 格式的大得多,因此我们在视频传输的时候,一般是传输 MJPEG 格式的数据。这样,就有这样一个问题,如果摄像头是输出 YUV 格式,那么就意味着我们需要通过软件将视频数据由 YUV 格式转换成 MJPEG格式,然后传输。如果摄像头输出的是 MJPEG 格式,那个将可以直接将得到的数据进行传输。因此,使用支持 MJPEG 压缩的摄像头,比一般的摄像头,做无线监控的效果,好很多!
要支持摄像头,就必须配置上摄像头的驱动,因为是免驱的 USB 摄像头,因此我们必须配置上 UVC 驱动,具体如图所示。首先,我们选中内核模块进行配置。
Kernel modules --- >
Video Support --- >
< * > kmod-video-core
< * > kmod-video-uvc
-*- kmod-video-videobuf2
编译。
$make V=99
将固件烧写到板子中,插入USB摄像头,接口查看是否有video0这个设备节点了。
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"
#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是精简版的,所以变成了直接调用服务启动
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !