You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Mjpg_streamer可访问Web界面但无法显示摄像头推流问题咨询

我之前也碰到过一模一样的情况!摄像头在Cheese里正常工作,但mjpg_streamer能打开页面却看不到画面,连报错都没有,真的挺头疼的。给你几个我亲测有效的排查步骤:

1. 先确认启动命令的参数是否正确

这是最容易踩坑的地方,尤其是输入插件的设备路径和输出插件的网页目录:

  • 先确定摄像头的设备节点:执行 ls /dev/video*,一般会输出 /dev/video0/dev/video1(内置和USB摄像头可能各占一个)
  • 启动时务必明确指定设备和网页目录,比如USB摄像头的标准命令:
    mjpg_streamer -i "input_uvc.so -d /dev/video0" -o "output_http.so -p 8080 -w /usr/share/mjpg-streamer/www"
    
    重点检查**-w后面的路径**,很多时候就是网页文件目录不对,导致页面能加载但拉不到视频流。
2. 单独验证输入插件是否能捕获画面

有时候输入插件看似没报错,但实际上没拿到摄像头的数据流。可以用文件输出插件测试:

mjpg_streamer -i "input_uvc.so -d /dev/video0 -r 640x480 -f 30" -o "output_file.so -f /tmp -n test.jpg"

执行完去 /tmp 目录看有没有生成 test.jpg

  • 如果有,说明输入插件没问题,问题出在HTTP输出插件或浏览器端
  • 如果没有,那就是输入插件的问题,可能需要重新编译mjpg_streamer时确保开启了UVC支持
3. 检查权限问题

虽然Cheese能访问摄像头,但mjpg_streamer可能没权限读取设备:

  • 先试试用sudo启动:
    sudo mjpg_streamer -i "input_uvc.so -d /dev/video0" -o "output_http.so -p 8080 -w /usr/share/mjpg-streamer/www"
    
    如果这样能出画面,就说明是权限问题。解决办法是把你的用户加入video组:
    sudo usermod -aG video $USER
    
    注销再登录后,不用sudo也能正常访问了。
4. 排查浏览器端的问题

有时候是浏览器的缓存或兼容性导致的:

  • 用无痕窗口打开 localhost:8080/action?stream(避免缓存干扰)
  • 换Firefox、Edge等不同浏览器试试(部分Chrome版本对mjpg格式的支持有小问题)
  • 强制刷新页面(Ctrl+F5)
5. 查看详细日志定位隐藏问题

启动时加上-v参数,能看到更详细的调试信息,很多隐藏错误都会在这里显示:

mjpg_streamer -v -i "input_uvc.so -d /dev/video0" -o "output_http.so -p 8080 -w /usr/share/mjpg-streamer/www"

日志里会显示输入插件是否成功打开设备、分辨率/帧率是否被支持、输出插件是否正常监听端口等关键信息,我当时就是通过日志发现网页目录写错了,改完就正常出画面了。

内容的提问来源于stack exchange,提问作者ColbyR

火山引擎 最新活动