@mottosports/motto-video-player 1.0.1-rc.80 → 1.0.1-rc.82
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/index.d.mts +35 -5
- package/dist/index.d.ts +35 -5
- package/dist/index.js +54 -27
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +64 -37
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -393,7 +393,7 @@ html[dir=rtl] .shaka-overflow-menu .shaka-overflow-button .material-svg-icon:fir
|
|
|
393
393
|
`);
|
|
394
394
|
|
|
395
395
|
// src/Player.tsx
|
|
396
|
-
import { forwardRef, useEffect as useEffect4, useRef as
|
|
396
|
+
import { forwardRef, useEffect as useEffect4, useRef as useRef9, useImperativeHandle, useCallback as useCallback9, useState as useState3 } from "react";
|
|
397
397
|
import shaka3 from "shaka-player/dist/shaka-player.ui";
|
|
398
398
|
|
|
399
399
|
// src/hooks/useShakaPlayer.ts
|
|
@@ -449,7 +449,7 @@ var supportsWidevinePersistentLicenses = () => {
|
|
|
449
449
|
import initShakaPlayerMux from "@mux/mux-data-shakaplayer";
|
|
450
450
|
|
|
451
451
|
// package.json
|
|
452
|
-
var version = "1.0.1-rc.
|
|
452
|
+
var version = "1.0.1-rc.82";
|
|
453
453
|
|
|
454
454
|
// src/utils/licenseCache.ts
|
|
455
455
|
var PERSISTENT_LICENSE_PREFIX = "motto_lic_";
|
|
@@ -1569,18 +1569,44 @@ var useShakaUI = (playerRef, containerRef, videoRef, controls, chromecastConfig,
|
|
|
1569
1569
|
};
|
|
1570
1570
|
|
|
1571
1571
|
// src/hooks/useEventHandlers.ts
|
|
1572
|
-
import { useCallback as useCallback6 } from "react";
|
|
1573
|
-
var useEventHandlers = (videoRef, handlers) => {
|
|
1572
|
+
import { useCallback as useCallback6, useRef as useRef5 } from "react";
|
|
1573
|
+
var useEventHandlers = (videoRef, playerRef, handlers) => {
|
|
1574
|
+
const timeUpdateHandlerRef = useRef5(null);
|
|
1574
1575
|
const setupEventListeners = useCallback6(() => {
|
|
1575
1576
|
const video = videoRef.current;
|
|
1576
1577
|
if (!video) return;
|
|
1577
|
-
const { onPlay, onPause, onEnded, onLoadStart, onCanPlay } = handlers;
|
|
1578
|
+
const { onPlay, onPause, onEnded, onLoadStart, onCanPlay, onTimeUpdate } = handlers;
|
|
1578
1579
|
if (onPlay) video.addEventListener("play", onPlay);
|
|
1579
1580
|
if (onPause) video.addEventListener("pause", onPause);
|
|
1580
1581
|
if (onEnded) video.addEventListener("ended", onEnded);
|
|
1581
1582
|
if (onLoadStart) video.addEventListener("loadstart", onLoadStart);
|
|
1582
1583
|
if (onCanPlay) video.addEventListener("canplay", onCanPlay);
|
|
1583
|
-
|
|
1584
|
+
if (onTimeUpdate) {
|
|
1585
|
+
const handleTimeUpdate = () => {
|
|
1586
|
+
const player = playerRef.current;
|
|
1587
|
+
const currentTime = video.currentTime;
|
|
1588
|
+
const duration = video.duration;
|
|
1589
|
+
const isLive = player && typeof player.isLive === "function" ? player.isLive() : false;
|
|
1590
|
+
const timeData = {
|
|
1591
|
+
currentTime,
|
|
1592
|
+
duration,
|
|
1593
|
+
isLive
|
|
1594
|
+
};
|
|
1595
|
+
if (isLive && player && typeof player.seekRange === "function") {
|
|
1596
|
+
const seekRange = player.seekRange();
|
|
1597
|
+
if (seekRange && seekRange.end !== void 0) {
|
|
1598
|
+
timeData.liveEdge = seekRange.end;
|
|
1599
|
+
timeData.timeBehindLive = seekRange.end - currentTime;
|
|
1600
|
+
}
|
|
1601
|
+
} else if (duration && isFinite(duration) && duration > 0) {
|
|
1602
|
+
timeData.progress = currentTime / duration * 100;
|
|
1603
|
+
}
|
|
1604
|
+
onTimeUpdate(timeData);
|
|
1605
|
+
};
|
|
1606
|
+
timeUpdateHandlerRef.current = handleTimeUpdate;
|
|
1607
|
+
video.addEventListener("timeupdate", handleTimeUpdate);
|
|
1608
|
+
}
|
|
1609
|
+
}, [videoRef, playerRef, handlers]);
|
|
1584
1610
|
const cleanupEventListeners = useCallback6(() => {
|
|
1585
1611
|
const video = videoRef.current;
|
|
1586
1612
|
if (!video) return;
|
|
@@ -1590,6 +1616,10 @@ var useEventHandlers = (videoRef, handlers) => {
|
|
|
1590
1616
|
if (onEnded) video.removeEventListener("ended", onEnded);
|
|
1591
1617
|
if (onLoadStart) video.removeEventListener("loadstart", onLoadStart);
|
|
1592
1618
|
if (onCanPlay) video.removeEventListener("canplay", onCanPlay);
|
|
1619
|
+
if (timeUpdateHandlerRef.current) {
|
|
1620
|
+
video.removeEventListener("timeupdate", timeUpdateHandlerRef.current);
|
|
1621
|
+
timeUpdateHandlerRef.current = null;
|
|
1622
|
+
}
|
|
1593
1623
|
}, [videoRef, handlers]);
|
|
1594
1624
|
return {
|
|
1595
1625
|
setupEventListeners,
|
|
@@ -1601,11 +1631,11 @@ var useEventHandlers = (videoRef, handlers) => {
|
|
|
1601
1631
|
import { useEffect, useState as useState2 } from "react";
|
|
1602
1632
|
|
|
1603
1633
|
// src/hooks/useLiveIndicator.ts
|
|
1604
|
-
import { useEffect as useEffect2, useRef as
|
|
1634
|
+
import { useEffect as useEffect2, useRef as useRef7 } from "react";
|
|
1605
1635
|
var useLiveIndicator = (containerRef, playerRef, options = {}) => {
|
|
1606
|
-
const observerRef =
|
|
1607
|
-
const intervalRef =
|
|
1608
|
-
const lastStatusRef =
|
|
1636
|
+
const observerRef = useRef7(null);
|
|
1637
|
+
const intervalRef = useRef7(null);
|
|
1638
|
+
const lastStatusRef = useRef7(null);
|
|
1609
1639
|
const {
|
|
1610
1640
|
enabled = true,
|
|
1611
1641
|
indicatorColor = "#ff0000",
|
|
@@ -1619,23 +1649,21 @@ var useLiveIndicator = (containerRef, playerRef, options = {}) => {
|
|
|
1619
1649
|
return { isLive: false, isNearEdge: false };
|
|
1620
1650
|
}
|
|
1621
1651
|
try {
|
|
1622
|
-
if (
|
|
1652
|
+
if (typeof player.isLive !== "function") {
|
|
1623
1653
|
return { isLive: false, isNearEdge: false };
|
|
1624
1654
|
}
|
|
1625
|
-
const
|
|
1626
|
-
if (!manifest) {
|
|
1627
|
-
return { isLive: false, isNearEdge: false };
|
|
1628
|
-
}
|
|
1629
|
-
const timeline = manifest.presentationTimeline;
|
|
1630
|
-
if (!timeline || typeof timeline.isLive !== "function") {
|
|
1631
|
-
return { isLive: false, isNearEdge: false };
|
|
1632
|
-
}
|
|
1633
|
-
const isLiveStream = timeline.isLive();
|
|
1655
|
+
const isLiveStream = player.isLive();
|
|
1634
1656
|
if (!isLiveStream) return { isLive: false, isNearEdge: false };
|
|
1635
1657
|
const videoElement = player.getMediaElement?.();
|
|
1636
1658
|
if (!videoElement) return { isLive: true, isNearEdge: false };
|
|
1637
|
-
|
|
1638
|
-
|
|
1659
|
+
if (typeof player.seekRange !== "function") {
|
|
1660
|
+
return { isLive: true, isNearEdge: false };
|
|
1661
|
+
}
|
|
1662
|
+
const seekRange = player.seekRange();
|
|
1663
|
+
if (!seekRange || seekRange.end === void 0) {
|
|
1664
|
+
return { isLive: true, isNearEdge: false };
|
|
1665
|
+
}
|
|
1666
|
+
const liveEdge = seekRange.end;
|
|
1639
1667
|
const currentTime = videoElement.currentTime;
|
|
1640
1668
|
const timeBehindLive = liveEdge - currentTime;
|
|
1641
1669
|
return {
|
|
@@ -1652,15 +1680,13 @@ var useLiveIndicator = (containerRef, playerRef, options = {}) => {
|
|
|
1652
1680
|
const player = playerRef.current;
|
|
1653
1681
|
if (!player) return;
|
|
1654
1682
|
try {
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
const liveEdge =
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
videoElement.currentTime = liveEdge;
|
|
1663
|
-
}
|
|
1683
|
+
if (typeof player.seekRange !== "function") return;
|
|
1684
|
+
const seekRange = player.seekRange();
|
|
1685
|
+
if (!seekRange || seekRange.end === void 0) return;
|
|
1686
|
+
const liveEdge = seekRange.end;
|
|
1687
|
+
const videoElement = player.getMediaElement?.();
|
|
1688
|
+
if (videoElement) {
|
|
1689
|
+
videoElement.currentTime = liveEdge;
|
|
1664
1690
|
}
|
|
1665
1691
|
} catch (error) {
|
|
1666
1692
|
console.error("Error seeking to live edge:", error);
|
|
@@ -1830,9 +1856,9 @@ var useKeyboardControls = (videoRef, options = {}) => {
|
|
|
1830
1856
|
};
|
|
1831
1857
|
|
|
1832
1858
|
// src/hooks/useAdEvents.ts
|
|
1833
|
-
import { useCallback as useCallback8, useRef as
|
|
1859
|
+
import { useCallback as useCallback8, useRef as useRef8 } from "react";
|
|
1834
1860
|
var useAdEvents = (playerRef, handlers) => {
|
|
1835
|
-
const listenersRef =
|
|
1861
|
+
const listenersRef = useRef8([]);
|
|
1836
1862
|
const setupAdEventListeners = useCallback8(() => {
|
|
1837
1863
|
const player = playerRef.current;
|
|
1838
1864
|
if (!player) return;
|
|
@@ -2149,8 +2175,8 @@ var Player = forwardRef(
|
|
|
2149
2175
|
auth,
|
|
2150
2176
|
...videoProps
|
|
2151
2177
|
}, ref) => {
|
|
2152
|
-
const videoRef =
|
|
2153
|
-
const containerRef =
|
|
2178
|
+
const videoRef = useRef9(null);
|
|
2179
|
+
const containerRef = useRef9(null);
|
|
2154
2180
|
const [isScriptsLoaded, setIsScriptsLoaded] = useState3(false);
|
|
2155
2181
|
const [isInitialLoading, setIsInitialLoading] = useState3(true);
|
|
2156
2182
|
const [bfResetKey, setBfResetKey] = useState3(0);
|
|
@@ -2194,12 +2220,13 @@ var Player = forwardRef(
|
|
|
2194
2220
|
skipForward,
|
|
2195
2221
|
enabled: true
|
|
2196
2222
|
});
|
|
2197
|
-
const { setupEventListeners, cleanupEventListeners } = useEventHandlers(videoRef, {
|
|
2223
|
+
const { setupEventListeners, cleanupEventListeners } = useEventHandlers(videoRef, playerRef, {
|
|
2198
2224
|
onPlay: events?.onPlay,
|
|
2199
2225
|
onPause: events?.onPause,
|
|
2200
2226
|
onEnded: events?.onEnded,
|
|
2201
2227
|
onLoadStart: events?.onLoadStart,
|
|
2202
|
-
onCanPlay: events?.onCanPlay
|
|
2228
|
+
onCanPlay: events?.onCanPlay,
|
|
2229
|
+
onTimeUpdate: events?.onTimeUpdate
|
|
2203
2230
|
});
|
|
2204
2231
|
const { uiRef, initializeUI, destroyUI } = useShakaUI(
|
|
2205
2232
|
playerRef,
|