SatDump Web Edition:在浏览器里跑 SDR 卫星数据处理
FM 广播实时解调
调频广播的实时频谱,通过 WFM 模式完成解调并用 WebAudio 播放。

SatDump Web Edition 是 SatDump 的一个实验性浏览器移植版本。它把原本运行在桌面端的 C/C++ SDR 和卫星数据处理程序,通过 Emscripten 编译成了 WebAssembly,核心信号处理流程直接跑在浏览器本地,不依赖任何后端服务。
网页通过 WebUSB 直接控制 RTL-SDR,不需要安装插件、后台守护进程或者本地转发代理。USB 传来的 IQ 数据进入浏览器后,由 WebAssembly 多线程 DSP 管线完成频谱显示、解调、录音和卫星数据处理——所有运算都在你自己的机器上完成,原始数据不会上传到任何服务器。
目前测试过 RTL-SDR Blog V4,支持 AM、NFM、WFM、USB、LSB 和 CW 实时解调。项目还处于实验阶段,欢迎拿各种 RTL-SDR、不同浏览器和接收场景来试试。
为什么会有这个移植
去年我把 SSDV 解码器搬到了网页端,调试了一段时间后,效果比我预想的好不少。WebAssembly 的性能已经能扛住不少原本只属于桌面程序的信号处理任务,配合 WebGL、Web Worker 和 SharedArrayBuffer,搭出完整的实时处理流水线也没问题。
既然 SSDV 解码器能在浏览器里跑,那……能不能再往前走一步,把 SatDump 也搬进去?
从去年开始,我就在“SSDV 数字慢扫描电视”群里时不时更新开发进展。
SatDump 本身是个大家伙:完整的 DSP 框架、图形界面、FFT 和滤波器、大量卫星协议与仪器处理插件、图像处理、投影、文件系统、网络功能,外加一堆 SDR 和音频设备后端。原生版本还依赖 VOLK、FFTW、libpng、SQLite、curl、NNG、libtiff 等一大堆库。
界面部分用的是 Dear ImGui,所以第一步是为它接上基于 WebGL 2 的渲染后端。
等界面能显示出来,真正的麻烦才刚开始:怎么把整个 C/C++ 工程和它的所有依赖移植到 WebAssembly?
- VOLK 跟 CPU 指令集优化绑得很紧;
- FFTW 在 Wasm 环境里需要另找替代实现;
- 原生线程要映射到 Web Worker;
- libusb 没法在浏览器里直接用;
- librtlsdr 的 USB 控制和 bulk transfer 得接到 WebUSB;
- 桌面文件系统得换成虚拟文件系统;
- 原生音频输出要改成 WebAudio;
- 原生 socket、动态插件和部分系统 API 在浏览器里压根不存在。
当时粗略评估了一下工作量,要改的依赖库太多,实在肝不动,于是就鸽了😆
转机
后来 Kimi 发布了 K3 模型,我第一时间把它接入了自己的工作流,发现它的 agent 能力确实能打——甚至比 Claude Opus 4.8、GPT 5.5 这类模型还要顺手,而且性价比极高。那……为什么不试试呢?
于是重新把这个项目捡了起来。移植过程中,我用 Kimi K3 处理了不少重复性较高的依赖适配和构建修改工作,我主要负责拆解任务、确定浏览器端架构、调整编译约束,并对生成的修改做检查、测试和修正。
完成第一轮依赖替换后,SatDump 的完整界面终于在浏览器里第一次成功启动了。

后续又修补了一堆堆栈溢出和 IO 锁死的问题。现在核心功能基本能正常使用,但依然属于实验性移植,性能和兼容性受浏览器、操作系统、GPU 驱动和 USB 控制器的影响比较大。
一些截图和说明
服务器只负责提供网页、WebAssembly 程序和静态资源文件,所有信号处理都在本地完成。
浏览器要求:WebGL2、WebAssembly、WebAssembly_SIMD128、WebUSB、AudioContext。
最低版本:Chrome ≥ 91 或 Edge ≥ 91。FireFox 和 Safari(macOS/iOS)因为不支持 WebUSB,暂时没法用。页面在加载之前会进行自检,实际使用建议装最新版 64 位 Chrome 或 Edge。
本文中的截图来自 Chrome 134.0.6998.166 和 Edge 134.0.3124.51。
连接 RTL-SDR
Windows 用户如果之前用过 RTL-SDR 并装过 WinUSB 驱动,打开 Recorders 页面就能直接连上 RTL-SDR Blog V4,不需要额外配置。

ImGui 界面渲染
ImGui 界面和图形组件全部通过 WebGL 2 渲染。

图像处理与投影
原生 SatDump 的图像处理、显示和投影功能也能在浏览器里跑。

文件系统虚拟化
SatDump 原生版本重度依赖文件系统,网页不能像桌面程序那样随意读写本地磁盘。Web 版通过 Emscripten FS 让程序内部维持类似普通文件系统的访问方式,同时用 IDBFS 把需要保留的数据存进浏览器的 IndexedDB。我还加了一个简单的文件管理器,方便浏览、导入、导出和管理虚拟文件系统里的内容。

设置页面
除了 Satdump 原版的配置项,还可以修改页面渲染的 DPI 系数(需要刷新页面生效)

关于页面

浏览器过去更多是界面和内容展示平台,但 WebAssembly、WebGL、WebUSB、WebAudio 和多线程技术发展到现在,已经可以承载相当完整的本地计算任务。一套规模不小的 C/C++ SDR 和卫星数据处理程序,确实可以不依赖本地后端,直接在现代浏览器里跑起来。下次去打星,带一台能开浏览器的设备就行😎
在线体验:https://satdump.quarix.me/