@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 +28 -14
- package/dist/havik-player.global.js +2 -2
- package/dist/havik-player.global.js.map +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +16 -1
- package/dist/index.d.ts +16 -1
- package/dist/index.js +193 -174
- package/dist/index.js.map +1 -1
- package/docs/API.md +1270 -0
- package/docs/STABILITY.md +56 -0
- package/embed/index.html +1 -1
- package/examples/vanilla.html +1 -1
- package/package.json +4 -5
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
|
|
200
|
-
| ---------------------------- |
|
|
201
|
-
| `INVALID_URN` | 400
|
|
202
|
-
| `NOT_FOUND` | 404
|
|
203
|
-
| `GONE` | 410
|
|
204
|
-
| `TOO_EARLY` | 425
|
|
205
|
-
| `UNAVAILABLE` | 503
|
|
206
|
-
| `UNAUTHORIZED` / `FORBIDDEN` | 401 / 403
|
|
207
|
-
| `
|
|
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
|
|
260
|
-
|
|
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).
|
|
268
|
-
|
|
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
|
|