Skip to content

Diverso-NVR/merger

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NVR Merger

Сервис для создания склеек лектор + экран или лектор + доска.

Принцип работы

Каждые 10 минут сервис берет записи из таблицы records и находит одну с done == False и processing == False, затем запускает процесс создания склейки, основанный на данных этой записи. При наличии презентации выполняется склейка лектор + экран, в случае же отсутствия презентации выполняется склейка лектор + камера, направленная на доску. Проверка на "полотно" вместо презентации происходит для каждого получасового отрезка видео с кодера. Процесс подготавливает необходимые видеозаписи (склейка отрезков между собой, обрезание отрезков) и затем склеивает вместе (слева всегда лектор, справа либо запись экрана, либо видео доски).

Заполнение таблицы records происходит в NVR через нажатие кнопки "Запросить" на веб-форме или при отправке соответствующего POST-запроса (см. документацию NVR Api), а также автоматически с помощью Google Calendar при создании события в календаре, соответствующему комнате, откуда пользователь хочет получить склейку.

Во время выполнения процесса склейки запись в базе данных становится processing == True, что временно блокирует производство склеек тем же инстансом приложения для оптимального использования ресурсов сервера. После выполнения склейки и её загрузки на Google Drive запись переходит в состояние processing == False, done == True.

Если запись происходила по календарному событию, к которому был прикреплен код курса в Google Classroom, то ссылка на готовую склейку будет прикреплена к соответствующему курсу и к событию в календаре.

Структура

  • app.py - главный класс приложения, при запуске представляет собой процесс-демон, c определенным интервалом проверяющий наличие в очереди (таблице в БД) склеек, которые необходимо сделать, и при наличие таковой запускающий процесс создания склейки, последующую загрузку на Google Drive и прикрепление ссылок на видеозаписи в Google Calendar и Google Classroom (если склейка создалась из автоматического события).

  • merge.py - содержит функции создания склейки из входных данных (дата склейки, времена начала и конца, название комнаты etc.). Обработка видеозаписей осуществляется при помощи инструмента FFmpeg.

  • classroom_api.py - содержит функции для взаимодействия с Google Classroom API.

  • calendarAPI.py - содержит функции для взаимодействия с Google Calendar API.

  • driveAPI.py - содержит функции для взаимодействия с Google Drive API.

  • models.py - содержит модели MySQL-таблиц, смапленные при помощи ORM-библиотеки SQLAlchemy.

  • requirements.txt - список Python-библиотек, необходимых для работы приложения. Получается при помощи команды pip freeze > requirements.txt. Библиотеки устанавливаются в окружение при помощи команды pip install -r requirements.txt.

  • Dockerfile - файл конфигурации для Docker-образа приложения. Для сборки используется базовый образ python:3.

  • run_docker.sh - shell-скрипт для запуска приложения на сервере. Останавливает и удаляет все предыдущие запущенные образы приложения, собирает новый образ и запускает используя файл окружения .env, который необходимо создать и разместить в директории приложения. В .env файле должна быть указата переменная окружения SQLALCHEMY_DATABASE_URI, представляющая собой строку для подключения ORM-библиотеки к базе данных. Пример: SQLALCHEMY_DATABASE_URI=mysql+pymysql://<user>:<password>@localhost/nvr.

Развертывание на сервере

git clone https://git.miem.hse.ru/nvr/merger.git
cp .env merger/.env
cd merger
sudo ./run_docker.sh

Авторы

Дмитрий Кудрявцев, Денис Приходько, Александр Щупак

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages