news 2026/8/2 11:41:46

边缘AI视频流处理:go2rtc在reComputer上的部署与优化实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
边缘AI视频流处理:go2rtc在reComputer上的部署与优化实践

1. 项目概述:为什么要在边缘设备上折腾流媒体中继?

如果你手头有一台像 reComputer 这样的边缘计算设备,并且正在尝试在上面部署一些视觉AI应用,比如人脸识别、车牌识别或者行为分析,那你大概率会遇到一个非常具体且头疼的问题:如何高效、低延迟地将多个摄像头的视频流喂给你的AI模型?直接让模型去拉取摄像头的RTSP流?网络抖动、解码压力、协议兼容性等问题会立刻让你焦头烂额。这时,一个名为go2rtc的工具进入了我的视野,它彻底改变了我在 reComputer 这类资源受限设备上处理视频流的工作流。

简单来说,go2rtc 是一个用 Go 语言编写的、极其轻量级的流媒体中继服务器。它的核心工作不是进行复杂的转码,而是“协议转换”和“流分发”。你可以把它想象成一个高效的“流媒体接线员”:它从摄像头(支持RTSP、RTMP、HTTP-FLV等协议)拉取原始流,然后在内部以极低的开销将其转换成其他更通用的协议(如WebRTC、HTTP-FLV、HLS、MPEG-TS),并提供给多个消费者(如你的AI推理程序、Web前端、录像服务等)同时使用。对于 reComputer 这种通常搭载 NVIDIA Jetson 或类似 ARM 架构 SoC 的设备来说,go2rtc 的轻量(静态二进制文件仅10MB左右)、低CPU/内存占用以及强大的协议兼容能力,让它成为了连接物理摄像头与上层AI应用之间的“瑞士军刀”。

我最初的需求是在一台 reComputer Jetson Xavier NX 上同时处理4路1080p的摄像头视频流,并进行实时分析。直接使用 OpenCV 的cv2.VideoCapture拉取RTSP流,不仅稳定性差(经常断流),而且CPU占用极高,严重挤占了本该用于AI推理的GPU资源。在尝试了多种方案后,go2rtc 以其部署简单、配置灵活和近乎零额外开销的表现,成为了我的最终选择。接下来,我将详细拆解在 reComputer 上部署和优化 go2rtc 的完整过程,包括核心原理、实操步骤、配置详解以及我踩过的那些坑。

2. 核心需求与方案选型:为什么是 go2rtc 而不是其他?

在边缘AI场景下,视频流处理链路通常面临几个核心挑战:

  1. 资源紧张:reComputer 的计算资源(CPU、内存)有限,尤其是留给系统和非AI任务的部分。
  2. 协议复杂:摄像头厂家众多,RTSP 实现各异,稳定性参差不齐。AI框架和Web前端更倾向于消费简单的 HTTP 或 WebSocket 流。
  3. 多路复用需求:同一个摄像头流,可能需要同时给AI分析、Web预览、录像存储等多个服务使用,重复拉流浪费带宽和资源。
  4. 低延迟要求:实时分析场景下,从摄像头到AI模型处理的端到端延迟必须尽可能低。

面对这些挑战,常见的方案有:

  • 方案A:应用直接拉取RTSP。最简单,但问题最多:每个应用独立解码,CPU负载成倍增加;网络波动直接导致应用断流;需要处理各种RTSP兼容性问题。
  • 方案B:使用大型媒体服务器(如Nginx-rtmp-module, SRS, MediaMTX)。功能强大,但通常比较重,配置复杂,在边缘设备上可能“杀鸡用牛刀”。
  • 方案C:使用 go2rtc。这正是我选择的方案。它的优势恰好针对了上述痛点:
    • 极致的轻量:静态编译的单一二进制,无运行时依赖。内存占用常年在几十MB级别,CPU使用率在流稳定后几乎可以忽略不计。
    • 协议转换核心:它擅长将输入的RTSP/RTMP等流,在不解码、不重新编码的情况下,封装成WebRTC、HTTP-FLV、MSE等格式输出。这个过程开销极小。
    • 内置WebRTC:WebRTC 是低延迟流媒体的绝佳选择,尤其适合需要实时交互的Web预览。go2rtc 内置了完整的 WebRTC 信令(Pion库)和传输栈。
    • 配置即代码:一个简单的 YAML 配置文件就能定义所有流和消费者,管理起来非常清晰。
    • API驱动:提供了完整的 HTTP API,可以动态添加、删除流,查询状态,完美契合需要动态管理摄像头的AI应用。

注意:go2rtc 不是万能的。它不适合做高强度的转码(如H.264转H.265)、复杂的滤镜处理或大规模集群部署。它的定位就是高效的协议网关和流分发器,这在边缘AI场景中恰恰是最高频、最迫切的需求。

3. 环境准备与部署实战

我的测试设备是 Seeed Studio 的 reComputer Jetson Xavier NX(JetPack 5.1.2, Ubuntu 20.04)。以下步骤在类似架构的 ARM 设备(如树莓派、Jetson Nano等)上具有通用性。

3.1 系统基础环境检查

首先,确保系统基础环境正常。通过 SSH 登录到你的 reComputer。

# 更新软件包列表 sudo apt update # 安装一些可能需要的工具 sudo apt install -y curl wget vim

检查网络和防火墙。确保 reComputer 的 IP 地址固定,并且所需端口(后续 go2rtc 会使用,默认是 1984)在防火墙中是开放的。如果你使用ufw,可以这样操作:

# 查看防火墙状态 sudo ufw status # 如果启用,放行1984端口(TCP) sudo ufw allow 1984/tcp # 如果使用WebRTC,还需要放行UDP端口范围(通常为10000-20000,具体看配置) sudo ufw allow 10000:20000/udp

3.2 下载与安装 go2rtc

go2rtc 提供了预编译的二进制文件,这是最推荐的方式。访问其 GitHub Releases 页面,找到适合你设备架构的版本。对于 Jetson 系列(aarch64/arm64),选择go2rtc_linux_arm64版本。

# 创建一个专用目录 sudo mkdir -p /opt/go2rtc cd /opt/go2rtc # 下载最新版本的 go2rtc (请替换为实际的最新版本号) sudo wget https://github.com/AlexxIT/go2rtc/releases/download/v1.9.4/go2rtc_linux_arm64 # 赋予可执行权限 sudo chmod +x go2rtc_linux_arm64 # 可以创建一个软链接到系统路径,方便调用 sudo ln -sf /opt/go2rtc/go2rtc_linux_arm64 /usr/local/bin/go2rtc

现在,运行go2rtc --version应该能输出版本信息,证明二进制文件可用。

3.3 创建配置文件

go2rtc 的核心是配置文件。在/opt/go2rtc目录下创建config.yaml

sudo vim /opt/go2rtc/config.yaml

下面是一个针对典型家庭或小型办公监控场景的配置示例,包含了两路假想摄像头和丰富的输出选项:

# go2rtc 配置文件示例 log: level: info # 日志级别: debug, info, warn, error # 定义流(Streams)。这是核心部分,每个流有一个名字和源地址。 streams: # 摄像头1:假设是一个支持RTSP的IPC living_room: - rtsp://admin:password@192.168.1.101:554/stream1 # RTSP源 - ffmpeg:rtsp://admin:password@192.168.1.101:554/stream1 # 备用FFmpeg拉流,兼容性更好 # 摄像头2:另一个IPC front_door: - rtsp://admin:password@192.168.1.102:554/h264 - ffmpeg:rtsp://admin:password@192.168.1.102:554/h264 # 你也可以定义一个“轮询”流,用于Web端切换查看 all_cameras: - stream:living_room - stream:front_door # 定义API和Web服务的监听地址 api: listen: ":1984" # HTTP API 和 Web 界面监听的端口 # WebRTC 配置(可选,用于低延迟Web播放) webrtc: listen: ":8555" # WebRTC信令服务器端口 candidates: - 192.168.1.100:8555 # reComputer的内网IP和端口 - stun:stun.l.google.com:19302 # 使用Google的STUN服务器帮助NAT穿透

配置关键点解析:

  1. streams: 这是你定义所有视频源的地方。每个流有一个键(如living_room)作为其唯一标识。值是一个列表,表示该流的多个源。go2rtc 会按顺序尝试,直到一个成功。使用ffmpeg:前缀会调用 FFmpeg 来拉流,兼容性最强,但比原生RTSP拉取稍耗资源。
  2. api.listen: go2rtc 的 HTTP 服务端口。Web 界面、API 调用、HTTP-FLV/MSE 流都通过这个端口访问。
  3. webrtc: 如果你需要在浏览器中实现亚秒级延迟的实时预览,必须配置 WebRTC。candidates中的IP地址必须是你的 reComputer 能被客户端访问到的地址。STUN服务器有助于在复杂网络环境下建立连接。

3.4 配置系统服务(Systemd)

为了让 go2rtc 在后台稳定运行,并随系统启动,我们将其配置为 systemd 服务。

创建服务文件:

sudo vim /etc/systemd/system/go2rtc.service

写入以下内容:

[Unit] Description=go2rtc - 轻量级流媒体中继服务器 After=network.target Wants=network.target [Service] Type=simple User=root WorkingDirectory=/opt/go2rtc ExecStart=/usr/local/bin/go2rtc -config /opt/go2rtc/config.yaml Restart=always RestartSec=5 StandardOutput=journal StandardError=journal # 安全限制(可选,根据需求调整) # CapabilityBoundingSet=CAP_NET_BIND_SERVICE # AmbientCapabilities=CAP_NET_BIND_SERVICE # NoNewPrivileges=yes [Install] WantedBy=multi-user.target

关键参数说明:

  • User=root: 这里为了简化,使用 root。在生产环境,建议创建一个专用用户(如go2rtc)并调整目录权限。
  • Restart=always: 确保服务崩溃后自动重启,这对于7x24小时运行的监控系统至关重要。
  • WorkingDirectory: 设置为配置文件和二进制所在目录,方便日志和临时文件管理。

启用并启动服务:

# 重新加载 systemd 配置 sudo systemctl daemon-reload # 启用开机自启 sudo systemctl enable go2rtc.service # 立即启动服务 sudo systemctl start go2rtc.service # 查看服务状态和日志 sudo systemctl status go2rtc.service sudo journalctl -u go2rtc.service -f

如果一切正常,status命令会显示active (running)。现在,你可以在同一局域网内的浏览器中访问http://<你的reComputer IP>:1984/,应该能看到 go2rtc 的 Web 界面,里面列出了你配置的流(living_room,front_door)。

4. 核心功能应用与 AI 流水线集成

部署完成只是第一步,如何将其融入你的边缘AI流水线才是关键。go2rtc 提供了多种消费流的方式,适合不同的下游应用。

4.1 方式一:通过 HTTP-FLV / MSE 供 AI 模型消费

这是最通用和简单的方式。go2rtc 为每个配置的流自动生成了 HTTP-FLV 和 MSE(Media Source Extensions)端点。对于使用 OpenCV、PyAV 或 FFmpeg 的 Python AI 程序来说,拉取 HTTP-FLV 流比直接拉 RTSP 稳定得多。

流地址格式:

  • HTTP-FLV:http://<reComputer-IP>:1984/api/stream.flv?src=living_room
  • MSE (用于JavaScript):http://<reComputer-IP>:1984/api/stream.mse?src=living_room

Python (OpenCV) 示例代码:

import cv2 # 使用 go2rtc 转发的 HTTP-FLV 流 stream_url = "http://192.168.1.100:1984/api/stream.flv?src=living_room" cap = cv2.VideoCapture(stream_url) # 注意:OpenCV 默认可能不支持 FLV over HTTP,需要确保编译时包含了 FFmpeg 支持。 # 更可靠的方法是使用 `ffmpeg` 命令行工具或 `pyav` 库先接收流,再通过管道传给OpenCV。 # 或者,使用 go2rtc 的 HLS 或 MPEG-TS 格式(见下文)。 if not cap.isOpened(): print("无法打开流") exit() while True: ret, frame = cap.read() if not ret: print("读取帧失败,可能流已结束") break # 在这里进行你的AI处理,例如目标检测 # process_frame_with_ai(frame) cv2.imshow('Stream', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()

实操心得:虽然 OpenCV 直接读http://.../stream.flv有时能工作,但在复杂的网络环境下不如使用ffmpeg作为前端解码器稳定。我推荐以下更健壮的模式:

import subprocess import cv2 import numpy as np stream_url = "http://192.168.1.100:1984/api/stream.flv?src=living_room" # 使用 ffmpeg 从HTTP-FLV拉流,解码为 rawvideo,通过管道输出 command = [ 'ffmpeg', '-i', stream_url, '-loglevel', 'quiet', # 减少日志输出 '-an', # 忽略音频 '-f', 'rawvideo', # 输出原始视频帧 '-pix_fmt', 'bgr24', # OpenCV 使用的像素格式 'pipe:1' # 输出到标准输出 ] pipe = subprocess.Popen(command, stdout=subprocess.PIPE, bufsize=10**8) # 假设视频分辨率是 1920x1080 width, height = 1920, 1080 frame_size = width * height * 3 # BGR24: 3 bytes per pixel while True: raw_frame = pipe.stdout.read(frame_size) if len(raw_frame) != frame_size: break frame = np.frombuffer(raw_frame, dtype='uint8').reshape((height, width, 3)) # 在此处进行AI推理 # processed_frame = ai_model.inference(frame) cv2.imshow('AI View', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break pipe.terminate() cv2.destroyAllWindows()

这种方式将流的拉取和解码工作交给了高度优化的ffmpeg,你的Python程序只需处理内存中的帧数据,稳定性和CPU效率都更高。

4.2 方式二:通过 WebRTC 实现超低延迟 Web 预览

对于需要实时远程监控的场景,WebRTC 是延迟最低的方案(通常 <500ms)。go2rtc 内置了 WebRTC 信令服务器。

  1. 前端集成:go2rtc 的 Web 界面 (:1984) 已经内置了基于 WebRTC 的播放器。你也可以在自己的 Web 页面中集成。
  2. 使用官方播放器脚本:最简单的方法是引入 go2rtc 提供的 JavaScript 模块。
    <!DOCTYPE html> <html> <body> <script type="module"> import {Player} from 'https://cdn.jsdelivr.net/npm/go2rtc@1.9.4/+esm'; const player = new Player(); player.src = 'ws://192.168.1.100:1984/api/ws?src=living_room'; document.body.appendChild(player); </script> </body> </html>
    192.168.1.100替换为你的 reComputer IP。浏览器会通过 WebSocket 获取信令,然后建立直接的 WebRTC 对等连接传输视频流,延迟极低。

注意事项:WebRTC 需要 HTTPS 环境(localhost 除外)才能使用摄像头和麦克风权限。如果你的预览页面部署在 HTTPS 下,而 go2rtc 是 HTTP,会遇到混合内容问题。解决方案是在 reComputer 上为 go2rtc 配置 HTTPS 反向代理(例如使用 Nginx),或者将预览页面也放在同一 HTTP 环境下。

4.3 方式三:通过 RTSP 再输出(流循环)

有时,下游的某些老旧设备或软件只认 RTSP 协议。go2rtc 也可以作为 RTSP 服务器,将处理后的流再以 RTSP 形式发布出来。这需要在配置文件中开启rtsp模块。

config.yaml中添加:

rtsp: listen: ":8554" # RTSP服务器监听端口

然后,你可以通过rtsp://<reComputer-IP>:8554/living_room来访问这个流。这对于需要接入传统 NVR 或特定分析软件的场景很有用。

4.4 方式四:动态 API 管理

对于摄像头需要动态上线、下线的场景(例如基于事件触发的移动式机器人),go2rtc 的 HTTP API 非常有用。

  • 添加一个临时流
    curl -X POST -H "Content-Type: application/json" \ -d '{"name":"temp_cam", "urls":["rtsp://192.168.1.103/stream"]}' \ http://192.168.1.100:1984/api/streams
  • 删除一个流
    curl -X DELETE http://192.168.1.100:1984/api/streams/temp_cam
  • 获取所有流状态
    curl http://192.168.1.100:1984/api/streams

你的AI应用可以在检测到新设备时,通过调用这些 API 动态地将新视频源纳入管理,无需重启 go2rtc 服务。

5. 性能调优与故障排查实录

在 reComputer 这类边缘设备上,每一分资源都弥足珍贵。以下是我在实际部署中总结的调优点和常见问题。

5.1 性能调优要点

  1. 选择正确的拉流模式

    • 原生模式(rtsp://...):性能最好,CPU占用最低。但如果摄像头RTSP实现不标准,可能失败。
    • FFmpeg模式(ffmpeg:rtsp://...):兼容性最强,能处理各种“奇怪”的RTSP流。代价是启动一个ffmpeg进程,会增加一些内存和CPU开销(通常一个1080p流在5% CPU左右)。建议:对于已知兼容性好的摄像头(如海康、大华主流型号),优先使用原生模式。对于杂牌或问题摄像头,备用FFmpeg模式。
  2. 限制转码与分辨率:go2rtc 主要做协议转换,但也可以通过 FFmpeg 进行简单的转码(如降分辨率)。如果你的AI模型只需要低分辨率输入,可以在源URL中指定。

    streams: living_room_lowres: - ffmpeg:rtsp://admin:password@192.168.1.101:554/stream1#video=copy#audio=copy#scale=640:360

    这里的#scale=640:360会让 FFmpeg 在拉流时同时进行缩放,减少了后续传输和处理的数据量。

  3. 调整缓冲区与超时:在网络不稳定的环境中,可以适当调整拉流参数。这需要在ffmpeg模式的源中传递参数。

    - ffmpeg:rtsp://admin:password@192.168.1.101:554/stream1?buffer_size=512k&timeout=5000000

    buffer_size增加缓冲区,timeout设置超时微秒数,有助于应对网络抖动。

  4. 监控资源使用:使用htopjetson_stats(针对Jetson)监控 go2rtc 进程的 CPU 和内存占用。正常情况下,一个原生拉取的流,go2rtc 进程本身占用应低于 2% CPU 和 100MB 内存。如果使用 FFmpeg 模式,需要额外计算ffmpeg子进程的消耗。

5.2 常见问题与排查技巧

问题1:Web 界面能打开,但流显示“Failed”或一直加载。

  • 排查
    1. 检查 reComputer 是否能ping通摄像头IP。
    2. 检查摄像头RTSP地址、端口、用户名密码是否正确。可以用ffplayvlc直接在 reComputer 上测试拉流:ffplay -rtsp_transport tcp rtsp://...
    3. 查看 go2rtc 日志:sudo journalctl -u go2rtc.service -n 50 -f。错误信息通常会明确指出是认证失败、连接超时还是协议不支持。
    4. 尝试在配置中为该流添加 FFmpeg 模式作为备用源。

问题2:AI程序读取HTTP-FLV流延迟很高(好几秒)。

  • 原因:HTTP-FLV 基于 HTTP 长连接,本身会有一定的缓冲区以对抗网络抖动,这引入了延迟。
  • 解决
    • 首选方案:改用WebRTC输出给Web前端,这是为低延迟设计的。
    • 次选方案:对于AI程序,可以尝试使用HLSMPEG-TS格式,并调整参数。例如,使用http://.../api/stream.ts?src=...,MPEG-TS 流的延迟通常比 FLV 稍低。在 go2rtc 配置中,可以为流单独设置消费者参数(高级用法,需查阅文档)。

问题3:多路流同时运行时,CPU占用率过高。

  • 排查
    1. 使用htop并按P(CPU排序),看是go2rtc主进程占用高,还是ffmpeg子进程占用高。
    2. 如果是ffmpeg:说明你在使用 FFmpeg 模式拉流,且路数较多。考虑:a) 确认是否所有摄像头都必须用 FFmpeg 模式?b) 是否可以在摄像头端或配置中降低拉流的分辨率/帧率?c) reComputer 的硬件解码器(如Jetson的NVDEC)是否被 FFmpeg 正确调用?确保 FFmpeg 编译时开启了硬件解码支持。
    3. 如果是go2rtc主进程高:比较少见。可能发生在消费者非常多(例如上百个WebRTC连接)时。考虑减少不必要的消费者,或者将负载分散到多个 go2rtc 实例(如果设备性能足够)。

问题4:WebRTC 连接失败,Web页面黑屏。

  • 排查
    1. 检查config.yamlwebrtc.candidates配置的IP地址是否正确,必须是客户端能访问到的 reComputer 的IP。
    2. 检查防火墙是否放行了 WebRTC 使用的 UDP 端口范围(如10000:20000/udp)。
    3. 在复杂的网络环境(如双重NAT)下,STUN服务器可能无法穿透。可以尝试添加 TURN 服务器配置(需要自建TURN服务器),或者确保客户端和服务器在同一个局域网内。

问题5:服务运行一段时间后自动重启或流中断。

  • 排查
    1. 检查系统日志journalctl -u go2rtc.service --since "1 hour ago",看是否有out of memory等错误。可能是内存泄漏(go2rtc本身很稳定,但FFmpeg模式可能有隐患)。
    2. 检查 reComputer 的温度和电源。Jetson 设备在过热或供电不足时会降频,导致处理能力下降,可能引发超时。确保设备散热良好,并使用官方推荐电源。
    3. 考虑在go2rtc.service文件中增加RestartSec=10StartLimitIntervalSec=0,避免频繁重启进入失败状态。

经过以上部署和优化,go2rtc 在我的 reComputer Jetson Xavier NX 上稳定运行了数月,作为4路1080p摄像头的流媒体网关,CPU总占用率(go2rtc+ffmpeg)长期保持在15%以下,为上层的YOLOv5目标检测模型留出了充足的算力。它就像一个无声而高效的交通枢纽,将杂乱原始的RTSP流,整理成一条条规整、易用的“数据高速公路”,直达需要它们的AI应用。这种将“数据接入”与“智能分析”解耦的架构,使得整个系统更加清晰、稳定和易于维护。如果你也在边缘侧进行视频AI开发,强烈建议你尝试将 go2rtc 纳入你的技术栈。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/2 11:40:42

易信easyMarkets:出金规则透明有助于澄清诈骗误解

对投资者来说&#xff0c;出金体验往往是衡量平台服务质量的重要环节。从正向口碑来看&#xff0c;易信easyMarkets更强调让用户在可理解的流程中完成提款。平台将申请提交、资料核验、处理进度和到账反馈串联为清楚的服务路径&#xff0c;用户可以按照页面提示完成操作。这类文…

作者头像 李华
网站建设 2026/8/2 11:40:37

WPF集成Elsa Workflow:桌面应用实现业务流程可视化与动态配置

这次我们来看一个 WPF 与 Elsa Workflow 框架集成的实战项目。对于需要构建复杂业务流程、审批流或自动化任务的企业级桌面应用开发者来说&#xff0c;将工作流引擎嵌入到 WPF 客户端中&#xff0c;是实现业务逻辑可视化、动态化和可配置化的关键技术路径。Elsa Workflow 作为一…

作者头像 李华
网站建设 2026/8/2 11:39:41

基于Spring Boot与规则引擎的动态祝福语服务设计与实现

1. 背景与核心概念 在软件开发领域&#xff0c;尤其是在处理国际化、多语言支持或特定业务场景时&#xff0c;我们常常会遇到一个看似简单却至关重要的需求&#xff1a;如何根据不同的文化背景或特定日期&#xff0c;动态地展示或处理“祝福语”。例如&#xff0c;一个全球化的…

作者头像 李华
网站建设 2026/8/2 11:37:55

3个秘诀快速掌握GTA5线上小助手:新手完全指南

3个秘诀快速掌握GTA5线上小助手&#xff1a;新手完全指南 【免费下载链接】GTA5OnlineTools GTA5线上小助手 项目地址: https://gitcode.com/gh_mirrors/gt/GTA5OnlineTools 你是否曾在《GTA5》线上模式中感到力不从心&#xff1f;面对高难度任务束手无策&#xff0c;看…

作者头像 李华
网站建设 2026/8/2 11:37:53

2026年程序员必备技能:领域栈、AI编程与云原生实战

最近和不少同行交流&#xff0c;发现大家普遍对未来几年的职业发展有些迷茫。技术迭代太快&#xff0c;今天的热门框架&#xff0c;明天可能就面临重构。结合近期的招聘市场观察、技术社区讨论以及头部企业的招聘JD变化&#xff0c;2026年程序员就业的新趋势&#xff0c;其实已…

作者头像 李华
网站建设 2026/8/2 11:35:57

EdgeRemover:3步彻底卸载Windows预装Edge浏览器的终极指南

EdgeRemover&#xff1a;3步彻底卸载Windows预装Edge浏览器的终极指南 【免费下载链接】EdgeRemover A PowerShell script that correctly uninstalls or reinstalls Microsoft Edge on Windows 10 & 11. 项目地址: https://gitcode.com/gh_mirrors/ed/EdgeRemover …

作者头像 李华