প্রকল্প সম্পর্কে
## সংক্ষিপ্ত বিবরণ
@missing-elements/h5p-offline-player হলো একটি ওয়েব কম্পোনেন্ট (`<h5p-player>`) যা যেকোনো `.h5p` আর্কাইভ ফাইল সম্পূর্ণভাবে ব্রাউজারে চালায়। কোনো ব্যাকএন্ড, সার্ভার-সাইড আনপ্যাকিং বা পূর্ব-এক্সট্রাকশন ধাপের প্রয়োজন নেই। কম্পোনেন্টটি URL থেকে অথবা ফাইল পিকার দিয়ে নির্বাচিত লোকাল ফাইল থেকে প্যাকেজ লোড করতে পারে।
প্লেয়ারটি একটি ES মডিউল হিসেবে একটি Service Worker স্ক্রিপ্ট এবং H5P রানটাইম অ্যাসেটের ফোল্ডারসহ বিতরণ করা হয়। এটি Vite, webpack 5 এবং Rollup-এর মতো বান্ডলারদের সাথে কাজ করে, অথবা কোনো বিল্ড ধাপ ছাড়াই সরাসরি CDN থেকে ব্যবহার করা যায়। একটি Service Worker অবশ্যই হোস্ট পেজের একই origin থেকে পরিবেশন করতে হবে; ফ্রেম অ্যাসেট CDN থেকে আসতে পারে।
## এটি কীভাবে কাজ করে
একটি `.h5p` ফাইল হলো একটি zip আর্কাইভ। সার্ভার এটি আনপ্যাক করার বদলে, Service Worker আর্কাইভটি জায়গাতেই পড়ে এবং এর ভেতর থেকে H5P রানটাইমের অনুরোধগুলো পরিবেশন করে:
- আর্কাইভের কেন্দ্রীয় ডিরেক্টরি HTTP Range অনুরোধের মাধ্যমে পড়া হয়, তাই বড় প্যাকেজগুলো ন্যূনতম প্রাথমিক ডেটা ট্রান্সফারে দ্রুত শুরু হয়।
- বড় বাইট রেঞ্জ একাধিক সমান্তরাল সংযোগে আনা হয় এবং ক্রমানুসারে পুনঃসংযোজিত হয়, যা ধীর লিংকে স্টার্টআপ উন্নত করে।
- ছোট এন্ট্রি এবং স্ক্রিপ্ট একবার Cache API স্টোরে ইনফ্লেট করা হয়।
- বড় স্টোরড মিডিয়া এক্সট্রাকশন ছাড়াই সরাসরি আর্কাইভ থেকে স্লাইস করা হয়।
- বড় ডিফ্লেটেড মিডিয়া একটি পেজ-সাইড worker দ্বারা ৮ MB চাঙ্কে ইনফ্লেট করা হয় এবং প্রগ্রেসিভভাবে পরিবেশন করা হয়, তাই সম্পূর্ণ এক্সট্রাকশন শেষ হওয়ার আগেই ভিডিও প্লেব্যাক শুরু হতে পারে।
- ফ্রেম ডকুমেন্ট worker দ্বারা প্রতিটি রেসপন্সের জন্য একটি Content Security Policy সহ জেনারেট করা হয়।
Range সাপোর্ট নেই এমন হোস্টগুলো সম্পূর্ণ আর্কাইভ চাঙ্ক স্টোরে ডাউনলোড করে হ্যান্ডেল করা হয়, যা আসার সাথে সাথে লোকাল হেডার থেকে ইনডেক্স করা হয়, যাতে লাইব্রেরি-প্রথমে সাজানো প্যাকেজগুলো মিডিয়া এখনও ডাউনলোড হওয়ার সময়ই বুট হতে পারে।
## API-এর মূল বৈশিষ্ট্য
- **`src`** — প্যাকেজ URL-এর জন্য অ্যাট্রিবিউট/প্রপার্টি; এটি সেট করলে লোড হয়, `<video>`-এর মতো।
- **`file`** — একটি `File` অবজেক্ট গ্রহণকারী প্রপার্টি, নেটওয়ার্ক ছাড়াই ডিস্ক-ভিত্তিক প্লেব্যাকের জন্য।
- **`sw`** — Service Worker URL-এর জন্য অ্যাট্রিবিউট (একই-origin হতে হবে)।
- **`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 ইন্টিগ্রেশন**: LMS-লঞ্চ করা অ্যাসাইনেবল ইউনিটের জন্য `@missing-elements/h5p-cmi5` হিসেবে উপলব্ধ।
- **এজেন্ট স্কিল**: Claude Code, Cursor, Copilot এবং Codex-এর জন্য সেটআপ, প্যাকেজ নরমালাইজেশন এবং যাচাইকরণ কভার করে স্কিল সরবরাহ করে।
- **অ্যাক্সেসিবিলিটি**: প্লেয়ার আচরণ এবং কনটেন্ট টাইপের দায়িত্ব কভার করে নথিভুক্ত কনফরম্যান্স পদ্ধতি।
- **যাচাইকরণ টুল**: `h5p-verify` প্যাকেজগুলো হেডলেসভাবে চালিয়ে নিশ্চিত করে যে সেগুলো কাজ করে।
## লাইসেন্সিং
প্লেয়ারের নিজস্ব কোড 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.