Вебсдр довольно простая вещь, это сдр приемник интерфейс которого выполнен в виде обычного вебсайта. Это позволяет слушать его с любого устройства через обычный браузер в домашней сети, а если у вас есть внешний ip то можно открыть его другим людям (ну или слушать его самому издалека). Поскольку тут задействована еще и сетевая составляющая то установка и настройка такого софта немного сложнее чем эникейских программ под винду. Ну и нужен отдельный компьютер-сервер который будет всегда включен и готов отдавать данные подключающимся слушателям.
Надо уточнить что в случае вебсдр всей обработкой сигнала занимается сервер, клиентам в браузер отсылается только картинка спектра и звук.
Сейчас есть уже три варианта ПО относительно доступных желающим, два из них - опенсорс и могут использоваться без разрешений итд.
Также поскольку это обычные веб-сайты к ним применимы обычные админские трюки. Я прокидывал Openwebrx через i2p. Правда звук не прошел - что-то не то с вебсокетами, но интерфейс открывался через эту сеть.
websdr
"Голландский" веб-приемник
Закрытый код, распространяется по личному запросу к автору.
Поддерживает нативно только приемники типа softrock и rtl через rtl_tcp. Максимальная полоса обзора одного диапазона-2мгц.
Максимум 8 диапазонов на одном экземпляре сервера
Настраивается полностью конфигурационными файлами.
Есть версия бинарника для raspberry pi
OpenWebRx
Открытый код, устанавливается из репозитория, поддерживает огромное количество сдр приемников переключаемых с главной страницы (могут работать одновременно в разных вкладках), очень гибко настраивается через веб-интерфейс. Полоса в принципе ограничена мощностью компьютера.
Есть форк openwebrx+ отличающийся более широкой поддержкой разных сдр и бОльшим количеством декодеров, так же в нем есть чат между пользователями.
Имеет большое количество встроенных декодеров цифровой служебной и любительской связи, декодеры могут работать в фоне, данные содержащие в себе координаты (wspr, ft4, acars, ais, hfdl) отображаются на встроенной карте.
Есть готовые пакеты для arm (запускаются даже на роутерах и слабых одноплатниках)



PhantomSDR
Относительно новый, альфа версия. Открытый код, надо компилировать (ванильная версия имеет собранный пакет под windows), настраивается конфигурационными файлами, форк PhantomSDR+ содержит декодер ft8 и возможно список будет расти. Может работать (сейчас) одновременно только с одним приемником
.
KiwiSDR
Проект готового устройства - вебсдр.
Полный опенсорс, можете скачать все данные и изготовить самостоятельно. Состоит из платы с АЦП 12 бит 64MSps и слабенькой FPGA а так же платы Beaglebone - одноплатного компьютера. Всю обработку сигнала выполняет плата приемника на FPGA и отсылает по i2c в одноплатный компьютер звук и спектр, а тот уже крутит просто вебсервер, обрабатывает запросы и передает команды от пользователей FPGA. Отсюда максимум 4 пользователя с возможностью смотреть и зумировать спектр или 8 пользователей с возможностью смотреть только полный спектр 30 мгц, либо присоединиться к кому-то из пользователей послушать частоту которую слушает он. Кастомизации никакой, по сути готовое устройство, и было бы оно дешевым - было бы круто. Но от 64к за плату приемника на алике...
Из интересного-в ПО приемника встроен TDOA пеленгатор, и подключившись к нескольким приемникам к которым подключены GPS блоки можно выполнить триангуляцию источника сигнала
Также есть небольшое количество декодеров типичной КВ цифры
Одно время выпускался китайский клон на RaspberryPi-FlydogSDR



GrWebSdr
Случайно наткнулся на ссылку с его описанием, впервые вижу. Видимо в университете Томаша Масарика людям нечем заняться.
На Groups.io появился тред о разработке любителем G0ORX многопользовательского веб-интерфейса к KA9Q-radio
KA9Q-Radio само по себе интересно тем что использует метод Overlap and Save который гораздо экономнее расходует ресурсы процессора при демодуляции
Требует компиляции отдельно KA9Q radio и веб-морды.

nRSP-ST
Приемник от SDRPlay, сетевой но с возможностью подключаться и по usb. Может работать как тупо как rtl_tcp передавая необработанный iq поток в сдр приложение на компьютере по сети, так и работать как вебсдр, на небольшое количество пользователей.
Буквально на днях появился девайс web-888
Есть декодеры распространенной цифры, по заявлениям разраба тянет 13 пользователей с индивидуальным зумом спектра.
16бит, 62 мгц полосы. Сейчас стоит 27к


OpenWebRx

Бесплатный сервер вебсдр поддерживающий большое количество приемников, распространяется без ограничений. Использует CSDR, так что он не так экономичен как websdr от PA3FWM, но при небольшом количестве пользователей это не критично, плюс имеет огромное количество фич, встроенную карту на которой отображаются другие вебсдр зарегистрированные на своих сервисах, OWRX, websdr, Kiwisdr, расписания вещаний разных станций, плюс отображаются координаты декодированных сообщений APRS,WSPR,HFDL, все в которых передаются координаты (да, есть куча встроенных декодеров, метеофаксы, ISM. Много их.










Настройка

С использованием Docker
Нужен curl
sudo apt install curl

ставим докер
curl -sSL https://get.docker.com | sh

ставим OpenWebRx
sudo docker pull jketterl/openwebrx-full:stable
sudo docker volume create openwebrx-settings

Отключаем мешающие драйвера. Редактируем файл
sudo nano /etc/modprobe.d/blacklist.conf

добавляем в конец строчки
blacklist dvb_usb_rtl28xxu
blacklist sdr_msi3101
blacklist msi001
blacklist msi2500
blacklist hackrf
выход из редактора - Ctrl+O, Enter - сохранить файл, Ctrl+Х закрыть редактор

Чтобы приемник запускался автоматом после включения одноплатника достаточно ввести один раз
sudo docker run --restart always --name OPENWEBRX --device /dev/bus/usb -p 8073:8073 -v openwebrx-settings:/var/lib/openwebrx jketterl/openwebrx-full:stable

перезагружаем
sudo reboot

создаем аккаунт для веб-интерфейса приемника (доступ к настройкам на веб-странице радио)
sudo docker exec -it OPENWEBRX bash
python3 openwebrx.py admin adduser username
Далее с этими логином и паролем заходим в настройки в веб-интерфейс.

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

Если использовалась убунта с этого сайта то процесс установки нужно пропустить, там уже стоят драйвера и сам openwebrx.

Оригинал инструкции OpenWebRX+ Package Repository | ppa (luarvique.github.io)
Установка
sudo su
apt install gpg (вроде его в убунте нет по дефолту)
Добавляем репозитории
для Debian
wget -O - https://luarvique.github.io/ppa/openwebrx-plus.gpg | gpg --dearmor -o /etc/apt/trusted.gpg.d/openwebrx-plus.gpg
echo "deb [signed-by=/etc/apt/trusted.gpg.d/openwebrx-plus.gpg] https://luarvique.github.io/ppa/debian ./" > /etc/apt/sources.list.d/openwebrx-plus.list
wget -O - https://repo.openwebrx.de/debian/key.gpg.txt | gpg --dearmor -o /usr/share/keyrings/openwebrx.gpg
echo "deb [signed-by=/usr/share/keyrings/openwebrx.gpg] https://repo.openwebrx.de/debian/ bullseye main" > /etc/apt/sources.list.d/openwebrx.list


для Ubuntu
wget -O - https://luarvique.github.io/ppa/openwebrx-plus.gpg | gpg --dearmor -o /etc/apt/trusted.gpg.d/openwebrx-plus.gpg
echo "deb [signed-by=/etc/apt/trusted.gpg.d/openwebrx-plus.gpg] https://luarvique.github.io/ppa/ubuntu ./" > /etc/apt/sources.list.d/openwebrx-plus.list
wget -O - https://repo.openwebrx.de/debian/key.gpg.txt | gpg --dearmor -o /usr/share/keyrings/openwebrx.gpg
echo "deb [signed-by=/usr/share/keyrings/openwebrx.gpg] https://repo.openwebrx.de/ubuntu/ jammy main" > /etc/apt/sources.list.d/openwebrx.list
apt update
apt install openwebrx
В процессе установки система попросит поставить пароль к веб-интерфейсу настроек приемника, имя пользователя сменить сейчас нельзя.

Блокируем драйвера
nano /etc/modprobe.d/blacklist.conf
добавляем в конец открывшегося файла строчки
blacklist dvb_usb_rtl28xxu
blacklist sdr_msi3101
blacklist msi001
blacklist msi2500
blacklist hackrf
сохраняем
ctrl+o
enter
закрываем редактор
ctrl+x

установка драйвера sdrplay
wget https://www.sdrplay.com/software/SDRplay_RSP_API-Linux-3.07.1.run
chmod 755 ./SDRplay_RSP_API-Linux-3.07.1.run
./SDRplay_RSP_API-Linux-3.07.1.run
apt install soapysdr-module-sdrplay3

необязательно, удаление модуля miri (старый linux драйвер для тв-тюнеров на базе микросхем на которых делается SDRPlay)
apt purge soapysdr0.8-module-mirisdr
ВНИМАНИЕ, SDRPlay обновила апи, и теперь soapy не видит китайские клоны RSP1a (да и сам драйвер нестабильное говно), но автор OWRX+ добавил возможность работы с опенсорсным драйвером Libmirisdr. Это старый драйвер который умеет только работать с чипсетом, но ничего не "знает" о дополнительных вч переключателях приемника RSP1, так что его можно использовать только с клонами с кучей вч входов на отдельные диапазоны. Также я не знаю есть ли там серийники или их аналоги, так что как использовать с либмири несколько приемников я не знаю.

Дополнительно.
Если компьютер будет работать именно как сервер, и рабочий стол не нужен то можно управлять загрузкой графической оболочки командами ниже (требуется перезагрузка)
отключение рабочего стола (консоль будет доступна)
sudo systemctl set-default multi-user
вернуть рабочий стол
sudo systemctl set-default graphical

У меня была проблема: openwebrx теряет приемник после выключения\включения питания но после перезагрузки sudo reboot - работает.
Проблема оказалась где-то на стыке usb3 драйверов, sdrplay и soapy. Если я отключал в BIOS XHCI полностью - радио работало после выключения-включения питания, но нельзя было одновременно запустить приемники включенные в соседние порты на материнке (на ней всего 2 EHCI контроллера, и их пропускной способности хватает только на 2 приемника в режиме 8MSPS 12 bit). Если я включах XHCI в любом режиме (enabled, manual, auto, smar auto) и с любым режимом XHCI hand-off  все четыре приемника могли работать одновременно, но при пропадании и восстановлении питания терялись, lsusb устройства видел, SoapySDRUtil --find же устройств не видел. Но если после включения питания перезагрузить машину sudo reboot, все работало. Я оставил XHCI включенным, не покупать же еще два pci-express>usb контроллера, и добавил в crontab ежесуточную перезагрузку ночью, на всякий.

Настройка:
Первым делом в консоли на сервере выполняем:
sudo openwebrx admin adduser [username]     
Вводим имя и пароль нового юзера.
Затем, если у вас больше одного приемника и они подключены к разным антеннам или фильтрам то нам надо определить их серийники чтобы указать в настройках. Если у вас один приемник или несколько подключены к одной антенне через простой делитель то на серийники можно забить.
SoapySDRUtil --find
Пример вывода с обрезанной лишней информацией, подключено 3 устройства, серийный номер при работе soapy зависит от того к какому порту подключен клон sdrplay
.......
Found device 6
  driver = sdrplay
  label = SDRplay Dev0 RSP1 B0003P0001
  serial = B0003P0001

Found device 7
  driver = sdrplay
  label = SDRplay Dev1 RSP1 B0003P0003
  serial = B0003P0003

Found device 8
  driver = sdrplay
  label = SDRplay Dev2 RSP1 B0003P0002
  serial = B0003P0002

Строки вида serial = B0003P0002 представляют собой номера устройств RSP1a в системе, это не реальные серийники, это номера USB портов на шинах в которые вставлены приемники. Запишите их, они используются в качестве идентификаторов при назначении приемников.

В случае с RTL-SDR серийники можно менять.
В линуксе можно втыкать приемники по одному в компьютер, и менять серийники командой
rtl_eeprom -s XXXXХXXX (x-серийный номер, восемь цифр).
Либо если несколько приемников воткнуты через хаб то:
rtl_eeprom -d n -s XXXXXXXX где n - порядковый номер, начинается с нуля



В винде можно сменить серийник с помощью rtl1090:
Создаем ярлык для программы, заходим в свойства ярлыка и в поле "объект" дописываем после пробела /EEPROM , сохраняем и запускаем, жмем в программе кнопку START, откроется окно где можно выставить новый серийник.

Далее в веб-интерфейсе настроек идем в настройки устройств, добавляем новое

Выбираем сдр и драйвер

В настройках приемника Settings/SDR device settings/Device settingsкаждого приемника нужно добавить параметр device identifier.
Additional optional settings>device identifier

Добавляем серийник приемника вида serial=xxxxxxxx,

Затем идем в настройки устройства, создаем профиль (или несколько, профиль это пресет для приемника, может использоваться только один профиль одновременно очевидно, в OWRX+ когда один пользователь из нескольких переключает профиль он переключается у всех остальных слушателей, в классическом OWRX пользователь не может переключить профиль если приемником пользуется больше одного человека), если вы настроили несколько разных устройств то они могут работать одновременно.

Также при использовании большого количества приемников работающих одновременно стоит увеличить usbfs буфер, в линуксе он по умолчанию 16мб, иначе при большом количестве клиентов начинает глючить водопад - картинка водопада сдвигается относительно шкалы частот
1. sudo nano /etc/default/grub. В строку: GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" добавьте  usbcore.usbfs_memory_mb=1000 чтобы итоговая строка выглядела так 
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash usbcore.usbfs_memory_mb=1000"
2. Обновите grub: sudo update-grub и перезагрузите сервер sudo reboot.


----------------------------------------------------------------------------------------------------------------------------------------------------------------------
Установка websdr PA3FWM
Вебсдр распространяется по личному запросу в виде архива с готовым бинарником и вспомогательными файлами.
Я нашел случайно незакрытый частный вебсервер с файлами на котором лежали дистрибутивы вебсдра, ниже ссылки на их, даты взяты из дат создания файлов.
websdr2014
websdr2023

Управление автозагрузкой-забота пользователя. В теории использование без разрешений это пиратство. Но дистрибутив валяется в интернете, сборка 14 года, в современных браузерах нужно в настройках разрешать воспроизведение звука на нем вручную, сервер с одним клиентом дрет 3\4 ресурсов по сравнению с OpenWebRx+ с аналогичными настройками приемника. Но нагрзка на дополнительных клиентов у него меньше, так что есть смысл его использовать.
Внешний вид ванильного интерфейса

Поскольку интерфейс его это обычный html файл - он легко кастомизируем, где-то даже были бесплатные скины для этой вебсдрки, вот пример


Установка
Установка на убунту 22.04 описана тут https://www.sdrutah.org/info/websdr_Ubuntu_2204_install_notes.html

В Ubuntu 22.04:
add-apt-repository ppa:linuxuprising/libpng12
apt update
apt install libpng12-0
nano /etc/apt/sources.list
в конец файла добавляем строчку
deb [trusted=yes] http://security.ubuntu.com/ubuntu xenial-security main
жмем ctrl+o для сохранения, ctrl+x для закрытия редактора.
apt update
apt install libssl1.0.0

Копируем дистрибутив websdr в /opt
в /opt/websdr/cfg/websdr.cfg раскомментируйте #noorgserver или вебсдр потребует ваш мейл и координаты и не запустится.

теперь можно запустить сервер для проверки с вводом сигнала через звуковую карту (для работы с приемниками SOFTROCK)
cd /opt/websdr/dist11
sudo ./websdr64
(если тупо не стартует возможно нужно сделать его исполняемым и дать права на запись\чтение)
Посмотрите что сервер вывалит в консоль, он очень капризный и если ему что-то не по нраву он не запустится и не покажет веб-страничку, также в первый запуск он проводит калибровку и возможно потребуется рестартнуть его прибив killall'ом и запустив снова.
Теперь можно открыть страничку вебсдр в браузере, на сервере адрес будет http://localhost  http://127.0.0.1 ВНИМАНИЕ, НЕ https, также можно указать порт :80

Конфигурационный файл находится в папке /opt/websdr/cfg/websdr.cfg
Для работы с приемником rtl-sdr в конфигурационном файле после строчки # We need to configure at least one band: добавьте

band 2m
device !rtlsdr 127.0.0.1:64000     //ip и порт RTL_TCP сервера
samplerate 2048000                    // полоса
centerfreq 145000                         // центральная частота
antenna dipole                               //тип антенны (для описания на сервере
gain -25                                          // усиление
extrazoom1

Затем в консоли запустите RTL_TCP сервер
cd /opt/websdr/dist11/
rtl_tcp -a 127.0.0.1 -p 64000 -f 145000K -g 0 -s 2048000 &
Затем запустите  сам сервер
./websdr64
 теперь он работает с приемнипком rtl_sdr

Для автоматического запуска создайте файл, например websdr.sh в папке /etc/init.d с содержимым
#!/bin/sh
sleep 12
cd /opt/websdr/dist11/
rtl_tcp -a 127.0.0.1 -p 64000 -f 145000K -g 0 -s 2048000 &
sleep 10
./websdr64

сделайте его выполняемым. теперь после перезагрузки серверы RTL_TCP и websdr будут запускаться автоматом.

конфигурация нескольких приемников на сервере (не пробовал, и непонятно как указывать конкретные приемники по серийнику, похоже нужно каждый раз сопоставлять серийник и условный номер устройства, см. тутhttps://derushadigital.com/other%20projects/2019/02/15/RTLSDR-service.html)
Для начала в случае с rtl-sdr нужно запустить серверы rtl-tcp в скрипте автозапуска, на разных портах, затем указать их в файле конфигурации сервера

Пример запуска двух приемников
Файл автозапуска /etc/init.d/websdr.sh
---------------------------------------------------------------
#!/bin/sh
cd /opt/websdr/dist11/
rtl_tcp -a 127.0.0.1 -p 64000 -f 145000K -g 0 -s 2048000 -d0 &
rtl_tcp -a 127.0.0.1 -p 64001 -f 433000K -g 0 -s 2048000 -d1 &
sleep6
./websdr64
--------------------------------------------------------------
где:
-p 64000     порт сервера rtl_tcp (разные приемники на разные порты)
-f 145000K     центральная частота
-g 0         усиление ( 0-автоматически)
-s 2048000     полоса частот
-d0         условный порядковый номер устройства


Файл конфигурации сервера /opt/websdr/cfg/websdr.cfg
секция настройки диапазонов
------------------------------------------------------------------------------
############################################################################


# We need to configure at least one band:

band 2m                название диапазона
device !rtlsdr 127.0.0.1:64000    устройство (необходимо запустить его в скрипте автозапуска)
samplerate 2048000        рабочая полоса
centerfreq 145000        центральная частота
antenna dipole            тип антенны (просто для справки слушателей0
gain -25           
extrazoom1

band 70сm            название диапазона
device !rtlsdr 127.0.0.1:64001    устройство (необходимо запустить его в скрипте автозапуска)
samplerate 2048000        рабочая полоса
centerfreq 433000        центральная частота
antenna gp            тип антенны (просто для справки слушателей0
gain -25           
extrazoom1

Сравнение нагрузок OWRX и WEBSDR при одинаковых настройках приемника:
Один пользователь



4 пользователя




SDRPLAY и PA3FWM websdr
https://www.sdrutah.org/info/sdrplay_rx.htmll
https://www.sdrutah.org/info/higher_rate_16b_websdr.html
websdr который PA3FWM распространяет изначально работал только с аудиовходами звуковых карт (приемниками типа softrock), этот интерфейс дает 16бит вход и предельную теоретическую полосу в звуковой системе ALSA 768kSPs,  возможность подключать rtl_tcp была прикручена позже, и интерфейс делался под RTL, и работает только с 8 битами.
Для SDRPLAY написаны пара вариантов утилит rsp_tcp. Эта версия выдает 8 и 16 бит поток, по выбору, и не управляет усилением и аттенюатором приемника, выставляя захардкоженное очень низкое, неюзабельное значение усиления. Вторая версия может управлять усилением и включать АРУ, но выдает только 8бит. Во всем остальном, в теории если запустить эти серверы и подключить к ним websdr он будет работать, но зачем, 8 бит выдаст и РТЛка.
Сисадмины вебсдр Северной Юты настолько преисполнились от работы с этим софтом что пустились во все тяжкие.
Во-первых они пробовали запускать 16 битный сервер rsp_tcp и с помощью netcat отправлять из него данные в звуковую  систему.
старт сервера
rsp_tcp -a 127.0.0.1 -p 1234 -f 5000000 -s 192000 -b 16 &
создание виртуального звукового интерфейса
sudo modprobe snd_aloop
запихиваем поток с выхода сервера rsp_tcp прямо в звуковую подсистему
nc 127.0.0.1 1234 | aplay -D <sound_device_name> -r 192000 -c 2 -f s16_le
узнаем id звукового устройства
aplay -l
если к примеру оно получило id  hw:2,1,0 то в websdr.config нужно указать hw:2,1,1 (последняя цифра указывает вход это или выход)
Полчим 768 кгц 16 бит с приемника который в состоянии работать полосой в десять раз больше. И без возможности регулировать усиление которое установлено в нереально низкое значение.
Админы Northern Utah Websdr в попытке использовать sdrplay не через жопу написали несколько программ
https://github.com/CrumResearch/sdrplayalsa берет поток с приемника и запихивает его звуковую систему минуя tcp_ip и netcat. Умеет в реглировки АРУ, усиления, аттенюатора, децимации, полосы. Скачать бинарник 64х. использование и настройки описаны на этой странице.
Ах да, для того чтобы зарядить 768кгц полосы через звуковую подсистему вам нужно заменить утилиту aplay на написанную админами N.U.Websdr утилиту fplay.
Еще можно используя CSDR снять с одного приемника потоки на несколько диапазонов.
https://www.sdrutah.org/info/using_csdr_for_auxiliary_receivers_on_a_websdr.html
В общем ребята знатно заморочились и это стоило упомянуть здесь, простого способа реализовать зотя бы преимущество SDRPLAY в битах перед rtl нет. А в полосе - все равно эта вебсдрка больше двух не может прожевать.

Прочие игрища
За внешний вид страницы отвечает файл /dist/pub2/websdr-control.html
Его можно отредактировать даже редактором типа Kompozer





Добавление кнопки "Включить звук" (решение проблемы с отсутствием звука в браузерах после 2019 года)
https://www.sdrutah.org/info/chrome_WebSDR_fix.html


--------------------------------------------------------------------------------------------------------------------------------------------
В этом году релизнули еще один вебсдр сервер - phantomsdr, что интересно-есть готовый пакет под windows
вроде как поддерживает работу приемника rx888 полосой в 30 мгц одновременно, но и каноничные дешевые клоны rtl sdrplay поддерживает тоже. Надо потестить.
https://github.com/PhantomSDR/PhantomSDR/wiki/Setup


Есть форк, PhantomSDR+, только под линь. Доступны кое-какие встроенные декодеры цифры (ft8 пока)
По заявлениям разраба приемник rx888 с полосой 30мгц разрядностью 16бит отъедает 40% ресурсов ryzen5 2600, (FFT такого потока-серьезная задача). При этом один отдельный пользователь вебсдр со своей демодуляцией итд занимает настолько мало ресурсов что 50 пользователей сервера на таком райзене не нагружают сервер даже на один процент. Так же софтина уметт использовать для своих нужд видеокарты. RX580 нагружается примерно настолько же насколько и райзен.
https://github.com/Steven9101/PhantomSDR-Plus

Один из доступных серверов
http://185.199.176.46:8074/
HP Elite Pro 800 G2 PC [Intel Core i7-6700 CPU @ 3.4 GHz, 16 GB Ram, 256 GB SSD-Disk, 7 USB-Ports, Ubuntu 22.04.4 (64 Bit)]

Установка (перевод с гитхаба, я его еще не ставил)
Используйте ubuntu 22.04
Перед компиляцией установите необходимые пакеты
В случае Ubuntu
apt install build-essential cmake pkg-config meson libfftw3-dev libwebsocketpp-dev libflac++-dev zlib1g-dev libzstd-dev libboost-all-dev libopus-dev libliquid-dev git psmisc
В случае Fedora
dnf install g++ meson cmake fftw3-devel websocketpp-devel flac-devel zlib-devel boost-devel libzstd-devel opus-devel liquid-dsp-devel git

Автоматическая компиляция (после выполнения install.sh перезапустите терминал, иначе не выполнится. У меня не сработала, но автокомпиляция предлагает выбрать для какого приемника собрать проект, SDRPlay, rtl-sdr или rx888. Жаль она не может завершиться корректно)
git clone --recursive https://github.com/Steven9101/PhantomSDR-Plus.git
cd PhantomSDR-Plus
chmod +x *.sh
sudo ./install.sh

Ручная компиляция (у меня она получилась без проблем и быстро на хиленьком n95)
git clone --recursive https://github.com/Steven9101/PhantomSDR-Plus.git
cd PhantomSDR-Plus
meson build --optimization 3
meson compile -C build

ВНИМАНИЕ, чтобы установки частоты и сэмплрейта установились корректно нужно в файле config.toml установить директорию по умолчанию 'html/' с помощью опции htmlroot
Также перед запуском в файле /PhantomSDR-Plus/config.toml в секции [input] проверьте соответствия центральной частоты (frequency)  и сэмплрейта (sps) тем что стоят в аргументах утилиты rtl_sdr(они там отличаются)
То есть если в строке запуска rtl_sdr -f 145000000 -s 3200000 - | ./build/spectrumserver --config config.toml стоит частота -f 145000000 и сэмплрейт -s3200000 то и вконфиге config.toml должны стоять frequency 145000000 и sps 3200000, иначе частота на экране не будет соответствовать реальной, а звук будет заикаться.

Примеры запуска с разными sdr приемниками
RTL-SDR
rtl_sdr -f 145000000 -s 3200000 - | ./build/spectrumserver --config config.toml
HackRF
rx_sdr -f 145000000 -s 20000000 -d driver=hackrf - | ./build/spectrumserver --config config.toml
На момент написания статьи вебсдр по умолчанию в конфиге запускался на порту 9002, так что чтобы увидеть его страницу нужно в браузере на сервере набрать 127.0.0.1:9002

Для автоматического запуска создайте файл, например websdr.sh в папке /etc/init.d с содержимым
#!/bin/sh
sleep 12
cd
/PhantomSDR-Plus/
rtl_sdr -f 145000000 -s 3200000 - | ./build/spectrumserver --config config.toml

Или запускать готовый скрипт запуска из папки PhantomSDR-Plus, например
Открываем редактор планировщика запуска
sudo crontab -e
В открывшемся файле добавляем строчку запуска нужного приемника (сейчас есть скрипты для airspy, hackrf, sdrplay, rx888, rtl-sdr)
@reboot /PhantomSDR-Plus/start-rtl.sh

Ну или запускать через systemd
Работа свежескомпиленной вебсдрки на мини-пк с процессором n95




--------------------------------------------------------------------------------------------------------------------------------------------
G0ORX-Web SDR
Первое сообщение о веб-интерфейсе к ПО KA9Q-radio датировано 23-м годом.
https://github.com/fventuri/ka9q-web
KA9Q-Radio само по себе интересно тем что использует метод Overlap and Save который в десятки раз экономнее расходует ресурсы процессора при демодуляции.
ПДФка на английском об этом методе демодуляции
Ссылочка на инструкции https://www.sdrutah.org/info/using_ka9q_radio.html
https://groups.io/g/NextGenSDRs/topic/new_qra_skimmer_for/103044298




--------------------------------------------------------------------------------------------------------------------------------------------
На реддите есть раздел в котором ведется неспешная разработка вебсдрки novasdr
Тестового доступа к софту пока нет
https://www.reddit.com/r/novasdr/




--------------------------------------------------------------------------------------------------------------------------------------------
GrWebSdr - веб-интерфейс к гнурадио, разработка университета Масарика, инфы мало, не натыкался на такие в сети ни разу.

https://is.muni.cz/th/kp8qb/thesis.pdf
https://github.com/olysonek/grwebsdr
--------------------------------------------------------------------------------------------------------------------------------------------
На днях на алике появился web-888, 16 битный фронтенд от rx-888, но вместо USB3 моста от cypress стоит камень xilinx zync, два ядра arm на которых крутится линукс с вебсервером и большая FPGA, на которой крутится демодуляция и отрисовка водопадов аж для 13 пользователей.
По заявлениям продавца тянет 13 пользователей с индивидуальным зумом спектра и декодерами цифры.
Стоит 27к на момент написания








--------------------------------------------------------------------------------------------------------------------------------------------
nRSP-ST
Приемник от SDRPlay, сетевой но с возможностью подключаться и по usb. Может работать как тупо как rtl_tcp передавая необработанный iq поток в сдр приложение на компьютере по сети, так и работать как вебсдр, на небольшое количество пользователей. Цена на момент выхода -499 долларов.
Я бы предпочел одноплатник типа orangepi4, openwebrx и обычный SDRPlay, более гибко, и к тому же в OWRX есть много декодеров цифры и прочих плюшек. Здесь же сдрплей опять выкатил приемник на своих микросхемах 2006 года разработки в то время как китайцы пилят вебсдрки 16бит на 64 МГц полосы и 13 одновременных пользователей. Коечно nRSPэто скорее личный удаленный приемник, диапазон до 2ГГц и имеет право на жизнь.


Изображения из ролика techminds
NEW! SDRPlay nRSP-ST Networked Software Defined Radio Receiver - Hands ON!




--------------------------------------------------------------------------------------------------------------------------------------------
 Настройка сети.

Для того чтобы сделать наш сервер доступным из внешнего интернета нам нужно следующее (делать в любом порядке).


1: Внешний IP (арендуется у вашего провайдера, но если это невозможно есть способы создания туннелей к другим серверам которые имеют внешний IP, вебсдр это обыччный сайт и все трюки связанные с этим работают и для него)
2: (опционально) DNS имя для того чтобы иметь легко запоминающееся имя вместо 12 цифр записанны через точки, также с DNS именем ваш вебсдр будет индексироваться гуглом.
Если ваш кабель от провайдера воткнут прямо в вебсервер то больше настраивать ничего не нужно, но я думаю вы сами хотите пользоваться интернетом, тем более что вебсдр - не особо посещаемые ресурсы, поэтому нужны еще два пункта.
3: Настроенный статический IP в локальной сети на сервере вебсдр (настраивается на сервере вебсдр).
4: Роутер настроенный на проброс порта 8073 (для OpenWebRx) или 8901 (для websdr, но в моем случае при запуске от root он работал на 80 порту) на IP нашего сервера в локальной сети (настраивается в панели настроек роутера).


Настройка статического IP на сервере.
Проще всего сделать с рабочего стола. На сервере вебсдр тыкаем мышкой в значок сети на рабочем столе, выбираем настройки проводной сети.


Тыкаем на значок шестеренки у работающего соединения


Ставим ручной режим и выставляем ip адрес, маску подсети, адрес шлюза и DNS.
Обычно домашние роутеры имеют сеть вида:
Адрес шлюза 192.168.0.1 или 192.168.1.1
Маска подсети 255.255.255.0
Адрес DNS гугла 8.8.8.8
Адрес самого сервера может лежать в пределах 192.168.0.2-192.168.0.254 или 192.168.1.2-192.168.1.254, запишите его, он понадобится при настройке проброса портов в роутере.


Тут внимание, нужно чтобы выбранный вами адрес НЕ ПОПАДАЛ в пул адресов которые выдаются вашим роутером динамически, в моем тп-линке настройка по умолчанию выглядит так


Пул адресов которыми распоряжается DHCP 192.168.0.100 - 192.168.0.199, значит я могу выбрать адрес сервера в диапазонах 192.168.0.2 - 192.168.0.99 или 192.168.0.200 - 192.168.0.254

Проброс портов в роутере.
В роутерах разных производителей это делается по-разному, суть в следующем: по умолчанию роутер не пропускает в локальную сеть запросы из внешнего интернета, поскольку так работает сам NAT, роутер не знает какому из подключенных компьютеров пришел внешний запрос. Поэтому для того чтобы наш сервер стал доступен извне нам нужно сказать роутеру чтобы все запросы приходящие на определенный порт он отправлял на определенный ip адрес в локальной сети (адрес сервера который мы настроили выше). Например адрес моего сервера в локальной сети 192.168.0.8, у OpenWebRx рабочий порт 8073. Соответственно это внутренний адрес и порт в настройке. А вот внешний порт можете поставить другой, тогда из внешнего интернета вы сможете открыть ваш вебсдр по ссылке http://ваш внешний ip: внешний порт в настройках роутера.
Внешний ip же выдается провайдером.
Вот пример настройки моего tp-link, наверно одна из самых распространенных марок роутеров.


Настройка внешнего ip
Это делается через вашего интернет-провайдера. У меня эта услуга стоит дополнительные 150 р/мес, но услуги по стране сильно различаются, олдовые провайдеры по умолчанию выдавали внешние ip. Как настроить роутер также узнайте у провайдера, хотя сейчас это обычно делается автоматом, вариантов работы с внешним ip масса, и тут не угадать.

DNS запись (необязательно, см подробности)
Если вы только подключили внешний ip то во-первых его сложно запомнить, чтобы допустим зайти с чужого компьютра, а во-вторых, но самое важное - приемник не будет индексироваться гуглом. Для этого нужно купить DNS имя. Это то самое имя типа google.ru которое вводится в строке браузера. Служба DNS это такой автоматизированный "телефонный справочник" который автоматически передает вашему браузеру ip адрес который соответствует доменному имени.
Для этого стоит посмотреть какие регистраторы имен есть, зарегистрироваться в одном из них, выбрать свободное доменное имя, оплатить регистрацию , (обычно на год, имена стоят по-разному, в зависимости от популярности и.т.д) а потом зайти в личный кабинет и вбить ваш внешний ip адрес который вам выдал провайдер.
Ниже пример, настройки моего адреса hoshinokoe.ru


Обратите внимание: если вы в пункте настройки роутера настроили проброс портов вида "внешний ip:8073 -  ip адрес сервера:8073"  то чтобы попасть на вебсдр вам после регистрации DNS нужно в адресной строке браузера вводить адрес в виде "http://доменное_имя.ru:8073"
Чтобы не вводить вручную порт можно настроить на роутере проброс портов вида "внешний ip:80 - ip адрес сервера:8073". Дело в том что порт 80 стандартный для http, и браузеру не нужно будет указывать порт чтобы попасть на интерфейс OpenWebRx, то есть вебсдр будет доступен просто "http://доменное_имя.ru".

Если у вас ip внешний но динамический (провайдер меняет его на свое усмотрение, такое встречается) то придется воспользоваться сервисами dyndns. Взаимодействие с ними нужно дополнительно настраивать в роутере.

Чтож, поздравляем (хотя кто мы то, я один здесь), ваше радио доступно из любого уголка земли где есть интернет



-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Железо некоторых вебсдрок

PA3FWM вебсдр.
http://websdr.ewi.utwente.nl:8901/
После нескольких итераций железа вебсдр пришел к АЦП со скоростью 77.76MSPS, 16bit, FPGA производящей децимацию 3/4 и запихивающей поток в ETHERNET и компьютера который уже занимается расчетом и отрисовкой FFT и демодуляцией, при чем на GPU.




Антенна - самопальный mini-whip, не лучшее решение честно говоря, создатель самого явления веб-сдр мог бы заморочиться.


Northern Utah websdr
https://www.sdrutah.org/

Тут все серьезнее, вебсдр представляет собой небольшую будку которая стоит вдалеке от городов, посреди пустыни, имеет несколько серверов, в качестве основных приемников используются Sofrock и качественные звуковые карты. Антенны - несколько промышленных антенн, в основном ЛПВА, как направленные так и всенаправленные.




Основные приемники - Softrock с внешними синтезаторами, также используются RTL-SDR с внешними блоками АРУ (!), конвертерами, усилителями, и все они собраны в стиле manhattan (навесным монтажом).

Пример внешних блоков АРУ для "широкополосных" (по сравнению с Softrock) RTL-SDR.





Для примера блок-схема распределения ВЧ сигнала на одном из серверов.




KFS SDR
http://websdr1.kfsdr.com:8901/
Тоже использует жирные ЛПВА от TCI. Помимо серверов pa3fwm к ним подключено несколько kiwisdr.


Блоки делителей и кастомных фильтров

Приемники подключены к серверу pa3fwm с помощью модифицированных rsp_tcp.



KPH
https://www.radiomarine.org/kph-sdrs
Находится в здании сообщества истории морского радио, использует пачку кивисдр и опять же промышленные ЛПВА (или активную рамку для НЧ диапазонов).