mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-26 22:57:34 +00:00
957c3c17616f2c83254c299072095756f17f84f9
libopus грузится динамически и объявлен необязательным: `LoadOpus` при отсутствии библиотеки молча возвращает False, `FOpusReady` остаётся сброшен, `PushAudio` выходит первой же строкой, а микрофон из браузера не декодируется (гейт по `Assigned(FOpusDec)`). Снаружи это выглядело как немой приёмник без единого намёка на причину — тем более что браузер при этом бодро пишет «Opus ready»: WASM-декодер тянется с CDN и к серверу отношения не имеет. В state-JSON добавлено поле `opus` = FOpusReady. Флаг ставится один раз в Start до запуска потоков и дальше не меняется, поэтому читается без FStateLock. На странице по `opus:false` поднимается баннер «No audio — libopus is not installed on the server» со второй строкой о том, что молчат и приём, и микрофон. Клик закрывает баннер насовсем (`opusWarnHidden`): состояние рассылается по нескольку раз в секунду, и без флага закрытый баннер возвращался бы на следующем же кадре. Заодно оверлей «Click to start audio» в этом случае не показывается вовсе — AudioContext поднимать не для чего, оверлей только вводил бы в заблуждение. Проверено живьём: демон с системной libopus отдаёт `"opus":true`, он же с подложной битой `libopus.so.0` в LD_LIBRARY_PATH — `"opus":false`, JSON целиком парсится. Логику баннера прогнал на заглушке DOM, JS страницы проверен `node --check`. В настоящем браузере баннер ещё не видели.
EWSDR
EWSDR is a cross-platform SDR transceiver application for OpenHPSDR and PlutoSDR devices. It is written in Free Pascal using Lazarus and supports Linux, Windows, and macOS.
Building
See BUILD.MD for build instructions.
License
This project is licensed under the GNU General Public License v2.0.
Languages
Pascal
96.4%
Python
2.9%
Shell
0.6%