Misakiotoha
Misakiotoha
发布于 2026-09-13 / 20 阅读
0
0

fpv-relay使用教程

fpv-relay使用教程

fpv-relay使用教程

近期在海鲜市场上买了个OpenIPC的图传。

闲鱼.jpg

到手后立马就可以在手机上出图,还是很便利的。不过自己最近的项目需要在电脑上出图,并且能够实现将画面进行UDP推流,以及上下行控制链路收发等功能。手机上还是不太方便。因此稍微研究了一下,为其写了个PC端上位机。相关的代码都已经全部开源到了GitHub上。

分别针对Windows​与Linux

主要分为驱动安装与软件使用。

目前程序与驱动只在Windows10/11​与Linux kernel7.0​上测试过,理论上对于其他版本也兼容,Linux​正常是向下兼容的,向上的尚未测试。使用的时候需注意。并且这里都是在x86平台进行的开发与测试,暂时没有支持ARM​的计划,不过理论上程序与驱动完全可以移植到ARM平台。

驱动安装

  1. Windows

    Windows安装驱动稍复杂,首先需要准备以下文件:

    需要准备的文件.png

    下载链接最后都放到一个统一的网盘链接当中。

    正常情况下,你将RTL8812AU的网卡直接插入电脑,电脑可能会一直发出设备被拔出的音效,这很正常。当然运气好的话,在设备管理器中,你的网卡会被直接识别出来,并且出现在网卡一栏的设备当中。可以参考下面的图,正常网卡的名字应该是带着8812之类的名称的。我这里没有插入,参考一下位置即可。

    网卡界面.png

    主要来说一下没有出现的情况,正常买到手的时候,你直接插到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设备。

    zadig_list.png

    接着找到我们的8812au​网卡设备,名字一般是802.11n NIC之类的。

    zadig-choose.png

    选择它,然后再点install Driver​,稍等一会就好了。我这里因为替换完驱动了,就变成了Reinstall Driver

    zadig-install.png

    成功之后在设备管理器当中就会出现这个设备。

    最终网卡.png

    到此Windows的驱动部分就安装成功了。

    注意:这么做之后,你的RTL8812AU网卡就只能为图传软件服务了,无法作为上网的网卡了,不过真有人会拿这个USB网卡去上网吗?

  2. Linux

    Linux​的安装较为简单,因为相关的驱动我已经编译好打成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文件。

总结

总的来说,第一步是安装驱动,第二步是修改配置文件,第三步是运行加载配置文件,然后出图。你可以对每一路的图传进行单独预览,右键某一路图传即可。就可以预览实时的画面。

右键预览.png

目前软件为首个版本,估计会有不少bug,主要代码是让DeepSeek V4.1 Flash​完成的。然后人工Review。无危险病毒代码,放心食用。

附录

几个源码仓库和下载链接,大部分时候只需要使用下载链接即可,如果你对代码感兴趣也可以看看仓库。


评论