fpv-relay使用教程
fpv-relay使用教程
近期在海鲜市场上买了个OpenIPC的图传。

到手后立马就可以在手机上出图,还是很便利的。不过自己最近的项目需要在电脑上出图,并且能够实现将画面进行UDP推流,以及上下行控制链路收发等功能。手机上还是不太方便。因此稍微研究了一下,为其写了个PC端上位机。相关的代码都已经全部开源到了GitHub上。
分别针对Windows与Linux。
主要分为驱动安装与软件使用。
目前程序与驱动只在Windows10/11与Linux kernel7.0上测试过,理论上对于其他版本也兼容,Linux正常是向下兼容的,向上的尚未测试。使用的时候需注意。并且这里都是在x86平台进行的开发与测试,暂时没有支持ARM的计划,不过理论上程序与驱动完全可以移植到ARM平台。
驱动安装
-
WindowsWindows安装驱动稍复杂,首先需要准备以下文件:
下载链接最后都放到一个统一的网盘链接当中。
正常情况下,你将
RTL8812AU的网卡直接插入电脑,电脑可能会一直发出设备被拔出的音效,这很正常。当然运气好的话,在设备管理器中,你的网卡会被直接识别出来,并且出现在网卡一栏的设备当中。可以参考下面的图,正常网卡的名字应该是带着8812之类的名称的。我这里没有插入,参考一下位置即可。
主要来说一下没有出现的情况,正常买到手的时候,你直接插到
Windows的电脑上,往往不会出现对应的网卡名称,反而电脑会识别不了这个网卡,这是因为到手的网卡似乎不是完全意义上的8812au。那么首先就需要解决识别不到网卡的问题。准备文件里面有个
rtwlanu.sys的文件,你需要将其复制到C:\Windows\System32\drivers的下面,一般情况下,你所使用的用户即便是管理员用户也无法向这个目录内复制文件,因为这个目录的权限归TrustedInstaller所拥有,因此你需要临时把该目录的权限交给你当前使用的用户。使用管理员权限打开
powershell或是cmd,这里不会就去百度吧。然后依次执行。
takeown /f C:\Windows\System32\drivers\rtwlanu.sys icacls C:\Windows\System32\drivers\rtwlanu.sys /grant Administrators:F ren C:\Windows\System32\drivers\rtwlanu.sys rtwlanu.sys.bak注意:第二条命令内的
Administrators需要替换成你自己实际使用的账户名称。第一条是将文件所有权从
TrustedInstaller夺给当前的用户,第二条则是给当前用户对rtwlanu.sys完全控制的权限,第三条则是为系统自带的网卡驱动做了备份。执行完之后,将准备文件当中的
rtwlanu.sys复制到C:\Windows\System32\drivers的下面即可。然后重新插拔网卡,此时就会出现对应的网卡了。
接下来需要将网卡的驱动替换成USB驱动了,也就是将其作为USB设备来使用,在
Windows上必须这么做,后面会说为什么。这里使用
zadig软件来完成这件事。打开
zadig,然后选择Options->List All Devices,这样会显示所有的USB设备。
接着找到我们的
8812au网卡设备,名字一般是802.11n NIC之类的。
选择它,然后再点
install Driver,稍等一会就好了。我这里因为替换完驱动了,就变成了Reinstall Driver。
成功之后在设备管理器当中就会出现这个设备。

到此
Windows的驱动部分就安装成功了。注意:这么做之后,你的
RTL8812AU网卡就只能为图传软件服务了,无法作为上网的网卡了,不过真有人会拿这个USB网卡去上网吗?
-
LinuxLinux的安装较为简单,因为相关的驱动我已经编译好打成deb包了,但你如果使用的是Arch或者其他系的,请自行clone源码编译。Linux需要准备的文件为rtl8812au-dkms_5.6.4.2~20230501-1_all.deb,也在链接当中。内部是已经编译打包好的deb文件,适配了较新的内核版本,
fork自aircrack-ng/rtl8812au这个仓库,完成了对Linux Kernel 7.0的适配。安装也很容易,你都用
Debian' Linux了,装个deb包应该都是会的。安装完成之后,你会发现多出来一个网卡设备,主要关注网卡的名字,一会写配置要使用。到这里
Linux的驱动也打完了。这里打的是网卡驱动,Linux较新的发行版一般自带这个网卡的USB驱动,所以你插上网卡是可以直接在lsusb当中看到网卡的信息的。Bus 003 Device 010: ID 0bda:881a Realtek Semiconductor Corp. RTL8812AU-VS 802.11a/b/g/n/ac 2T2R DB WLAN Adapter
软件使用
软件支持两种使用方式,分别是cli和gui两种方式,个人建议直接使用gui模式,除非只需要转发推流功能,否则没必要使用cli的方式。
两种方式共用同一份 YAML 配置文件,所以无论用哪种,第一步都是把示例配置复制成 config.yaml,然后改里面的几处关键参数。
配置文件结构
配置一共就四段,captures 是必填的,其余都是可选:
captures: # 必填:每一路图传(一块接收卡或一个 UDP 输入)
uplink: # 可选:电脑 → 无人机 的上行(mavlink / 遥控)
status: # 可选:HTTP 状态页
rtsp: # 可选:RTSP 兼容输出
天空端(OpenIPC / PixelPilot)的默认参数是固定的,配置里主要就是保证下面这几个值和天空端一致:
| 参数 | 值 | 说明 |
|---|---|---|
link_id |
7669206 |
图传链路 ID |
视频 radio_port |
0 |
视频流端口 |
mavlink 下行 radio_port |
16(0x10) |
遥测下行端口 |
上行 radio_port |
160 |
上行端口 |
epoch |
0 |
一般填 0 |
key |
gs.key |
加密密钥 |
一般来说,如果你没有修改过天空端的参数,你不需要关心上面的参数。因为很多东西都是默认的,例如key文件,已经放到了程序下,示例配置已经配置为了从程序所在位置找key文件了。
Windows使用教程
config.windows.example.yaml 是给 Windows 用的示例配置。先把示例配置复制一份,改名为 config.yaml,放在和 exe 同一个目录下。参考下面的去修改。
captures:
- name: drone1 # 这一路的唯一名字,随便起,但不能重复
type: wfb # Windows 上固定是 wfb(走 devourer USB 采集)
usb_vid: 0x0bda # 网卡 USB VID
usb_pid: 0x881a # 网卡 USB PID,0bda:881a 就是 RTL8812AU-VS
key: gs.key # 密钥路径;建议和 exe 放一起直接写 gs.key
link_id: 7669206 # 天空端链路 ID,默认不用改
radio_port: 0 # 视频端口,默认不用改
epoch: 0 # 默认不用改
channel: 161 # 信道,要和天空端一致
bandwidth: HT20 # 带宽,要和天空端一致(HT20 / HT40+)
region: BO # 监管域,一般不用改
codec: h265 # 天空端是 H265 就写 h265,H264 就写 h264
forward:
- "127.0.0.1:5700" # 本机接收端(低延迟播放)
- "192.168.1.50:5600" # 局域网里另一台电脑/手机
这里最关键的是 usb_vid / usb_pid、key、channel、codec 和 forward。
usb_vid /usb_pid:用lsusb 或设备管理器里的硬件 ID 确认,一般是0bda:881a。设备管理器里看“硬件 ID”是USB\VID_0BDA&PID_881A 这种格式,对应填0x0bda 和0x881a。key:如果gs.key 和 exe 在同一目录,直接写gs.key 就行;否则写绝对路径,例如C:/fpv-relay/gs.key。注意 YAML 里路径的反斜杠要写成/或者双反斜杠。channel /bandwidth /region:这三个必须和天空端一致,不一致就解不出画面(日志里会一直有解密错误)。默认161 / HT20 / BO,天空端没动过就别动。codec:填错会导致能收到包但预览黑屏,H265 填h265,H264 填h264。forward:解出来的裸 RTP 要往哪里推。127.0.0.1:5700 是本机,想看画面就留着;想给局域网里别的机器就加一条目标IP:端口。可以写多条。
一个最小可用的 Windows 配置长这样。
captures:
- name: drone1
type: wfb
usb_vid: 0x0bda
usb_pid: 0x881a
key: gs.key
link_id: 7669206
radio_port: 0
epoch: 0
channel: 161
bandwidth: HT20
region: BO
codec: h265
forward:
- "127.0.0.1:5700"
其余像 status、rtsp、record、mavlink、uplink 都可以先不管,等基础出图了再按后面的可选功能一节逐个打开。
在绝大多数情况下,你只需要修改usb_vid这一项即可(甚至不需要改)。要从设备管理器里面去看这个USB网卡设备的硬件ID信息。同时需要注意key的路径,示例配置可能带有ass前缀目录名称,你可以删掉其前缀目录。
Linux使用教程
Linux的使用也类似,主要需要关心的字段是iface,也就是用iface去标识设备,使用ip link可以获得网卡基本信息。
8: wfb0: <BROADCAST,MULTICAST> mtu 2312 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 60:42:7f:da:d1:67 brd ff:ff:ff:ff:ff:ff
在为这里已经为我的网卡固定了wfb0的名字了,当然不固定也没关系,只是重启电脑之后可能就要重新写配置了,网卡名称变了。同时还有就是key字段的路径,最好写绝对路径,因为程序的当前工作目录不一定是你放配置的地方,写相对路径容易找不到。
给出一个最小可用配置。
captures:
- name: drone1
type: wfb
iface: wfb0
key: /opt/fpv-relay/gs.key
link_id: 7669206
radio_port: 0
epoch: 0
channel: 161
bandwidth: HT20
region: BO
codec: h265
forward:
- "127.0.0.1:5700"
运行图形界面需要使用sudo,如果不想每次运行都sudo,可以给可执行文件加网络权限,如何加网络权限,问一下AI来的更快。
这里主要介绍了基础功能,其他高级功能可见代码仓库的README.md文件。
总结
总的来说,第一步是安装驱动,第二步是修改配置文件,第三步是运行加载配置文件,然后出图。你可以对每一路的图传进行单独预览,右键某一路图传即可。就可以预览实时的画面。

目前软件为首个版本,估计会有不少bug,主要代码是让DeepSeek V4.1 Flash完成的。然后人工Review。无危险病毒代码,放心食用。
附录
几个源码仓库和下载链接,大部分时候只需要使用下载链接即可,如果你对代码感兴趣也可以看看仓库。