@oddin-gg/havik-player 1.16.0 → 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -13,7 +13,7 @@ integration modes:
13
13
  Widevine (Chrome/Firefox/Edge/Android) is fully supported. Safari/iOS plays via
14
14
  native passthrough; full FairPlay EME is a tracked fast-follow. See [Limitations](#limitations).
15
15
 
16
- > 📖 **Hosted docs & embed page:** [player-dev.oddin-video.gg](https://player-dev.oddin-video.gg) · **Full API reference:** [docs/API.md](docs/API.md) · **Examples** (vanilla / React / Vue): [examples/](examples/) · **API stability & versioning:** [docs/STABILITY.md](docs/STABILITY.md) · **Service status & endpoint directory:** [status-dev.oddin-video.gg](https://status-dev.oddin-video.gg)
16
+ > 📖 **Hosted docs & embed page:** [player-dev.oddin-video.gg](https://player-dev.oddin-video.gg) (source: [havik-player-site](https://github.com/oddin-gg/havik-player-site) — the site pins and bundles this SDK's released npm package) · **Full API reference:** [docs/API.md](docs/API.md) · **Examples** (vanilla / React / Vue): [examples/](examples/) · **API stability & versioning:** [docs/STABILITY.md](docs/STABILITY.md) · **Service status & endpoint directory:** [status-dev.oddin-video.gg](https://status-dev.oddin-video.gg)
17
17
 
18
18
  > ⚠️ **Before you integrate — a server-side prerequisite that is out of your code's hands:**
19
19
  > the api-key's **AllowedOrigins** (and, for iframes, **AllowedIframeParents**) **and** the
@@ -196,15 +196,16 @@ channel directly.
196
196
 
197
197
  All API errors are a typed `PlaybackError` with `{ code, httpStatus, retryAfterMs?, requestId? }`:
198
198
 
199
- | code | HTTP | meaning | retry? |
200
- | ---------------------------- | --------- | --------------------------------------------------- | ----------------- |
201
- | `INVALID_URN` | 400 | malformed URN | no |
202
- | `NOT_FOUND` | 404 | unknown URN **or** not entitled (indistinguishable) | no |
203
- | `GONE` | 410 | ended past catchup window | no |
204
- | `TOO_EARLY` | 425 | upcoming, not live yet | yes (waitForLive) |
205
- | `UNAVAILABLE` | 503 | should-be-live, origin warming up | yes |
206
- | `UNAUTHORIZED` / `FORBIDDEN` | 401 / 403 | bad key / origin not allowed / DRM rejected | no |
207
- | `RATE_LIMITED` | 429 | per-IP limiter | back off |
199
+ | code | HTTP | meaning | retry? |
200
+ | ---------------------------- | ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- |
201
+ | `INVALID_URN` | 400 | malformed URN | no |
202
+ | `NOT_FOUND` | 404 | unknown URN **or** not entitled (indistinguishable) | no |
203
+ | `GONE` | 410 | ended past catchup window | no |
204
+ | `TOO_EARLY` | 425 | upcoming, not live yet | yes (waitForLive) |
205
+ | `UNAVAILABLE` | 503 | should-be-live, origin warming up | yes |
206
+ | `UNAUTHORIZED` / `FORBIDDEN` | 401 / 403 | bad key / origin not allowed / DRM rejected **server-side** | no |
207
+ | `DRM_CLIENT` | 0 or license status | **client-side** DRM failure — key system unusable on this platform, CDM/EME error, or license transport exhausted (not an entitlement denial) | sometimes — the control bar offers retry (see docs/API.md) |
208
+ | `RATE_LIMITED` | 429 | per-IP limiter | back off |
208
209
 
209
210
  ---
210
211
 
@@ -256,16 +257,29 @@ The key's `AllowedOrigins` must include `http://localhost:5173`.
256
257
  fast-follow.
257
258
  - **HLS only** (no DASH); **Widevine + FairPlay** key systems (no PlayReady — Edge
258
259
  uses Widevine). Container CMAF/fMP4, encryption cbcs.
259
- - hls.js is pinned to `1.7.0-beta.1` (the first version that plays this LL-HLS+DRM
260
- content; 1.6.x has a fatal sourceBuffer bug). Pin to `1.7.0` stable when released.
260
+ - hls.js is pinned exactly (see `package.json` for the current version).
261
+ LL-HLS+DRM playback is sensitive to hls.js regressions, so bumps are
262
+ deliberate and tested, never automatic.
263
+
264
+ ## Analytics (QoE beacons)
265
+
266
+ Mode A emits anonymous QoE beacons (startup time, heartbeat byte/quality deltas,
267
+ state changes, errors, session end) to the Havik analytics plane, correlated with
268
+ CDN logs via a server-minted CMCD session id (`sid`). The `sid` lives **only in
269
+ JS memory** — never in storage or cookies — and dies with the player. Opt out or
270
+ redirect with the `analytics` option on `createPlayer`
271
+ (`analytics: false | { endpoint?: string }`); without a server-minted `sid` the
272
+ emitter is inert.
261
273
 
262
274
  ## Privacy
263
275
 
264
276
  The SDK persists a random per-device id in `localStorage` and sends it as
265
277
  `X-Device-Id` on every DRM license request (required by the license server). It is a
266
278
  stable cross-session identifier — disclose it in your privacy policy and offer a reset
267
- via [`clearDeviceId()`](docs/API.md#getdeviceid--cleardeviceid). No other personal
268
- data is collected by the SDK.
279
+ via [`clearDeviceId()`](docs/API.md#getdeviceid--cleardeviceid). The QoE beacons
280
+ above are anonymous (no IP is stored and the user agent is minimized on arrival;
281
+ the in-memory `sid` is not a cross-session identifier). No other personal data is
282
+ collected by the SDK.
269
283
 
270
284
  ## Browser & runtime support
271
285