Klipper Fluidd启用USB网络摄像头

因为新版本KIAUH助手里没有了安装MJPG-Streamer的功能,我在设置Klipper摄像头的时候走了些弯路,现在总结一下具体方法给linux基础较差的朋友使用。
在Klipper和Fluidd中使用usb网络摄像头需要做两件事:
安装流媒体服务,比如MJPG-Streamer或者µStreamer。
Klipper里添加摄像头。
一、系统环境:
我安装Klipper上位机的硬件是一块ARM开发板,系统版本是Armbian 22.11.4 Jammy,Klipper版本v0.11.0,Fluidd版本v1.23.1。
二、安装流媒体服务
Kiauh助手在新版本(2023年)中已经没有了安装MJPG-Streamer的选项,所以需要手工下载编译,并且把服务运行起来。只要这一步完成了,就能看到摄像头拍到的东西了。
mjpg-streamer-experimental的下载地址:https://github.com/jacksonliam/mjpg-streamer
mjpg-streamer-experimental在github上已经有两三年没更新了,所以我用了µStreamer来替代它,这里也主要写µStreamer的安装方法。
µStreamer的下载地址:https://github.com/pikvm/ustreamer
µStreamer的github页面下方有说明和安装介绍供参考。

编译µStreamer前先安装依赖包,ssh登录上位机,使用klipper用户,执行命令:
sudo apt install build-essential libevent-dev libjpeg-dev libbsd-dev
在µStreamer的github页面上有介绍不同系统的安装命令,如果不是armbian或者debian/ubuntu系统,请参考github页面上的说明。
依赖包安装好后下载并make,还是使用klipper用户,先进入到安装klipper的目录,一般是home,直接输入cd回车就行。如果系统里缺少unzip、git、wget、v4l2命令的话先用apt安装。
git clone --depth=1 https://github.com/pikvm/ustreamer
cd ustreamer
make
第一行git clone是从github上把µStreamer复制下来,国内链接github时通时断的,下不下来只能自行科学上网解决。复制下来后进入ustreamer目录再make,一两分钟就好了。如果不想git,也可以按照官方说明wget https://github.com/pikvm/ustreamer/archive/refs/heads/master.zip 下载压缩包再解压缩编译。

编译完成就可以启动µStreamer查看摄像头了。
启动前先检查系统识别的摄像头video编号,输入命令:
ls -l /dev/video*

如果系统里只有一个video0,那就直接启动µStreamer,如果是多个设备那就要先检查哪个是要使用的摄像头。注意这些video设备的权限是root用户,如果要使用摄像头需要sudo提权。
检查摄像头,输入命令:
sudo v4l2-ctl --list-devices

可以看到,usb摄像头是video5和6,然后启动µStreamer具体试一下哪个是要使用的摄像头就好了。
启动命令:
sudo ./ustreamer --device=/dev/video5 --host=0.0.0.0 --port=8080 -r 1280x720

使用sudo执行ustreamer命令,--device=/dev/video5使用设备video5,--host=0.0.0.0 --port=8080不限制访问ip及访问端口为8080,-r 1280x720摄像头分辨率720p,设备编号和分辨率根据自己的摄像头修改。
启动ustreamer后不要退出ssh,用网页访问 http://ip:8080/ ,ip根据自己klipper上位机修改。打开网页点击 /stream 就可以看到摄像头拍的内容了。
摄像头拍到东西后再到klipper里新增摄像头。
三、Klipper新增摄像头
网页打开Klipper,进入设置-摄像头-添加摄像头:

输入摄像头名称、摄像头地址,地址有默认值检查下没问题直接保存,然后回到klipper仪表盘就能看到摄像头了。

到这里摄像头就能正常工作了,剩下的可以给ustreamer添加个自启动服务,让系统启动时自动启动ustreamer。
四、ustreamer添加开机自启动服务
到这就写的简单一点了,首先在ustreamer目录下创建一个启动脚本,把启动命令写进去:
vim startup.sh
#!/bin/sh
/home/klipper/ustreamer/ustreamer --device=/dev/video1 --host=0.0.0.0 --port=8080 -r 1280x720
给文件添加执行权限:
chmod +x startup.sh
路径根据自己的环境修改,vim不会用的话搜一下,保存退出。然后创建服务文件:
sudo vim /etc/systemd/system/ustreamerd.service
把以下内容填进去:
[Unit]
Description=uStreamer
After=default.target
[Service]
ExecStart=/home/klipper/ustreamer/startup.sh
[Install]
WantedBy=default.target
根据自己的环境修改路径,保存退出,执行:
sudo systemctl daemon-reload
sudo systemctl enable ustreamerd.service
系统重启以后就会自动启动ustreamer服务了,如果系统里有多个摄像头,摄像头编号可能每次启动都不一样,摄像头编号变了现有的启动命令就不起作用了。
如果摄像头video编号会变,可以尝试ls /dev/v4l/by-id/* 查找摄像头by-id,把命令修改成使用by-id启动:
/home/klipper/ustreamer/ustreamer --device=/dev/v4l/by-id/usb-RYS_USB_Camera_200901010001-video-index0 --host=0.0.0.0 --port=8080 -r 1280x720
by-id填入自己的设备id
到这里Klipper的摄像头基本设置就完成了,摄像头所拍摄的视频流对系统资源消耗比较大,如果上位机性能不足会卡顿或者影响打印,这时候可以通过降低分辨率、降低拍摄帧数、延迟摄影等方法减轻系统压力。
如果还需要其他功能可以参考网上的其他教程,比如:
https://www.cnblogs.com/sjqlwy/p/klipper_webcam.html