今天按照入门教材实现mjpg-streamer的实验,出现了很多问题,特此记录。
配置内核加入摄像头驱动:
Kernel modules --->Video Support --->kmod-video-core
--->kmod-video-uvc
配置内核加入MJPEG视频流
Multimedia --->mjpg-streamer
重新编译,烧写镜像:openwrt-ramips-rt305x-mpr-a2-squashfs-sysupgrade.bin
重启后既可以看到已经有mjpg-streamer的命令。
配置摄像头的帧率/分辨率等:
配置信息在目录:etc/config/mjpg-streamer
config mjpg-streamer 'core'
option enabled '1'
option input 'uvc'
option output 'http'
option device '/dev/video0'
option resolution '320x240'
option fps '5'
option www '/www/webcam'
option port '8080'
启动mjpg-streamer: /etc/init.d/mjpg-streamer start
9.8 电脑或手机观看视频图像
在浏览器输入以下地址,即可观看图像。本人在火狐和搜狗浏览器测试都 OK。//问号是正常的,不要以为是乱码
动态视频:192.168.1.1:8080/?action=stream
静态图像:192.168.1.1:8080/?action=snapshot
我在火狐上使用::192.168.1.1:8080/?action=stream
出现错误:
The image cannot be displayed, because it contains errors
以为是火狐缺少插件,或者是其他什么原因,最后网上找了一下,发现mjpg-streamer支持MJPEG和YUV格式,但是YUV需要软编码,所以使用YUV时需要增加参数" -y"
我使用的摄像头是输出YUYV格式的摄像头,所以会出现此问题,手动启动没有加"-y"会出现很多
UVCIOC_CTRL_ADD - Error: Inappropriate ioctl for device
查看了一下/etc/init.d/mjpg-streamer这个启动脚本,发现确实没有加-y参数,所以要么修改/etc/init.d/mjpg-streamer这个脚本,增加-y,要么自动手动运行命令:
mjpg_streamer -i "input_uvc.so -d /dev/video0 -n -y -r 320x240 -f 30" -o "output_http.so -p 8080"
mjpg_streamer -i "input_uvc.so -d /dev/video0 -n -y -r 640x480 -f 30" -o "output_http.so -p 8080
实际效果肯定没有30fps,因为RT5350的CPU处理不过来,摄像头输出应该也没那么多,猜测而已。
mjpeg-streamer命令详细介绍网上多的是,这里就不介绍了。