y83 code / инструмент

Запись экрана

Запись экрана на Android MediaProjection + собственный ScreenRecordService. Умеет системный звук (Android 10+) и микрофон, касания, отсчёт перед стартом, историю записей и — важное — запуск и остановку по команде агента.

раздел реестра
Инструменты
код
1 032 строк в 3 файлах
документ
04-record.md

Снимок: 2026-10-11. Секция хаба Tools, тайл «Запись» / «Rec», подпись «Запись экрана: качество, звук, касания и управление агентом». Доступен всегда.

Экран и навигация

  • Screen.ScreenRecord → ScreenRecordScreen (485 строк).
  • Переход в редактор: onOpenEditor → Screen.VideoEditor (см. Видеоредактор).

Возможности (подробно)

Запуск записи

  • requestStart() — запрос разрешения MediaProjection (системный диалог Android), launchProjection(config) — запуск сервиса, beginCountdown — обратный отсчёт перед стартом (отменяемый), toggleRecording() — стоп/старт.
  • Предполётная проверка recordPreflight(context, config) → RecordPreflight(canStart, text): проверяет разрешения, свободное место (MIN_START_FREE_BYTES = 512 МБ), батарею (battery_it_is_better_to_connect_power), настройку «показывать касания» в Android, доступ к микрофону.

Параметры записи (ScreenRecordConfig)

ПараметрЗначенияГде в UI
Качество/битрейтМПб/с (media_kb, media_mbps, media_bitrate)ScreenRecordSettingsCard
Разрешение/размер(media_size, media_px_s)там же
Частота кадров(media_frames_1)там же
ЗвукScreenRecordAudioMode: системный (media_system), микрофон (media_microphone), оба (media_both), без звука (media_no_sound)audioLabel(mode)
Показывать касанияглобальная настройка Android (show_touches)чекбокс с подсказкой про «Параметры разработчика»
Источник приложенияRecordAppCard — можно писать «приложение остаётся включённым»карточка

Системный звук работает с Android 10+ и может не записывать страницы с FLAG_SECURE (media_that_disallows_playback_capture_flag_secure).

Статус и статистика

ScreenRecordStatusCard — идёт ли запись, таймер (formatDuration), размер (formatSize), начало (formatTime), оценка места (media_recording_estimate, media_free), кнопки стоп/пауза.

История записей (ScreenRecordHistory.kt)

ScreenRecordingsCard — список прошлых записей: открыть (media_open), поделиться (media_share), скопировать путь (media_copy_path), удалить (media_delete_recording, файлы удаляются из Download), открыть в видеоредакторе (media_open_video_editor).

Запуск агентом

Экран зарегистрирован как промпт-триггер RECORD_PROMPT = "y83@record" — агент может отправить этот триггер, чтобы начать запись.

Где в коде

ФайлСтрокРоль
ui/record/ScreenRecordScreen.kt485Экран, preflight, запуск/стоп, отсчёт
ui/record/ScreenRecordControls.kt359Карточки статуса, настроек, приложения, плитки метрик
ui/record/ScreenRecordHistory.kt188История записей
bridge/ScreenRecordService.kt—Foreground-сервис записи
bridge/ScreenRecorder.kt—Низкоуровневая запись (MediaCodec)
bridge/ScreenRecordConfig.kt—Конфиг записи, ScreenRecordAudioMode
bridge/ScreenRecordings.kt—Список файлов записей
bridge/ScreenAudioCapture.kt—Захват системного звука

Данные и API

  • Файлы: публичная папка Download (показывает ScreenRecordings).
  • Настройки записи — data/ScreenRecordSettings.
  • Персист — SharedPreferences.
  • Backend-эндпоинтов нет: запись идёт полностью на устройстве.
  • Мост: bridge.BridgeState.

Агент

Команды моста

КомандаДействие
app_record_startНачать запись (параметры конфигурации)
app_record_statusСтатус: идёт ли, сколько секунд
app_record_stopОстановить
app_screen_captureСнимок экрана (не запись)
app_screenshotНормализованный снимок экрана
app_video_statusСтатус рендера видеоредактора

Агент может начать и остановить запись без участия пользователя (в пределах разрешений MediaProjection, уже выданных ранее).

Подводные камни

  • MediaProjection требует системного диалога. Без согласия пользователя запись не стартует; recordPreflight предупреждает заранее.
  • Свободное место < 512 МБ — запись не стартует.
  • FLAG_SECURE. Страницы/приложения с защищённым окном не пишутся, даже если остальное записывается (video_saved_but_audio_was_interrupted и т.п.).
  • Системный звук только с Android 10.
  • Показ касаний — глобальная настройка Android, а не флаг приложения; экран подсказывает, куда идти.
  • Запись продолжается, даже если открыть Y83 Code — статус виден на уведомлении сервиса.

Как обновлять

  • Каталог: data/InstrumentCatalog.kt (id record).
  • Маршрут: ui/navigation/Screen.kt (Screen.ScreenRecord).
  • Код UI: ui/record/*.
  • Сервис: bridge/ScreenRecordService.kt, ScreenRecorder.kt, ScreenRecordConfig.kt, ScreenAudioCapture.kt.
  • Мост: app_record_* в bridge/BridgeAppHandlers.kt.

Источник: docs/project/hub/04-record.md · Инструменты · 1 032 строк в 3 файлах. Страница собирается из документации проекта при сборке сайта.