{"id":31976795,"url":"https://github.com/moevm/mse1h2025-prctr","last_synced_at":"2025-10-14T21:18:03.605Z","repository":{"id":278621673,"uuid":"932106697","full_name":"moevm/mse1h2025-prctr","owner":"moevm","description":"Локальное средство записи экрана, микрофона и камеры на основе расширения браузера с поддержкой серверного обмена данными. Студенческий прокторинг СПбГЭТУ \"ЛЭТИ\" [WIP].","archived":false,"fork":false,"pushed_at":"2025-10-02T07:09:17.000Z","size":42675,"stargazers_count":1,"open_issues_count":49,"forks_count":1,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-10-02T09:12:11.756Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/moevm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-02-13T11:27:52.000Z","updated_at":"2025-06-16T09:09:52.000Z","dependencies_parsed_at":null,"dependency_job_id":"4445b0ab-8329-48c9-8590-f34bed6bc3e6","html_url":"https://github.com/moevm/mse1h2025-prctr","commit_stats":null,"previous_names":["moevm/mse1h2025-prctr"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/moevm/mse1h2025-prctr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moevm%2Fmse1h2025-prctr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moevm%2Fmse1h2025-prctr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moevm%2Fmse1h2025-prctr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moevm%2Fmse1h2025-prctr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/moevm","download_url":"https://codeload.github.com/moevm/mse1h2025-prctr/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moevm%2Fmse1h2025-prctr/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279021382,"owners_count":26087020,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-14T02:00:06.444Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-10-14T21:18:02.351Z","updated_at":"2025-10-14T21:18:03.593Z","avatar_url":"https://github.com/moevm.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Локальный прокторинг\n\n![Alt text](client/assets/docs/newPopupDesign.png)\n\n## Поддерживаемые браузеры\n### Расширение предназначено для работы с браузером Google Chrome. Требуемая версия браузера Google Chrome 134 и выше.\n\nУзнать свою версию браузера Google Chrome можно по адресу `chrome://version`, где после слов Google Chrome указаны четыре числа и первое из них и является нужным для сравнения.\n\nПоскольку расширение разработано на базе браузера Google Chrome, который основан на Chromium, потенциально оно должно работать на других браузерах, основанных так же на Chromium. В их числе Microsoft Edge, Yandex Browser, Opera и другие. ОДНАКО на данный момент НЕТ официальной поддержки браузеров кроме Google Chrome, поскольку тестирование НЕ проводилось.\n\n## Поддерживаемые операционные системы\n### Расширение предназначено для работы с Linux и Windows.\n\nВ ближайшее время НЕ планируется поддержка MacOS ввиду отсутствия возможности разработки и тестирования под данную систему. Потенциально расширение может работать в данной системе из-за привязки к браузеру, однако браузер в свою очередь связан с системой, что может привести к возникновению ошибок и других некорректных ситуаций.\n\n## Замечания:\n- В версиях 1.4.* и ниже выбирайте только основной экран для работы и браузера в случае, когда вы имеете больше одного монитора.\n\n- Данная инструкция является ознакомительной и не избавляет пользователя от обязанности внимательно читать уведомления на экране. Текст уведомлений может иметь немного отличий от представленного на изображениях ниже.\n\n# Инструкция по использованию системы локального прокторинга\n\n## Подготовка папки расширения\n\n1. Скачайте zip архив расширения. Имя архива будет `client_v1.2.2.zip` или при более новых версиях меняется комбинация чисел после v. Чтобы получить последнюю версию расширения, Вам нужно перейти на страницу релизов по ссылке https://github.com/moevm/mse1h2025-prctr/releases/latest и скачать архив с названием `client_v*.*.*.zip`, где вместо * стоят числа версии. Прямая ссылка на скачивание архива расширения версии 1.2.2 https://github.com/moevm/mse1h2025-prctr/releases/download/v1.2.2/client_v1.2.2.zip.\n\n2. Распакуйте архив расширения. Архиваторы работают по-разному. Если при распаковке Вы получили папку `client`, то это папка с расширением. Если вы получили папку с названием как у архива, то папка `client` находится внутри.\n\n## Установка расширения в Google Chrome\n\n1. Откройте раздел \"Управление расширениями\" в браузере.\n\n    ![Alt text](client/assets/docs/managingExtensions.png)\n\n2. Активируйте режим разработчика.\n\n    ![Alt text](client/assets/docs/developerMode.png)\n\n3. Нажмите \"Load unpacked\" (Загрузить распакованное расширение) и выберите папку расширения `client`.\n\n    ![Alt text](client/assets/docs/loadUnpacked.png)\n\n4. После успешной загрузки расширение должно появиться среди остальных установленных расширений.\n    ![Alt text](client/assets/docs/loadedExtension.png)\n\n5. Для удобства закрепите расширение на панели инструментов.\n\n    ![Alt text](client/assets/docs/pinnedExtension.png)\n\n\n## Работа с клиентской частью расширения\nДля начала работы с расширением Вам необходимо выполнить следующие действия:\n1. **Откройте интерфейс расширения**:\n   - Нажмите на значок расширения на панели инструментов браузера (правый верхний угол), если вы его закрепили.\n   - Или нажмите на значок \"Пазл\" $\\rightarrow$ выберите \"Local proctoring\" из списка расширений.\n\n2. **Заполните обязательные данные**:\n   - **Группа**: введите ровно 4 цифры (например, `1234`).\n   - **Фамилия**, **Имя**, **Отчество**: укажите свои данные, начиная с заглавной буквы (допустимы русские/латинские буквы и тире).\n   - **Ссылка на экзаменационную \"комнату\"**: введите корректный URL. Выдается преподавателем.\n\n3. **Настройте разрешения**:\n   - Нажмите кнопку \"Разрешения\".\n   - Последовательно предоставьте доступ к:\n     1. Записи экрана\n     2. Использованию микрофона\n     3. Использованию камеры\n\n4. **Приступите к записи**:\n   - После успешной настройки разрешений нажмите \"Начать запись\".\n   - Для завершения нажмите \"Остановить запись\" - файлы сохранятся в папку загрузок браузера, выставленную в настройка самого браузера. По умолчанию данная папка \"Загрузки\", или \"Downloads\" и др. в зависимости от локализации. Поддерживается случай настройки загрузок в браузере, запрашивающий подтверждение скачивания: в таком случае система выводит системное окно с подтверждением скачивания.\n\n### **Важно**: Перед началом работы обязательно ознакомьтесь с полной инструкцией ниже - это поможет избежать распространённых ошибок.\n\n## Подробные инструкции:\n### 1. Открытие popup-расширения\n\n1. Если ранее расширение было закреплено на панели инструментов браузера (правый верхний угол, рядом со строкой адреса), то для открытия интерфейса popup-расширения (popup - всплывающее окно) нажмите на значок расширения.\n\n    ![Alt text](client/assets/docs/openPinnedPopup.png)\n\n2. Иначе нажмите на значок \"Пазл\" на панели инструментов браузера (правый верхний угол, рядом со строкой адреса).\n\n    ![Alt text](client/assets/docs/popupLocation.png)\n\n3. В открывшемся окне нажмите по области рядом с иконкой/названием расширения, чтобы открыть интерфейс popup-расширения.\n\n    ![Alt text](client/assets/docs/openPopup.png)\n\n### 2. Интерфейс popup-расширения\n\n![Alt text](client/assets/docs/popupInterface.png)\n\n- Поля:\n - Группа\n - Фамилия\n - Имя\n - Отчество\n - Ссылка на экзаменационную \"комнату\". \n \n **Важно:** В прокторинге есть сущность, которая отвечает за \"комнаты\". Запись привязана к комнате (ссылка на экзамен). Ссылка выдается преподавателем перед началом экзамена.\n\n- Чекбокс для пользователей без Отчества\n- Информация о текущих статусах разрешений (✓ – предоставлено, ✗ – не предоставлено):\n  - Микрофон\n  - Камера\n  - Экран\n- Дата начала последней записи\n- Время записи\n- Кнопки:\n  - Разрешения – запрашивает доступ к необходимым разрешениям\n  - Начать запись – начинает записи\n  - Остановить запись – заканчивает записи, сохраняя их у пользователя локально\n\n### 3. Заполнение данных\n\nВ форме необходимо указать:\n- **Группа**: ровно 4 цифры (например, `1234`).\n- **Фамилия, Имя, Отчество**: должны начинаться с заглавной буквы и содержать только русские/латинские буквы и тире (например, `Иванов` или `Albus-Severus`). \n- **Ссылка на экзаменационную \"комнату\"**: поле не должно быть пустым.\n\n    ![Alt text](client/assets/docs/popupInterface.png)\n\nПримечания:\n- Система автоматически проверяет корректность ввода и предоставляет подсказки при ошибках.\n    - Ошибки:\n    \n        ![Alt text](client/assets/docs/inputErrors.png)\n    \n    - Подсказки:\n    \n        ![Alt text](client/assets/docs/inputHints.png)\n\n\n\n### 4. Настройка разрешений\n1. Нажмите кнопку **\"Разрешения\"**, которая находится во всплывающем окне, для перехода в системную вкладку расширения.\n\n    Системная вкладка закрепится в начале всех вкладок. \n\n    ![Alt text](client/assets/docs/pinnedTab.png)\n\n    **Важно:** Для корректной работы прокторинга системную вкладку закрывать, обновлять - нельзя! (Закрыть можно только ПОСЛЕ окончания прокторинга)\n\n    Система уведомляет о необходимости предоставления разрешений, а также просит не прерывать их для корректной работы приложения.\n\n    ![Alt text](client/assets/docs/permissionsCue.png)\n\n    Чтобы открыть всплывающее окно, нужно нажать на закреплённый значок нашего расширения в панеле инструментов.\n\n    ![Alt text](client/assets/docs/openPinnedPopup.png)\n\n    Если вы не закрепили его, то нужно нажать значок расширений браузера в панеле инструментов и там нажать по расширению Local proctoring, однако рекомендуется в таком случае вернуться на шаг закрепления расширения в панеле инструментов.\n\n    ![Alt text](client/assets/docs/popupLocation.png)\n\n    ![Alt text](client/assets/docs/openPopup.png)\n\n3. Нажав на кнопку \"Хорошо. Я прочитал(а).\", система предложит выдать разрешение на запись экрана:\n\n    ![Alt text](client/assets/docs/permissionScreen.png)\n\n    ### Прерывание записи\n    При отмене предоставления доступа к экрану система сообщит, об отмене разрешения для экрана:\n\n    ![Alt text](client/assets/docs/permissionErrorScreenCue.png)\n\n    Повторно нажмите **\"Разрешения\"**.\n\n3. После предоставления экрана система попросит выдать разрешение на использование микрофона и камеры. \n- \"Разрешить в этот раз\". Расширение будет запрашивать у Вас разрешение каждый раз при записи. \n- \"Разрешить при нахождении на сайте\". Вы соглашаетесь с тем, что расширение всегда использует либо микрофон, либо камеру. \n \n    ![Alt text](client/assets/docs/permissionsCamMic.png)\n\n\n    ### Прерывание записи\n\n    При запрете разрешений на использование микрофона и камеры система сообщит, что доступ к микрофону или камере запрещен:\n\n    ![Alt text](client/assets/docs/permissionErrorMicCue.png) ![Alt text](client/assets/docs/permissionErrorCamCue.png)\n\n \n\n    После чего система попросит убедиться, что доступ к микрофону и камере разрешены.\n\n    ![Alt text](client/assets/docs/permissionNotification.png)\n\n    Нажав на кнопку \"Хорошо. Я прочитал(а).\", система закроет системную вкладку расширения и перенаправит Вас на вкладку настроек безопасности расширения. Для камеры и микрофона необходимо поменять статус \"Блокировать\" на \"Разрешить\" или \"Спрашивать (по умолчанию)\". \n\n    ![Alt text](client/assets/docs/permissionsCamMicStatus.png)\n\n    Примечание:\n    - В случае со статусом \"Спрашивать (по умолчанию)\" расширение будет запрашивать у Вас разрешение каждый раз при записи.\n\n    Повторно нажмите **\"Разрешения\"**.\n\n4. После выдачи всех разрешений система сообщит о готовности к записи с небольшой информацией о работе расширения.\n\n    ![Alt text](client/assets/docs/readyToRecordCue.png)\n    \n    Также на вкладке появится предпросмотр: экрана и камеры. Предпросмотр работает в режиме live трансляции. В правом окошке - предпросмотр камеры, в левом - предпросмотр экрана.\n        \n    * Пожалуйста не пугайтесь страшной рекурсии на экране, это предпросмотр Вашего экрана, так и должно быть.\n    * Не волнуйтесь, Ваши действия до нажатия \"Начать запись\" не записываются.\n\n    ![Alt text](client/assets/docs/extensionPreview.png)\n\n\n    ### Прерывание записи\n    Если закрыть доступ к экрану, камере или микрофону после предоставления разрешений, то система уведомит о том, что соответствующее разрешение было заблокировано и нужно повторно нажать кнопку \"Разрешения\" после предоставления недостающих разрешений.\n\n    ![Alt text](client/assets/docs/permissionLoseScreenCue.png)\n    ![Alt text](client/assets/docs/permissionLoseCamCue.png)\n    ![Alt text](client/assets/docs/permissionLoseMicCue.png)\n\n### 5. Начало записи\n\n1. Нажмите кнопку **\"Начать запись\"**. Система:\n- Запустит запись.\n- Отключит предпросмотр.\n- Уведомит о начале процесса.\n\n    ![Alt text](client/assets/docs/startRecord.png)\n\n\n2. Во время записи можно включить и выключить предпросмотр через системную вкладку.\n \n    ![Alt text](client/assets/docs/previewOn.png)\n    ![Alt text](client/assets/docs/previewDown.png)\n\n\n    ### Прерывание записи\n\n    При отзыве разрешений во время записи:\n    1. Система уведомит о блокировке доступа попросит выдать разрешения и начать запись заново.\n    2. Нажмите **\"Хорошо. Я согласен(а).\"** для остановки записи.\n    3. Файлы сохранятся в папку загрузок браузера, выставленную в настройка самого браузера. По умолчанию данная папка **Загрузки**, или **Downloads** и др. в зависимости от локализации. Поддерживается случай настройки загрузок в браузере, запрашивающий подтверждение скачивания: в таком случае система выводит системное окно с подтверждением скачивания. Далее система предоставит статистику:\n    - Начало записи\n    - Конец записи\n    - Длительность записи\n    - Куда сохранены файлы записи экрана и камеры\n    - Название файла записи экрана (его размер)\n    - Название файла записи камеры (его размер):\n    - Куда сохранен файл логов\n\n        ![Alt text](client/assets/docs/stopRecord.png)\n\n### 6. Конец записи\n1. Нажмите \"Остановить запись\".\n2. Записи остановятся и сохранятся в папку загрузок браузера, выставленную в настройка самого браузера. По умолчанию данная папка **Загрузки**, или **Downloads** и др. в зависимости от локализации. Поддерживается случай настройки загрузок в браузере, запрашивающий подтверждение скачивания: в таком случае система выводит системное окно с подтверждением скачивания.\n3. Система предоставит статистику:\n- Начало записи\n- Конец записи\n- Длительность записи\n- Куда сохранены файлы записи экрана и камеры\n- Название файла записи экрана (его размер)\n- Название файла записи камеры (его размер):\n- Куда сохранен файл логов\n\n## Просмотр записей\n\nКодеки: H264 - MPEG-4 AVC (part 10) (avc1) и OPUS\nВидеоплеер должен работать с этими кодеками. Чтобы решить проблему отображения, искать решение на стороне видеоплеера. \n\nFull support:\n\n- Linux: \n\n    1. Chrome\n    2. Microsoft Edge\n    3. Totem\n    4. Haruna\n\n- Windows:\n\n    1. Chrome\n    2. Microsoft Edge\n    3. Vivaldi\n\n\nHalf support: \n\n- Linux:\n\n    1. VLC (Смотреть локально \"Кодеки-\u003eДекодирование с аппаратным ускорением\" и пробовать другие, если по умолчанию не работает. На Fedora 41 работают VA-API, VA-API DRM, отключено, не работает VDPAU) Звук в левом наушнике.\n    2. Firefox - нет длительности и не работает перемотка.\n    3. Dragon Player - работает, но после перемотки накладывается инверсия на изображение.\n\n- Windows:\n\n    1. Кино и ТВ - работает перемотка только кнопками, нет длительности.\n    2. Фотографии - работает перемотка только кнопками, длительность некорректная.\n    3. Медиаплеер -  нет длительности и не работает перемотка.\n    4. Firefox - нет длительности и не работает перемотка.\n    5. VLC - работает с автоматическим модулем демультиплексора, при перемотке возможны искажения изображения на несколько секунд.\n\n## Сервер расширения\n### CLI\nДля запуска сервера в папке server ввести следующую команду:\n```bash\ndocker-compose up --build || docker compose up --build\n```\n\n### GUI\nПри вводе адреса `http://localhost:5000/` открывается страница с пятью окнами ввода: “Группа”, “Фамилия”, “Имя”, “Отчество”, “Дата” – для фильтрации, и кнопкой “Поиск” для вывода записей в базе данных по заданному фильтру (по умолчанию показываются все записи). Поля участвуют в поиске по принципу “И”, и если поля пустые, то выводится вся база данных. База данных работает в UTC0 серверном формате. Метаданные прокторинга в формате локального для пользователя времени. Логирование осуществляется в UTC0 клиентском формате, вместе с этим в логировании есть поле с часовым поясом клиента.\n\nВывод записей базы данных происходит на странице `http://localhost:5000/results`. Страница работает только при переадресации с главной страницы поиска.\n\nТакже все результаты выводятся в неприведенном виде по адресе `http://localhost:5000/get_sessions`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoevm%2Fmse1h2025-prctr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmoevm%2Fmse1h2025-prctr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoevm%2Fmse1h2025-prctr/lists"}