树莓派usbip转发usb设备到云服务器

2021年11月7日 87点热度 0人点赞 0条评论

问题描述

最近想要使用树莓派连接到 USB 摄像头录制视频推送到服务器,然后发现它占用大量的 CPU ,而且使用 ffmpeg 推流到 RTMP 服务器时其他设备无法播放视频流。所以又想了个把 USB 摄像头转发到云服务器的方案。

解决方案

这里使用 usbip 来进行 usb 设备转发。

云服务器

这里使用的是 ubuntu server 操作系统的服务器,需要有公网 IP。

首先安装 openvpn 服务器,可以使用 Nyr/openvpn-install: OpenVPN road warrior installer for Ubuntu, Debian, AlmaLinux, Rocky Linux, CentOS and Fedora (github.com) 的安装脚本。

编辑脚本自动生成的服务器配置,注释掉 push "redirect-gateway def1 bypass-dhcp" 和 push "dhcp-option DNS xxxx"。这一步是关闭 openvpn 的网络代理。修改完成后重启 openvpn server。

安装服务端完成后再次运行安装脚本,生成客户端配置文件。

安装usbip。

sudo apt install -y linux-tools-common

执行 usbip 查看并安装所需要的依赖程序。

sudo apt install -y linux-tools-5.4.0-84-generic linux-cloud-tools-5.4.0-84-generic

加载内核模块。

sudo modprobe usbip-core
sudo modprobe usbip-host

树莓派

这里使用树莓派4b,ubuntu 操作系统。首先安装 openvpn。

sudo apt install -y openvpn

传输服务端生成的客户端配置文件到树莓派的 /etc/openvpn/client 文件夹,扩展名修改为 .conf。然后可以使用 systemdctl 启动 openvpn 客户端。

sudo systemctl start openvpn-client@文件名

使用 ifconfig 命令获取客户端 ip 地址。

安装 usbip。

sudo apt install -y linux-tools-common

和云服务器一样,执行 usbip 查看并安装需要的程序。

sudo usbip
sudo apt install -y linux-tools-5.13.0-1009-raspi linux-cloud-tools-5.13.0-1009-raspi

加载内核模块。

sudo modprobe usbip-core
sudo modprobe usbip-host

启动 usbipd 进程。

sudo usbipd -D

使用 lsusb 和 sudo usbip list --local 命令确定转发的 usb 设备的 busid。

执行 sudo usbip bind --busid=你的busid 开始转发。停止转发为 sudo usbip unbind --busid=你的busid。

这里转发的是一个 usb 摄像头。

云服务器连接到树莓派

执行 sudo usbip list --remote=树莓派openvpn客户端ip 查看客户端转发设备列表。

执行 sudo usbip attach --remote= 树莓派openvpn客户端ip --busid=转发设备的busid。

服务端使用 lsusb 可以看到连接成功。

使用 v4l2 可以看到转发的摄像头正常。

AIKAMINO

这个人很懒,什么都没留下