@oddin-gg/havik-player 2.15.2 → 2.15.4
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 +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +195 -134
- package/dist/index.js.map +1 -1
- package/docs/API.md +18 -0
- package/embed/index.html +1 -1
- package/examples/vanilla.html +1 -1
- package/package.json +1 -1
package/docs/API.md
CHANGED
|
@@ -265,6 +265,11 @@ don't need to set any of the live or ABR knobs:
|
|
|
265
265
|
aren't reliably published yet; chasing that edge causes constant rebuffering.
|
|
266
266
|
Set `liveLatencyTarget` lower for closer‑to‑live (more rebuffer‑prone) or
|
|
267
267
|
higher for steadier playback. _Lowered from 3 s; see the migration note below._
|
|
268
|
+
- **Catch‑up dead band**: the player only speeds up when it is more than
|
|
269
|
+
**0.5 s** behind its target. Smaller gaps, like the 0.1 to 0.4 s a viewer
|
|
270
|
+
typically lands behind on joining, are left alone, because even 1.05× is
|
|
271
|
+
audible as a crackle in Chrome's and Firefox's pitch correction. Once catch‑up
|
|
272
|
+
starts it runs until playback is back on target.
|
|
268
273
|
- **Drift ceiling**: after a stall, the player catches up at up to **1.1×** (gentle
|
|
269
274
|
enough to be invisible; it was 1.5×, which showed as the picture speeding up
|
|
270
275
|
between stalls on a jittery edge) and,
|
|
@@ -315,6 +320,17 @@ can't crash the player: if you pass the count‑based `liveSyncDurationCount` /
|
|
|
315
320
|
rejects mixing the two); if you set `liveSyncDuration` alone, a matching ceiling
|
|
316
321
|
is derived above it.
|
|
317
322
|
|
|
323
|
+
- **Quality steps down when the device can't decode it.** If the browser keeps
|
|
324
|
+
dropping more than 20% of frames for two 3 s checks in a row, the SDK caps
|
|
325
|
+
ABR one rendition below the one playing (counted in `fpsDownCaps`). This is
|
|
326
|
+
what keeps a laptop without hardware decoding from showing a stuttering
|
|
327
|
+
picture that drifts away from the sound. It folds into the same cap as the
|
|
328
|
+
player‑size and `maxBitrate` limits, never applies to a quality the viewer
|
|
329
|
+
pinned, and stays down for the session. Setting
|
|
330
|
+
`hlsConfig.capLevelOnFPSDrop: false` turns frame‑drop capping off; `true` runs
|
|
331
|
+
hls.js's own controller instead, whose cap a later player‑size or `maxBitrate`
|
|
332
|
+
recompute can overwrite.
|
|
333
|
+
|
|
318
334
|
- **Futile catch‑up is stopped.** hls.js speeds playback up (to 1.1×) whenever
|
|
319
335
|
latency sits above the target, and only lowers its ambition after a counted
|
|
320
336
|
rebuffer. On an edge that is itself seconds behind, a player that keeps a
|
|
@@ -1246,6 +1262,8 @@ interface PlaybackStats {
|
|
|
1246
1262
|
lowLatency?: boolean; // whether LL-HLS was detected in the manifest
|
|
1247
1263
|
isLive?: boolean; // current media playlist is live
|
|
1248
1264
|
atLiveEdge?: boolean; // playback is at/near the live edge
|
|
1265
|
+
liveRetargets?: number; // times a futile catch-up moved the live target (hls.js engine)
|
|
1266
|
+
fpsDownCaps?: number; // times quality was capped because the device dropped frames (hls.js engine)
|
|
1249
1267
|
}
|
|
1250
1268
|
```
|
|
1251
1269
|
|
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.4/dist/havik-player.global.js" integrity="sha384-KHquOQfjrHz3RnxzF+WQxpiXOiQb/ypcpe5Ny5oJmonEPggkQy+8BV5D5rrRfHkT" 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.4/dist/havik-player.global.js" integrity="sha384-KHquOQfjrHz3RnxzF+WQxpiXOiQb/ypcpe5Ny5oJmonEPggkQy+8BV5D5rrRfHkT" 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.4",
|
|
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,
|