F7_recording/PROJECT_STRUCTURE.md
F7cloud 0b94d1826e Initial commit: F7cloud Talk Recording Server
- Переименовано Nextcloud на F7cloud
- Добавлены зависимости Firefox ESR и Geckodriver
- Создан скрипт установки с поддержкой параметров HPB
- Добавлена документация и инструкции по установке

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-17 12:18:51 +00:00

11 KiB
Raw Blame History

Структура проекта F7cloud Talk Recording Server

Обзор

Этот документ описывает структуру проекта и назначение каждого компонента для удобной навигации и использования при развертывании.

Основная структура

f7cloud-talk-recording/
│
├── src/                                    # Исходный код приложения
│   └── f7cloud/
│       └── talk/
│           └── recording/                 # Основной модуль записи
│               ├── __init__.py            # Инициализация модуля, версия, константы
│               ├── __main__.py            # Точка входа CLI (команда f7cloud-talk-recording)
│               ├── Server.py              # HTTP сервер (Flask), обработка API запросов
│               ├── Service.py             # Сервис записи (управление процессом записи)
│               ├── Config.py              # Управление конфигурацией из server.conf
│               ├── Participant.py         # Управление участником в браузере (Selenium)
│               ├── BackendNotifier.py     # Уведомления бэкенда F7cloud
│               ├── RecorderArgumentsBuilder.py  # Построитель аргументов для FFmpeg
│               └── Benchmark.py           # Утилита для бенчмарков
│
├── dependencies/                          # Внешние зависимости (не требуют установки из репозиториев)
│   ├── firefox-esr/                       # Firefox ESR - браузер для записи
│   │   ├── firefox                        # Исполняемый файл Firefox
│   │   └── ...                            # Остальные файлы Firefox
│   └── geckodriver                        # Geckodriver - драйвер Selenium для Firefox
│
├── tests/                                 # Тесты
│   ├── ServerTest.py                     # Тесты HTTP сервера
│   └── ConfigTest.py                     # Тесты конфигурации
│
├── server.conf.in                        # Шаблон конфигурационного файла
│                                          # Копируется в /etc/f7cloud-talk-recording/server.conf при установке
│
├── pyproject.toml                        # Конфигурация Python проекта
│                                          # Содержит зависимости, метаданные, скрипты
│
├── install.sh                            # Скрипт автоматической установки
│                                          # Устанавливает все зависимости и настраивает систему
│
├── INSTALL.md                            # Подробная инструкция по установке
├── README.md                             # Основная документация проекта
└── PROJECT_STRUCTURE.md                  # Этот файл

Детальное описание компонентов

src/f7cloud/talk/recording/

init.py

  • Версия пакета (__version__)
  • Константы статусов записи (RECORDING_STATUS_AUDIO_AND_VIDEO, RECORDING_STATUS_AUDIO_ONLY)
  • User-Agent для HTTP запросов

main.py

  • Точка входа для команды f7cloud-talk-recording
  • Парсинг аргументов командной строки
  • Загрузка конфигурации и запуск сервера

Server.py

  • HTTP сервер на Flask
  • Обработка запросов на начало/конец записи
  • Prometheus metrics endpoint
  • Валидация запросов и аутентификация

Service.py

  • Класс Service - основной сервис записи
  • Управление виртуальным дисплеем (Xvfb)
  • Управление аудио sink (PulseAudio)
  • Запуск браузера и FFmpeg
  • Загрузка записи на сервер

Config.py

  • Класс Config - управление конфигурацией
  • Чтение и парсинг server.conf
  • Методы для получения настроек бэкенда, signaling, записи

Participant.py

  • Класс Participant - управление участником в браузере
  • Класс SeleniumHelper - работа с Selenium WebDriver
  • Открытие страницы записи
  • Подключение к signaling серверу
  • Управление медиа потоками

BackendNotifier.py

  • Функции для отправки уведомлений бэкенду F7cloud
  • started() - уведомление о начале записи
  • stopped() - уведомление о конце записи
  • failed() - уведомление об ошибке
  • uploadRecording() - загрузка записи на сервер

RecorderArgumentsBuilder.py

  • Построитель аргументов командной строки для FFmpeg
  • Формирование команд для записи аудио и видео

Benchmark.py

  • Утилита для бенчмарков производительности
  • Тестирование записи с различными параметрами

dependencies/

firefox-esr/

Firefox ESR (Extended Support Release) - стабильная версия Firefox для корпоративного использования.

  • Используется для записи видеозвонков
  • Запускается в headless режиме через Selenium
  • Устанавливается в /opt/firefox-esr при установке

geckodriver

Драйвер Selenium для Firefox.

  • Используется для управления Firefox через Selenium WebDriver
  • Устанавливается в /usr/local/bin/geckodriver при установке

Конфигурационные файлы

server.conf.in

Шаблон конфигурационного файла. Содержит секции:

  • [logs] - уровень логирования
  • [http] - настройки HTTP сервера
  • [app] - настройки приложения (trusted proxies)
  • [backend] - общие настройки бэкенда
  • [backend-id] - настройки конкретного бэкенда F7cloud
  • [signaling] - настройки signaling сервера
  • [ffmpeg] - настройки FFmpeg
  • [recording] - настройки записи (браузер, пути)
  • [stats] - настройки статистики

pyproject.toml

Конфигурация Python проекта:

  • Метаданные проекта (имя, описание, авторы)
  • Зависимости Python
  • Entry points (команды CLI)
  • Настройки инструментов (pylint, pytest)

Скрипты

install.sh

Автоматический скрипт установки:

  1. Устанавливает системные зависимости
  2. Устанавливает Firefox ESR и Geckodriver
  3. Создает виртуальное окружение Python
  4. Устанавливает Python-зависимости
  5. Создает пользователя f7cloud-talk-recording
  6. Копирует конфигурацию
  7. Создает systemd service

Потоки данных

Процесс записи

  1. Запрос на запись → Server.py получает HTTP запрос
  2. Валидация → Server.py проверяет запрос и создает Service
  3. Инициализация → Service.py создает виртуальный дисплей и аудио sink
  4. Браузер → Participant.py запускает Firefox через Selenium
  5. Подключение → Participant.py открывает страницу записи и подключается к signaling
  6. Запись → Service.py запускает FFmpeg для записи дисплея и аудио
  7. Завершение → Service.py останавливает запись и загружает файл через BackendNotifier.py

Взаимодействие компонентов

HTTP Request → Server.py
                ↓
            Service.py
                ↓
        ┌──────┴──────┐
        ↓             ↓
    Participant.py  FFmpeg
    (Selenium)      (запись)
        ↓             ↓
    BackendNotifier.py
        ↓
    F7cloud Server

Установка и развертывание

Автоматическая установка

sudo ./install.sh

Ручная установка

См. INSTALL.md для подробных инструкций.

После установки

  1. Редактировать /etc/f7cloud-talk-recording/server.conf
  2. Запустить: sudo systemctl start f7cloud-talk-recording
  3. Включить автозапуск: sudo systemctl enable f7cloud-talk-recording

Разработка

Структура для разработчиков

  • src/ - исходный код
  • tests/ - тесты
  • pyproject.toml - зависимости и настройки

Запуск для разработки

python3 -m venv venv
source venv/bin/activate
pip install -e ".[dev]"
f7cloud-talk-recording --config server.conf.in

Полезные команды

Проверка установки

# Проверка Firefox
/usr/local/bin/firefox-esr --version

# Проверка Geckodriver
/usr/local/bin/geckodriver --version

# Проверка Python пакета
source venv/bin/activate
f7cloud-talk-recording --version

Логи и отладка

# Логи systemd
sudo journalctl -u f7cloud-talk-recording -f

# Ручной запуск с логами
source venv/bin/activate
f7cloud-talk-recording --config /etc/f7cloud-talk-recording/server.conf

Дополнительная информация

  • INSTALL.md - подробная инструкция по установке
  • README.md - основная документация
  • server.conf.in - комментарии в конфигурации содержат описание всех параметров