@oddin-gg/havik-player 2.15.3 → 2.15.5
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/dist/havik-player.global.js +2 -2
- package/dist/havik-player.global.js.map +1 -1
- package/dist/index.cjs +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -2
- package/dist/index.d.ts +3 -2
- package/dist/index.js +319 -298
- package/dist/index.js.map +1 -1
- package/docs/API.md +21 -15
- package/embed/index.html +1 -1
- package/examples/vanilla.html +1 -1
- package/package.json +1 -1
package/docs/API.md
CHANGED
|
@@ -155,12 +155,13 @@ See [`WaitForLive`](#waitforlive) for tuning, and [`createPlayer`](#createplayer
|
|
|
155
155
|
parameters. Use the **same api‑key** to resolve playback and to fetch licenses.
|
|
156
156
|
The managed and iframe players handle this for you.
|
|
157
157
|
|
|
158
|
-
> **FairPlay (Safari/iOS):**
|
|
159
|
-
> descriptor carries FairPlay material and the
|
|
160
|
-
>
|
|
158
|
+
> **FairPlay (Safari/iOS):** played by the browser's **native** player. When
|
|
159
|
+
> the playback descriptor carries FairPlay material and the browser is WebKit,
|
|
160
|
+
> `engine: 'auto'` selects the native engine, which fetches the application
|
|
161
161
|
> certificate, handles the encrypted event, POSTs the SPC to the signed license
|
|
162
|
-
> URL and applies the returned CKC.
|
|
163
|
-
>
|
|
162
|
+
> URL and applies the returned CKC. hls.js is not used for FairPlay: through
|
|
163
|
+
> MSE, WebKit reports the key usable and still renders nothing. No
|
|
164
|
+
> configuration is needed beyond the same api‑key used for playback.
|
|
164
165
|
>
|
|
165
166
|
> **iOS third‑party browsers (Chrome/Firefox/Edge on iOS):** iOS has no
|
|
166
167
|
> Widevine CDM, so protected playback in these browsers depends entirely on
|
|
@@ -170,16 +171,16 @@ See [`WaitForLive`](#waitforlive) for tuning, and [`createPlayer`](#createplayer
|
|
|
170
171
|
|
|
171
172
|
### Browser support
|
|
172
173
|
|
|
173
|
-
| Browser | Engine
|
|
174
|
-
| -------------------------------- |
|
|
175
|
-
| Chrome, Edge (desktop & Android) | hls.js
|
|
176
|
-
| Firefox | hls.js
|
|
177
|
-
| Safari (macOS
|
|
178
|
-
|
|
|
179
|
-
| Chrome/Firefox/Edge **on iOS** |
|
|
174
|
+
| Browser | Engine | DRM |
|
|
175
|
+
| -------------------------------- | --------------------------- | -------------------------------------------------- |
|
|
176
|
+
| Chrome, Edge (desktop & Android) | hls.js | Widevine ✓ |
|
|
177
|
+
| Firefox | hls.js | Widevine ✓ |
|
|
178
|
+
| Safari (macOS) | hls.js; native for FairPlay | FairPlay ✓ (native engine) |
|
|
179
|
+
| Safari (iPhone, iPad) | native HLS | FairPlay ✓ (native engine) |
|
|
180
|
+
| Chrome/Firefox/Edge **on iOS** | native HLS | probe with `detectDrmSupport` (no Widevine on iOS) |
|
|
180
181
|
|
|
181
|
-
Requires a browser with Media Source Extensions
|
|
182
|
-
|
|
182
|
+
Requires a browser with Media Source Extensions and Encrypted Media Extensions
|
|
183
|
+
(all evergreen browsers), or native HLS (iPhone, iPad, and older Safari).
|
|
183
184
|
|
|
184
185
|
---
|
|
185
186
|
|
|
@@ -237,7 +238,7 @@ player.on('error', (e) => console.error(e.code, e.httpStatus, e.message));
|
|
|
237
238
|
| `errorMessage` | `string` | the error's message | Message on the fatal-error card (otherwise the error's own message). |
|
|
238
239
|
| `waitForLive` | [`WaitForLive`](#waitforlive) | — | Arm on an upcoming match and auto‑attach at go‑live. |
|
|
239
240
|
| `lowLatency` | `'auto' \| boolean` | `'auto'` | `'auto'` lets the player decide from the manifest. |
|
|
240
|
-
| `engine` | `'auto' \| 'hls' \| 'native'` | `'auto'` | `'auto'` prefers hls.js
|
|
241
|
+
| `engine` | `'auto' \| 'hls' \| 'native'` | `'auto'` | `'auto'` uses the browser's native player on iPhone and iPad for every stream, and for FairPlay on any Apple browser; elsewhere it prefers hls.js (desktop Safari included) and falls back to native HLS. hls.js on iOS runs on ManagedMediaSource, which closed mid‑session and played slower than real time in testing. |
|
|
241
242
|
| `userId` | `string` | — | Optional viewer id (sent as `X-User-Id` on license requests). |
|
|
242
243
|
| `debug` | `boolean` | `false` | Turn on hls.js's internal console logging: fragment/part scheduling, ABR switches, EME key sessions and license traffic. For diagnosing a playback problem with Oddin support; leave it off in production (it logs on every fragment, and the EME lines include license request/response metadata). hls.js engine only. `hlsConfig.debug` still wins if you set both. |
|
|
243
244
|
| `hlsConfig` | `Partial<HlsConfig>` | — | Escape hatch for advanced hls.js tuning. |
|
|
@@ -265,6 +266,11 @@ don't need to set any of the live or ABR knobs:
|
|
|
265
266
|
aren't reliably published yet; chasing that edge causes constant rebuffering.
|
|
266
267
|
Set `liveLatencyTarget` lower for closer‑to‑live (more rebuffer‑prone) or
|
|
267
268
|
higher for steadier playback. _Lowered from 3 s; see the migration note below._
|
|
269
|
+
- **Catch‑up dead band**: the player only speeds up when it is more than
|
|
270
|
+
**0.5 s** behind its target. Smaller gaps, like the 0.1 to 0.4 s a viewer
|
|
271
|
+
typically lands behind on joining, are left alone, because even 1.05× is
|
|
272
|
+
audible as a crackle in Chrome's and Firefox's pitch correction. Once catch‑up
|
|
273
|
+
starts it runs until playback is back on target.
|
|
268
274
|
- **Drift ceiling**: after a stall, the player catches up at up to **1.1×** (gentle
|
|
269
275
|
enough to be invisible; it was 1.5×, which showed as the picture speeding up
|
|
270
276
|
between stalls on a jittery edge) and,
|
package/embed/index.html
CHANGED
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
beacons endpoint can be derived and QoE analytics is silently off.
|
|
29
29
|
`analytics` is honoured from the injected config only, never the query.
|
|
30
30
|
-->
|
|
31
|
-
<script src="https://cdn.jsdelivr.net/npm/@oddin-gg/havik-player@2.15.
|
|
31
|
+
<script src="https://cdn.jsdelivr.net/npm/@oddin-gg/havik-player@2.15.5/dist/havik-player.global.js" integrity="sha384-16ZwO+uKWeKiYEW9Ct6I8WAnkUXTxhYLNTHWTD2eRP3Z28U1exS61rVY1/MVvHEa" crossorigin="anonymous"></script>
|
|
32
32
|
<script>
|
|
33
33
|
HavikPlayer.bootEmbed();
|
|
34
34
|
</script>
|
package/examples/vanilla.html
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
shipped in each npm release is pinned to that release with Subresource
|
|
13
13
|
Integrity, injected at publish time (scripts/inject-sri.mjs). In
|
|
14
14
|
production, always use a pinned + SRI'd tag like the released copy. -->
|
|
15
|
-
<script src="https://cdn.jsdelivr.net/npm/@oddin-gg/havik-player@2.15.
|
|
15
|
+
<script src="https://cdn.jsdelivr.net/npm/@oddin-gg/havik-player@2.15.5/dist/havik-player.global.js" integrity="sha384-16ZwO+uKWeKiYEW9Ct6I8WAnkUXTxhYLNTHWTD2eRP3Z28U1exS61rVY1/MVvHEa" crossorigin="anonymous"></script>
|
|
16
16
|
<script>
|
|
17
17
|
(async () => {
|
|
18
18
|
const player = await HavikPlayer.createPlayer({
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oddin-gg/havik-player",
|
|
3
|
-
"version": "2.15.
|
|
3
|
+
"version": "2.15.5",
|
|
4
4
|
"description": "Havik HTML5 player SDK — LL-HLS + DRM playback for Oddin live streams (managed, bring-your-own-player, and iframe-embed modes).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|