cursedbelt 4.1.0 → 4.3.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/dist/react/master-lock/MasterLockDialog.d.ts.map +1 -1
- package/dist/react/master-lock/MasterLockDialog.js +25 -5
- package/dist/react/master-lock/MasterLockDialog.js.map +1 -1
- package/dist/react/master-lock/MasterLockProvider.d.ts +19 -0
- package/dist/react/master-lock/MasterLockProvider.d.ts.map +1 -1
- package/dist/react/master-lock/MasterLockProvider.js +19 -0
- package/dist/react/master-lock/MasterLockProvider.js.map +1 -1
- package/dist/react/media/CanvasVideoPlayer.d.ts +3 -2
- package/dist/react/media/CanvasVideoPlayer.d.ts.map +1 -1
- package/dist/react/media/CanvasVideoPlayer.js +4 -3
- package/dist/react/media/CanvasVideoPlayer.js.map +1 -1
- package/dist/react/media/FrameGrabber.d.ts +16 -2
- package/dist/react/media/FrameGrabber.d.ts.map +1 -1
- package/dist/react/media/FrameGrabber.js +68 -43
- package/dist/react/media/FrameGrabber.js.map +1 -1
- package/dist/react/media/PictureEditor.d.ts +17 -2
- package/dist/react/media/PictureEditor.d.ts.map +1 -1
- package/dist/react/media/PictureEditor.js +33 -7
- package/dist/react/media/PictureEditor.js.map +1 -1
- package/dist/react/media/VideoChapterEditor.d.ts +17 -2
- package/dist/react/media/VideoChapterEditor.d.ts.map +1 -1
- package/dist/react/media/VideoChapterEditor.js +21 -3
- package/dist/react/media/VideoChapterEditor.js.map +1 -1
- package/dist/react/media/VideoCutEditor.d.ts +16 -2
- package/dist/react/media/VideoCutEditor.d.ts.map +1 -1
- package/dist/react/media/VideoCutEditor.js +21 -3
- package/dist/react/media/VideoCutEditor.js.map +1 -1
- package/dist/react/media/VideoPlayer.d.ts +37 -9
- package/dist/react/media/VideoPlayer.d.ts.map +1 -1
- package/dist/react/media/VideoPlayer.js +130 -39
- package/dist/react/media/VideoPlayer.js.map +1 -1
- package/dist/react/media/hlsSource.d.ts +24 -3
- package/dist/react/media/hlsSource.d.ts.map +1 -1
- package/dist/react/media/hlsSource.js +109 -8
- package/dist/react/media/hlsSource.js.map +1 -1
- package/dist/react/media/pictureEditor.css +2 -0
- package/dist/react/media/sourceFault.d.ts +146 -0
- package/dist/react/media/sourceFault.d.ts.map +1 -0
- package/dist/react/media/sourceFault.js +139 -0
- package/dist/react/media/sourceFault.js.map +1 -0
- package/dist/react/media/videoChapterEditor.css +19 -0
- package/dist/react/media/videoCutEditor.css +22 -0
- package/dist/react/media-gallery/MediaGallery.d.ts +12 -1
- package/dist/react/media-gallery/MediaGallery.d.ts.map +1 -1
- package/dist/react/media-gallery/MediaGallery.js +166 -13
- package/dist/react/media-gallery/MediaGallery.js.map +1 -1
- package/dist/react/media-gallery/galleryItemMedia.d.ts +4 -0
- package/dist/react/media-gallery/galleryItemMedia.d.ts.map +1 -1
- package/dist/react/media-gallery/galleryItemMedia.js +27 -3
- package/dist/react/media-gallery/galleryItemMedia.js.map +1 -1
- package/dist/react/media-gallery/mediaGalleryModel.d.ts.map +1 -1
- package/dist/react/media-gallery/mediaGalleryModel.js +5 -0
- package/dist/react/media-gallery/mediaGalleryModel.js.map +1 -1
- package/dist/react/media-gallery/types.d.ts +23 -0
- package/dist/react/media-gallery/types.d.ts.map +1 -1
- package/dist/scripts/guardrailsEnforce.d.ts +1 -0
- package/dist/scripts/guardrailsEnforce.d.ts.map +1 -1
- package/dist/styles-areas/master-lock.css +1 -1
- package/dist/styles-areas/media-gallery.css +1 -1
- package/dist/styles-areas/media.css +1 -1
- package/package.json +3 -2
- package/scripts/guardrailsEnforce.spec.ts +244 -1
- package/scripts/guardrailsEnforce.ts +224 -7
- package/src/iframesMakeNoRealRequest.spec.ts +92 -0
- package/src/react/components/IsolatedFrame.spec.tsx +27 -9
- package/src/react/master-lock/MasterLockDialog.tsx +24 -5
- package/src/react/master-lock/MasterLockProvider.spec.tsx +39 -0
- package/src/react/master-lock/MasterLockProvider.tsx +19 -0
- package/src/react/media/CanvasVideoPlayer.tsx +11 -6
- package/src/react/media/FrameGrabber.spec.tsx +57 -1
- package/src/react/media/FrameGrabber.tsx +138 -84
- package/src/react/media/PictureEditor.spec.tsx +90 -0
- package/src/react/media/PictureEditor.tsx +78 -23
- package/src/react/media/VideoChapterEditor.spec.tsx +86 -0
- package/src/react/media/VideoChapterEditor.tsx +64 -18
- package/src/react/media/VideoCutEditor.spec.tsx +44 -0
- package/src/react/media/VideoCutEditor.tsx +63 -18
- package/src/react/media/VideoPlayer.spec.tsx +101 -0
- package/src/react/media/VideoPlayer.tsx +221 -73
- package/src/react/media/hlsSource.answer.spec.ts +255 -0
- package/src/react/media/hlsSource.ts +136 -8
- package/src/react/media/pictureEditor.css +2 -0
- package/src/react/media/sourceFault.spec.tsx +224 -0
- package/src/react/media/sourceFault.tsx +220 -0
- package/src/react/media/videoChapterEditor.css +19 -0
- package/src/react/media/videoCutEditor.css +22 -0
- package/src/react/media-gallery/MediaGallery.spec.tsx +288 -0
- package/src/react/media-gallery/MediaGallery.tsx +356 -45
- package/src/react/media-gallery/galleryItemMedia.tsx +27 -4
- package/src/react/media-gallery/mediaGalleryModel.spec.ts +36 -0
- package/src/react/media-gallery/mediaGalleryModel.ts +4 -0
- package/src/react/media-gallery/types.ts +23 -0
- package/src/styles-areas/master-lock.css +1 -1
- package/src/styles-areas/media-gallery.css +1 -1
- package/src/styles-areas/media.css +1 -1
|
@@ -6,6 +6,7 @@ import { Gesture, isHLSProvider, MediaPlayer, MediaProvider, Poster, Track, useM
|
|
|
6
6
|
import { DefaultVideoLayout, defaultLayoutIcons, } from '@vidstack/react/player/layouts/default';
|
|
7
7
|
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
8
8
|
import { PLAYER_VOLUME_KEY, readSessionVolume, writeSessionVolume, } from '../media-gallery/playbackPreferences';
|
|
9
|
+
import { hlsErrorIsAnswer, probeSourceFault, SourceFaultOverlay, } from './sourceFault';
|
|
9
10
|
import { isSurfaceControl } from './surfaceGesture';
|
|
10
11
|
import { chapterSpans } from './videoChapters';
|
|
11
12
|
/**
|
|
@@ -340,8 +341,27 @@ export function usePrefersReducedMotion() {
|
|
|
340
341
|
return reduced;
|
|
341
342
|
}
|
|
342
343
|
export function VideoPlayer({ video, autoPlay, muted, volumeKey = PLAYER_VOLUME_KEY, className, aspectRatio = DEFAULT_VIDEO_ASPECT_RATIO, onEnded, loop, liveScrub = true, smallLayoutWhen = isSmallVideoLayout, onStep, canStep = true, fullscreenOnDoubleClick = true, }) {
|
|
344
|
+
/*
|
|
345
|
+
* 🔴 What the SOURCES have answered, and why a player needs to hold that at all.
|
|
346
|
+
*
|
|
347
|
+
* Owner, 2026-09-17: *"make a 404 stop the media player spinner so I don't think it's going
|
|
348
|
+
* to eventually load."* Vidstack's layout draws a buffering spinner whenever the player is
|
|
349
|
+
* not ready, and nothing in it distinguishes "waiting" from "asked and told no" — so an item
|
|
350
|
+
* whose ladder answers `404` in 0.2 s spun until he gave up. Two pieces of state end that:
|
|
351
|
+
*
|
|
352
|
+
* · `ladderAnswered` — the master or a rung REPLIED with a status. Nothing to wait for, so
|
|
353
|
+
* the progressive copy (the one that always exists) takes over at once instead of after
|
|
354
|
+
* hls.js has retried an answer. Vidstack has no fallback of its own; this is it.
|
|
355
|
+
* · `fault` — the progressive copy answered too, so there is nothing left to play and the
|
|
356
|
+
* only useful act is to say what happened. See `sourceFault.ts`.
|
|
357
|
+
*
|
|
358
|
+
* Both are set ONLY from an answer. A timeout, a stall and a slow origin set neither and
|
|
359
|
+
* still spin, which is correct: something might still arrive.
|
|
360
|
+
*/
|
|
361
|
+
const [ladderAnswered, setLadderAnswered] = useState(false);
|
|
362
|
+
const [fault, setFault] = useState(null);
|
|
343
363
|
// Prefer the adaptive HLS master; fall back to the progressive Range source.
|
|
344
|
-
const src = video.hlsUrl
|
|
364
|
+
const src = video.hlsUrl && !ladderAnswered
|
|
345
365
|
? { src: video.hlsUrl, type: 'application/x-mpegurl' }
|
|
346
366
|
: video.streamUrl;
|
|
347
367
|
// See AUTOPLAY_DEFAULT. `muted` follows `autoPlay` because an unmuted autoplay is refused
|
|
@@ -370,7 +390,10 @@ export function VideoPlayer({ video, autoPlay, muted, volumeKey = PLAYER_VOLUME_
|
|
|
370
390
|
/** A mute the BROWSER forced on us — see `onAutoPlayFail` below. Never his choice, so never stored. */
|
|
371
391
|
const forcedMute = useRef(false);
|
|
372
392
|
const status = video.processingStatus;
|
|
373
|
-
|
|
393
|
+
// 🔴 `playbackDegraded` is its own reason to draw, not a processing state — a video that
|
|
394
|
+
// optimized perfectly can still be served off the progressive copy because the ladder probe
|
|
395
|
+
// did not answer, and that play has no `ProcessingStatus` at all.
|
|
396
|
+
const showProcessing = (status != null && status !== 'ready') || video.playbackDegraded === true;
|
|
374
397
|
// Memoized because `slots` holds React elements: a fresh object every render remounts
|
|
375
398
|
// Vidstack's whole layout, which drops the control bar mid-hover and restarts its
|
|
376
399
|
// auto-hide timer on every state change the player makes (i.e. constantly, while playing).
|
|
@@ -383,7 +406,29 @@ export function VideoPlayer({ video, autoPlay, muted, volumeKey = PLAYER_VOLUME_
|
|
|
383
406
|
// 🔴 The hls.js engine is served from this origin, not from jsdelivr. See
|
|
384
407
|
// `preferBundledHls` — without it an adaptive ladder depends on a third-party CDN
|
|
385
408
|
// and fails as a permanent spinner when that CDN is unreachable.
|
|
386
|
-
onProviderChange: preferBundledHls,
|
|
409
|
+
onProviderChange: preferBundledHls,
|
|
410
|
+
/* See {@link hlsErrorIsAnswer}. Typed `unknown` on purpose: `hls.js` is an OPTIONAL
|
|
411
|
+
peer, so its `ErrorData` must not become a static type dependency of this file. */
|
|
412
|
+
onHlsError: (detail) => {
|
|
413
|
+
if (hlsErrorIsAnswer(detail))
|
|
414
|
+
setLadderAnswered(true);
|
|
415
|
+
},
|
|
416
|
+
/* The element itself gave up, and what that means depends on what was playing.
|
|
417
|
+
With a LADDER in play it is the case Vidstack has no answer for at all — a browser
|
|
418
|
+
playing HLS natively (Safari, every iPhone) meeting a master that is not there, or
|
|
419
|
+
an hls.js that has spent its own six retries — and the progressive copy has not had
|
|
420
|
+
its turn yet. 🔴 Handing over is a DOWNGRADE to a stream the edge will not cache, so
|
|
421
|
+
it happens only once the ladder has actually failed, never on a stall; it is the
|
|
422
|
+
same call `hlsSource.ts` makes when its recovery budget is spent, and a playing film
|
|
423
|
+
beats a dead one. On the progressive copy there is no turn left, so the URL is
|
|
424
|
+
probed for what it actually said and the picture says it. */
|
|
425
|
+
onError: () => {
|
|
426
|
+
if (video.hlsUrl && !ladderAnswered) {
|
|
427
|
+
setLadderAnswered(true);
|
|
428
|
+
return;
|
|
429
|
+
}
|
|
430
|
+
void probeSourceFault(video.streamUrl).then(setFault);
|
|
431
|
+
}, title: video.name, poster: video.posterUrl, crossOrigin: true, playsInline: true, autoPlay: shouldAutoPlay, muted: shouldMute,
|
|
387
432
|
// 🔴 The level he set this session, restored on the element — see `resolveAutoplay`
|
|
388
433
|
// and `SessionVolume`. Both values are constant for the life of this mount, so
|
|
389
434
|
// Vidstack's own volume state is never overwritten while he is using the control bar;
|
|
@@ -431,7 +476,7 @@ export function VideoPlayer({ video, autoPlay, muted, volumeKey = PLAYER_VOLUME_
|
|
|
431
476
|
// "many options from very slow to very fast": 0.1 is frame-crawling, which is the
|
|
432
477
|
// speed you actually want for studying a moment, and 4 is for skimming a long
|
|
433
478
|
// clip. The default five steps cover neither end.
|
|
434
|
-
playbackRates: PLAYBACK_RATES, ...(slots ? { slots } : {}) })] }), showProcessing ? (_jsx(ProcessingIndicator, { status: status, progress: video.processingProgress })) : null] }));
|
|
479
|
+
playbackRates: PLAYBACK_RATES, ...(slots ? { slots } : {}) })] }), showProcessing ? (_jsx(ProcessingIndicator, { status: status, progress: video.processingProgress, playbackDegraded: video.playbackDegraded })) : null, fault ? _jsx(SourceFaultOverlay, { fault: fault, name: video.name }) : null] }));
|
|
435
480
|
}
|
|
436
481
|
/**
|
|
437
482
|
* The named sections, as the `kind='chapters'` text track Vidstack's default layout is already
|
|
@@ -473,18 +518,47 @@ function ChaptersTrack({ chapters }) {
|
|
|
473
518
|
return null;
|
|
474
519
|
return _jsx(Track, { content: content, type: 'json', kind: 'chapters', label: 'Chapters', default: true });
|
|
475
520
|
}
|
|
521
|
+
/*
|
|
522
|
+
* 🔴 Module-private, and the specs spell both sentences out rather than importing them. This
|
|
523
|
+
* is COPY: which words are on the picture is the deliverable, so an assertion that reads the
|
|
524
|
+
* constant asserts nothing — it would stay green through a rewrite of the very thing it is
|
|
525
|
+
* meant to be pinning. (They are also not worth a line of published surface, which
|
|
526
|
+
* `publicSurface.baseline` charges for.)
|
|
527
|
+
*/
|
|
528
|
+
const OPTIMIZATION_FAILED_BADGE = 'Optimization failed — playing original';
|
|
529
|
+
const PLAYBACK_DEGRADED_BADGE = 'Reduced quality — could not reach the media store';
|
|
476
530
|
/**
|
|
477
|
-
* The
|
|
478
|
-
*
|
|
479
|
-
*
|
|
480
|
-
*
|
|
531
|
+
* The top-right corner of a video surface, as ONE stack.
|
|
532
|
+
*
|
|
533
|
+
* 🔴 A stack rather than each badge pinning itself to `top: 8; right: 8`, because both facts
|
|
534
|
+
* can be true of the same play — an optimization that failed AND a media store we could not
|
|
535
|
+
* reach — and two absolutely-positioned pills at one coordinate draw exactly on top of each
|
|
536
|
+
* other, so the second sentence is invisible precisely when there is most to say. Laid out as
|
|
537
|
+
* a column, the corner holds one, two, or (returning `null`) none.
|
|
538
|
+
*
|
|
539
|
+
* Never covers the picture: pills only, right-aligned, `pointer-events: none`, so the original
|
|
540
|
+
* bytes stay fully visible and the control bar underneath stays clickable.
|
|
481
541
|
*/
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
542
|
+
function VideoStatusBadges({ processingFailed, playbackDegraded, }) {
|
|
543
|
+
const lines = [
|
|
544
|
+
processingFailed ? OPTIMIZATION_FAILED_BADGE : null,
|
|
545
|
+
// 🔴 A SECOND line, never a re-use of the first. The optimization did not fail here — it
|
|
546
|
+
// may well have succeeded and we could not ask — so borrowing that sentence would put a
|
|
547
|
+
// false one on screen. See `PlayerVideo.playbackDegraded`.
|
|
548
|
+
playbackDegraded ? PLAYBACK_DEGRADED_BADGE : null,
|
|
549
|
+
].filter((line) => line !== null);
|
|
550
|
+
if (lines.length === 0)
|
|
551
|
+
return null;
|
|
552
|
+
return (_jsx("div", { style: {
|
|
553
|
+
position: 'absolute',
|
|
554
|
+
top: 8,
|
|
555
|
+
right: 8,
|
|
556
|
+
display: 'flex',
|
|
557
|
+
flexDirection: 'column',
|
|
558
|
+
alignItems: 'flex-end',
|
|
559
|
+
gap: 4,
|
|
560
|
+
pointerEvents: 'none',
|
|
561
|
+
}, children: lines.map((line) => (_jsx("div", { role: 'status', style: {
|
|
488
562
|
padding: '3px 8px',
|
|
489
563
|
borderRadius: 999,
|
|
490
564
|
// A corner badge scrim ON TOP of video content — dark-on-video regardless of app
|
|
@@ -495,32 +569,49 @@ export function ProcessingIndicator({ status, progress, }) {
|
|
|
495
569
|
fontSize: 12,
|
|
496
570
|
fontWeight: 600,
|
|
497
571
|
lineHeight: 1.4,
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
572
|
+
}, children: line }, line))) }));
|
|
573
|
+
}
|
|
574
|
+
/**
|
|
575
|
+
* The transport state for a video surface: a thin progress bar pinned across the bottom edge
|
|
576
|
+
* while derivatives build (indeterminate shimmer until real progress arrives), plus whatever
|
|
577
|
+
* {@link VideoStatusBadges} has to say in the corner — optimization failed, and/or this play
|
|
578
|
+
* being a known fallback off the ladder. Never covers the video — the original bytes stay
|
|
579
|
+
* fully visible and playable behind it. Shared by {@link VideoPlayer} and the canvas fallback.
|
|
580
|
+
*
|
|
581
|
+
* 🔴 `status` is OPTIONAL, because a degraded play is not a processing state: a video that
|
|
582
|
+
* finished optimizing perfectly well can still be served off the progressive copy because the
|
|
583
|
+
* ladder probe did not answer. That combination has no `ProcessingStatus` to pass.
|
|
584
|
+
*/
|
|
585
|
+
export function ProcessingIndicator({ status, progress, playbackDegraded, }) {
|
|
586
|
+
// The corner is one stack, so it is rendered from one place — see `VideoStatusBadges`.
|
|
587
|
+
const badges = (_jsx(VideoStatusBadges, { processingFailed: status === 'failed', playbackDegraded: playbackDegraded }));
|
|
588
|
+
// The bar is for work in FLIGHT. A failed, ready or absent status has nothing building, so
|
|
589
|
+
// the corner is the whole of what this component draws.
|
|
590
|
+
if (status !== 'pending' && status !== 'processing')
|
|
591
|
+
return badges;
|
|
501
592
|
const clamped = Math.max(0, Math.min(100, progress ?? 0));
|
|
502
593
|
const indeterminate = clamped === 0;
|
|
503
|
-
return (_jsxs("div", { role: 'progressbar', "aria-label": 'Optimizing video', "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": indeterminate ? undefined : Math.round(clamped), style: {
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
594
|
+
return (_jsxs(_Fragment, { children: [badges, _jsxs("div", { role: 'progressbar', "aria-label": 'Optimizing video', "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": indeterminate ? undefined : Math.round(clamped), style: {
|
|
595
|
+
position: 'absolute',
|
|
596
|
+
left: 0,
|
|
597
|
+
right: 0,
|
|
598
|
+
bottom: 0,
|
|
599
|
+
height: 4,
|
|
600
|
+
// The progress bar's TRACK sits directly on the video surface, not app chrome — a
|
|
601
|
+
// translucent white track reads on any video frame regardless of app theme (the fill
|
|
602
|
+
// is already theme-token'd: `var(--vds-accent, var(--accent))`).
|
|
603
|
+
// guardrails-ignore no-hardcoded-colors: see comment above.
|
|
604
|
+
background: 'rgba(255, 255, 255, 0.25)',
|
|
605
|
+
overflow: 'hidden',
|
|
606
|
+
pointerEvents: 'none',
|
|
607
|
+
}, children: [_jsx("style", { children: '@keyframes cb-video-processing-indeterminate{0%{transform:translateX(-100%)}100%{transform:translateX(400%)}}' }), _jsx("div", { style: {
|
|
608
|
+
width: indeterminate ? '25%' : `${clamped}%`,
|
|
609
|
+
height: '100%',
|
|
610
|
+
background: 'var(--vds-accent, var(--accent))',
|
|
611
|
+
transition: indeterminate ? undefined : 'width 300ms',
|
|
612
|
+
animation: indeterminate
|
|
613
|
+
? 'cb-video-processing-indeterminate 1.4s ease-in-out infinite'
|
|
614
|
+
: undefined,
|
|
615
|
+
} })] })] }));
|
|
525
616
|
}
|
|
526
617
|
//# sourceMappingURL=VideoPlayer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VideoPlayer.js","sourceRoot":"","sources":["../../../src/react/media/VideoPlayer.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VideoPlayer.js","sourceRoot":"","sources":["../../../src/react/media/VideoPlayer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
import { type SourceFault } from './sourceFault';
|
|
2
|
+
/** Which of a surface's two URLs the fault is about. */
|
|
3
|
+
export type HlsSourceKind = 'ladder' | 'stream';
|
|
4
|
+
export interface HlsSourceHooks {
|
|
5
|
+
/**
|
|
6
|
+
* Called when a source ANSWERED with something other than the bytes and there is nothing
|
|
7
|
+
* left to fall back to — i.e. the progressive copy, which is the one that always exists.
|
|
8
|
+
*
|
|
9
|
+
* 🔴 A fault on the LADDER alone never reaches here, and must not: a missing ladder is the
|
|
10
|
+
* ordinary state of most of a library, the remux plays, and a viewer told "gone" about a
|
|
11
|
+
* film that is about to start watching is worse off than one told nothing.
|
|
12
|
+
*/
|
|
13
|
+
onFault?: (fault: SourceFault, source: HlsSourceKind) => void;
|
|
14
|
+
}
|
|
1
15
|
/** Which URLs a surface has for one video. `streamUrl` is the one that always exists. */
|
|
2
16
|
export interface HlsSourceUrls {
|
|
3
17
|
/** The adaptive ladder's MASTER playlist, when one has been built. */
|
|
@@ -76,9 +90,16 @@ export declare const HLS_CONFIG: {
|
|
|
76
90
|
readonly manifestLoadingTimeOut: 30000;
|
|
77
91
|
readonly levelLoadingTimeOut: 30000;
|
|
78
92
|
};
|
|
79
|
-
export declare function attachHlsSource(el: HTMLVideoElement, urls: HlsSourceUrls): () => void;
|
|
80
|
-
/**
|
|
93
|
+
export declare function attachHlsSource(el: HTMLVideoElement, urls: HlsSourceUrls, hooks?: HlsSourceHooks): () => void;
|
|
94
|
+
/**
|
|
95
|
+
* {@link attachHlsSource} as an effect, re-attaching whenever either URL changes.
|
|
96
|
+
*
|
|
97
|
+
* 🔴 `onFault` is held in a REF, not listed as a dependency. A consumer passing the inline
|
|
98
|
+
* arrow this hook invites would otherwise tear the engine down and re-attach it on every
|
|
99
|
+
* render — which on a playing video is a re-buffer caused by something happening elsewhere on
|
|
100
|
+
* the page, and it is the same shape of bug the `slots` memo in `VideoPlayer` exists for.
|
|
101
|
+
*/
|
|
81
102
|
export declare function useHlsSource(ref: {
|
|
82
103
|
current: HTMLVideoElement | null;
|
|
83
|
-
}, urls: HlsSourceUrls): void;
|
|
104
|
+
}, urls: HlsSourceUrls, hooks?: HlsSourceHooks): void;
|
|
84
105
|
//# sourceMappingURL=hlsSource.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hlsSource.d.ts","sourceRoot":"","sources":["../../../src/react/media/hlsSource.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hlsSource.d.ts","sourceRoot":"","sources":["../../../src/react/media/hlsSource.ts"],"names":[],"mappings":"AAsFA,OAAO,EAAoB,KAAK,WAAW,EAAyB,MAAM,eAAe,CAAC;AAqB1F,wDAAwD;AACxD,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;CAC/D;AAED,yFAAyF;AACzF,MAAM,WAAW,aAAa;IAC5B,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,wFAAwF;IACxF,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAEhE;AAED;;;;;GAKG;AACH;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,IAAI,CAAC;AAKjC;;;;;GAKG;AACH,eAAO,MAAM,UAAU;;IAErB;;;;;;;;;OASG;;IAEH,2EAA2E;;IAE3E,uFAAuF;;IAEvF;;;;;;;OAOG;;IAEH;;;;;;;OAOG;;IAEH;oFACgF;;;;CAIxE,CAAC;AAEX,wBAAgB,eAAe,CAC7B,EAAE,EAAE,gBAAgB,EACpB,IAAI,EAAE,aAAa,EACnB,KAAK,GAAE,cAAmB,GACzB,MAAM,IAAI,CAiLZ;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE;IAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAA;CAAE,EACzC,IAAI,EAAE,aAAa,EACnB,KAAK,GAAE,cAAmB,GACzB,IAAI,CAoBN"}
|
|
@@ -54,6 +54,27 @@
|
|
|
54
54
|
* not have had. That is the property `RECOVERY_BUDGET` bounds; without a budget a genuinely
|
|
55
55
|
* dead ladder becomes an infinite reload loop, which is the same spinner with more requests.
|
|
56
56
|
*
|
|
57
|
+
* ── 🔴 An ANSWER is not a hang, and a 404 was being waited out ──────────────────────────
|
|
58
|
+
* Owner, 2026-09-17: *"make a 404 stop the media player spinner so I don't think it's going
|
|
59
|
+
* to eventually load."* The recovery machinery above is right for a blip and exactly wrong
|
|
60
|
+
* for an answer: a ladder whose master replies `404` in 0.2 s went through four `startLoad()`
|
|
61
|
+
* calls and twelve seconds of backoff before the fallback it could have taken immediately,
|
|
62
|
+
* and a progressive copy that replies `404` produced a bare `error` event with no status on
|
|
63
|
+
* it, which every surface drew as "still loading" for ever.
|
|
64
|
+
*
|
|
65
|
+
* So two things happen here that did not before, and neither weakens the recoveries above:
|
|
66
|
+
*
|
|
67
|
+
* · a fatal hls.js error that carries an HTTP status (`data.response.code`) skips the
|
|
68
|
+
* budget entirely — `404`/`410` is final and `403` is a stale token, and asking either
|
|
69
|
+
* again cannot change the reply. Errors with NO status are the timeouts and stalls the
|
|
70
|
+
* budget was always for, and they still spend it.
|
|
71
|
+
* · the element's own `error` event is listened to. On the LADDER it means this browser's
|
|
72
|
+
* native HLS could not have it, so the progressive copy gets its turn — before this, a
|
|
73
|
+
* 404 ladder on an iPhone was simply a dead player, because that branch had no fallback
|
|
74
|
+
* at all. On the PROGRESSIVE copy there is nothing left to fall back to, so the URL is
|
|
75
|
+
* probed for its status and `onFault` says what it was; `sourceFault.ts` explains why a
|
|
76
|
+
* probe is the only way to read a status off a `<video>`.
|
|
77
|
+
*
|
|
57
78
|
* ── 🔴 The config is tuned for a HIGH-LATENCY origin, which is what this fleet has ───────
|
|
58
79
|
* hls.js's defaults assume a CDN. These segments come off a home Mac through a tunnel when
|
|
59
80
|
* the edge does not hold them: measured 2026-09-17, a cold segment is 1,215–2,613 ms against
|
|
@@ -62,7 +83,8 @@
|
|
|
62
83
|
* starting bandwidth estimate makes it open on the bottom rung and climb. Both are widened
|
|
63
84
|
* below, each with its number's reason on the line.
|
|
64
85
|
*/
|
|
65
|
-
import { useEffect } from 'react';
|
|
86
|
+
import { useEffect, useRef } from 'react';
|
|
87
|
+
import { probeSourceFault, sourceFaultFromStatus } from './sourceFault';
|
|
66
88
|
/**
|
|
67
89
|
* Does this element's browser play HLS by itself? Safari, iOS and iPadOS do; Chrome and
|
|
68
90
|
* Firefox do not.
|
|
@@ -138,10 +160,18 @@ export const HLS_CONFIG = {
|
|
|
138
160
|
manifestLoadingTimeOut: 30_000,
|
|
139
161
|
levelLoadingTimeOut: 30_000,
|
|
140
162
|
};
|
|
141
|
-
export function attachHlsSource(el, urls) {
|
|
163
|
+
export function attachHlsSource(el, urls, hooks = {}) {
|
|
142
164
|
let destroyed = false;
|
|
143
165
|
let engine = null;
|
|
144
166
|
let pendingRetry = null;
|
|
167
|
+
/**
|
|
168
|
+
* Which URL the element is pointed at right now, because the `error` event does not say and
|
|
169
|
+
* the two mean opposite things: on the ladder it means "try the copy that always exists",
|
|
170
|
+
* on the stream it means "there is nothing else, say so".
|
|
171
|
+
*/
|
|
172
|
+
let attached = 'stream';
|
|
173
|
+
/** The fallback is a one-way door — a second one would re-point a source already playing. */
|
|
174
|
+
let fellBack = false;
|
|
145
175
|
/**
|
|
146
176
|
* Abandon the ladder for the progressive copy, AT THE POSITION PLAYBACK HAD REACHED.
|
|
147
177
|
*
|
|
@@ -151,8 +181,10 @@ export function attachHlsSource(el, urls) {
|
|
|
151
181
|
* the engine is destroyed, because destroying it detaches the MediaSource and resets it.
|
|
152
182
|
*/
|
|
153
183
|
const fallBackToProgressive = () => {
|
|
154
|
-
if (destroyed)
|
|
184
|
+
if (destroyed || fellBack)
|
|
155
185
|
return;
|
|
186
|
+
fellBack = true;
|
|
187
|
+
attached = 'stream';
|
|
156
188
|
const at = Number.isFinite(el.currentTime) ? el.currentTime : 0;
|
|
157
189
|
const wasPlaying = !el.paused;
|
|
158
190
|
engine?.destroy();
|
|
@@ -173,7 +205,45 @@ export function attachHlsSource(el, urls) {
|
|
|
173
205
|
}, { once: true });
|
|
174
206
|
}
|
|
175
207
|
};
|
|
208
|
+
/**
|
|
209
|
+
* The element gave up. 🔴 That is an EVENT, so by definition it is not a hang — whatever
|
|
210
|
+
* happens next, the spinner has to stop being the answer.
|
|
211
|
+
*/
|
|
212
|
+
const onElementError = () => {
|
|
213
|
+
if (destroyed)
|
|
214
|
+
return;
|
|
215
|
+
/*
|
|
216
|
+
* 🔴 While an hls.js engine is attached, the element's errors are ITS errors. The library
|
|
217
|
+
* listens to this same event, turns it into a fatal `MEDIA_ERROR` and expects the
|
|
218
|
+
* application to answer with `recoverMediaError()` — which the ERROR handler below does.
|
|
219
|
+
* Acting here as well would abandon the ladder for the progressive copy on the first
|
|
220
|
+
* buffer stall, undoing `100206d` and putting a 467 MB uncacheable stream in front of a
|
|
221
|
+
* recovery that costs nothing. After a fallback the engine is gone and this is live again.
|
|
222
|
+
*/
|
|
223
|
+
if (engine)
|
|
224
|
+
return;
|
|
225
|
+
if (attached === 'ladder') {
|
|
226
|
+
// A ladder this browser's native HLS could not load — a 404 master, a half-written
|
|
227
|
+
// tree, a rung that is not there. The remux is the copy that always exists.
|
|
228
|
+
fallBackToProgressive();
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
// Nothing left to try, so the only useful act is to name the reason. `currentSrc` is what
|
|
232
|
+
// the element actually resolved, which is the URL that failed even after a fallback.
|
|
233
|
+
//
|
|
234
|
+
// 🔴 Only when somebody is listening. A surface with no `onFault` has nowhere to put the
|
|
235
|
+
// answer, and a probe nobody reads is a request bought for nothing — `CanvasVideoPlayer`
|
|
236
|
+
// and any other caller that takes the default would otherwise pay it on every failure.
|
|
237
|
+
if (!hooks.onFault)
|
|
238
|
+
return;
|
|
239
|
+
void probeSourceFault(el.currentSrc || urls.streamUrl).then((fault) => {
|
|
240
|
+
if (!destroyed)
|
|
241
|
+
hooks.onFault?.(fault, 'stream');
|
|
242
|
+
});
|
|
243
|
+
};
|
|
244
|
+
el.addEventListener('error', onElementError);
|
|
176
245
|
if (urls.hlsUrl && canPlayHlsNatively(el)) {
|
|
246
|
+
attached = 'ladder';
|
|
177
247
|
el.src = urls.hlsUrl;
|
|
178
248
|
}
|
|
179
249
|
else if (urls.hlsUrl) {
|
|
@@ -195,6 +265,21 @@ export function attachHlsSource(el, urls) {
|
|
|
195
265
|
// restart a load that is already in progress.
|
|
196
266
|
if (destroyed || !data?.fatal)
|
|
197
267
|
return;
|
|
268
|
+
/*
|
|
269
|
+
* 🔴 An ANSWER short-circuits the whole budget, and this branch is the owner's
|
|
270
|
+
* report: the master answered `404` in 0.2 s, and retrying an answer four times
|
|
271
|
+
* with a widening backoff is twelve seconds of spinner in front of a fallback that
|
|
272
|
+
* was available immediately. `response.code` is present only when the ladder
|
|
273
|
+
* REPLIED — a timeout or an abort carries none, so a genuinely slow origin still
|
|
274
|
+
* gets every recovery it had.
|
|
275
|
+
*/
|
|
276
|
+
const answered = typeof data.response?.code === 'number'
|
|
277
|
+
? sourceFaultFromStatus(data.response.code)
|
|
278
|
+
: null;
|
|
279
|
+
if (answered) {
|
|
280
|
+
fallBackToProgressive();
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
198
283
|
if (spent >= RECOVERY_BUDGET) {
|
|
199
284
|
fallBackToProgressive();
|
|
200
285
|
return;
|
|
@@ -254,6 +339,7 @@ export function attachHlsSource(el, urls) {
|
|
|
254
339
|
}
|
|
255
340
|
return () => {
|
|
256
341
|
destroyed = true;
|
|
342
|
+
el.removeEventListener('error', onElementError);
|
|
257
343
|
if (pendingRetry)
|
|
258
344
|
clearTimeout(pendingRetry);
|
|
259
345
|
pendingRetry = null;
|
|
@@ -261,15 +347,30 @@ export function attachHlsSource(el, urls) {
|
|
|
261
347
|
engine = null;
|
|
262
348
|
};
|
|
263
349
|
}
|
|
264
|
-
/**
|
|
265
|
-
|
|
350
|
+
/**
|
|
351
|
+
* {@link attachHlsSource} as an effect, re-attaching whenever either URL changes.
|
|
352
|
+
*
|
|
353
|
+
* 🔴 `onFault` is held in a REF, not listed as a dependency. A consumer passing the inline
|
|
354
|
+
* arrow this hook invites would otherwise tear the engine down and re-attach it on every
|
|
355
|
+
* render — which on a playing video is a re-buffer caused by something happening elsewhere on
|
|
356
|
+
* the page, and it is the same shape of bug the `slots` memo in `VideoPlayer` exists for.
|
|
357
|
+
*/
|
|
358
|
+
export function useHlsSource(ref, urls, hooks = {}) {
|
|
266
359
|
const { hlsUrl, streamUrl } = urls;
|
|
360
|
+
const { onFault } = hooks;
|
|
361
|
+
const faultRef = useRef(onFault);
|
|
362
|
+
useEffect(() => {
|
|
363
|
+
faultRef.current = onFault;
|
|
364
|
+
}, [onFault]);
|
|
365
|
+
// Whether there is a listener at all, which IS a re-attach: `attachHlsSource` buys the
|
|
366
|
+
// status probe only for a surface that can use the answer.
|
|
367
|
+
const listening = Boolean(onFault);
|
|
267
368
|
useEffect(() => {
|
|
268
369
|
const el = ref.current;
|
|
269
370
|
if (!el)
|
|
270
371
|
return;
|
|
271
|
-
return attachHlsSource(el, { hlsUrl, streamUrl });
|
|
272
|
-
// `ref`
|
|
273
|
-
}, [ref, hlsUrl, streamUrl]);
|
|
372
|
+
return attachHlsSource(el, { hlsUrl, streamUrl }, listening ? { onFault: (fault, source) => faultRef.current?.(fault, source) } : {});
|
|
373
|
+
// `ref` and `faultRef` are stable objects; the URLs are what a re-attach depends on.
|
|
374
|
+
}, [ref, hlsUrl, streamUrl, listening]);
|
|
274
375
|
}
|
|
275
376
|
//# sourceMappingURL=hlsSource.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hlsSource.js","sourceRoot":"","sources":["../../../src/react/media/hlsSource.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"hlsSource.js","sourceRoot":"","sources":["../../../src/react/media/hlsSource.ts"],"names":[],"mappings":"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"}
|
|
@@ -315,6 +315,8 @@
|
|
|
315
315
|
/* guardrails-ignore no-hardcoded-colors: sits ON the picture ground, which is true black in
|
|
316
316
|
both themes — the same argument as `.cbpe-hint` above. */
|
|
317
317
|
color: rgb(255 255 255 / 0.82);
|
|
318
|
+
/* guardrails-ignore no-hardcoded-colors: the shadow that keeps this sentence readable over a
|
|
319
|
+
PALE frame of film — same argument as the colour it sits on, two lines up. */
|
|
318
320
|
text-shadow: 0 1px 2px rgb(0 0 0 / 0.6);
|
|
319
321
|
pointer-events: none;
|
|
320
322
|
}
|