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
|
@@ -386,6 +386,179 @@ module.exports = __toCommonJS(StormcloudVideoPlayer_exports);
|
|
|
386
386
|
var import_react = __toESM(require("react"), 1);
|
|
387
387
|
// src/sdk/hlsAdPlayer.ts
|
|
388
388
|
var import_hls = __toESM(require("hls.js"), 1);
|
|
389
|
+
// src/utils/browserCompat.ts
|
|
390
|
+
function getChromeVersion(ua) {
|
|
391
|
+
var match = ua.match(/Chrome\/(\d+)/);
|
|
392
|
+
return match && match[1] ? parseInt(match[1], 10) : 0;
|
|
393
|
+
}
|
|
394
|
+
function getWebKitVersion(ua) {
|
|
395
|
+
var match = ua.match(/AppleWebKit\/(\d+)/);
|
|
396
|
+
return match && match[1] ? parseInt(match[1], 10) : 0;
|
|
397
|
+
}
|
|
398
|
+
function getPlatform() {
|
|
399
|
+
var _navigator_userAgentData;
|
|
400
|
+
if ("userAgentData" in navigator && ((_navigator_userAgentData = navigator.userAgentData) === null || _navigator_userAgentData === void 0 ? void 0 : _navigator_userAgentData.platform)) {
|
|
401
|
+
return navigator.userAgentData.platform;
|
|
402
|
+
}
|
|
403
|
+
var ua = navigator.userAgent;
|
|
404
|
+
if (/Mac|iPhone|iPad|iPod/i.test(ua)) {
|
|
405
|
+
return /iPhone|iPad|iPod/i.test(ua) ? "iPhone" : "MacIntel";
|
|
406
|
+
}
|
|
407
|
+
if (/Win/i.test(ua)) {
|
|
408
|
+
return "Win32";
|
|
409
|
+
}
|
|
410
|
+
if (/Linux/i.test(ua)) {
|
|
411
|
+
return /Android/i.test(ua) ? "Linux armv8l" : "Linux x86_64";
|
|
412
|
+
}
|
|
413
|
+
if (/CrOS/i.test(ua)) {
|
|
414
|
+
return "CrOS";
|
|
415
|
+
}
|
|
416
|
+
return navigator.platform || "Unknown";
|
|
417
|
+
}
|
|
418
|
+
function detectBrowser() {
|
|
419
|
+
var ua = navigator.userAgent;
|
|
420
|
+
var platform = getPlatform();
|
|
421
|
+
var name = "Unknown";
|
|
422
|
+
var version = "0";
|
|
423
|
+
var majorVersion = 0;
|
|
424
|
+
var isSmartTV = false;
|
|
425
|
+
var isLegacyTV = false;
|
|
426
|
+
var supportsModernJS = true;
|
|
427
|
+
var webOSVersion;
|
|
428
|
+
var tizenVersion;
|
|
429
|
+
var chromeVersionNum;
|
|
430
|
+
var chromeVersion = getChromeVersion(ua);
|
|
431
|
+
var webkitVersion = getWebKitVersion(ua);
|
|
432
|
+
chromeVersionNum = chromeVersion > 0 ? chromeVersion : void 0;
|
|
433
|
+
if (/Web0S|webOS|LG Browser|LGSTB/i.test(ua)) {
|
|
434
|
+
name = "LG WebOS";
|
|
435
|
+
isSmartTV = true;
|
|
436
|
+
var match = ua.match(/Web0S[/\s]*([\d.]+)/i) || ua.match(/webOS[/\s]*([\d.]+)/i);
|
|
437
|
+
if (!match || !match[1]) {
|
|
438
|
+
match = ua.match(/webOSTV[/\s-]*([\d.]+)/i) || ua.match(/webOS\.TV[/\s-]*([\d.]+)/i);
|
|
439
|
+
}
|
|
440
|
+
if (match && match[1]) {
|
|
441
|
+
version = match[1];
|
|
442
|
+
var parts = version.split(".");
|
|
443
|
+
majorVersion = parts[0] ? parseInt(parts[0], 10) : 0;
|
|
444
|
+
webOSVersion = majorVersion;
|
|
445
|
+
} else if (chromeVersion > 0) {
|
|
446
|
+
if (chromeVersion >= 79) {
|
|
447
|
+
webOSVersion = 6;
|
|
448
|
+
version = "6.0";
|
|
449
|
+
majorVersion = 6;
|
|
450
|
+
} else if (chromeVersion >= 68) {
|
|
451
|
+
webOSVersion = 5;
|
|
452
|
+
version = "5.0";
|
|
453
|
+
majorVersion = 5;
|
|
454
|
+
} else if (chromeVersion >= 53) {
|
|
455
|
+
webOSVersion = 4;
|
|
456
|
+
version = "4.0";
|
|
457
|
+
majorVersion = 4;
|
|
458
|
+
} else if (chromeVersion >= 38) {
|
|
459
|
+
webOSVersion = 3;
|
|
460
|
+
version = "3.0";
|
|
461
|
+
majorVersion = 3;
|
|
462
|
+
} else {
|
|
463
|
+
webOSVersion = 2;
|
|
464
|
+
version = "2.0";
|
|
465
|
+
majorVersion = 2;
|
|
466
|
+
}
|
|
467
|
+
} else {
|
|
468
|
+
version = "Unknown";
|
|
469
|
+
webOSVersion = void 0;
|
|
470
|
+
}
|
|
471
|
+
isLegacyTV = webOSVersion !== void 0 && webOSVersion < 3;
|
|
472
|
+
} else if (/Tizen/i.test(ua)) {
|
|
473
|
+
name = "Samsung Tizen";
|
|
474
|
+
isSmartTV = true;
|
|
475
|
+
var match1 = ua.match(/Tizen[/\s]*([\d.]+)/i);
|
|
476
|
+
version = match1 && match1[1] ? match1[1] : "Unknown";
|
|
477
|
+
if (version !== "Unknown") {
|
|
478
|
+
var parts1 = version.split(".");
|
|
479
|
+
majorVersion = parts1[0] ? parseInt(parts1[0], 10) : 0;
|
|
480
|
+
tizenVersion = majorVersion;
|
|
481
|
+
}
|
|
482
|
+
isLegacyTV = tizenVersion !== void 0 && tizenVersion < 3;
|
|
483
|
+
} else if (/SMART-TV|SmartTV/i.test(ua)) {
|
|
484
|
+
name = "Smart TV";
|
|
485
|
+
isSmartTV = true;
|
|
486
|
+
isLegacyTV = chromeVersion > 0 && chromeVersion < 53;
|
|
487
|
+
} else if (/NetCast/i.test(ua)) {
|
|
488
|
+
name = "LG NetCast";
|
|
489
|
+
isSmartTV = true;
|
|
490
|
+
isLegacyTV = true;
|
|
491
|
+
} else if (/BRAVIA/i.test(ua)) {
|
|
492
|
+
name = "Sony BRAVIA";
|
|
493
|
+
isSmartTV = true;
|
|
494
|
+
isLegacyTV = chromeVersion > 0 && chromeVersion < 53;
|
|
495
|
+
} else {
|
|
496
|
+
if (chromeVersion > 0) {
|
|
497
|
+
name = "Chrome";
|
|
498
|
+
version = chromeVersion.toString();
|
|
499
|
+
majorVersion = chromeVersion;
|
|
500
|
+
if (chromeVersion < 50) {
|
|
501
|
+
supportsModernJS = false;
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
if (webkitVersion > 0 && webkitVersion < 600) {
|
|
505
|
+
supportsModernJS = false;
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
if (typeof Promise === "undefined" || typeof Map === "undefined" || typeof Set === "undefined") {
|
|
509
|
+
supportsModernJS = false;
|
|
510
|
+
}
|
|
511
|
+
if (typeof URLSearchParams === "undefined") {
|
|
512
|
+
supportsModernJS = false;
|
|
513
|
+
}
|
|
514
|
+
return {
|
|
515
|
+
name: name,
|
|
516
|
+
version: version,
|
|
517
|
+
majorVersion: majorVersion,
|
|
518
|
+
isSmartTV: isSmartTV,
|
|
519
|
+
isLegacyTV: isLegacyTV,
|
|
520
|
+
platform: platform,
|
|
521
|
+
supportsModernJS: supportsModernJS,
|
|
522
|
+
webOSVersion: webOSVersion,
|
|
523
|
+
tizenVersion: tizenVersion,
|
|
524
|
+
chromeVersion: chromeVersionNum
|
|
525
|
+
};
|
|
526
|
+
}
|
|
527
|
+
function requiresMediaPipelineResetAfterAds() {
|
|
528
|
+
var _browser_tizenVersion;
|
|
529
|
+
var browser = detectBrowser();
|
|
530
|
+
return browser.name === "Samsung Tizen" && ((_browser_tizenVersion = browser.tizenVersion) !== null && _browser_tizenVersion !== void 0 ? _browser_tizenVersion : 0) >= 5;
|
|
531
|
+
}
|
|
532
|
+
function getBrowserConfigOverrides() {
|
|
533
|
+
var browser = detectBrowser();
|
|
534
|
+
var overrides = {};
|
|
535
|
+
if (browser.isSmartTV) {
|
|
536
|
+
overrides.allowNativeHls = true;
|
|
537
|
+
overrides.pauseContentDuringAds = true;
|
|
538
|
+
}
|
|
539
|
+
return overrides;
|
|
540
|
+
}
|
|
541
|
+
function logBrowserInfo() {
|
|
542
|
+
var debug = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false;
|
|
543
|
+
if (!debug) return;
|
|
544
|
+
var browser = detectBrowser();
|
|
545
|
+
console.log("[StormcloudVideoPlayer] Browser Compatibility Info:", _object_spread_props(_object_spread({
|
|
546
|
+
browser: "".concat(browser.name, " ").concat(browser.version),
|
|
547
|
+
platform: browser.platform,
|
|
548
|
+
isSmartTV: browser.isSmartTV,
|
|
549
|
+
isLegacyTV: browser.isLegacyTV,
|
|
550
|
+
supportsModernJS: browser.supportsModernJS
|
|
551
|
+
}, browser.webOSVersion !== void 0 ? {
|
|
552
|
+
webOSVersion: browser.webOSVersion
|
|
553
|
+
} : {}, browser.tizenVersion !== void 0 ? {
|
|
554
|
+
tizenVersion: browser.tizenVersion
|
|
555
|
+
} : {}, browser.chromeVersion !== void 0 ? {
|
|
556
|
+
chromeVersion: browser.chromeVersion
|
|
557
|
+
} : {}), {
|
|
558
|
+
userAgent: navigator.userAgent
|
|
559
|
+
}));
|
|
560
|
+
}
|
|
561
|
+
// src/sdk/hlsAdPlayer.ts
|
|
389
562
|
var MAX_VAST_WRAPPER_DEPTH = 5;
|
|
390
563
|
function createHlsAdPlayer(contentVideo, options) {
|
|
391
564
|
var _contentVideo_AD_VIDEO_PROP, _contentVideo_AD_CONTAINER_PROP;
|
|
@@ -418,6 +591,7 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
418
591
|
var lastAdProgressPosition = 0;
|
|
419
592
|
var sawDecodedVideoFrame = false;
|
|
420
593
|
var videoFrameCallbackHandle;
|
|
594
|
+
var pendingPlayPromise;
|
|
421
595
|
var trackingFired = {
|
|
422
596
|
impression: false,
|
|
423
597
|
start: false,
|
|
@@ -1221,6 +1395,60 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
1221
1395
|
complete: false
|
|
1222
1396
|
};
|
|
1223
1397
|
}
|
|
1398
|
+
function isRvfcSupported(video) {
|
|
1399
|
+
return typeof video.requestVideoFrameCallback === "function";
|
|
1400
|
+
}
|
|
1401
|
+
function settlePendingPlay() {
|
|
1402
|
+
pendingPlayPromise = void 0;
|
|
1403
|
+
}
|
|
1404
|
+
function startAdPlayback(context) {
|
|
1405
|
+
if (!adVideoElement) return;
|
|
1406
|
+
var playPromise = adVideoElement.play();
|
|
1407
|
+
pendingPlayPromise = playPromise;
|
|
1408
|
+
playPromise.catch(function(error) {
|
|
1409
|
+
if (pendingPlayPromise !== playPromise) {
|
|
1410
|
+
return;
|
|
1411
|
+
}
|
|
1412
|
+
console.error("[HlsAdPlayer] Error starting ".concat(context, ":"), error);
|
|
1413
|
+
handleAdError();
|
|
1414
|
+
}).finally(function() {
|
|
1415
|
+
if (pendingPlayPromise === playPromise) {
|
|
1416
|
+
pendingPlayPromise = void 0;
|
|
1417
|
+
}
|
|
1418
|
+
});
|
|
1419
|
+
}
|
|
1420
|
+
function prepareVideoElementForNewSource() {
|
|
1421
|
+
settlePendingPlay();
|
|
1422
|
+
if (adHls) {
|
|
1423
|
+
adHls.destroy();
|
|
1424
|
+
adHls = void 0;
|
|
1425
|
+
}
|
|
1426
|
+
if (!adVideoElement) return;
|
|
1427
|
+
try {
|
|
1428
|
+
adVideoElement.pause();
|
|
1429
|
+
adVideoElement.removeAttribute("src");
|
|
1430
|
+
adVideoElement.load();
|
|
1431
|
+
} catch (error) {
|
|
1432
|
+
console.warn("[HlsAdPlayer] Error preparing ad video for new source:", error);
|
|
1433
|
+
}
|
|
1434
|
+
}
|
|
1435
|
+
function recreateAdVideoElement() {
|
|
1436
|
+
console.log("[HlsAdPlayer] Recreating ad video element (single-decoder platform)");
|
|
1437
|
+
teardownAdEventListeners();
|
|
1438
|
+
prepareVideoElementForNewSource();
|
|
1439
|
+
if (adVideoElement) {
|
|
1440
|
+
try {
|
|
1441
|
+
adVideoElement.remove();
|
|
1442
|
+
} catch (error) {
|
|
1443
|
+
console.warn("[HlsAdPlayer] Error removing ad video element:", error);
|
|
1444
|
+
}
|
|
1445
|
+
}
|
|
1446
|
+
adVideoElement = createAdVideoElement();
|
|
1447
|
+
adContainerEl === null || adContainerEl === void 0 ? void 0 : adContainerEl.appendChild(adVideoElement);
|
|
1448
|
+
contentVideo[AD_VIDEO_PROP] = adVideoElement;
|
|
1449
|
+
adVideoElement.volume = Math.max(0, Math.min(1, originalVolume));
|
|
1450
|
+
adVideoElement.muted = originalMutedState;
|
|
1451
|
+
}
|
|
1224
1452
|
function loadCurrentAdMedia() {
|
|
1225
1453
|
if (!adVideoElement || !currentAd) {
|
|
1226
1454
|
throw new Error("No ad video element or ad to load");
|
|
@@ -1243,10 +1471,7 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
1243
1471
|
adHls.attachMedia(adVideoElement);
|
|
1244
1472
|
adHls.on(import_hls.default.Events.MANIFEST_PARSED, function() {
|
|
1245
1473
|
console.log("[HlsAdPlayer] HLS manifest parsed, starting playback");
|
|
1246
|
-
|
|
1247
|
-
console.error("[HlsAdPlayer] Error starting ad playback:", error);
|
|
1248
|
-
handleAdError();
|
|
1249
|
-
});
|
|
1474
|
+
startAdPlayback("HLS ad playback");
|
|
1250
1475
|
});
|
|
1251
1476
|
adHls.on(import_hls.default.Events.ERROR, function(_event, data) {
|
|
1252
1477
|
console.error("[HlsAdPlayer] HLS error:", data);
|
|
@@ -1256,10 +1481,7 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
1256
1481
|
});
|
|
1257
1482
|
} else if (isHlsAd && adVideoElement.canPlayType("application/vnd.apple.mpegurl")) {
|
|
1258
1483
|
adVideoElement.src = mediaFile.url;
|
|
1259
|
-
|
|
1260
|
-
console.error("[HlsAdPlayer] Error starting ad playback:", error);
|
|
1261
|
-
handleAdError();
|
|
1262
|
-
});
|
|
1484
|
+
startAdPlayback("native HLS ad playback");
|
|
1263
1485
|
} else if (!isHlsAd && isProgressiveMediaFile(mediaFile)) {
|
|
1264
1486
|
if (adHls) {
|
|
1265
1487
|
adHls.destroy();
|
|
@@ -1267,10 +1489,7 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
1267
1489
|
}
|
|
1268
1490
|
adVideoElement.src = mediaFile.url;
|
|
1269
1491
|
adVideoElement.load();
|
|
1270
|
-
|
|
1271
|
-
console.error("[HlsAdPlayer] Error starting progressive ad playback:", error);
|
|
1272
|
-
handleAdError();
|
|
1273
|
-
});
|
|
1492
|
+
startAdPlayback("progressive ad playback");
|
|
1274
1493
|
} else {
|
|
1275
1494
|
throw new Error("Unsupported ad media file type: ".concat(mediaFile.type));
|
|
1276
1495
|
}
|
|
@@ -1287,6 +1506,13 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
1287
1506
|
trackingFired.impression = true;
|
|
1288
1507
|
console.log("[HlsAdPlayer] Advancing to next pod ad (".concat(podIndex + 1, "/").concat(podAds.length, "): ").concat(currentAd.title, ", duration: ").concat(currentAd.duration, "s"));
|
|
1289
1508
|
}
|
|
1509
|
+
clearStallWatchdog();
|
|
1510
|
+
if (requiresMediaPipelineResetAfterAds()) {
|
|
1511
|
+
recreateAdVideoElement();
|
|
1512
|
+
setupAdEventListeners();
|
|
1513
|
+
} else {
|
|
1514
|
+
prepareVideoElementForNewSource();
|
|
1515
|
+
}
|
|
1290
1516
|
try {
|
|
1291
1517
|
loadCurrentAdMedia();
|
|
1292
1518
|
emit("pod_ad_started", {
|
|
@@ -1398,9 +1624,16 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
1398
1624
|
if (decodedFrames !== void 0 && decodedFrames > 0) {
|
|
1399
1625
|
sawDecodedVideoFrame = true;
|
|
1400
1626
|
markFrameCounterReliable();
|
|
1401
|
-
} else if (
|
|
1402
|
-
|
|
1403
|
-
|
|
1627
|
+
} else if (adVideoElement.currentTime >= BLACKFRAME_MIN_PLAYBACK_S) {
|
|
1628
|
+
var timeAdvancing = adVideoElement.currentTime > lastAdProgressPosition + 0.05;
|
|
1629
|
+
if (isRvfcSupported(adVideoElement) && timeAdvancing) {
|
|
1630
|
+
handleVideoDecodeFailure();
|
|
1631
|
+
return;
|
|
1632
|
+
}
|
|
1633
|
+
if (decodedFrames === 0 && timeAdvancing && isFrameCounterReliable()) {
|
|
1634
|
+
handleVideoDecodeFailure();
|
|
1635
|
+
return;
|
|
1636
|
+
}
|
|
1404
1637
|
}
|
|
1405
1638
|
}
|
|
1406
1639
|
if (adVideoElement.currentTime > lastAdProgressPosition + 0.05) {
|
|
@@ -1417,19 +1650,7 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
1417
1650
|
}, STALL_CHECK_INTERVAL_MS);
|
|
1418
1651
|
}
|
|
1419
1652
|
function releaseAdDecoder() {
|
|
1420
|
-
|
|
1421
|
-
adHls.destroy();
|
|
1422
|
-
adHls = void 0;
|
|
1423
|
-
}
|
|
1424
|
-
if (adVideoElement) {
|
|
1425
|
-
try {
|
|
1426
|
-
adVideoElement.pause();
|
|
1427
|
-
adVideoElement.removeAttribute("src");
|
|
1428
|
-
adVideoElement.load();
|
|
1429
|
-
} catch (error) {
|
|
1430
|
-
console.warn("[HlsAdPlayer] Error releasing ad decoder:", error);
|
|
1431
|
-
}
|
|
1432
|
-
}
|
|
1653
|
+
prepareVideoElementForNewSource();
|
|
1433
1654
|
if (adContainerEl) {
|
|
1434
1655
|
adContainerEl.style.display = "none";
|
|
1435
1656
|
adContainerEl.style.pointerEvents = "none";
|
|
@@ -4000,178 +4221,6 @@ function fetchConsentSignals() {
|
|
|
4000
4221
|
return signals;
|
|
4001
4222
|
});
|
|
4002
4223
|
}
|
|
4003
|
-
// src/utils/browserCompat.ts
|
|
4004
|
-
function getChromeVersion(ua) {
|
|
4005
|
-
var match = ua.match(/Chrome\/(\d+)/);
|
|
4006
|
-
return match && match[1] ? parseInt(match[1], 10) : 0;
|
|
4007
|
-
}
|
|
4008
|
-
function getWebKitVersion(ua) {
|
|
4009
|
-
var match = ua.match(/AppleWebKit\/(\d+)/);
|
|
4010
|
-
return match && match[1] ? parseInt(match[1], 10) : 0;
|
|
4011
|
-
}
|
|
4012
|
-
function getPlatform() {
|
|
4013
|
-
var _navigator_userAgentData;
|
|
4014
|
-
if ("userAgentData" in navigator && ((_navigator_userAgentData = navigator.userAgentData) === null || _navigator_userAgentData === void 0 ? void 0 : _navigator_userAgentData.platform)) {
|
|
4015
|
-
return navigator.userAgentData.platform;
|
|
4016
|
-
}
|
|
4017
|
-
var ua = navigator.userAgent;
|
|
4018
|
-
if (/Mac|iPhone|iPad|iPod/i.test(ua)) {
|
|
4019
|
-
return /iPhone|iPad|iPod/i.test(ua) ? "iPhone" : "MacIntel";
|
|
4020
|
-
}
|
|
4021
|
-
if (/Win/i.test(ua)) {
|
|
4022
|
-
return "Win32";
|
|
4023
|
-
}
|
|
4024
|
-
if (/Linux/i.test(ua)) {
|
|
4025
|
-
return /Android/i.test(ua) ? "Linux armv8l" : "Linux x86_64";
|
|
4026
|
-
}
|
|
4027
|
-
if (/CrOS/i.test(ua)) {
|
|
4028
|
-
return "CrOS";
|
|
4029
|
-
}
|
|
4030
|
-
return navigator.platform || "Unknown";
|
|
4031
|
-
}
|
|
4032
|
-
function detectBrowser() {
|
|
4033
|
-
var ua = navigator.userAgent;
|
|
4034
|
-
var platform = getPlatform();
|
|
4035
|
-
var name = "Unknown";
|
|
4036
|
-
var version = "0";
|
|
4037
|
-
var majorVersion = 0;
|
|
4038
|
-
var isSmartTV = false;
|
|
4039
|
-
var isLegacyTV = false;
|
|
4040
|
-
var supportsModernJS = true;
|
|
4041
|
-
var webOSVersion;
|
|
4042
|
-
var tizenVersion;
|
|
4043
|
-
var chromeVersionNum;
|
|
4044
|
-
var chromeVersion = getChromeVersion(ua);
|
|
4045
|
-
var webkitVersion = getWebKitVersion(ua);
|
|
4046
|
-
chromeVersionNum = chromeVersion > 0 ? chromeVersion : void 0;
|
|
4047
|
-
if (/Web0S|webOS|LG Browser|LGSTB/i.test(ua)) {
|
|
4048
|
-
name = "LG WebOS";
|
|
4049
|
-
isSmartTV = true;
|
|
4050
|
-
var match = ua.match(/Web0S[/\s]*([\d.]+)/i) || ua.match(/webOS[/\s]*([\d.]+)/i);
|
|
4051
|
-
if (!match || !match[1]) {
|
|
4052
|
-
match = ua.match(/webOSTV[/\s-]*([\d.]+)/i) || ua.match(/webOS\.TV[/\s-]*([\d.]+)/i);
|
|
4053
|
-
}
|
|
4054
|
-
if (match && match[1]) {
|
|
4055
|
-
version = match[1];
|
|
4056
|
-
var parts = version.split(".");
|
|
4057
|
-
majorVersion = parts[0] ? parseInt(parts[0], 10) : 0;
|
|
4058
|
-
webOSVersion = majorVersion;
|
|
4059
|
-
} else if (chromeVersion > 0) {
|
|
4060
|
-
if (chromeVersion >= 79) {
|
|
4061
|
-
webOSVersion = 6;
|
|
4062
|
-
version = "6.0";
|
|
4063
|
-
majorVersion = 6;
|
|
4064
|
-
} else if (chromeVersion >= 68) {
|
|
4065
|
-
webOSVersion = 5;
|
|
4066
|
-
version = "5.0";
|
|
4067
|
-
majorVersion = 5;
|
|
4068
|
-
} else if (chromeVersion >= 53) {
|
|
4069
|
-
webOSVersion = 4;
|
|
4070
|
-
version = "4.0";
|
|
4071
|
-
majorVersion = 4;
|
|
4072
|
-
} else if (chromeVersion >= 38) {
|
|
4073
|
-
webOSVersion = 3;
|
|
4074
|
-
version = "3.0";
|
|
4075
|
-
majorVersion = 3;
|
|
4076
|
-
} else {
|
|
4077
|
-
webOSVersion = 2;
|
|
4078
|
-
version = "2.0";
|
|
4079
|
-
majorVersion = 2;
|
|
4080
|
-
}
|
|
4081
|
-
} else {
|
|
4082
|
-
version = "Unknown";
|
|
4083
|
-
webOSVersion = void 0;
|
|
4084
|
-
}
|
|
4085
|
-
isLegacyTV = webOSVersion !== void 0 && webOSVersion < 3;
|
|
4086
|
-
} else if (/Tizen/i.test(ua)) {
|
|
4087
|
-
name = "Samsung Tizen";
|
|
4088
|
-
isSmartTV = true;
|
|
4089
|
-
var match1 = ua.match(/Tizen[/\s]*([\d.]+)/i);
|
|
4090
|
-
version = match1 && match1[1] ? match1[1] : "Unknown";
|
|
4091
|
-
if (version !== "Unknown") {
|
|
4092
|
-
var parts1 = version.split(".");
|
|
4093
|
-
majorVersion = parts1[0] ? parseInt(parts1[0], 10) : 0;
|
|
4094
|
-
tizenVersion = majorVersion;
|
|
4095
|
-
}
|
|
4096
|
-
isLegacyTV = tizenVersion !== void 0 && tizenVersion < 3;
|
|
4097
|
-
} else if (/SMART-TV|SmartTV/i.test(ua)) {
|
|
4098
|
-
name = "Smart TV";
|
|
4099
|
-
isSmartTV = true;
|
|
4100
|
-
isLegacyTV = chromeVersion > 0 && chromeVersion < 53;
|
|
4101
|
-
} else if (/NetCast/i.test(ua)) {
|
|
4102
|
-
name = "LG NetCast";
|
|
4103
|
-
isSmartTV = true;
|
|
4104
|
-
isLegacyTV = true;
|
|
4105
|
-
} else if (/BRAVIA/i.test(ua)) {
|
|
4106
|
-
name = "Sony BRAVIA";
|
|
4107
|
-
isSmartTV = true;
|
|
4108
|
-
isLegacyTV = chromeVersion > 0 && chromeVersion < 53;
|
|
4109
|
-
} else {
|
|
4110
|
-
if (chromeVersion > 0) {
|
|
4111
|
-
name = "Chrome";
|
|
4112
|
-
version = chromeVersion.toString();
|
|
4113
|
-
majorVersion = chromeVersion;
|
|
4114
|
-
if (chromeVersion < 50) {
|
|
4115
|
-
supportsModernJS = false;
|
|
4116
|
-
}
|
|
4117
|
-
}
|
|
4118
|
-
if (webkitVersion > 0 && webkitVersion < 600) {
|
|
4119
|
-
supportsModernJS = false;
|
|
4120
|
-
}
|
|
4121
|
-
}
|
|
4122
|
-
if (typeof Promise === "undefined" || typeof Map === "undefined" || typeof Set === "undefined") {
|
|
4123
|
-
supportsModernJS = false;
|
|
4124
|
-
}
|
|
4125
|
-
if (typeof URLSearchParams === "undefined") {
|
|
4126
|
-
supportsModernJS = false;
|
|
4127
|
-
}
|
|
4128
|
-
return {
|
|
4129
|
-
name: name,
|
|
4130
|
-
version: version,
|
|
4131
|
-
majorVersion: majorVersion,
|
|
4132
|
-
isSmartTV: isSmartTV,
|
|
4133
|
-
isLegacyTV: isLegacyTV,
|
|
4134
|
-
platform: platform,
|
|
4135
|
-
supportsModernJS: supportsModernJS,
|
|
4136
|
-
webOSVersion: webOSVersion,
|
|
4137
|
-
tizenVersion: tizenVersion,
|
|
4138
|
-
chromeVersion: chromeVersionNum
|
|
4139
|
-
};
|
|
4140
|
-
}
|
|
4141
|
-
function requiresMediaPipelineResetAfterAds() {
|
|
4142
|
-
var _browser_tizenVersion;
|
|
4143
|
-
var browser = detectBrowser();
|
|
4144
|
-
return browser.name === "Samsung Tizen" && ((_browser_tizenVersion = browser.tizenVersion) !== null && _browser_tizenVersion !== void 0 ? _browser_tizenVersion : 0) >= 5;
|
|
4145
|
-
}
|
|
4146
|
-
function getBrowserConfigOverrides() {
|
|
4147
|
-
var browser = detectBrowser();
|
|
4148
|
-
var overrides = {};
|
|
4149
|
-
if (browser.isSmartTV) {
|
|
4150
|
-
overrides.allowNativeHls = true;
|
|
4151
|
-
overrides.pauseContentDuringAds = true;
|
|
4152
|
-
}
|
|
4153
|
-
return overrides;
|
|
4154
|
-
}
|
|
4155
|
-
function logBrowserInfo() {
|
|
4156
|
-
var debug = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false;
|
|
4157
|
-
if (!debug) return;
|
|
4158
|
-
var browser = detectBrowser();
|
|
4159
|
-
console.log("[StormcloudVideoPlayer] Browser Compatibility Info:", _object_spread_props(_object_spread({
|
|
4160
|
-
browser: "".concat(browser.name, " ").concat(browser.version),
|
|
4161
|
-
platform: browser.platform,
|
|
4162
|
-
isSmartTV: browser.isSmartTV,
|
|
4163
|
-
isLegacyTV: browser.isLegacyTV,
|
|
4164
|
-
supportsModernJS: browser.supportsModernJS
|
|
4165
|
-
}, browser.webOSVersion !== void 0 ? {
|
|
4166
|
-
webOSVersion: browser.webOSVersion
|
|
4167
|
-
} : {}, browser.tizenVersion !== void 0 ? {
|
|
4168
|
-
tizenVersion: browser.tizenVersion
|
|
4169
|
-
} : {}, browser.chromeVersion !== void 0 ? {
|
|
4170
|
-
chromeVersion: browser.chromeVersion
|
|
4171
|
-
} : {}), {
|
|
4172
|
-
userAgent: navigator.userAgent
|
|
4173
|
-
}));
|
|
4174
|
-
}
|
|
4175
4224
|
// src/player/Scte35Parser.ts
|
|
4176
4225
|
function parseCueOutDuration(value) {
|
|
4177
4226
|
var num = parseFloat(value.trim());
|