您的当前位置:首页正文

openwrt 在RT5350上实现mjpg-streamer视频流输出(摄像头格式为YUYV格式)

2024-11-30 来源:个人技术集锦

今天按照入门教材实现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的命令。

配置摄像头的帧率/分辨率等:

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


我在火狐上使用::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命令详细介绍网上多的是,这里就不介绍了。



显示全文