Flutter Client / Services

Сервисы Flutter клиента

Классы взаимодействия с сетью, нативным Rust-ядром, аппаратными кодеками и криптографией.

NativePipelineController — Ядро протокола SCP (Rust FFI)

Файлы: lib/domain/services/native_pipeline_controller.dart, rust/src/native_pipeline.rs

Ключевой контроллер передачи медиа реального времени, связывающий Flutter и компилируемую нативную библиотеку Rust (rust_lib_chepuhagram):

  • QUIC Client (RFC 9000 & 9221): Подключение к порту :4001 с TLS 1.3, авторизация через однонаправленный стрим и отправка аудио/видео датаграмм без задержек Head-of-Line Blocking.
  • UDP Fallback & DSCP QoS: Автоматическое резервное переключение на UDP Relay (порт :4000) с маркировкой сокета IP_TOS = 0xB8 (DSCP Expedited Forwarding).
  • E2EE Криптография: Аппаратное шифрование/дешифрование медиа-фреймов по алгоритму AES-256-GCM со скользящим 96-битным Nonce.
  • Защита от потерь: Блочный XOR FEC (паритетные пакеты для восстановления одиночных потерь), кольцевой буфер ретрансмиссий NACK на 256 слотов, адаптивный JitterBuffer.
  • Audio DSP: Фильтр высоких частот (High-Pass 80Hz), нейросетевое шумоподавление RNNoise и G.711μ / Opus сжатие с Packet Loss Concealment (PLC).

NativeCameraService & NativeCameraBridge — Zero-Copy видео

Файлы: lib/domain/services/native_camera_service.dart, windows/runner/native_camera_bridge.cpp

Сервис аппаратного захвата и вывода видео с прямым обменом текстурами через GPU без участия CPU и промежуточных копий в памяти Dart:

  • Windows (DirectX 11 & WinMFT): Создает Direct3D 11 Shared Texture handle. Регистрирует нативную текстуру во Flutter через FlutterDesktopRegisterExternalTexture. Аппаратный энкодер WinMFT H.264 запускается в режиме Intra Refresh (GDR, 30 кадров) без тяжёлых всплесков IDR.
  • Android (Camera2 & MediaCodec): Dual-Surface захват из Camera2 API одновременно на локальный SurfaceTexture и аппаратный кодек MediaCodec. Аппаратный декодер выводит входящее видео напрямую на Surface.

SocketService — WebSocket и Сигнализация

Файл: lib/domain/services/socket_service.dart

Управляет постоянным дуплексным WebSocket-соединением с сервером по пути /ws:

  • Приём и отправка зашифрованных личных и групповых сообщений.
  • Гарантированная доставка с подтверждениями ACK и локальной очередью неотправленных сообщений при разрыве сети.
  • Сигнализация звонков: отправка событий call_init, call_accepted, call_rejected, call_ended.
  • Обмен кандидатами ICE (P2P STUN srflx + host) для попытки пробития NAT через UDP Hole Punching.
  • События присутствия пользователей (Online / Offline / Typing).

APIService — REST API Клиент

Файл: lib/domain/services/api_service.dart

APIService выполняет HTTP-запросы к серверу. Он инкапсулирует логику автоматического обновления access-токена:

  • При получении HTTP ошибки 401 Unauthorized сервис временно приостанавливает текущую очередь запросов.
  • Отправляет запрос POST /auth/refresh со старым refresh-токеном.
  • В случае успеха сохраняет новые токены и повторяет упавший запрос.
  • Если токен обновить не удалось, вызывает логаут пользователя.

WebRTCService — WebRTC Fallback

Файл: lib/domain/services/webrtc_service.dart

Резервный сервис звонков на базе flutter_webrtc для веб-браузеров или платформ, где не поддерживается бинарный нативный конвейер SCP.