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
|
@@ -348,27 +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
|
-
if (exceedsDecode && isNabDemo) {
|
|
357
|
+
if (!decodeWidth || !decodeHeight) {
|
|
369
358
|
return {
|
|
370
|
-
width: SWIRL_HD_AUTHORING_WIDTH,
|
|
371
|
-
height: SWIRL_HD_AUTHORING_HEIGHT
|
|
359
|
+
width: decodeWidth || SWIRL_HD_AUTHORING_WIDTH,
|
|
360
|
+
height: decodeHeight || SWIRL_HD_AUTHORING_HEIGHT
|
|
372
361
|
};
|
|
373
362
|
}
|
|
374
363
|
return {
|
|
@@ -1812,11 +1801,19 @@ function hexToRgb(hex) {
|
|
|
1812
1801
|
return "".concat(num >> 16 & 255, ",").concat(num >> 8 & 255, ",").concat(num & 255);
|
|
1813
1802
|
}
|
|
1814
1803
|
var FADE_DURATION_MS = 1e3;
|
|
1815
|
-
var SHOWCASE_CYCLE_MS_DEFAULT =
|
|
1816
|
-
var
|
|
1817
|
-
var
|
|
1818
|
-
var
|
|
1819
|
-
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
|
+
]);
|
|
1820
1817
|
function easeOutCubic(t) {
|
|
1821
1818
|
var u = 1 - t;
|
|
1822
1819
|
return 1 - u * u * u;
|
|
@@ -1829,38 +1826,108 @@ function easeOutBack(t) {
|
|
|
1829
1826
|
var c3 = c1 + 1;
|
|
1830
1827
|
return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);
|
|
1831
1828
|
}
|
|
1832
|
-
function
|
|
1833
|
-
if (phase <
|
|
1834
|
-
|
|
1835
|
-
|
|
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));
|
|
1836
1834
|
}
|
|
1837
1835
|
return 1;
|
|
1838
1836
|
}
|
|
1839
|
-
function
|
|
1840
|
-
if (phase <
|
|
1841
|
-
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));
|
|
1842
1840
|
}
|
|
1843
|
-
|
|
1844
|
-
|
|
1841
|
+
var holdEnd = beatMs - BEAT_POP_OUT_MS;
|
|
1842
|
+
if (phase >= holdEnd) {
|
|
1843
|
+
return 1 - 0.06 * easeInCubic((phase - holdEnd) / BEAT_POP_OUT_MS);
|
|
1845
1844
|
}
|
|
1846
1845
|
return 1;
|
|
1847
1846
|
}
|
|
1848
|
-
function
|
|
1849
|
-
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];
|
|
1850
1912
|
(0, import_react.useEffect)(function() {
|
|
1851
1913
|
if (!enabled) return;
|
|
1852
|
-
setPhase(Date.now() % cycleMs);
|
|
1853
1914
|
var id = window.setInterval(function() {
|
|
1854
|
-
|
|
1855
|
-
},
|
|
1915
|
+
return setNow(Date.now());
|
|
1916
|
+
}, 64);
|
|
1856
1917
|
return function() {
|
|
1857
1918
|
return clearInterval(id);
|
|
1858
1919
|
};
|
|
1859
1920
|
}, [
|
|
1860
|
-
enabled
|
|
1861
|
-
cycleMs
|
|
1921
|
+
enabled
|
|
1862
1922
|
]);
|
|
1863
|
-
|
|
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
|
+
};
|
|
1864
1931
|
}
|
|
1865
1932
|
var OverlayRenderer = function OverlayRenderer(param) {
|
|
1866
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;
|
|
@@ -1868,7 +1935,28 @@ var OverlayRenderer = function OverlayRenderer(param) {
|
|
|
1868
1935
|
var rafRef = (0, import_react.useRef)(null);
|
|
1869
1936
|
var _ref1 = _sliced_to_array((0, import_react.useState)(/* @__PURE__ */ new Map()), 2), fadeMap = _ref1[0], setFadeMap = _ref1[1];
|
|
1870
1937
|
var removeTimers = (0, import_react.useRef)(/* @__PURE__ */ new Map());
|
|
1871
|
-
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
|
+
]);
|
|
1872
1960
|
var updateDims = (0, import_react.useCallback)(function() {
|
|
1873
1961
|
var video = videoRef.current;
|
|
1874
1962
|
if (video) {
|
|
@@ -1901,10 +1989,9 @@ var OverlayRenderer = function OverlayRenderer(param) {
|
|
|
1901
1989
|
]);
|
|
1902
1990
|
var activeOverlays = (0, import_react.useMemo)(function() {
|
|
1903
1991
|
if (showcaseMode) {
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
|
|
1907
|
-
});
|
|
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));
|
|
1908
1995
|
}
|
|
1909
1996
|
return overlays.filter(function(o) {
|
|
1910
1997
|
return isOverlayActive(o, currentTime);
|
|
@@ -1913,14 +2000,9 @@ var OverlayRenderer = function OverlayRenderer(param) {
|
|
|
1913
2000
|
overlays,
|
|
1914
2001
|
currentTime,
|
|
1915
2002
|
showcaseMode,
|
|
1916
|
-
|
|
1917
|
-
|
|
1918
|
-
|
|
1919
|
-
return new Set(activeOverlays.map(function(o) {
|
|
1920
|
-
return o.id;
|
|
1921
|
-
}));
|
|
1922
|
-
}, [
|
|
1923
|
-
activeOverlays
|
|
2003
|
+
showcasePersistent,
|
|
2004
|
+
showcaseBeats,
|
|
2005
|
+
showcaseBeatIndex
|
|
1924
2006
|
]);
|
|
1925
2007
|
(0, import_react.useLayoutEffect)(function() {
|
|
1926
2008
|
var activeIds = new Set(activeOverlays.map(function(o) {
|
|
@@ -2115,10 +2197,12 @@ var OverlayRenderer = function OverlayRenderer(param) {
|
|
|
2115
2197
|
var width = overlay.width * scaleX;
|
|
2116
2198
|
var height = overlay.height * scaleY;
|
|
2117
2199
|
var baseOpacity = Math.max(0, Math.min(100, overlay.opacity)) / 100;
|
|
2118
|
-
var
|
|
2119
|
-
var
|
|
2120
|
-
var
|
|
2121
|
-
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;
|
|
2122
2206
|
var sz = {
|
|
2123
2207
|
w: width,
|
|
2124
2208
|
h: height
|