stormcloud-video-player 0.7.41 → 0.7.43
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 +141 -143
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +1 -7
- package/lib/index.d.ts +1 -7
- package/lib/index.js +142 -136
- package/lib/index.js.map +1 -1
- package/lib/ui/OverlayRenderer.cjs +140 -57
- package/lib/ui/OverlayRenderer.cjs.map +1 -1
- package/lib/ui/StormcloudVideoPlayer.cjs +141 -135
- package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/utils/overlays.cjs +6 -83
- package/lib/utils/overlays.cjs.map +1 -1
- package/lib/utils/overlays.d.cts +1 -7
- package/package.json +1 -1
|
@@ -348,28 +348,16 @@ var SWIRL_HD_AUTHORING_WIDTH = 1920;
|
|
|
348
348
|
var SWIRL_HD_AUTHORING_HEIGHT = 1080;
|
|
349
349
|
var NAB_DEMO_NAME_PREFIX = "NAB Demo \u2014 ";
|
|
350
350
|
function overlayAuthoringDimensions(overlay, decodeWidth, decodeHeight) {
|
|
351
|
-
if (
|
|
351
|
+
if (overlay.name.startsWith(NAB_DEMO_NAME_PREFIX)) {
|
|
352
352
|
return {
|
|
353
|
-
width:
|
|
354
|
-
height:
|
|
355
|
-
};
|
|
356
|
-
}
|
|
357
|
-
if (!overlay.visible) {
|
|
358
|
-
return {
|
|
359
|
-
width: decodeWidth,
|
|
360
|
-
height: decodeHeight
|
|
353
|
+
width: SWIRL_HD_AUTHORING_WIDTH,
|
|
354
|
+
height: SWIRL_HD_AUTHORING_HEIGHT
|
|
361
355
|
};
|
|
362
356
|
}
|
|
363
|
-
|
|
364
|
-
var extB = overlay.y + overlay.height;
|
|
365
|
-
var EPS = 2;
|
|
366
|
-
var exceedsDecode = extR > decodeWidth + EPS || extB > decodeHeight + EPS;
|
|
367
|
-
var isNabDemo = overlay.name.startsWith(NAB_DEMO_NAME_PREFIX);
|
|
368
|
-
var isSyntheticMarketsTicker = overlay.id === -9001 || overlay.name === "Demo stock ticker";
|
|
369
|
-
if (exceedsDecode && (isNabDemo || isSyntheticMarketsTicker)) {
|
|
357
|
+
if (!decodeWidth || !decodeHeight) {
|
|
370
358
|
return {
|
|
371
|
-
width: SWIRL_HD_AUTHORING_WIDTH,
|
|
372
|
-
height: SWIRL_HD_AUTHORING_HEIGHT
|
|
359
|
+
width: decodeWidth || SWIRL_HD_AUTHORING_WIDTH,
|
|
360
|
+
height: decodeHeight || SWIRL_HD_AUTHORING_HEIGHT
|
|
373
361
|
};
|
|
374
362
|
}
|
|
375
363
|
return {
|
|
@@ -1813,11 +1801,19 @@ function hexToRgb(hex) {
|
|
|
1813
1801
|
return "".concat(num >> 16 & 255, ",").concat(num >> 8 & 255, ",").concat(num & 255);
|
|
1814
1802
|
}
|
|
1815
1803
|
var FADE_DURATION_MS = 1e3;
|
|
1816
|
-
var SHOWCASE_CYCLE_MS_DEFAULT =
|
|
1817
|
-
var
|
|
1818
|
-
var
|
|
1819
|
-
var
|
|
1820
|
-
var
|
|
1804
|
+
var SHOWCASE_CYCLE_MS_DEFAULT = 36e3;
|
|
1805
|
+
var SHOWCASE_MIN_BEAT_MS = 6e3;
|
|
1806
|
+
var BEAT_POP_IN_MS = 520;
|
|
1807
|
+
var BEAT_POP_OUT_MS = 520;
|
|
1808
|
+
var SHOWCASE_PERSISTENT_TYPES = /* @__PURE__ */ new Set([
|
|
1809
|
+
"scroller",
|
|
1810
|
+
"breaking_news",
|
|
1811
|
+
"image",
|
|
1812
|
+
"text",
|
|
1813
|
+
"shape",
|
|
1814
|
+
"countdown",
|
|
1815
|
+
"qr_code"
|
|
1816
|
+
]);
|
|
1821
1817
|
function easeOutCubic(t) {
|
|
1822
1818
|
var u = 1 - t;
|
|
1823
1819
|
return 1 - u * u * u;
|
|
@@ -1830,38 +1826,108 @@ function easeOutBack(t) {
|
|
|
1830
1826
|
var c3 = c1 + 1;
|
|
1831
1827
|
return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);
|
|
1832
1828
|
}
|
|
1833
|
-
function
|
|
1834
|
-
if (phase <
|
|
1835
|
-
|
|
1836
|
-
|
|
1829
|
+
function beatOpacity(phase, beatMs) {
|
|
1830
|
+
if (phase < BEAT_POP_IN_MS) return easeOutCubic(phase / BEAT_POP_IN_MS);
|
|
1831
|
+
var holdEnd = beatMs - BEAT_POP_OUT_MS;
|
|
1832
|
+
if (phase >= holdEnd) {
|
|
1833
|
+
return Math.max(0, 1 - easeInCubic((phase - holdEnd) / BEAT_POP_OUT_MS));
|
|
1837
1834
|
}
|
|
1838
1835
|
return 1;
|
|
1839
1836
|
}
|
|
1840
|
-
function
|
|
1841
|
-
if (phase <
|
|
1842
|
-
return Math.min(1, 0.
|
|
1837
|
+
function beatScale(phase, beatMs) {
|
|
1838
|
+
if (phase < BEAT_POP_IN_MS) {
|
|
1839
|
+
return Math.min(1, 0.92 + 0.08 * easeOutBack(phase / BEAT_POP_IN_MS));
|
|
1843
1840
|
}
|
|
1844
|
-
|
|
1845
|
-
|
|
1841
|
+
var holdEnd = beatMs - BEAT_POP_OUT_MS;
|
|
1842
|
+
if (phase >= holdEnd) {
|
|
1843
|
+
return 1 - 0.06 * easeInCubic((phase - holdEnd) / BEAT_POP_OUT_MS);
|
|
1846
1844
|
}
|
|
1847
1845
|
return 1;
|
|
1848
1846
|
}
|
|
1849
|
-
function
|
|
1850
|
-
var
|
|
1847
|
+
function partitionShowcase(overlays) {
|
|
1848
|
+
var visible = overlays.filter(function(o) {
|
|
1849
|
+
return o.visible;
|
|
1850
|
+
});
|
|
1851
|
+
var persistent = [];
|
|
1852
|
+
var spotlight = [];
|
|
1853
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
1854
|
+
try {
|
|
1855
|
+
for(var _iterator = visible[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
1856
|
+
var o = _step.value;
|
|
1857
|
+
if (SHOWCASE_PERSISTENT_TYPES.has(o.type)) persistent.push(o);
|
|
1858
|
+
else spotlight.push(o);
|
|
1859
|
+
}
|
|
1860
|
+
} catch (err) {
|
|
1861
|
+
_didIteratorError = true;
|
|
1862
|
+
_iteratorError = err;
|
|
1863
|
+
} finally{
|
|
1864
|
+
try {
|
|
1865
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
1866
|
+
_iterator.return();
|
|
1867
|
+
}
|
|
1868
|
+
} finally{
|
|
1869
|
+
if (_didIteratorError) {
|
|
1870
|
+
throw _iteratorError;
|
|
1871
|
+
}
|
|
1872
|
+
}
|
|
1873
|
+
}
|
|
1874
|
+
spotlight.sort(function(a, b) {
|
|
1875
|
+
return a.z_index - b.z_index || a.id - b.id;
|
|
1876
|
+
});
|
|
1877
|
+
var beats = [];
|
|
1878
|
+
var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
|
|
1879
|
+
try {
|
|
1880
|
+
for(var _iterator1 = spotlight[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
|
|
1881
|
+
var o1 = _step1.value;
|
|
1882
|
+
beats.push([
|
|
1883
|
+
o1
|
|
1884
|
+
]);
|
|
1885
|
+
}
|
|
1886
|
+
} catch (err) {
|
|
1887
|
+
_didIteratorError1 = true;
|
|
1888
|
+
_iteratorError1 = err;
|
|
1889
|
+
} finally{
|
|
1890
|
+
try {
|
|
1891
|
+
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
|
|
1892
|
+
_iterator1.return();
|
|
1893
|
+
}
|
|
1894
|
+
} finally{
|
|
1895
|
+
if (_didIteratorError1) {
|
|
1896
|
+
throw _iteratorError1;
|
|
1897
|
+
}
|
|
1898
|
+
}
|
|
1899
|
+
}
|
|
1900
|
+
return {
|
|
1901
|
+
persistent: persistent,
|
|
1902
|
+
beats: beats
|
|
1903
|
+
};
|
|
1904
|
+
}
|
|
1905
|
+
function useShowcaseBeat(enabled, cycleMs, beats) {
|
|
1906
|
+
var safeBeats = Math.max(1, beats);
|
|
1907
|
+
var beatMs = Math.max(SHOWCASE_MIN_BEAT_MS, Math.floor(cycleMs / safeBeats));
|
|
1908
|
+
var totalMs = beatMs * safeBeats;
|
|
1909
|
+
var _ref = _sliced_to_array((0, import_react.useState)(function() {
|
|
1910
|
+
return Date.now();
|
|
1911
|
+
}), 2), now = _ref[0], setNow = _ref[1];
|
|
1851
1912
|
(0, import_react.useEffect)(function() {
|
|
1852
1913
|
if (!enabled) return;
|
|
1853
|
-
setPhase(Date.now() % cycleMs);
|
|
1854
1914
|
var id = window.setInterval(function() {
|
|
1855
|
-
|
|
1856
|
-
},
|
|
1915
|
+
return setNow(Date.now());
|
|
1916
|
+
}, 64);
|
|
1857
1917
|
return function() {
|
|
1858
1918
|
return clearInterval(id);
|
|
1859
1919
|
};
|
|
1860
1920
|
}, [
|
|
1861
|
-
enabled
|
|
1862
|
-
cycleMs
|
|
1921
|
+
enabled
|
|
1863
1922
|
]);
|
|
1864
|
-
|
|
1923
|
+
var phase = now % totalMs;
|
|
1924
|
+
var beatIndex = Math.min(safeBeats - 1, Math.floor(phase / beatMs));
|
|
1925
|
+
var beatPhase = phase - beatIndex * beatMs;
|
|
1926
|
+
return {
|
|
1927
|
+
beatIndex: beatIndex,
|
|
1928
|
+
beatPhase: beatPhase,
|
|
1929
|
+
beatMs: beatMs
|
|
1930
|
+
};
|
|
1865
1931
|
}
|
|
1866
1932
|
var OverlayRenderer = function OverlayRenderer(param) {
|
|
1867
1933
|
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;
|
|
@@ -1869,7 +1935,28 @@ var OverlayRenderer = function OverlayRenderer(param) {
|
|
|
1869
1935
|
var rafRef = (0, import_react.useRef)(null);
|
|
1870
1936
|
var _ref1 = _sliced_to_array((0, import_react.useState)(/* @__PURE__ */ new Map()), 2), fadeMap = _ref1[0], setFadeMap = _ref1[1];
|
|
1871
1937
|
var removeTimers = (0, import_react.useRef)(/* @__PURE__ */ new Map());
|
|
1872
|
-
var
|
|
1938
|
+
var _ref2 = (0, import_react.useMemo)(function() {
|
|
1939
|
+
return partitionShowcase(overlays);
|
|
1940
|
+
}, [
|
|
1941
|
+
overlays
|
|
1942
|
+
]), showcasePersistent = _ref2.persistent, showcaseBeats = _ref2.beats;
|
|
1943
|
+
var _useShowcaseBeat = useShowcaseBeat(showcaseMode, showcaseCycleMs, showcaseBeats.length), showcaseBeatIndex = _useShowcaseBeat.beatIndex, showcaseBeatPhase = _useShowcaseBeat.beatPhase, showcaseBeatMs = _useShowcaseBeat.beatMs;
|
|
1944
|
+
var showcasePersistentIds = (0, import_react.useMemo)(function() {
|
|
1945
|
+
return new Set(showcasePersistent.map(function(o) {
|
|
1946
|
+
return o.id;
|
|
1947
|
+
}));
|
|
1948
|
+
}, [
|
|
1949
|
+
showcasePersistent
|
|
1950
|
+
]);
|
|
1951
|
+
var showcaseSpotlightIds = (0, import_react.useMemo)(function() {
|
|
1952
|
+
var beat = showcaseBeats[showcaseBeatIndex];
|
|
1953
|
+
return new Set((beat !== null && beat !== void 0 ? beat : []).map(function(o) {
|
|
1954
|
+
return o.id;
|
|
1955
|
+
}));
|
|
1956
|
+
}, [
|
|
1957
|
+
showcaseBeats,
|
|
1958
|
+
showcaseBeatIndex
|
|
1959
|
+
]);
|
|
1873
1960
|
var updateDims = (0, import_react.useCallback)(function() {
|
|
1874
1961
|
var video = videoRef.current;
|
|
1875
1962
|
if (video) {
|
|
@@ -1902,10 +1989,9 @@ var OverlayRenderer = function OverlayRenderer(param) {
|
|
|
1902
1989
|
]);
|
|
1903
1990
|
var activeOverlays = (0, import_react.useMemo)(function() {
|
|
1904
1991
|
if (showcaseMode) {
|
|
1905
|
-
|
|
1906
|
-
|
|
1907
|
-
|
|
1908
|
-
});
|
|
1992
|
+
var _showcaseBeats_showcaseBeatIndex;
|
|
1993
|
+
var beat = (_showcaseBeats_showcaseBeatIndex = showcaseBeats[showcaseBeatIndex]) !== null && _showcaseBeats_showcaseBeatIndex !== void 0 ? _showcaseBeats_showcaseBeatIndex : [];
|
|
1994
|
+
return _to_consumable_array(showcasePersistent).concat(_to_consumable_array(beat));
|
|
1909
1995
|
}
|
|
1910
1996
|
return overlays.filter(function(o) {
|
|
1911
1997
|
return isOverlayActive(o, currentTime);
|
|
@@ -1914,14 +2000,9 @@ var OverlayRenderer = function OverlayRenderer(param) {
|
|
|
1914
2000
|
overlays,
|
|
1915
2001
|
currentTime,
|
|
1916
2002
|
showcaseMode,
|
|
1917
|
-
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
return new Set(activeOverlays.map(function(o) {
|
|
1921
|
-
return o.id;
|
|
1922
|
-
}));
|
|
1923
|
-
}, [
|
|
1924
|
-
activeOverlays
|
|
2003
|
+
showcasePersistent,
|
|
2004
|
+
showcaseBeats,
|
|
2005
|
+
showcaseBeatIndex
|
|
1925
2006
|
]);
|
|
1926
2007
|
(0, import_react.useLayoutEffect)(function() {
|
|
1927
2008
|
var activeIds = new Set(activeOverlays.map(function(o) {
|
|
@@ -2116,10 +2197,12 @@ var OverlayRenderer = function OverlayRenderer(param) {
|
|
|
2116
2197
|
var width = overlay.width * scaleX;
|
|
2117
2198
|
var height = overlay.height * scaleY;
|
|
2118
2199
|
var baseOpacity = Math.max(0, Math.min(100, overlay.opacity)) / 100;
|
|
2119
|
-
var
|
|
2120
|
-
var
|
|
2121
|
-
var
|
|
2122
|
-
var
|
|
2200
|
+
var isShowcasePersistent = showcaseMode && showcasePersistentIds.has(overlay.id);
|
|
2201
|
+
var isShowcaseSpotlight = showcaseMode && showcaseSpotlightIds.has(overlay.id);
|
|
2202
|
+
var isShowcaseDormant = showcaseMode && !isShowcasePersistent && !isShowcaseSpotlight;
|
|
2203
|
+
var useShowcasePop = isShowcaseSpotlight;
|
|
2204
|
+
var opacity = useShowcasePop ? baseOpacity * beatOpacity(showcaseBeatPhase, showcaseBeatMs) : isShowcaseDormant ? 0 : visible ? baseOpacity : 0;
|
|
2205
|
+
var popScale = useShowcasePop ? beatScale(showcaseBeatPhase, showcaseBeatMs) : 1;
|
|
2123
2206
|
var sz = {
|
|
2124
2207
|
w: width,
|
|
2125
2208
|
h: height
|