stormcloud-video-player 0.8.50 → 0.8.51
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 +272 -223
- package/lib/index.cjs.map +1 -1
- package/lib/index.js +272 -223
- package/lib/index.js.map +1 -1
- package/lib/player/AdBreakOrchestrator.d.cts +1 -1
- package/lib/player/AdConfigManager.d.cts +1 -1
- package/lib/player/AdTimingService.d.cts +1 -1
- package/lib/player/HlsEngine.d.cts +1 -1
- package/lib/player/PlayerControls.d.cts +1 -1
- package/lib/player/Scte35CueManager.d.cts +1 -1
- package/lib/player/Scte35Parser.d.cts +1 -1
- package/lib/player/StormcloudVideoPlayer.cjs +249 -200
- package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/player/StormcloudVideoPlayer.d.cts +1 -1
- package/lib/player/playerTypes.d.cts +1 -1
- package/lib/players/HlsPlayer.cjs +249 -200
- package/lib/players/HlsPlayer.cjs.map +1 -1
- package/lib/players/HlsPlayer.d.cts +1 -1
- package/lib/players/index.cjs +249 -200
- package/lib/players/index.cjs.map +1 -1
- package/lib/sdk/hlsAdPlayer.cjs +220 -28
- package/lib/sdk/hlsAdPlayer.cjs.map +1 -1
- package/lib/sdk/hlsAdPlayer.d.cts +1 -1
- package/lib/ui/StormcloudVideoPlayer.cjs +249 -200
- package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/ui/StormcloudVideoPlayer.d.cts +1 -1
- package/lib/utils/tracking.d.cts +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Component } from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { S as StormcloudVideoPlayerConfig } from '../types-iDjS8f_7.cjs';
|
|
3
3
|
|
|
4
4
|
interface HlsPlayerProps extends StormcloudVideoPlayerConfig {
|
|
5
5
|
onMount?: (player: any) => void;
|
package/lib/players/index.cjs
CHANGED
|
@@ -436,6 +436,179 @@ var canPlay = {
|
|
|
436
436
|
var import_react2 = require("react");
|
|
437
437
|
// src/sdk/hlsAdPlayer.ts
|
|
438
438
|
var import_hls = __toESM(require("hls.js"), 1);
|
|
439
|
+
// src/utils/browserCompat.ts
|
|
440
|
+
function getChromeVersion(ua) {
|
|
441
|
+
var match = ua.match(/Chrome\/(\d+)/);
|
|
442
|
+
return match && match[1] ? parseInt(match[1], 10) : 0;
|
|
443
|
+
}
|
|
444
|
+
function getWebKitVersion(ua) {
|
|
445
|
+
var match = ua.match(/AppleWebKit\/(\d+)/);
|
|
446
|
+
return match && match[1] ? parseInt(match[1], 10) : 0;
|
|
447
|
+
}
|
|
448
|
+
function getPlatform() {
|
|
449
|
+
var _navigator_userAgentData;
|
|
450
|
+
if ("userAgentData" in navigator && ((_navigator_userAgentData = navigator.userAgentData) === null || _navigator_userAgentData === void 0 ? void 0 : _navigator_userAgentData.platform)) {
|
|
451
|
+
return navigator.userAgentData.platform;
|
|
452
|
+
}
|
|
453
|
+
var ua = navigator.userAgent;
|
|
454
|
+
if (/Mac|iPhone|iPad|iPod/i.test(ua)) {
|
|
455
|
+
return /iPhone|iPad|iPod/i.test(ua) ? "iPhone" : "MacIntel";
|
|
456
|
+
}
|
|
457
|
+
if (/Win/i.test(ua)) {
|
|
458
|
+
return "Win32";
|
|
459
|
+
}
|
|
460
|
+
if (/Linux/i.test(ua)) {
|
|
461
|
+
return /Android/i.test(ua) ? "Linux armv8l" : "Linux x86_64";
|
|
462
|
+
}
|
|
463
|
+
if (/CrOS/i.test(ua)) {
|
|
464
|
+
return "CrOS";
|
|
465
|
+
}
|
|
466
|
+
return navigator.platform || "Unknown";
|
|
467
|
+
}
|
|
468
|
+
function detectBrowser() {
|
|
469
|
+
var ua = navigator.userAgent;
|
|
470
|
+
var platform = getPlatform();
|
|
471
|
+
var name = "Unknown";
|
|
472
|
+
var version = "0";
|
|
473
|
+
var majorVersion = 0;
|
|
474
|
+
var isSmartTV = false;
|
|
475
|
+
var isLegacyTV = false;
|
|
476
|
+
var supportsModernJS = true;
|
|
477
|
+
var webOSVersion;
|
|
478
|
+
var tizenVersion;
|
|
479
|
+
var chromeVersionNum;
|
|
480
|
+
var chromeVersion = getChromeVersion(ua);
|
|
481
|
+
var webkitVersion = getWebKitVersion(ua);
|
|
482
|
+
chromeVersionNum = chromeVersion > 0 ? chromeVersion : void 0;
|
|
483
|
+
if (/Web0S|webOS|LG Browser|LGSTB/i.test(ua)) {
|
|
484
|
+
name = "LG WebOS";
|
|
485
|
+
isSmartTV = true;
|
|
486
|
+
var match = ua.match(/Web0S[/\s]*([\d.]+)/i) || ua.match(/webOS[/\s]*([\d.]+)/i);
|
|
487
|
+
if (!match || !match[1]) {
|
|
488
|
+
match = ua.match(/webOSTV[/\s-]*([\d.]+)/i) || ua.match(/webOS\.TV[/\s-]*([\d.]+)/i);
|
|
489
|
+
}
|
|
490
|
+
if (match && match[1]) {
|
|
491
|
+
version = match[1];
|
|
492
|
+
var parts = version.split(".");
|
|
493
|
+
majorVersion = parts[0] ? parseInt(parts[0], 10) : 0;
|
|
494
|
+
webOSVersion = majorVersion;
|
|
495
|
+
} else if (chromeVersion > 0) {
|
|
496
|
+
if (chromeVersion >= 79) {
|
|
497
|
+
webOSVersion = 6;
|
|
498
|
+
version = "6.0";
|
|
499
|
+
majorVersion = 6;
|
|
500
|
+
} else if (chromeVersion >= 68) {
|
|
501
|
+
webOSVersion = 5;
|
|
502
|
+
version = "5.0";
|
|
503
|
+
majorVersion = 5;
|
|
504
|
+
} else if (chromeVersion >= 53) {
|
|
505
|
+
webOSVersion = 4;
|
|
506
|
+
version = "4.0";
|
|
507
|
+
majorVersion = 4;
|
|
508
|
+
} else if (chromeVersion >= 38) {
|
|
509
|
+
webOSVersion = 3;
|
|
510
|
+
version = "3.0";
|
|
511
|
+
majorVersion = 3;
|
|
512
|
+
} else {
|
|
513
|
+
webOSVersion = 2;
|
|
514
|
+
version = "2.0";
|
|
515
|
+
majorVersion = 2;
|
|
516
|
+
}
|
|
517
|
+
} else {
|
|
518
|
+
version = "Unknown";
|
|
519
|
+
webOSVersion = void 0;
|
|
520
|
+
}
|
|
521
|
+
isLegacyTV = webOSVersion !== void 0 && webOSVersion < 3;
|
|
522
|
+
} else if (/Tizen/i.test(ua)) {
|
|
523
|
+
name = "Samsung Tizen";
|
|
524
|
+
isSmartTV = true;
|
|
525
|
+
var match1 = ua.match(/Tizen[/\s]*([\d.]+)/i);
|
|
526
|
+
version = match1 && match1[1] ? match1[1] : "Unknown";
|
|
527
|
+
if (version !== "Unknown") {
|
|
528
|
+
var parts1 = version.split(".");
|
|
529
|
+
majorVersion = parts1[0] ? parseInt(parts1[0], 10) : 0;
|
|
530
|
+
tizenVersion = majorVersion;
|
|
531
|
+
}
|
|
532
|
+
isLegacyTV = tizenVersion !== void 0 && tizenVersion < 3;
|
|
533
|
+
} else if (/SMART-TV|SmartTV/i.test(ua)) {
|
|
534
|
+
name = "Smart TV";
|
|
535
|
+
isSmartTV = true;
|
|
536
|
+
isLegacyTV = chromeVersion > 0 && chromeVersion < 53;
|
|
537
|
+
} else if (/NetCast/i.test(ua)) {
|
|
538
|
+
name = "LG NetCast";
|
|
539
|
+
isSmartTV = true;
|
|
540
|
+
isLegacyTV = true;
|
|
541
|
+
} else if (/BRAVIA/i.test(ua)) {
|
|
542
|
+
name = "Sony BRAVIA";
|
|
543
|
+
isSmartTV = true;
|
|
544
|
+
isLegacyTV = chromeVersion > 0 && chromeVersion < 53;
|
|
545
|
+
} else {
|
|
546
|
+
if (chromeVersion > 0) {
|
|
547
|
+
name = "Chrome";
|
|
548
|
+
version = chromeVersion.toString();
|
|
549
|
+
majorVersion = chromeVersion;
|
|
550
|
+
if (chromeVersion < 50) {
|
|
551
|
+
supportsModernJS = false;
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
if (webkitVersion > 0 && webkitVersion < 600) {
|
|
555
|
+
supportsModernJS = false;
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
if (typeof Promise === "undefined" || typeof Map === "undefined" || typeof Set === "undefined") {
|
|
559
|
+
supportsModernJS = false;
|
|
560
|
+
}
|
|
561
|
+
if (typeof URLSearchParams === "undefined") {
|
|
562
|
+
supportsModernJS = false;
|
|
563
|
+
}
|
|
564
|
+
return {
|
|
565
|
+
name: name,
|
|
566
|
+
version: version,
|
|
567
|
+
majorVersion: majorVersion,
|
|
568
|
+
isSmartTV: isSmartTV,
|
|
569
|
+
isLegacyTV: isLegacyTV,
|
|
570
|
+
platform: platform,
|
|
571
|
+
supportsModernJS: supportsModernJS,
|
|
572
|
+
webOSVersion: webOSVersion,
|
|
573
|
+
tizenVersion: tizenVersion,
|
|
574
|
+
chromeVersion: chromeVersionNum
|
|
575
|
+
};
|
|
576
|
+
}
|
|
577
|
+
function requiresMediaPipelineResetAfterAds() {
|
|
578
|
+
var _browser_tizenVersion;
|
|
579
|
+
var browser = detectBrowser();
|
|
580
|
+
return browser.name === "Samsung Tizen" && ((_browser_tizenVersion = browser.tizenVersion) !== null && _browser_tizenVersion !== void 0 ? _browser_tizenVersion : 0) >= 5;
|
|
581
|
+
}
|
|
582
|
+
function getBrowserConfigOverrides() {
|
|
583
|
+
var browser = detectBrowser();
|
|
584
|
+
var overrides = {};
|
|
585
|
+
if (browser.isSmartTV) {
|
|
586
|
+
overrides.allowNativeHls = true;
|
|
587
|
+
overrides.pauseContentDuringAds = true;
|
|
588
|
+
}
|
|
589
|
+
return overrides;
|
|
590
|
+
}
|
|
591
|
+
function logBrowserInfo() {
|
|
592
|
+
var debug = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false;
|
|
593
|
+
if (!debug) return;
|
|
594
|
+
var browser = detectBrowser();
|
|
595
|
+
console.log("[StormcloudVideoPlayer] Browser Compatibility Info:", _object_spread_props(_object_spread({
|
|
596
|
+
browser: "".concat(browser.name, " ").concat(browser.version),
|
|
597
|
+
platform: browser.platform,
|
|
598
|
+
isSmartTV: browser.isSmartTV,
|
|
599
|
+
isLegacyTV: browser.isLegacyTV,
|
|
600
|
+
supportsModernJS: browser.supportsModernJS
|
|
601
|
+
}, browser.webOSVersion !== void 0 ? {
|
|
602
|
+
webOSVersion: browser.webOSVersion
|
|
603
|
+
} : {}, browser.tizenVersion !== void 0 ? {
|
|
604
|
+
tizenVersion: browser.tizenVersion
|
|
605
|
+
} : {}, browser.chromeVersion !== void 0 ? {
|
|
606
|
+
chromeVersion: browser.chromeVersion
|
|
607
|
+
} : {}), {
|
|
608
|
+
userAgent: navigator.userAgent
|
|
609
|
+
}));
|
|
610
|
+
}
|
|
611
|
+
// src/sdk/hlsAdPlayer.ts
|
|
439
612
|
var MAX_VAST_WRAPPER_DEPTH = 5;
|
|
440
613
|
function createHlsAdPlayer(contentVideo, options) {
|
|
441
614
|
var _contentVideo_AD_VIDEO_PROP, _contentVideo_AD_CONTAINER_PROP;
|
|
@@ -468,6 +641,7 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
468
641
|
var lastAdProgressPosition = 0;
|
|
469
642
|
var sawDecodedVideoFrame = false;
|
|
470
643
|
var videoFrameCallbackHandle;
|
|
644
|
+
var pendingPlayPromise;
|
|
471
645
|
var trackingFired = {
|
|
472
646
|
impression: false,
|
|
473
647
|
start: false,
|
|
@@ -1271,6 +1445,60 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
1271
1445
|
complete: false
|
|
1272
1446
|
};
|
|
1273
1447
|
}
|
|
1448
|
+
function isRvfcSupported(video) {
|
|
1449
|
+
return typeof video.requestVideoFrameCallback === "function";
|
|
1450
|
+
}
|
|
1451
|
+
function settlePendingPlay() {
|
|
1452
|
+
pendingPlayPromise = void 0;
|
|
1453
|
+
}
|
|
1454
|
+
function startAdPlayback(context) {
|
|
1455
|
+
if (!adVideoElement) return;
|
|
1456
|
+
var playPromise = adVideoElement.play();
|
|
1457
|
+
pendingPlayPromise = playPromise;
|
|
1458
|
+
playPromise.catch(function(error) {
|
|
1459
|
+
if (pendingPlayPromise !== playPromise) {
|
|
1460
|
+
return;
|
|
1461
|
+
}
|
|
1462
|
+
console.error("[HlsAdPlayer] Error starting ".concat(context, ":"), error);
|
|
1463
|
+
handleAdError();
|
|
1464
|
+
}).finally(function() {
|
|
1465
|
+
if (pendingPlayPromise === playPromise) {
|
|
1466
|
+
pendingPlayPromise = void 0;
|
|
1467
|
+
}
|
|
1468
|
+
});
|
|
1469
|
+
}
|
|
1470
|
+
function prepareVideoElementForNewSource() {
|
|
1471
|
+
settlePendingPlay();
|
|
1472
|
+
if (adHls) {
|
|
1473
|
+
adHls.destroy();
|
|
1474
|
+
adHls = void 0;
|
|
1475
|
+
}
|
|
1476
|
+
if (!adVideoElement) return;
|
|
1477
|
+
try {
|
|
1478
|
+
adVideoElement.pause();
|
|
1479
|
+
adVideoElement.removeAttribute("src");
|
|
1480
|
+
adVideoElement.load();
|
|
1481
|
+
} catch (error) {
|
|
1482
|
+
console.warn("[HlsAdPlayer] Error preparing ad video for new source:", error);
|
|
1483
|
+
}
|
|
1484
|
+
}
|
|
1485
|
+
function recreateAdVideoElement() {
|
|
1486
|
+
console.log("[HlsAdPlayer] Recreating ad video element (single-decoder platform)");
|
|
1487
|
+
teardownAdEventListeners();
|
|
1488
|
+
prepareVideoElementForNewSource();
|
|
1489
|
+
if (adVideoElement) {
|
|
1490
|
+
try {
|
|
1491
|
+
adVideoElement.remove();
|
|
1492
|
+
} catch (error) {
|
|
1493
|
+
console.warn("[HlsAdPlayer] Error removing ad video element:", error);
|
|
1494
|
+
}
|
|
1495
|
+
}
|
|
1496
|
+
adVideoElement = createAdVideoElement();
|
|
1497
|
+
adContainerEl === null || adContainerEl === void 0 ? void 0 : adContainerEl.appendChild(adVideoElement);
|
|
1498
|
+
contentVideo[AD_VIDEO_PROP] = adVideoElement;
|
|
1499
|
+
adVideoElement.volume = Math.max(0, Math.min(1, originalVolume));
|
|
1500
|
+
adVideoElement.muted = originalMutedState;
|
|
1501
|
+
}
|
|
1274
1502
|
function loadCurrentAdMedia() {
|
|
1275
1503
|
if (!adVideoElement || !currentAd) {
|
|
1276
1504
|
throw new Error("No ad video element or ad to load");
|
|
@@ -1293,10 +1521,7 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
1293
1521
|
adHls.attachMedia(adVideoElement);
|
|
1294
1522
|
adHls.on(import_hls.default.Events.MANIFEST_PARSED, function() {
|
|
1295
1523
|
console.log("[HlsAdPlayer] HLS manifest parsed, starting playback");
|
|
1296
|
-
|
|
1297
|
-
console.error("[HlsAdPlayer] Error starting ad playback:", error);
|
|
1298
|
-
handleAdError();
|
|
1299
|
-
});
|
|
1524
|
+
startAdPlayback("HLS ad playback");
|
|
1300
1525
|
});
|
|
1301
1526
|
adHls.on(import_hls.default.Events.ERROR, function(_event, data) {
|
|
1302
1527
|
console.error("[HlsAdPlayer] HLS error:", data);
|
|
@@ -1306,10 +1531,7 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
1306
1531
|
});
|
|
1307
1532
|
} else if (isHlsAd && adVideoElement.canPlayType("application/vnd.apple.mpegurl")) {
|
|
1308
1533
|
adVideoElement.src = mediaFile.url;
|
|
1309
|
-
|
|
1310
|
-
console.error("[HlsAdPlayer] Error starting ad playback:", error);
|
|
1311
|
-
handleAdError();
|
|
1312
|
-
});
|
|
1534
|
+
startAdPlayback("native HLS ad playback");
|
|
1313
1535
|
} else if (!isHlsAd && isProgressiveMediaFile(mediaFile)) {
|
|
1314
1536
|
if (adHls) {
|
|
1315
1537
|
adHls.destroy();
|
|
@@ -1317,10 +1539,7 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
1317
1539
|
}
|
|
1318
1540
|
adVideoElement.src = mediaFile.url;
|
|
1319
1541
|
adVideoElement.load();
|
|
1320
|
-
|
|
1321
|
-
console.error("[HlsAdPlayer] Error starting progressive ad playback:", error);
|
|
1322
|
-
handleAdError();
|
|
1323
|
-
});
|
|
1542
|
+
startAdPlayback("progressive ad playback");
|
|
1324
1543
|
} else {
|
|
1325
1544
|
throw new Error("Unsupported ad media file type: ".concat(mediaFile.type));
|
|
1326
1545
|
}
|
|
@@ -1337,6 +1556,13 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
1337
1556
|
trackingFired.impression = true;
|
|
1338
1557
|
console.log("[HlsAdPlayer] Advancing to next pod ad (".concat(podIndex + 1, "/").concat(podAds.length, "): ").concat(currentAd.title, ", duration: ").concat(currentAd.duration, "s"));
|
|
1339
1558
|
}
|
|
1559
|
+
clearStallWatchdog();
|
|
1560
|
+
if (requiresMediaPipelineResetAfterAds()) {
|
|
1561
|
+
recreateAdVideoElement();
|
|
1562
|
+
setupAdEventListeners();
|
|
1563
|
+
} else {
|
|
1564
|
+
prepareVideoElementForNewSource();
|
|
1565
|
+
}
|
|
1340
1566
|
try {
|
|
1341
1567
|
loadCurrentAdMedia();
|
|
1342
1568
|
emit("pod_ad_started", {
|
|
@@ -1448,9 +1674,16 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
1448
1674
|
if (decodedFrames !== void 0 && decodedFrames > 0) {
|
|
1449
1675
|
sawDecodedVideoFrame = true;
|
|
1450
1676
|
markFrameCounterReliable();
|
|
1451
|
-
} else if (
|
|
1452
|
-
|
|
1453
|
-
|
|
1677
|
+
} else if (adVideoElement.currentTime >= BLACKFRAME_MIN_PLAYBACK_S) {
|
|
1678
|
+
var timeAdvancing = adVideoElement.currentTime > lastAdProgressPosition + 0.05;
|
|
1679
|
+
if (isRvfcSupported(adVideoElement) && timeAdvancing) {
|
|
1680
|
+
handleVideoDecodeFailure();
|
|
1681
|
+
return;
|
|
1682
|
+
}
|
|
1683
|
+
if (decodedFrames === 0 && timeAdvancing && isFrameCounterReliable()) {
|
|
1684
|
+
handleVideoDecodeFailure();
|
|
1685
|
+
return;
|
|
1686
|
+
}
|
|
1454
1687
|
}
|
|
1455
1688
|
}
|
|
1456
1689
|
if (adVideoElement.currentTime > lastAdProgressPosition + 0.05) {
|
|
@@ -1467,19 +1700,7 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
1467
1700
|
}, STALL_CHECK_INTERVAL_MS);
|
|
1468
1701
|
}
|
|
1469
1702
|
function releaseAdDecoder() {
|
|
1470
|
-
|
|
1471
|
-
adHls.destroy();
|
|
1472
|
-
adHls = void 0;
|
|
1473
|
-
}
|
|
1474
|
-
if (adVideoElement) {
|
|
1475
|
-
try {
|
|
1476
|
-
adVideoElement.pause();
|
|
1477
|
-
adVideoElement.removeAttribute("src");
|
|
1478
|
-
adVideoElement.load();
|
|
1479
|
-
} catch (error) {
|
|
1480
|
-
console.warn("[HlsAdPlayer] Error releasing ad decoder:", error);
|
|
1481
|
-
}
|
|
1482
|
-
}
|
|
1703
|
+
prepareVideoElementForNewSource();
|
|
1483
1704
|
if (adContainerEl) {
|
|
1484
1705
|
adContainerEl.style.display = "none";
|
|
1485
1706
|
adContainerEl.style.pointerEvents = "none";
|
|
@@ -4050,178 +4271,6 @@ function fetchConsentSignals() {
|
|
|
4050
4271
|
return signals;
|
|
4051
4272
|
});
|
|
4052
4273
|
}
|
|
4053
|
-
// src/utils/browserCompat.ts
|
|
4054
|
-
function getChromeVersion(ua) {
|
|
4055
|
-
var match = ua.match(/Chrome\/(\d+)/);
|
|
4056
|
-
return match && match[1] ? parseInt(match[1], 10) : 0;
|
|
4057
|
-
}
|
|
4058
|
-
function getWebKitVersion(ua) {
|
|
4059
|
-
var match = ua.match(/AppleWebKit\/(\d+)/);
|
|
4060
|
-
return match && match[1] ? parseInt(match[1], 10) : 0;
|
|
4061
|
-
}
|
|
4062
|
-
function getPlatform() {
|
|
4063
|
-
var _navigator_userAgentData;
|
|
4064
|
-
if ("userAgentData" in navigator && ((_navigator_userAgentData = navigator.userAgentData) === null || _navigator_userAgentData === void 0 ? void 0 : _navigator_userAgentData.platform)) {
|
|
4065
|
-
return navigator.userAgentData.platform;
|
|
4066
|
-
}
|
|
4067
|
-
var ua = navigator.userAgent;
|
|
4068
|
-
if (/Mac|iPhone|iPad|iPod/i.test(ua)) {
|
|
4069
|
-
return /iPhone|iPad|iPod/i.test(ua) ? "iPhone" : "MacIntel";
|
|
4070
|
-
}
|
|
4071
|
-
if (/Win/i.test(ua)) {
|
|
4072
|
-
return "Win32";
|
|
4073
|
-
}
|
|
4074
|
-
if (/Linux/i.test(ua)) {
|
|
4075
|
-
return /Android/i.test(ua) ? "Linux armv8l" : "Linux x86_64";
|
|
4076
|
-
}
|
|
4077
|
-
if (/CrOS/i.test(ua)) {
|
|
4078
|
-
return "CrOS";
|
|
4079
|
-
}
|
|
4080
|
-
return navigator.platform || "Unknown";
|
|
4081
|
-
}
|
|
4082
|
-
function detectBrowser() {
|
|
4083
|
-
var ua = navigator.userAgent;
|
|
4084
|
-
var platform = getPlatform();
|
|
4085
|
-
var name = "Unknown";
|
|
4086
|
-
var version = "0";
|
|
4087
|
-
var majorVersion = 0;
|
|
4088
|
-
var isSmartTV = false;
|
|
4089
|
-
var isLegacyTV = false;
|
|
4090
|
-
var supportsModernJS = true;
|
|
4091
|
-
var webOSVersion;
|
|
4092
|
-
var tizenVersion;
|
|
4093
|
-
var chromeVersionNum;
|
|
4094
|
-
var chromeVersion = getChromeVersion(ua);
|
|
4095
|
-
var webkitVersion = getWebKitVersion(ua);
|
|
4096
|
-
chromeVersionNum = chromeVersion > 0 ? chromeVersion : void 0;
|
|
4097
|
-
if (/Web0S|webOS|LG Browser|LGSTB/i.test(ua)) {
|
|
4098
|
-
name = "LG WebOS";
|
|
4099
|
-
isSmartTV = true;
|
|
4100
|
-
var match = ua.match(/Web0S[/\s]*([\d.]+)/i) || ua.match(/webOS[/\s]*([\d.]+)/i);
|
|
4101
|
-
if (!match || !match[1]) {
|
|
4102
|
-
match = ua.match(/webOSTV[/\s-]*([\d.]+)/i) || ua.match(/webOS\.TV[/\s-]*([\d.]+)/i);
|
|
4103
|
-
}
|
|
4104
|
-
if (match && match[1]) {
|
|
4105
|
-
version = match[1];
|
|
4106
|
-
var parts = version.split(".");
|
|
4107
|
-
majorVersion = parts[0] ? parseInt(parts[0], 10) : 0;
|
|
4108
|
-
webOSVersion = majorVersion;
|
|
4109
|
-
} else if (chromeVersion > 0) {
|
|
4110
|
-
if (chromeVersion >= 79) {
|
|
4111
|
-
webOSVersion = 6;
|
|
4112
|
-
version = "6.0";
|
|
4113
|
-
majorVersion = 6;
|
|
4114
|
-
} else if (chromeVersion >= 68) {
|
|
4115
|
-
webOSVersion = 5;
|
|
4116
|
-
version = "5.0";
|
|
4117
|
-
majorVersion = 5;
|
|
4118
|
-
} else if (chromeVersion >= 53) {
|
|
4119
|
-
webOSVersion = 4;
|
|
4120
|
-
version = "4.0";
|
|
4121
|
-
majorVersion = 4;
|
|
4122
|
-
} else if (chromeVersion >= 38) {
|
|
4123
|
-
webOSVersion = 3;
|
|
4124
|
-
version = "3.0";
|
|
4125
|
-
majorVersion = 3;
|
|
4126
|
-
} else {
|
|
4127
|
-
webOSVersion = 2;
|
|
4128
|
-
version = "2.0";
|
|
4129
|
-
majorVersion = 2;
|
|
4130
|
-
}
|
|
4131
|
-
} else {
|
|
4132
|
-
version = "Unknown";
|
|
4133
|
-
webOSVersion = void 0;
|
|
4134
|
-
}
|
|
4135
|
-
isLegacyTV = webOSVersion !== void 0 && webOSVersion < 3;
|
|
4136
|
-
} else if (/Tizen/i.test(ua)) {
|
|
4137
|
-
name = "Samsung Tizen";
|
|
4138
|
-
isSmartTV = true;
|
|
4139
|
-
var match1 = ua.match(/Tizen[/\s]*([\d.]+)/i);
|
|
4140
|
-
version = match1 && match1[1] ? match1[1] : "Unknown";
|
|
4141
|
-
if (version !== "Unknown") {
|
|
4142
|
-
var parts1 = version.split(".");
|
|
4143
|
-
majorVersion = parts1[0] ? parseInt(parts1[0], 10) : 0;
|
|
4144
|
-
tizenVersion = majorVersion;
|
|
4145
|
-
}
|
|
4146
|
-
isLegacyTV = tizenVersion !== void 0 && tizenVersion < 3;
|
|
4147
|
-
} else if (/SMART-TV|SmartTV/i.test(ua)) {
|
|
4148
|
-
name = "Smart TV";
|
|
4149
|
-
isSmartTV = true;
|
|
4150
|
-
isLegacyTV = chromeVersion > 0 && chromeVersion < 53;
|
|
4151
|
-
} else if (/NetCast/i.test(ua)) {
|
|
4152
|
-
name = "LG NetCast";
|
|
4153
|
-
isSmartTV = true;
|
|
4154
|
-
isLegacyTV = true;
|
|
4155
|
-
} else if (/BRAVIA/i.test(ua)) {
|
|
4156
|
-
name = "Sony BRAVIA";
|
|
4157
|
-
isSmartTV = true;
|
|
4158
|
-
isLegacyTV = chromeVersion > 0 && chromeVersion < 53;
|
|
4159
|
-
} else {
|
|
4160
|
-
if (chromeVersion > 0) {
|
|
4161
|
-
name = "Chrome";
|
|
4162
|
-
version = chromeVersion.toString();
|
|
4163
|
-
majorVersion = chromeVersion;
|
|
4164
|
-
if (chromeVersion < 50) {
|
|
4165
|
-
supportsModernJS = false;
|
|
4166
|
-
}
|
|
4167
|
-
}
|
|
4168
|
-
if (webkitVersion > 0 && webkitVersion < 600) {
|
|
4169
|
-
supportsModernJS = false;
|
|
4170
|
-
}
|
|
4171
|
-
}
|
|
4172
|
-
if (typeof Promise === "undefined" || typeof Map === "undefined" || typeof Set === "undefined") {
|
|
4173
|
-
supportsModernJS = false;
|
|
4174
|
-
}
|
|
4175
|
-
if (typeof URLSearchParams === "undefined") {
|
|
4176
|
-
supportsModernJS = false;
|
|
4177
|
-
}
|
|
4178
|
-
return {
|
|
4179
|
-
name: name,
|
|
4180
|
-
version: version,
|
|
4181
|
-
majorVersion: majorVersion,
|
|
4182
|
-
isSmartTV: isSmartTV,
|
|
4183
|
-
isLegacyTV: isLegacyTV,
|
|
4184
|
-
platform: platform,
|
|
4185
|
-
supportsModernJS: supportsModernJS,
|
|
4186
|
-
webOSVersion: webOSVersion,
|
|
4187
|
-
tizenVersion: tizenVersion,
|
|
4188
|
-
chromeVersion: chromeVersionNum
|
|
4189
|
-
};
|
|
4190
|
-
}
|
|
4191
|
-
function requiresMediaPipelineResetAfterAds() {
|
|
4192
|
-
var _browser_tizenVersion;
|
|
4193
|
-
var browser = detectBrowser();
|
|
4194
|
-
return browser.name === "Samsung Tizen" && ((_browser_tizenVersion = browser.tizenVersion) !== null && _browser_tizenVersion !== void 0 ? _browser_tizenVersion : 0) >= 5;
|
|
4195
|
-
}
|
|
4196
|
-
function getBrowserConfigOverrides() {
|
|
4197
|
-
var browser = detectBrowser();
|
|
4198
|
-
var overrides = {};
|
|
4199
|
-
if (browser.isSmartTV) {
|
|
4200
|
-
overrides.allowNativeHls = true;
|
|
4201
|
-
overrides.pauseContentDuringAds = true;
|
|
4202
|
-
}
|
|
4203
|
-
return overrides;
|
|
4204
|
-
}
|
|
4205
|
-
function logBrowserInfo() {
|
|
4206
|
-
var debug = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false;
|
|
4207
|
-
if (!debug) return;
|
|
4208
|
-
var browser = detectBrowser();
|
|
4209
|
-
console.log("[StormcloudVideoPlayer] Browser Compatibility Info:", _object_spread_props(_object_spread({
|
|
4210
|
-
browser: "".concat(browser.name, " ").concat(browser.version),
|
|
4211
|
-
platform: browser.platform,
|
|
4212
|
-
isSmartTV: browser.isSmartTV,
|
|
4213
|
-
isLegacyTV: browser.isLegacyTV,
|
|
4214
|
-
supportsModernJS: browser.supportsModernJS
|
|
4215
|
-
}, browser.webOSVersion !== void 0 ? {
|
|
4216
|
-
webOSVersion: browser.webOSVersion
|
|
4217
|
-
} : {}, browser.tizenVersion !== void 0 ? {
|
|
4218
|
-
tizenVersion: browser.tizenVersion
|
|
4219
|
-
} : {}, browser.chromeVersion !== void 0 ? {
|
|
4220
|
-
chromeVersion: browser.chromeVersion
|
|
4221
|
-
} : {}), {
|
|
4222
|
-
userAgent: navigator.userAgent
|
|
4223
|
-
}));
|
|
4224
|
-
}
|
|
4225
4274
|
// src/player/Scte35Parser.ts
|
|
4226
4275
|
function parseCueOutDuration(value) {
|
|
4227
4276
|
var num = parseFloat(value.trim());
|