From f6c37d4fc092374779cbcea82dbcff08c53016a3 Mon Sep 17 00:00:00 2001 From: ua1zbe Date: Fri, 21 Aug 2026 12:34:52 +0300 Subject: [PATCH] =?UTF-8?q?README:=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD?= =?UTF-8?q?=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=BE=D0=BD=D0=B0=D0=BB?= =?UTF-8?q?=20=E2=80=94=20=D0=B7=D0=B0=D0=BF=D0=B8=D1=81=D1=8C=20=D0=B2=20?= =?UTF-8?q?OGG,=20=D1=81=D0=BA=D1=80=D1=8B=D1=82=D1=8B=D0=B5=20=D0=BD?= =?UTF-8?q?=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B9=D0=BA=D0=B8=20=D0=B7=D0=B2?= =?UTF-8?q?=D1=83=D0=BA=D0=B0,=20=D0=BC=D0=BE=D0=BD=D0=B8=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D0=B3,=20PTT=20=D0=B2=20=D1=81=D1=82=D0=B8?= =?UTF-8?q?=D0=BB=D0=B5=20Zello,=20=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=B3=D0=BE=D0=B2=D0=BE=D1=80=D1=8F=D1=89=D0=B5=D0=B3=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 43 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 22aeb59..a7abe99 100644 --- a/README.md +++ b/README.md @@ -7,12 +7,37 @@ Android-клиент для подключения к рефлекторам **S - Подключение к рефлектору SVXLink по протоколу v2 с авторизацией по AUTH_KEY - Выбор группы вещания (TG) — по умолчанию 11 - Голосовая связь в формате **Opus** (8 кГц, моно) через UDP -- Кнопка PTT (Push-To-Talk) — удерживайте, чтобы говорить -- Индикаторы уровня передачи и приёма -- Отображение текущего говорящего +- Кнопка PTT (Push-To-Talk) в стиле Zello — крупная, с градиентом и тенью; удерживайте, чтобы говорить +- Индикаторы уровня передачи (микрофон) и приёма (S-метры) +- **Статистика приёма** (потери, %, и джиттер, мс) — включается в скрытых настройках звука +- **Выбор битрейта передачи** — Авто (адаптация под качество канала) либо фиксированный 6–32 кбит/с (скрытые настройки звука) +- **Мониторинг групп** — кнопка наушников: прослушивание выбранных групп с автоматическим возвратом к базовой после паузы +- **Запись приёма в OGG** с пропуском тишины (подробности ниже) +- Строка текущего говорящего между блоками экрана: + - при приёме — `Говорит UA1ZBE-M TG12` + - без приёма — `UA1ZBE-M TG12` (последний говоривший) - Автоматическое переподключение при обрыве связи +- Уведомления о входе/выходе участников (опционально) - Позывной регистронезависимый: `ua1zbe-m` автоматически преобразуется в `UA1ZBE-M` для отправки на сервер +## Запись приёма + +- Кнопка записи расположена между позывным и кнопкой мониторинга групп. +- **Короткое нажатие** — начать/остановить запись. Файл сохраняется в + `Android/data/ru.ua1zbe.svxremote/files/recordings/rec_ГГГГ-ММ-ДД_ЧЧ-ММ-СС.ogg`. +- Записывается только реальный приём: паузы в эфире (тишина) в файл не попадают, + реплики склеиваются без разрывов. +- **Удержание кнопки 3 секунды** — открывается список записей: воспроизведение + (повторный тап останавливает) и удаление с подтверждением. Если записей нет — + выводится подсказка. + +## Скрытые настройки звука + +Открываются тройным тапом по заголовку «SVXHomyak» на главном экране. Позволяют: + +- включить/выключить отображение статистики приёма (потери/джиттер); +- выбрать битрейт передачи (Авто или 6–32 кбит/с). + ## Требования - Android 8.0 (API 26) и выше @@ -43,16 +68,24 @@ Android-клиент для подключения к рефлекторам **S APK появится в `app/build/outputs/apk/debug/app-debug.apk`. +Для сборки релизного (подписанного) APK: + +```bash +./gradlew :app:assembleRelease +# далее выровнять и подписать через build-tools (zipalign + apksigner) +``` + Требования: JDK 17, Android SDK (compileSdk 34). ## Структура проекта -- `app/src/main/java/ru/ua1zbe/svxremote/MainActivity.kt` — основной экран +- `app/src/main/java/ru/ua1zbe/svxremote/MainActivity.kt` — основной экран и логика UI - `app/src/main/java/ru/ua1zbe/svxremote/SettingsActivity.kt` — настройки подключения - `app/src/main/java/ru/ua1zbe/svxremote/proto/ReflectorClient.kt` — клиент рефлектора (TCP + UDP) - `app/src/main/java/ru/ua1zbe/svxremote/proto/ReflectorProtocol.kt` — бинарный протокол svxreflector v2 - `app/src/main/java/ru/ua1zbe/svxremote/audio/OpusEngine.kt` — кодирование/декодирование Opus через MediaCodec -- `app/src/main/java/ru/ua1zbe/svxremote/ui/` — кнопка PTT и индикатор уровня +- `app/src/main/java/ru/ua1zbe/svxremote/audio/RxRecorder.kt` — запись приёма в OGG (MediaCodec + MediaMuxer) +- `app/src/main/java/ru/ua1zbe/svxremote/ui/` — кнопка PTT (стиль Zello), S-метр, индикатор уровня - `app/src/test/java/ru/ua1zbe/svxremote/` — юнит-тесты протокола и рукопожатия ## Тесты