stormcloud-video-player 0.7.42 → 0.7.44
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/stormcloud-vp.min.js +1 -1
- package/lib/index.cjs +214 -58
- package/lib/index.cjs.map +1 -1
- package/lib/index.js +214 -58
- package/lib/index.js.map +1 -1
- package/lib/ui/OverlayRenderer.cjs +140 -56
- package/lib/ui/OverlayRenderer.cjs.map +1 -1
- package/lib/ui/StormcloudVideoPlayer.cjs +214 -58
- package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/utils/overlays.cjs +80 -19
- package/lib/utils/overlays.cjs.map +1 -1
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -5705,27 +5705,16 @@ var SWIRL_HD_AUTHORING_WIDTH = 1920;
|
|
|
5705
5705
|
var SWIRL_HD_AUTHORING_HEIGHT = 1080;
|
|
5706
5706
|
var NAB_DEMO_NAME_PREFIX = "NAB Demo \u2014 ";
|
|
5707
5707
|
function overlayAuthoringDimensions(overlay, decodeWidth, decodeHeight) {
|
|
5708
|
-
if (
|
|
5709
|
-
return {
|
|
5710
|
-
width: decodeWidth || SWIRL_HD_AUTHORING_WIDTH,
|
|
5711
|
-
height: decodeHeight || SWIRL_HD_AUTHORING_HEIGHT
|
|
5712
|
-
};
|
|
5713
|
-
}
|
|
5714
|
-
if (!overlay.visible) {
|
|
5708
|
+
if (overlay.name.startsWith(NAB_DEMO_NAME_PREFIX)) {
|
|
5715
5709
|
return {
|
|
5716
|
-
width:
|
|
5717
|
-
height:
|
|
5710
|
+
width: SWIRL_HD_AUTHORING_WIDTH,
|
|
5711
|
+
height: SWIRL_HD_AUTHORING_HEIGHT
|
|
5718
5712
|
};
|
|
5719
5713
|
}
|
|
5720
|
-
|
|
5721
|
-
var extB = overlay.y + overlay.height;
|
|
5722
|
-
var EPS = 2;
|
|
5723
|
-
var exceedsDecode = extR > decodeWidth + EPS || extB > decodeHeight + EPS;
|
|
5724
|
-
var isNabDemo = overlay.name.startsWith(NAB_DEMO_NAME_PREFIX);
|
|
5725
|
-
if (exceedsDecode && isNabDemo) {
|
|
5714
|
+
if (!decodeWidth || !decodeHeight) {
|
|
5726
5715
|
return {
|
|
5727
|
-
width: SWIRL_HD_AUTHORING_WIDTH,
|
|
5728
|
-
height: SWIRL_HD_AUTHORING_HEIGHT
|
|
5716
|
+
width: decodeWidth || SWIRL_HD_AUTHORING_WIDTH,
|
|
5717
|
+
height: decodeHeight || SWIRL_HD_AUTHORING_HEIGHT
|
|
5729
5718
|
};
|
|
5730
5719
|
}
|
|
5731
5720
|
return {
|
|
@@ -5790,6 +5779,59 @@ function swirlProjectHasNabDemoMixedWithOther(overlays) {
|
|
|
5790
5779
|
}
|
|
5791
5780
|
return hasNab && hasOther;
|
|
5792
5781
|
}
|
|
5782
|
+
var STANDARD_16_9_LADDER = [
|
|
5783
|
+
{
|
|
5784
|
+
width: 384,
|
|
5785
|
+
height: 216
|
|
5786
|
+
},
|
|
5787
|
+
{
|
|
5788
|
+
width: 640,
|
|
5789
|
+
height: 360
|
|
5790
|
+
},
|
|
5791
|
+
{
|
|
5792
|
+
width: 854,
|
|
5793
|
+
height: 480
|
|
5794
|
+
},
|
|
5795
|
+
{
|
|
5796
|
+
width: 1280,
|
|
5797
|
+
height: 720
|
|
5798
|
+
},
|
|
5799
|
+
{
|
|
5800
|
+
width: 1920,
|
|
5801
|
+
height: 1080
|
|
5802
|
+
},
|
|
5803
|
+
{
|
|
5804
|
+
width: 2560,
|
|
5805
|
+
height: 1440
|
|
5806
|
+
},
|
|
5807
|
+
{
|
|
5808
|
+
width: 3840,
|
|
5809
|
+
height: 2160
|
|
5810
|
+
}
|
|
5811
|
+
];
|
|
5812
|
+
function smallestLadderRungContaining(maxR, maxB, eps) {
|
|
5813
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
5814
|
+
try {
|
|
5815
|
+
for(var _iterator = STANDARD_16_9_LADDER[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
5816
|
+
var rung = _step.value;
|
|
5817
|
+
if (maxR <= rung.width + eps && maxB <= rung.height + eps) return rung;
|
|
5818
|
+
}
|
|
5819
|
+
} catch (err) {
|
|
5820
|
+
_didIteratorError = true;
|
|
5821
|
+
_iteratorError = err;
|
|
5822
|
+
} finally{
|
|
5823
|
+
try {
|
|
5824
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
5825
|
+
_iterator.return();
|
|
5826
|
+
}
|
|
5827
|
+
} finally{
|
|
5828
|
+
if (_didIteratorError) {
|
|
5829
|
+
throw _iteratorError;
|
|
5830
|
+
}
|
|
5831
|
+
}
|
|
5832
|
+
}
|
|
5833
|
+
return null;
|
|
5834
|
+
}
|
|
5793
5835
|
function inferSwirlOverlayCoordinateSpace(overlays, videoWidth, videoHeight) {
|
|
5794
5836
|
if (!videoWidth || !videoHeight) {
|
|
5795
5837
|
return {
|
|
@@ -5805,9 +5847,15 @@ function inferSwirlOverlayCoordinateSpace(overlays, videoWidth, videoHeight) {
|
|
|
5805
5847
|
}
|
|
5806
5848
|
var _overlayExtents = overlayExtents(overlays), maxR = _overlayExtents.maxR, maxB = _overlayExtents.maxB;
|
|
5807
5849
|
var EPS = 1;
|
|
5808
|
-
|
|
5809
|
-
|
|
5850
|
+
if (maxR <= 0 || maxB <= 0) {
|
|
5851
|
+
return {
|
|
5852
|
+
width: videoWidth,
|
|
5853
|
+
height: videoHeight
|
|
5854
|
+
};
|
|
5855
|
+
}
|
|
5810
5856
|
var mixed = swirlProjectHasNabDemoMixedWithOther(overlays);
|
|
5857
|
+
var fitsHdCanvas = maxR <= SWIRL_HD_AUTHORING_WIDTH + EPS && maxB <= SWIRL_HD_AUTHORING_HEIGHT + EPS;
|
|
5858
|
+
var exceedsDecode = maxR > videoWidth + EPS || maxB > videoHeight + EPS;
|
|
5811
5859
|
var decodeLargerThanHd = videoWidth > SWIRL_HD_AUTHORING_WIDTH + EPS || videoHeight > SWIRL_HD_AUTHORING_HEIGHT + EPS;
|
|
5812
5860
|
if (fitsHdCanvas && (decodeLargerThanHd || exceedsDecode && !mixed)) {
|
|
5813
5861
|
return {
|
|
@@ -5815,6 +5863,19 @@ function inferSwirlOverlayCoordinateSpace(overlays, videoWidth, videoHeight) {
|
|
|
5815
5863
|
height: SWIRL_HD_AUTHORING_HEIGHT
|
|
5816
5864
|
};
|
|
5817
5865
|
}
|
|
5866
|
+
if (mixed) {
|
|
5867
|
+
return {
|
|
5868
|
+
width: videoWidth,
|
|
5869
|
+
height: videoHeight
|
|
5870
|
+
};
|
|
5871
|
+
}
|
|
5872
|
+
var rung = smallestLadderRungContaining(maxR, maxB, EPS);
|
|
5873
|
+
if (rung && rung.width < videoWidth - EPS && rung.height < videoHeight - EPS) {
|
|
5874
|
+
return {
|
|
5875
|
+
width: rung.width,
|
|
5876
|
+
height: rung.height
|
|
5877
|
+
};
|
|
5878
|
+
}
|
|
5818
5879
|
return {
|
|
5819
5880
|
width: videoWidth,
|
|
5820
5881
|
height: videoHeight
|
|
@@ -7319,11 +7380,19 @@ function hexToRgb(hex) {
|
|
|
7319
7380
|
return "".concat(num >> 16 & 255, ",").concat(num >> 8 & 255, ",").concat(num & 255);
|
|
7320
7381
|
}
|
|
7321
7382
|
var FADE_DURATION_MS = 1e3;
|
|
7322
|
-
var SHOWCASE_CYCLE_MS_DEFAULT =
|
|
7323
|
-
var
|
|
7324
|
-
var
|
|
7325
|
-
var
|
|
7326
|
-
var
|
|
7383
|
+
var SHOWCASE_CYCLE_MS_DEFAULT = 36e3;
|
|
7384
|
+
var SHOWCASE_MIN_BEAT_MS = 6e3;
|
|
7385
|
+
var BEAT_POP_IN_MS = 520;
|
|
7386
|
+
var BEAT_POP_OUT_MS = 520;
|
|
7387
|
+
var SHOWCASE_PERSISTENT_TYPES = /* @__PURE__ */ new Set([
|
|
7388
|
+
"scroller",
|
|
7389
|
+
"breaking_news",
|
|
7390
|
+
"image",
|
|
7391
|
+
"text",
|
|
7392
|
+
"shape",
|
|
7393
|
+
"countdown",
|
|
7394
|
+
"qr_code"
|
|
7395
|
+
]);
|
|
7327
7396
|
function easeOutCubic(t) {
|
|
7328
7397
|
var u = 1 - t;
|
|
7329
7398
|
return 1 - u * u * u;
|
|
@@ -7336,38 +7405,108 @@ function easeOutBack(t) {
|
|
|
7336
7405
|
var c3 = c1 + 1;
|
|
7337
7406
|
return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);
|
|
7338
7407
|
}
|
|
7339
|
-
function
|
|
7340
|
-
if (phase <
|
|
7341
|
-
|
|
7342
|
-
|
|
7408
|
+
function beatOpacity(phase, beatMs) {
|
|
7409
|
+
if (phase < BEAT_POP_IN_MS) return easeOutCubic(phase / BEAT_POP_IN_MS);
|
|
7410
|
+
var holdEnd = beatMs - BEAT_POP_OUT_MS;
|
|
7411
|
+
if (phase >= holdEnd) {
|
|
7412
|
+
return Math.max(0, 1 - easeInCubic((phase - holdEnd) / BEAT_POP_OUT_MS));
|
|
7343
7413
|
}
|
|
7344
7414
|
return 1;
|
|
7345
7415
|
}
|
|
7346
|
-
function
|
|
7347
|
-
if (phase <
|
|
7348
|
-
return Math.min(1, 0.
|
|
7416
|
+
function beatScale(phase, beatMs) {
|
|
7417
|
+
if (phase < BEAT_POP_IN_MS) {
|
|
7418
|
+
return Math.min(1, 0.92 + 0.08 * easeOutBack(phase / BEAT_POP_IN_MS));
|
|
7349
7419
|
}
|
|
7350
|
-
|
|
7351
|
-
|
|
7420
|
+
var holdEnd = beatMs - BEAT_POP_OUT_MS;
|
|
7421
|
+
if (phase >= holdEnd) {
|
|
7422
|
+
return 1 - 0.06 * easeInCubic((phase - holdEnd) / BEAT_POP_OUT_MS);
|
|
7352
7423
|
}
|
|
7353
7424
|
return 1;
|
|
7354
7425
|
}
|
|
7355
|
-
function
|
|
7356
|
-
var
|
|
7426
|
+
function partitionShowcase(overlays) {
|
|
7427
|
+
var visible = overlays.filter(function(o) {
|
|
7428
|
+
return o.visible;
|
|
7429
|
+
});
|
|
7430
|
+
var persistent = [];
|
|
7431
|
+
var spotlight = [];
|
|
7432
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
7433
|
+
try {
|
|
7434
|
+
for(var _iterator = visible[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
7435
|
+
var o = _step.value;
|
|
7436
|
+
if (SHOWCASE_PERSISTENT_TYPES.has(o.type)) persistent.push(o);
|
|
7437
|
+
else spotlight.push(o);
|
|
7438
|
+
}
|
|
7439
|
+
} catch (err) {
|
|
7440
|
+
_didIteratorError = true;
|
|
7441
|
+
_iteratorError = err;
|
|
7442
|
+
} finally{
|
|
7443
|
+
try {
|
|
7444
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
7445
|
+
_iterator.return();
|
|
7446
|
+
}
|
|
7447
|
+
} finally{
|
|
7448
|
+
if (_didIteratorError) {
|
|
7449
|
+
throw _iteratorError;
|
|
7450
|
+
}
|
|
7451
|
+
}
|
|
7452
|
+
}
|
|
7453
|
+
spotlight.sort(function(a, b) {
|
|
7454
|
+
return a.z_index - b.z_index || a.id - b.id;
|
|
7455
|
+
});
|
|
7456
|
+
var beats = [];
|
|
7457
|
+
var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
|
|
7458
|
+
try {
|
|
7459
|
+
for(var _iterator1 = spotlight[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
|
|
7460
|
+
var o1 = _step1.value;
|
|
7461
|
+
beats.push([
|
|
7462
|
+
o1
|
|
7463
|
+
]);
|
|
7464
|
+
}
|
|
7465
|
+
} catch (err) {
|
|
7466
|
+
_didIteratorError1 = true;
|
|
7467
|
+
_iteratorError1 = err;
|
|
7468
|
+
} finally{
|
|
7469
|
+
try {
|
|
7470
|
+
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
|
|
7471
|
+
_iterator1.return();
|
|
7472
|
+
}
|
|
7473
|
+
} finally{
|
|
7474
|
+
if (_didIteratorError1) {
|
|
7475
|
+
throw _iteratorError1;
|
|
7476
|
+
}
|
|
7477
|
+
}
|
|
7478
|
+
}
|
|
7479
|
+
return {
|
|
7480
|
+
persistent: persistent,
|
|
7481
|
+
beats: beats
|
|
7482
|
+
};
|
|
7483
|
+
}
|
|
7484
|
+
function useShowcaseBeat(enabled, cycleMs, beats) {
|
|
7485
|
+
var safeBeats = Math.max(1, beats);
|
|
7486
|
+
var beatMs = Math.max(SHOWCASE_MIN_BEAT_MS, Math.floor(cycleMs / safeBeats));
|
|
7487
|
+
var totalMs = beatMs * safeBeats;
|
|
7488
|
+
var _useState = _sliced_to_array(useState(function() {
|
|
7489
|
+
return Date.now();
|
|
7490
|
+
}), 2), now = _useState[0], setNow = _useState[1];
|
|
7357
7491
|
useEffect(function() {
|
|
7358
7492
|
if (!enabled) return;
|
|
7359
|
-
setPhase(Date.now() % cycleMs);
|
|
7360
7493
|
var id = window.setInterval(function() {
|
|
7361
|
-
|
|
7362
|
-
},
|
|
7494
|
+
return setNow(Date.now());
|
|
7495
|
+
}, 64);
|
|
7363
7496
|
return function() {
|
|
7364
7497
|
return clearInterval(id);
|
|
7365
7498
|
};
|
|
7366
7499
|
}, [
|
|
7367
|
-
enabled
|
|
7368
|
-
cycleMs
|
|
7500
|
+
enabled
|
|
7369
7501
|
]);
|
|
7370
|
-
|
|
7502
|
+
var phase = now % totalMs;
|
|
7503
|
+
var beatIndex = Math.min(safeBeats - 1, Math.floor(phase / beatMs));
|
|
7504
|
+
var beatPhase = phase - beatIndex * beatMs;
|
|
7505
|
+
return {
|
|
7506
|
+
beatIndex: beatIndex,
|
|
7507
|
+
beatPhase: beatPhase,
|
|
7508
|
+
beatMs: beatMs
|
|
7509
|
+
};
|
|
7371
7510
|
}
|
|
7372
7511
|
var OverlayRenderer = function OverlayRenderer(param) {
|
|
7373
7512
|
var overlays = param.overlays, currentTime = param.currentTime, videoRef = param.videoRef, coordinateSpace = param.coordinateSpace, _param_showcaseMode = param.showcaseMode, showcaseMode = _param_showcaseMode === void 0 ? false : _param_showcaseMode, _param_showcaseCycleMs = param.showcaseCycleMs, showcaseCycleMs = _param_showcaseCycleMs === void 0 ? SHOWCASE_CYCLE_MS_DEFAULT : _param_showcaseCycleMs;
|
|
@@ -7375,7 +7514,28 @@ var OverlayRenderer = function OverlayRenderer(param) {
|
|
|
7375
7514
|
var rafRef = useRef(null);
|
|
7376
7515
|
var _useState1 = _sliced_to_array(useState(/* @__PURE__ */ new Map()), 2), fadeMap = _useState1[0], setFadeMap = _useState1[1];
|
|
7377
7516
|
var removeTimers = useRef(/* @__PURE__ */ new Map());
|
|
7378
|
-
var
|
|
7517
|
+
var _useMemo = useMemo(function() {
|
|
7518
|
+
return partitionShowcase(overlays);
|
|
7519
|
+
}, [
|
|
7520
|
+
overlays
|
|
7521
|
+
]), showcasePersistent = _useMemo.persistent, showcaseBeats = _useMemo.beats;
|
|
7522
|
+
var _useShowcaseBeat = useShowcaseBeat(showcaseMode, showcaseCycleMs, showcaseBeats.length), showcaseBeatIndex = _useShowcaseBeat.beatIndex, showcaseBeatPhase = _useShowcaseBeat.beatPhase, showcaseBeatMs = _useShowcaseBeat.beatMs;
|
|
7523
|
+
var showcasePersistentIds = useMemo(function() {
|
|
7524
|
+
return new Set(showcasePersistent.map(function(o) {
|
|
7525
|
+
return o.id;
|
|
7526
|
+
}));
|
|
7527
|
+
}, [
|
|
7528
|
+
showcasePersistent
|
|
7529
|
+
]);
|
|
7530
|
+
var showcaseSpotlightIds = useMemo(function() {
|
|
7531
|
+
var beat = showcaseBeats[showcaseBeatIndex];
|
|
7532
|
+
return new Set((beat !== null && beat !== void 0 ? beat : []).map(function(o) {
|
|
7533
|
+
return o.id;
|
|
7534
|
+
}));
|
|
7535
|
+
}, [
|
|
7536
|
+
showcaseBeats,
|
|
7537
|
+
showcaseBeatIndex
|
|
7538
|
+
]);
|
|
7379
7539
|
var updateDims = useCallback(function() {
|
|
7380
7540
|
var video = videoRef.current;
|
|
7381
7541
|
if (video) {
|
|
@@ -7408,10 +7568,9 @@ var OverlayRenderer = function OverlayRenderer(param) {
|
|
|
7408
7568
|
]);
|
|
7409
7569
|
var activeOverlays = useMemo(function() {
|
|
7410
7570
|
if (showcaseMode) {
|
|
7411
|
-
|
|
7412
|
-
|
|
7413
|
-
|
|
7414
|
-
});
|
|
7571
|
+
var _showcaseBeats_showcaseBeatIndex;
|
|
7572
|
+
var beat = (_showcaseBeats_showcaseBeatIndex = showcaseBeats[showcaseBeatIndex]) !== null && _showcaseBeats_showcaseBeatIndex !== void 0 ? _showcaseBeats_showcaseBeatIndex : [];
|
|
7573
|
+
return _to_consumable_array(showcasePersistent).concat(_to_consumable_array(beat));
|
|
7415
7574
|
}
|
|
7416
7575
|
return overlays.filter(function(o) {
|
|
7417
7576
|
return isOverlayActive(o, currentTime);
|
|
@@ -7420,14 +7579,9 @@ var OverlayRenderer = function OverlayRenderer(param) {
|
|
|
7420
7579
|
overlays,
|
|
7421
7580
|
currentTime,
|
|
7422
7581
|
showcaseMode,
|
|
7423
|
-
|
|
7424
|
-
|
|
7425
|
-
|
|
7426
|
-
return new Set(activeOverlays.map(function(o) {
|
|
7427
|
-
return o.id;
|
|
7428
|
-
}));
|
|
7429
|
-
}, [
|
|
7430
|
-
activeOverlays
|
|
7582
|
+
showcasePersistent,
|
|
7583
|
+
showcaseBeats,
|
|
7584
|
+
showcaseBeatIndex
|
|
7431
7585
|
]);
|
|
7432
7586
|
useLayoutEffect(function() {
|
|
7433
7587
|
var activeIds = new Set(activeOverlays.map(function(o) {
|
|
@@ -7622,10 +7776,12 @@ var OverlayRenderer = function OverlayRenderer(param) {
|
|
|
7622
7776
|
var width = overlay.width * scaleX;
|
|
7623
7777
|
var height = overlay.height * scaleY;
|
|
7624
7778
|
var baseOpacity = Math.max(0, Math.min(100, overlay.opacity)) / 100;
|
|
7625
|
-
var
|
|
7626
|
-
var
|
|
7627
|
-
var
|
|
7628
|
-
var
|
|
7779
|
+
var isShowcasePersistent = showcaseMode && showcasePersistentIds.has(overlay.id);
|
|
7780
|
+
var isShowcaseSpotlight = showcaseMode && showcaseSpotlightIds.has(overlay.id);
|
|
7781
|
+
var isShowcaseDormant = showcaseMode && !isShowcasePersistent && !isShowcaseSpotlight;
|
|
7782
|
+
var useShowcasePop = isShowcaseSpotlight;
|
|
7783
|
+
var opacity = useShowcasePop ? baseOpacity * beatOpacity(showcaseBeatPhase, showcaseBeatMs) : isShowcaseDormant ? 0 : visible ? baseOpacity : 0;
|
|
7784
|
+
var popScale = useShowcasePop ? beatScale(showcaseBeatPhase, showcaseBeatMs) : 1;
|
|
7629
7785
|
var sz = {
|
|
7630
7786
|
w: width,
|
|
7631
7787
|
h: height
|