Сервис для создания склеек лектор + экран или лектор + доска.
Каждые 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