Об этом проекте

## Обзор @missing-elements/h5p-offline-player — это веб-компонент (`<h5p-player>`), который воспроизводит произвольные архивы `.h5p` полностью в браузере. Без бэкенда, без серверной распаковки и без предварительного извлечения. Компонент может загружать пакеты из URL или из локального файла, выбранного через диалог выбора файлов. Плеер распространяется как ES-модуль вместе со скриптом Service Worker и папкой ресурсов среды выполнения H5P. Он работает со сборщиками вроде Vite, webpack 5 и Rollup, а также может использоваться напрямую с CDN без этапа сборки. Service Worker должен отдаваться с того же источника, что и хост-страница; ресурсы фрейма могут поступать с CDN. ## Как это работает Файл `.h5p` — это zip-архив. Вместо распаковки на сервере Service Worker читает архив на месте и обслуживает запросы среды выполнения H5P из него: - Центральный каталог архива читается через HTTP Range-запросы, поэтому большие пакеты запускаются быстро при минимальной начальной передаче данных. - Большие диапазоны байтов загружаются через несколько параллельных соединений и собираются по порядку, что ускоряет запуск на медленных каналах. - Небольшие записи и скрипты один раз распаковываются в хранилище Cache API. - Большие хранимые медиафайлы нарезаются напрямую из архива без извлечения. - Большие сжатые медиафайлы распаковываются блоками по 8 МБ воркером на стороне страницы и отдаются постепенно, поэтому воспроизведение видео может начаться до завершения полной распаковки. - Документ фрейма генерируется воркером с политикой Content Security Policy для каждого ответа. Хосты без поддержки Range обрабатываются путём загрузки всего архива в хранилище блоков с индексацией по локальным заголовкам по мере поступления, поэтому пакеты, в которых библиотеки идут первыми, могут загрузиться, пока медиа ещё скачивается. ## Ключевые возможности API - **`src`** — атрибут/свойство для URL пакета; его установка запускает загрузку, как у `<video>`. - **`file`** — свойство, принимающее объект `File` для воспроизведения с диска без сети. - **`sw`** — атрибут для URL Service Worker (должен быть с того же источника). - **`assets-base`** — атрибут для каталога ресурсов фрейма (может быть CDN). - **`libraries`** — атрибут для загрузки папок библиотек из хаба или встроенного пакета. - **`resume`** — атрибут для сохранения состояния учащегося на устройстве или передачи его хост-странице. - **`preload`** — атрибут для предварительной загрузки больших сжатых медиафайлов до запроса. Свойства только для чтения включают `state` (idle, probing, downloading, indexing, ready, error), `pkgId`, `revision` и `scope`. ## События Элемент генерирует события `ready`, `xapi` (для xAPI-утверждений из контента), `finished` (завершение с оценкой), `userdata` (сохранённое состояние), `progress` (фазы загрузки/индексации), `resize`, `statechange` и `error`. xAPI-утверждения — единственный канал для результатов, и сам плеер их никогда не хранит. ## Дополнительные возможности - **Поддержка PWA**: устанавливаемое офлайн-приложение для Chrome/Edge. - **Интеграция с cmi5**: доступна как `@missing-elements/h5p-cmi5` для назначаемых блоков, запускаемых из LMS. - **Навыки агентов**: поставляются навыки для Claude Code, Cursor, Copilot и Codex, охватывающие настройку, нормализацию пакетов и проверку. - **Доступность**: документированный подход к соответствию, охватывающий поведение плеера и обязанности по типам контента. - **Инструмент проверки**: `h5p-verify` запускает пакеты в headless-режиме для подтверждения их работоспособности. ## Лицензирование Собственный код плеера — MIT. Публикуемый пакет — `(MIT AND GPL-3.0-only)`, поскольку встроенная среда выполнения ядра H5P (из h5p-standalone/h5p-php-library) распространяется под GPL-3.0. Скрипты Service Worker включают zip.js (BSD-3-Clause). Уведомления о лицензиях встроены в генерируемые файлы.