@oddin-gg/havik-player 2.14.0 → 2.15.1

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/docs/API.md CHANGED
@@ -313,6 +313,17 @@ can't crash the player: if you pass the count‑based `liveSyncDurationCount` /
313
313
  rejects mixing the two); if you set `liveSyncDuration` alone, a matching ceiling
314
314
  is derived above it.
315
315
 
316
+ - **Futile catch‑up is stopped.** hls.js speeds playback up (to 1.5×) whenever
317
+ latency sits above the target, and only lowers its ambition after a counted
318
+ rebuffer. On an edge that is itself seconds behind, a player that keeps a
319
+ deeper buffer (Safari) can chase at 1.5× for a whole session without ever
320
+ gaining a second, which viewers see as constant stutter. The SDK watches the
321
+ chase on its 3 s tick: a chase at ≥1.2× that gains under 0.5 s of latency
322
+ over the next three ticks (12 s in all) moves the target up to where playback
323
+ actually is (never closer than 1 s to the drift ceiling), and the rate drops
324
+ back to 1.0×. One‑way for the session; `targetLatencySeconds` reflects the
325
+ move and `liveRetargets` counts them. A rate the host sets itself is ignored.
326
+
316
327
  > **Migration note:** the default `liveLatencyTarget` **dropped from 3 s to 2 s**.
317
328
  > Nothing to change: the drift ceiling stays 12 s and the ABR reaction budgets
318
329
  > are derived from the target, so they tighten with it automatically. Expect
@@ -409,7 +420,10 @@ the theme colors; customise the copy with `endedMessage`/`interruptedMessage`/`e
409
420
  `statusOverlays: false` to drive your own end/error UI from the player events.
410
421
  It auto-hides during playback, supports keyboard shortcuts (space/`k` play-pause,
411
422
  `m` mute, `f` fullscreen, `c` captions, `l` go-live, arrows seek/volume), and is
412
- fully keyboard- and screen-reader-accessible.
423
+ fully keyboard- and screen-reader-accessible. On a mouse, one click on the
424
+ picture plays/pauses. On touch, a single tap shows or hides the bar and a double
425
+ tap plays/pauses, so bringing the controls back on a phone never pauses the
426
+ stream.
413
427
 
414
428
  > **Fullscreen on iPhone:** iPhone Safari has no element Fullscreen API, so the
415
429
  > fullscreen button there enters the **video-native** fullscreen
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.14.0/dist/havik-player.global.js" integrity="sha384-c9Ga1G40pKYyNg94aH3P6p28rPoHBPXA/ZV4O1+nzRQpqZq6OVXP89Nz0RuKnbas" crossorigin="anonymous"></script>
31
+ <script src="https://cdn.jsdelivr.net/npm/@oddin-gg/havik-player@2.15.1/dist/havik-player.global.js" integrity="sha384-QfwGP+4bjAqO+AlPAKFvmkfq4JLAYGaAFgCPt2WDyaxn4Qf7vLZrPo4fwwoy0pDQ" crossorigin="anonymous"></script>
32
32
  <script>
33
33
  HavikPlayer.bootEmbed();
34
34
  </script>
@@ -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.14.0/dist/havik-player.global.js" integrity="sha384-c9Ga1G40pKYyNg94aH3P6p28rPoHBPXA/ZV4O1+nzRQpqZq6OVXP89Nz0RuKnbas" crossorigin="anonymous"></script>
15
+ <script src="https://cdn.jsdelivr.net/npm/@oddin-gg/havik-player@2.15.1/dist/havik-player.global.js" integrity="sha384-QfwGP+4bjAqO+AlPAKFvmkfq4JLAYGaAFgCPt2WDyaxn4Qf7vLZrPo4fwwoy0pDQ" 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.14.0",
3
+ "version": "2.15.1",
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,