Об этом проекте
## Обзор
@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). Уведомления о лицензиях встроены в генерируемые файлы.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.