stormcloud-video-player 0.8.3 → 0.8.4
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 +3 -1
- package/lib/index.cjs +353 -203
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +36 -2
- package/lib/index.d.ts +36 -2
- package/lib/index.js +294 -204
- package/lib/index.js.map +1 -1
- package/lib/player/StormcloudVideoPlayer.cjs +262 -202
- package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/player/StormcloudVideoPlayer.d.cts +5 -2
- package/lib/players/HlsPlayer.cjs +262 -202
- package/lib/players/HlsPlayer.cjs.map +1 -1
- package/lib/players/HlsPlayer.d.cts +1 -1
- package/lib/players/index.cjs +262 -202
- package/lib/players/index.cjs.map +1 -1
- package/lib/sdk/hlsAdPlayer.d.cts +1 -1
- package/lib/{types-DWVgdqF-.d.cts → types-BmF_60m2.d.cts} +1 -0
- package/lib/ui/StormcloudVideoPlayer.cjs +267 -203
- package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/ui/StormcloudVideoPlayer.d.cts +1 -1
- package/lib/utils/mqttClient.cjs +245 -0
- package/lib/utils/mqttClient.cjs.map +1 -0
- package/lib/utils/mqttClient.d.cts +13 -0
- package/lib/utils/mqttConfig.cjs +141 -0
- package/lib/utils/mqttConfig.cjs.map +1 -0
- package/lib/utils/mqttConfig.d.cts +20 -0
- package/lib/utils/tracking.cjs +182 -170
- package/lib/utils/tracking.cjs.map +1 -1
- package/lib/utils/tracking.d.cts +1 -1
- package/package.json +3 -1
- package/src/certs/emqxsl-ca.crt +22 -0
package/lib/index.js
CHANGED
|
@@ -1355,6 +1355,123 @@ function createPalNonceManager() {
|
|
|
1355
1355
|
}
|
|
1356
1356
|
};
|
|
1357
1357
|
}
|
|
1358
|
+
// src/utils/mqttConfig.ts
|
|
1359
|
+
var MQTT_CA_CERT_FILE = "src/certs/emqxsl-ca.crt";
|
|
1360
|
+
var DEFAULT_MQTT_CONFIG = {
|
|
1361
|
+
enabled: true,
|
|
1362
|
+
brokerAddress: "vecbae77.ala.us-east-1.emqxsl.com",
|
|
1363
|
+
brokerPort: 8883,
|
|
1364
|
+
wsPort: 8084,
|
|
1365
|
+
username: "for-sonifi",
|
|
1366
|
+
password: "sonifi-mqtt",
|
|
1367
|
+
topicPrefix: "adstorm/players",
|
|
1368
|
+
qos: 1
|
|
1369
|
+
};
|
|
1370
|
+
var mqttConfig = _object_spread({}, DEFAULT_MQTT_CONFIG);
|
|
1371
|
+
function applyMQTTConfig(overrides) {
|
|
1372
|
+
Object.assign(mqttConfig, overrides);
|
|
1373
|
+
}
|
|
1374
|
+
function isMQTTEnabled() {
|
|
1375
|
+
return mqttConfig.enabled;
|
|
1376
|
+
}
|
|
1377
|
+
function buildMQTTBrokerUrl() {
|
|
1378
|
+
if (mqttConfig.brokerUrl) return mqttConfig.brokerUrl;
|
|
1379
|
+
return "wss://".concat(mqttConfig.brokerAddress, ":").concat(mqttConfig.wsPort, "/mqtt");
|
|
1380
|
+
}
|
|
1381
|
+
function buildPlayerTopic(licenseKey, channel) {
|
|
1382
|
+
return "".concat(mqttConfig.topicPrefix, "/").concat(licenseKey, "/").concat(channel);
|
|
1383
|
+
}
|
|
1384
|
+
// src/utils/mqttClient.ts
|
|
1385
|
+
import mqtt from "mqtt";
|
|
1386
|
+
var LOG = "[StormcloudVideoPlayer][MQTT]";
|
|
1387
|
+
var client = null;
|
|
1388
|
+
var status = "disconnected";
|
|
1389
|
+
function getMQTTStatus() {
|
|
1390
|
+
return status;
|
|
1391
|
+
}
|
|
1392
|
+
function isMQTTConnected() {
|
|
1393
|
+
return status === "connected" && client !== null && client.connected;
|
|
1394
|
+
}
|
|
1395
|
+
function isMQTTConfigured() {
|
|
1396
|
+
return isMQTTEnabled();
|
|
1397
|
+
}
|
|
1398
|
+
function configureMQTT(overrides) {
|
|
1399
|
+
applyMQTTConfig(overrides);
|
|
1400
|
+
disconnectMQTT();
|
|
1401
|
+
}
|
|
1402
|
+
function initMQTTClient() {
|
|
1403
|
+
if (client || !isMQTTEnabled()) return;
|
|
1404
|
+
var url = buildMQTTBrokerUrl();
|
|
1405
|
+
status = "connecting";
|
|
1406
|
+
var clientId = "stormcloud-vp-".concat(Math.random().toString(36).slice(2, 9));
|
|
1407
|
+
try {
|
|
1408
|
+
client = mqtt.connect(url, {
|
|
1409
|
+
clientId: clientId,
|
|
1410
|
+
username: mqttConfig.username,
|
|
1411
|
+
password: mqttConfig.password,
|
|
1412
|
+
keepalive: 60,
|
|
1413
|
+
clean: true,
|
|
1414
|
+
reconnectPeriod: 5e3,
|
|
1415
|
+
connectTimeout: 1e4,
|
|
1416
|
+
queueQoSZero: false
|
|
1417
|
+
});
|
|
1418
|
+
} catch (err) {
|
|
1419
|
+
status = "error";
|
|
1420
|
+
console.warn("".concat(LOG, " connect() threw:"), err);
|
|
1421
|
+
return;
|
|
1422
|
+
}
|
|
1423
|
+
client.on("connect", function() {
|
|
1424
|
+
status = "connected";
|
|
1425
|
+
console.info("".concat(LOG, " connected to ").concat(url));
|
|
1426
|
+
});
|
|
1427
|
+
client.on("reconnect", function() {
|
|
1428
|
+
status = "connecting";
|
|
1429
|
+
console.info("".concat(LOG, " reconnecting…"));
|
|
1430
|
+
});
|
|
1431
|
+
client.on("offline", function() {
|
|
1432
|
+
status = "disconnected";
|
|
1433
|
+
console.warn("".concat(LOG, " offline"));
|
|
1434
|
+
});
|
|
1435
|
+
client.on("error", function(err) {
|
|
1436
|
+
status = "error";
|
|
1437
|
+
console.warn("".concat(LOG, " error:"), err.message);
|
|
1438
|
+
});
|
|
1439
|
+
client.on("close", function() {
|
|
1440
|
+
if (status === "connected") {
|
|
1441
|
+
status = "disconnected";
|
|
1442
|
+
}
|
|
1443
|
+
});
|
|
1444
|
+
}
|
|
1445
|
+
function ensureMQTTClient() {
|
|
1446
|
+
if (isMQTTEnabled() && !client) {
|
|
1447
|
+
initMQTTClient();
|
|
1448
|
+
}
|
|
1449
|
+
}
|
|
1450
|
+
function publishMQTT(topic, payload) {
|
|
1451
|
+
if (!isMQTTEnabled()) {
|
|
1452
|
+
return false;
|
|
1453
|
+
}
|
|
1454
|
+
ensureMQTTClient();
|
|
1455
|
+
if (!client) {
|
|
1456
|
+
return false;
|
|
1457
|
+
}
|
|
1458
|
+
try {
|
|
1459
|
+
client.publish(topic, JSON.stringify(payload), {
|
|
1460
|
+
qos: mqttConfig.qos
|
|
1461
|
+
});
|
|
1462
|
+
return true;
|
|
1463
|
+
} catch (err) {
|
|
1464
|
+
console.warn("".concat(LOG, " publish failed on ").concat(topic, ":"), err);
|
|
1465
|
+
return false;
|
|
1466
|
+
}
|
|
1467
|
+
}
|
|
1468
|
+
function disconnectMQTT() {
|
|
1469
|
+
if (client) {
|
|
1470
|
+
client.end(true);
|
|
1471
|
+
client = null;
|
|
1472
|
+
status = "disconnected";
|
|
1473
|
+
}
|
|
1474
|
+
}
|
|
1358
1475
|
// src/utils/tracking.ts
|
|
1359
1476
|
var cachedBrowserId = null;
|
|
1360
1477
|
function getClientInfo() {
|
|
@@ -1501,7 +1618,7 @@ function getClientInfo() {
|
|
|
1501
1618
|
}
|
|
1502
1619
|
function getBrowserID(clientInfo) {
|
|
1503
1620
|
return _async_to_generator(function() {
|
|
1504
|
-
var fingerprintString, encodedData, utf8, buffer, i, hashBuffer,
|
|
1621
|
+
var _crypto_subtle, fingerprintString, encodedData, utf8, buffer, i, hashBuffer, hashHex, unused, hash, i1, char, fallbackHash, timestamp, random;
|
|
1505
1622
|
return _ts_generator(this, function(_state) {
|
|
1506
1623
|
switch(_state.label){
|
|
1507
1624
|
case 0:
|
|
@@ -1512,7 +1629,7 @@ function getBrowserID(clientInfo) {
|
|
|
1512
1629
|
];
|
|
1513
1630
|
}
|
|
1514
1631
|
fingerprintString = JSON.stringify(clientInfo);
|
|
1515
|
-
if (!(typeof crypto !== "undefined" && crypto.subtle
|
|
1632
|
+
if (!(typeof crypto !== "undefined" && ((_crypto_subtle = crypto.subtle) === null || _crypto_subtle === void 0 ? void 0 : _crypto_subtle.digest))) return [
|
|
1516
1633
|
3,
|
|
1517
1634
|
5
|
|
1518
1635
|
];
|
|
@@ -1550,8 +1667,7 @@ function getBrowserID(clientInfo) {
|
|
|
1550
1667
|
];
|
|
1551
1668
|
case 3:
|
|
1552
1669
|
hashBuffer = _state.sent();
|
|
1553
|
-
|
|
1554
|
-
hashHex = hashArray.map(function(b) {
|
|
1670
|
+
hashHex = Array.from(new Uint8Array(hashBuffer)).map(function(b) {
|
|
1555
1671
|
return b.toString(16).padStart(2, "0");
|
|
1556
1672
|
}).join("");
|
|
1557
1673
|
cachedBrowserId = hashHex;
|
|
@@ -1560,8 +1676,8 @@ function getBrowserID(clientInfo) {
|
|
|
1560
1676
|
hashHex
|
|
1561
1677
|
];
|
|
1562
1678
|
case 4:
|
|
1563
|
-
|
|
1564
|
-
console.warn("[StormcloudVideoPlayer] crypto.subtle
|
|
1679
|
+
unused = _state.sent();
|
|
1680
|
+
console.warn("[StormcloudVideoPlayer] crypto.subtle not supported, using fallback hash");
|
|
1565
1681
|
return [
|
|
1566
1682
|
3,
|
|
1567
1683
|
5
|
|
@@ -1585,177 +1701,91 @@ function getBrowserID(clientInfo) {
|
|
|
1585
1701
|
});
|
|
1586
1702
|
})();
|
|
1587
1703
|
}
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
var HEARTBEAT_URL = "".concat(PLAYER_TRACKING_BASE_URL, "/heartbeat");
|
|
1591
|
-
var IMPRESSIONS_URL = "".concat(PLAYER_TRACKING_BASE_URL, "/impressions/ingest");
|
|
1592
|
-
function buildHeaders(licenseKey) {
|
|
1593
|
-
var headers = {
|
|
1594
|
-
"Content-Type": "application/json"
|
|
1595
|
-
};
|
|
1596
|
-
if (licenseKey) {
|
|
1597
|
-
headers["Authorization"] = "Bearer ".concat(licenseKey);
|
|
1598
|
-
}
|
|
1599
|
-
return headers;
|
|
1704
|
+
function canPublish(licenseKey) {
|
|
1705
|
+
return Boolean(isMQTTEnabled() && licenseKey);
|
|
1600
1706
|
}
|
|
1601
|
-
function
|
|
1707
|
+
function buildPlayerMetricEvent() {
|
|
1602
1708
|
return _async_to_generator(function() {
|
|
1603
|
-
var
|
|
1604
|
-
return _ts_generator(this, function(_state) {
|
|
1605
|
-
switch(_state.label){
|
|
1606
|
-
case 0:
|
|
1607
|
-
return [
|
|
1608
|
-
4,
|
|
1609
|
-
fetch(TRACK_URL, {
|
|
1610
|
-
method: "POST",
|
|
1611
|
-
headers: buildHeaders(licenseKey),
|
|
1612
|
-
body: JSON.stringify(body)
|
|
1613
|
-
})
|
|
1614
|
-
];
|
|
1615
|
-
case 1:
|
|
1616
|
-
response = _state.sent();
|
|
1617
|
-
if (!response.ok) {
|
|
1618
|
-
throw new Error("HTTP error! status: ".concat(response.status));
|
|
1619
|
-
}
|
|
1620
|
-
return [
|
|
1621
|
-
4,
|
|
1622
|
-
response.json()
|
|
1623
|
-
];
|
|
1624
|
-
case 2:
|
|
1625
|
-
_state.sent();
|
|
1626
|
-
return [
|
|
1627
|
-
2
|
|
1628
|
-
];
|
|
1629
|
-
}
|
|
1630
|
-
});
|
|
1631
|
-
})();
|
|
1632
|
-
}
|
|
1633
|
-
function postJson(url, licenseKey, body) {
|
|
1634
|
-
return _async_to_generator(function() {
|
|
1635
|
-
var response;
|
|
1636
|
-
return _ts_generator(this, function(_state) {
|
|
1637
|
-
switch(_state.label){
|
|
1638
|
-
case 0:
|
|
1639
|
-
return [
|
|
1640
|
-
4,
|
|
1641
|
-
fetch(url, {
|
|
1642
|
-
method: "POST",
|
|
1643
|
-
headers: buildHeaders(licenseKey),
|
|
1644
|
-
body: JSON.stringify(body)
|
|
1645
|
-
})
|
|
1646
|
-
];
|
|
1647
|
-
case 1:
|
|
1648
|
-
response = _state.sent();
|
|
1649
|
-
if (!response.ok) {
|
|
1650
|
-
throw new Error("HTTP error! status: ".concat(response.status));
|
|
1651
|
-
}
|
|
1652
|
-
return [
|
|
1653
|
-
4,
|
|
1654
|
-
response.json()
|
|
1655
|
-
];
|
|
1656
|
-
case 2:
|
|
1657
|
-
_state.sent();
|
|
1658
|
-
return [
|
|
1659
|
-
2
|
|
1660
|
-
];
|
|
1661
|
-
}
|
|
1662
|
-
});
|
|
1663
|
-
})();
|
|
1664
|
-
}
|
|
1665
|
-
function buildPlayerMetricEvent(_0) {
|
|
1666
|
-
return _async_to_generator(function(licenseKey) {
|
|
1667
|
-
var context, flags, _flags_captureAt, clientInfo, browserId, captureAt;
|
|
1709
|
+
var context, flags, _flags_captureAt, _flags_adLoaded, _flags_adDetect, clientInfo, playerId, captureAt;
|
|
1668
1710
|
var _arguments = arguments;
|
|
1669
1711
|
return _ts_generator(this, function(_state) {
|
|
1670
1712
|
switch(_state.label){
|
|
1671
1713
|
case 0:
|
|
1672
|
-
context = _arguments.length >
|
|
1714
|
+
context = _arguments.length > 0 && _arguments[0] !== void 0 ? _arguments[0] : {}, flags = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {};
|
|
1673
1715
|
clientInfo = getClientInfo();
|
|
1674
1716
|
return [
|
|
1675
1717
|
4,
|
|
1676
1718
|
getBrowserID(clientInfo)
|
|
1677
1719
|
];
|
|
1678
1720
|
case 1:
|
|
1679
|
-
|
|
1721
|
+
playerId = _state.sent();
|
|
1680
1722
|
captureAt = (_flags_captureAt = flags.captureAt) !== null && _flags_captureAt !== void 0 ? _flags_captureAt : /* @__PURE__ */ new Date().toISOString();
|
|
1681
1723
|
return [
|
|
1682
1724
|
2,
|
|
1683
|
-
{
|
|
1684
|
-
player_id:
|
|
1685
|
-
browserId: browserId,
|
|
1725
|
+
_object_spread({
|
|
1726
|
+
player_id: playerId,
|
|
1686
1727
|
device_type: clientInfo.deviceType,
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
timestamp: captureAt
|
|
1695
|
-
}
|
|
1728
|
+
os: clientInfo.os.toLowerCase(),
|
|
1729
|
+
ad_loaded: (_flags_adLoaded = flags.adLoaded) !== null && _flags_adLoaded !== void 0 ? _flags_adLoaded : false,
|
|
1730
|
+
ad_detect: (_flags_adDetect = flags.adDetect) !== null && _flags_adDetect !== void 0 ? _flags_adDetect : false,
|
|
1731
|
+
capture_at: captureAt
|
|
1732
|
+
}, context.inputStreamType ? {
|
|
1733
|
+
input_stream_type: context.inputStreamType
|
|
1734
|
+
} : {})
|
|
1696
1735
|
];
|
|
1697
1736
|
}
|
|
1698
1737
|
});
|
|
1699
1738
|
}).apply(this, arguments);
|
|
1700
1739
|
}
|
|
1740
|
+
function publishTracking(licenseKey, channel, body) {
|
|
1741
|
+
ensureMQTTClient();
|
|
1742
|
+
publishMQTT(buildPlayerTopic(licenseKey, channel), body);
|
|
1743
|
+
}
|
|
1701
1744
|
function sendInitialTracking(_0) {
|
|
1702
1745
|
return _async_to_generator(function(licenseKey) {
|
|
1703
|
-
var context,
|
|
1746
|
+
var context, metricEvent, error;
|
|
1704
1747
|
var _arguments = arguments;
|
|
1705
1748
|
return _ts_generator(this, function(_state) {
|
|
1706
1749
|
switch(_state.label){
|
|
1707
1750
|
case 0:
|
|
1708
1751
|
context = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {};
|
|
1752
|
+
if (!canPublish(licenseKey)) return [
|
|
1753
|
+
2
|
|
1754
|
+
];
|
|
1709
1755
|
_state.label = 1;
|
|
1710
1756
|
case 1:
|
|
1711
1757
|
_state.trys.push([
|
|
1712
1758
|
1,
|
|
1713
|
-
|
|
1759
|
+
3,
|
|
1714
1760
|
,
|
|
1715
|
-
|
|
1761
|
+
4
|
|
1716
1762
|
]);
|
|
1717
|
-
clientInfo = getClientInfo();
|
|
1718
|
-
return [
|
|
1719
|
-
4,
|
|
1720
|
-
getBrowserID(clientInfo)
|
|
1721
|
-
];
|
|
1722
|
-
case 2:
|
|
1723
|
-
browserId = _state.sent();
|
|
1724
|
-
trackingData = _object_spread({
|
|
1725
|
-
browserId: browserId
|
|
1726
|
-
}, clientInfo);
|
|
1727
1763
|
return [
|
|
1728
1764
|
4,
|
|
1729
|
-
|
|
1730
|
-
|
|
1731
|
-
|
|
1732
|
-
player_id: browserId,
|
|
1733
|
-
device_type: clientInfo.deviceType,
|
|
1734
|
-
input_stream_type: context.inputStreamType,
|
|
1735
|
-
os: clientInfo.os,
|
|
1736
|
-
ad_loaded: false,
|
|
1737
|
-
ad_detect: false,
|
|
1738
|
-
license_key: licenseKey,
|
|
1739
|
-
capture_at: /* @__PURE__ */ new Date().toISOString()
|
|
1740
|
-
}
|
|
1741
|
-
],
|
|
1742
|
-
trackingData: trackingData
|
|
1765
|
+
buildPlayerMetricEvent(context, {
|
|
1766
|
+
adLoaded: false,
|
|
1767
|
+
adDetect: false
|
|
1743
1768
|
})
|
|
1744
1769
|
];
|
|
1745
|
-
case
|
|
1746
|
-
_state.sent();
|
|
1770
|
+
case 2:
|
|
1771
|
+
metricEvent = _state.sent();
|
|
1772
|
+
publishTracking(licenseKey, "metrics", {
|
|
1773
|
+
events: [
|
|
1774
|
+
metricEvent
|
|
1775
|
+
]
|
|
1776
|
+
});
|
|
1747
1777
|
return [
|
|
1748
1778
|
3,
|
|
1749
|
-
|
|
1779
|
+
4
|
|
1750
1780
|
];
|
|
1751
|
-
case
|
|
1781
|
+
case 3:
|
|
1752
1782
|
error = _state.sent();
|
|
1753
1783
|
console.error("[StormcloudVideoPlayer] Error sending initial tracking data:", error);
|
|
1754
1784
|
return [
|
|
1755
1785
|
3,
|
|
1756
|
-
|
|
1786
|
+
4
|
|
1757
1787
|
];
|
|
1758
|
-
case
|
|
1788
|
+
case 4:
|
|
1759
1789
|
return [
|
|
1760
1790
|
2
|
|
1761
1791
|
];
|
|
@@ -1859,53 +1889,48 @@ function sendAdImpressionTracking(_0, _1) {
|
|
|
1859
1889
|
switch(_state.label){
|
|
1860
1890
|
case 0:
|
|
1861
1891
|
context = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : {};
|
|
1892
|
+
if (!canPublish(licenseKey)) return [
|
|
1893
|
+
2
|
|
1894
|
+
];
|
|
1862
1895
|
_state.label = 1;
|
|
1863
1896
|
case 1:
|
|
1864
1897
|
_state.trys.push([
|
|
1865
1898
|
1,
|
|
1866
|
-
|
|
1899
|
+
3,
|
|
1867
1900
|
,
|
|
1868
|
-
|
|
1901
|
+
4
|
|
1869
1902
|
]);
|
|
1870
1903
|
return [
|
|
1871
1904
|
4,
|
|
1872
|
-
buildPlayerMetricEvent(
|
|
1905
|
+
buildPlayerMetricEvent(context, {
|
|
1873
1906
|
captureAt: adImpressionInfo.timestamp
|
|
1874
1907
|
})
|
|
1875
1908
|
];
|
|
1876
1909
|
case 2:
|
|
1877
1910
|
metricEvent = _state.sent();
|
|
1878
|
-
|
|
1879
|
-
|
|
1880
|
-
|
|
1881
|
-
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
capture_at: adImpressionInfo.timestamp
|
|
1890
|
-
}
|
|
1891
|
-
]
|
|
1892
|
-
})
|
|
1893
|
-
])
|
|
1894
|
-
];
|
|
1895
|
-
case 3:
|
|
1896
|
-
_state.sent();
|
|
1911
|
+
publishTracking(licenseKey, "heartbeat", metricEvent);
|
|
1912
|
+
publishTracking(licenseKey, "impressions", {
|
|
1913
|
+
events: [
|
|
1914
|
+
{
|
|
1915
|
+
player_id: metricEvent.player_id,
|
|
1916
|
+
ad_played_count: 1,
|
|
1917
|
+
ad_url: adImpressionInfo.adUrl,
|
|
1918
|
+
capture_at: adImpressionInfo.timestamp
|
|
1919
|
+
}
|
|
1920
|
+
]
|
|
1921
|
+
});
|
|
1897
1922
|
return [
|
|
1898
1923
|
3,
|
|
1899
|
-
|
|
1924
|
+
4
|
|
1900
1925
|
];
|
|
1901
|
-
case
|
|
1926
|
+
case 3:
|
|
1902
1927
|
error = _state.sent();
|
|
1903
1928
|
console.error("[StormcloudVideoPlayer] Error sending ad impression tracking:", error);
|
|
1904
1929
|
return [
|
|
1905
1930
|
3,
|
|
1906
|
-
|
|
1931
|
+
4
|
|
1907
1932
|
];
|
|
1908
|
-
case
|
|
1933
|
+
case 4:
|
|
1909
1934
|
return [
|
|
1910
1935
|
2
|
|
1911
1936
|
];
|
|
@@ -1921,38 +1946,36 @@ function sendHeartbeat(_0) {
|
|
|
1921
1946
|
switch(_state.label){
|
|
1922
1947
|
case 0:
|
|
1923
1948
|
context = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {}, flags = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : {};
|
|
1949
|
+
if (!canPublish(licenseKey)) return [
|
|
1950
|
+
2
|
|
1951
|
+
];
|
|
1924
1952
|
_state.label = 1;
|
|
1925
1953
|
case 1:
|
|
1926
1954
|
_state.trys.push([
|
|
1927
1955
|
1,
|
|
1928
|
-
|
|
1956
|
+
3,
|
|
1929
1957
|
,
|
|
1930
|
-
|
|
1958
|
+
4
|
|
1931
1959
|
]);
|
|
1932
1960
|
return [
|
|
1933
1961
|
4,
|
|
1934
|
-
buildPlayerMetricEvent(
|
|
1962
|
+
buildPlayerMetricEvent(context, flags)
|
|
1935
1963
|
];
|
|
1936
1964
|
case 2:
|
|
1937
1965
|
heartbeatData = _state.sent();
|
|
1938
|
-
|
|
1939
|
-
4,
|
|
1940
|
-
postJson(HEARTBEAT_URL, licenseKey, heartbeatData)
|
|
1941
|
-
];
|
|
1942
|
-
case 3:
|
|
1943
|
-
_state.sent();
|
|
1966
|
+
publishTracking(licenseKey, "heartbeat", heartbeatData);
|
|
1944
1967
|
return [
|
|
1945
1968
|
3,
|
|
1946
|
-
|
|
1969
|
+
4
|
|
1947
1970
|
];
|
|
1948
|
-
case
|
|
1971
|
+
case 3:
|
|
1949
1972
|
error = _state.sent();
|
|
1950
1973
|
console.error("[StormcloudVideoPlayer] Error sending heartbeat:", error);
|
|
1951
1974
|
return [
|
|
1952
1975
|
3,
|
|
1953
|
-
|
|
1976
|
+
4
|
|
1954
1977
|
];
|
|
1955
|
-
case
|
|
1978
|
+
case 4:
|
|
1956
1979
|
return [
|
|
1957
1980
|
2
|
|
1958
1981
|
];
|
|
@@ -2601,7 +2624,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
2601
2624
|
var _level_details, _level_details1;
|
|
2602
2625
|
return (level === null || level === void 0 ? void 0 : (_level_details = level.details) === null || _level_details === void 0 ? void 0 : _level_details.live) === true || (level === null || level === void 0 ? void 0 : (_level_details1 = level.details) === null || _level_details1 === void 0 ? void 0 : _level_details1.type) === "LIVE";
|
|
2603
2626
|
})) !== null && _ref !== void 0 ? _ref : false;
|
|
2604
|
-
if (!this.isLiveStream && this.vmapBreaks.length === 0 && this.apiVastTagUrl) {
|
|
2627
|
+
if (!this.isVmapEnabled() && !this.isLiveStream && this.vmapBreaks.length === 0 && this.apiVastTagUrl) {
|
|
2605
2628
|
prerollKey = "synthetic-vod-preroll";
|
|
2606
2629
|
if (!this.consumedVmapBreakIds.has(prerollKey)) {
|
|
2607
2630
|
this.vmapBreaks = [
|
|
@@ -3186,12 +3209,14 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
3186
3209
|
_this.palNonce.sendPlaybackStart();
|
|
3187
3210
|
}
|
|
3188
3211
|
});
|
|
3189
|
-
this.
|
|
3212
|
+
this.endedHandler = function() {
|
|
3190
3213
|
if (_this.palPlaybackStarted) {
|
|
3191
3214
|
_this.palPlaybackStarted = false;
|
|
3192
3215
|
_this.palNonce.sendPlaybackEnd();
|
|
3193
3216
|
}
|
|
3194
|
-
|
|
3217
|
+
_this.onVideoEnded();
|
|
3218
|
+
};
|
|
3219
|
+
this.video.addEventListener("ended", this.endedHandler);
|
|
3195
3220
|
this.video.addEventListener("mousedown", function(e) {
|
|
3196
3221
|
_this.palNonce.sendAdTouch(e);
|
|
3197
3222
|
});
|
|
@@ -4513,6 +4538,13 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
4513
4538
|
}
|
|
4514
4539
|
}
|
|
4515
4540
|
},
|
|
4541
|
+
{
|
|
4542
|
+
key: "isVmapEnabled",
|
|
4543
|
+
value: function isVmapEnabled() {
|
|
4544
|
+
var _this_config_vmapUrl;
|
|
4545
|
+
return !!(this.config.isVmap && ((_this_config_vmapUrl = this.config.vmapUrl) === null || _this_config_vmapUrl === void 0 ? void 0 : _this_config_vmapUrl.trim()));
|
|
4546
|
+
}
|
|
4547
|
+
},
|
|
4516
4548
|
{
|
|
4517
4549
|
key: "fetchAdConfiguration",
|
|
4518
4550
|
value: function fetchAdConfiguration() {
|
|
@@ -4521,7 +4553,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
4521
4553
|
return _ts_generator(this, function(_state) {
|
|
4522
4554
|
switch(_state.label){
|
|
4523
4555
|
case 0:
|
|
4524
|
-
if (!this.
|
|
4556
|
+
if (!this.isVmapEnabled()) return [
|
|
4525
4557
|
3,
|
|
4526
4558
|
2
|
|
4527
4559
|
];
|
|
@@ -4531,7 +4563,12 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
4531
4563
|
];
|
|
4532
4564
|
case 1:
|
|
4533
4565
|
_state.sent();
|
|
4534
|
-
|
|
4566
|
+
if (this.config.debugAdTiming) {
|
|
4567
|
+
console.log("[StormcloudVideoPlayer] VMAP mode enabled");
|
|
4568
|
+
}
|
|
4569
|
+
return [
|
|
4570
|
+
2
|
|
4571
|
+
];
|
|
4535
4572
|
case 2:
|
|
4536
4573
|
vastMode = this.config.vastMode || "default";
|
|
4537
4574
|
if (this.config.debugAdTiming) {
|
|
@@ -4699,7 +4736,16 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
4699
4736
|
}
|
|
4700
4737
|
return [];
|
|
4701
4738
|
}
|
|
4702
|
-
var
|
|
4739
|
+
var VMAP_NS = "http://www.iab.net/videosuite/vmap";
|
|
4740
|
+
var adBreakNodes = Array.from(doc.getElementsByTagNameNS(VMAP_NS, "AdBreak"));
|
|
4741
|
+
if (adBreakNodes.length === 0) {
|
|
4742
|
+
adBreakNodes = Array.from(doc.querySelectorAll("AdBreak, vmap\\:AdBreak"));
|
|
4743
|
+
}
|
|
4744
|
+
if (adBreakNodes.length === 0) {
|
|
4745
|
+
adBreakNodes = Array.from(doc.getElementsByTagName("*")).filter(function(el) {
|
|
4746
|
+
return el.localName === "AdBreak";
|
|
4747
|
+
});
|
|
4748
|
+
}
|
|
4703
4749
|
var parsed = [];
|
|
4704
4750
|
adBreakNodes.forEach(function(node, index) {
|
|
4705
4751
|
var timeOffsetRaw = (node.getAttribute("timeOffset") || "").trim();
|
|
@@ -4707,7 +4753,11 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
4707
4753
|
if (startTimeMs == null) {
|
|
4708
4754
|
return;
|
|
4709
4755
|
}
|
|
4710
|
-
var adTagNode = node.
|
|
4756
|
+
var adTagNode = node.getElementsByTagNameNS(VMAP_NS, "AdTagURI")[0];
|
|
4757
|
+
if (!adTagNode) {
|
|
4758
|
+
var _node_querySelector;
|
|
4759
|
+
adTagNode = (_node_querySelector = node.querySelector("AdTagURI, vmap\\:AdTagURI")) !== null && _node_querySelector !== void 0 ? _node_querySelector : void 0;
|
|
4760
|
+
}
|
|
4711
4761
|
var adTagUrl = ((adTagNode === null || adTagNode === void 0 ? void 0 : adTagNode.textContent) || "").trim();
|
|
4712
4762
|
if (!adTagUrl) {
|
|
4713
4763
|
return;
|
|
@@ -6264,23 +6314,49 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
6264
6314
|
key: "onTimeUpdate",
|
|
6265
6315
|
value: function onTimeUpdate(currentTimeSec) {
|
|
6266
6316
|
var _this = this;
|
|
6317
|
+
if (!this.isVmapEnabled() || this.vmapBreaks.length === 0) {
|
|
6318
|
+
return;
|
|
6319
|
+
}
|
|
6267
6320
|
if (this.adPlayer.isAdPlaying() || this.inAdBreak) return;
|
|
6268
6321
|
var nowMs = currentTimeSec * 1e3;
|
|
6269
6322
|
var breakToPlay = this.findBreakForTime(nowMs);
|
|
6270
6323
|
if (breakToPlay) {
|
|
6271
|
-
void this.
|
|
6324
|
+
void this.handleVmapAdBreak(breakToPlay, nowMs).catch(function(error) {
|
|
6272
6325
|
if (_this.config.debugAdTiming) {
|
|
6273
|
-
console.warn("[StormcloudVideoPlayer]
|
|
6326
|
+
console.warn("[StormcloudVideoPlayer] VMAP ad break failed gracefully:", error);
|
|
6274
6327
|
}
|
|
6275
6328
|
});
|
|
6276
6329
|
}
|
|
6277
6330
|
}
|
|
6278
6331
|
},
|
|
6279
6332
|
{
|
|
6280
|
-
key: "
|
|
6281
|
-
value: function
|
|
6333
|
+
key: "onVideoEnded",
|
|
6334
|
+
value: function onVideoEnded() {
|
|
6335
|
+
var _this = this;
|
|
6336
|
+
if (!this.isVmapEnabled() || this.vmapBreaks.length === 0) {
|
|
6337
|
+
return;
|
|
6338
|
+
}
|
|
6339
|
+
if (this.adPlayer.isAdPlaying() || this.inAdBreak) {
|
|
6340
|
+
return;
|
|
6341
|
+
}
|
|
6342
|
+
var durationMs = Number.isFinite(this.video.duration) ? Math.floor(this.video.duration * 1e3) : 0;
|
|
6343
|
+
var postroll = this.vmapBreaks.find(function(b) {
|
|
6344
|
+
return b.startTimeMs === -1 && !_this.consumedVmapBreakIds.has(_this.getAdBreakKey(b));
|
|
6345
|
+
});
|
|
6346
|
+
if (postroll) {
|
|
6347
|
+
void this.handleVmapAdBreak(postroll, durationMs).catch(function(error) {
|
|
6348
|
+
if (_this.config.debugAdTiming) {
|
|
6349
|
+
console.warn("[StormcloudVideoPlayer] VMAP post-roll failed gracefully:", error);
|
|
6350
|
+
}
|
|
6351
|
+
});
|
|
6352
|
+
}
|
|
6353
|
+
}
|
|
6354
|
+
},
|
|
6355
|
+
{
|
|
6356
|
+
key: "handleVmapAdBreak",
|
|
6357
|
+
value: function handleVmapAdBreak(adBreak, nowMs) {
|
|
6282
6358
|
return _async_to_generator(function() {
|
|
6283
|
-
var _adBreak_durationMs,
|
|
6359
|
+
var _adBreak_durationMs, key, breakStartMs, durationMs, endMs, inWindow, tags, first, rest, error;
|
|
6284
6360
|
return _ts_generator(this, function(_state) {
|
|
6285
6361
|
switch(_state.label){
|
|
6286
6362
|
case 0:
|
|
@@ -6298,25 +6374,28 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
6298
6374
|
}
|
|
6299
6375
|
durationMs = (_adBreak_durationMs = adBreak.durationMs) !== null && _adBreak_durationMs !== void 0 ? _adBreak_durationMs : 0;
|
|
6300
6376
|
endMs = breakStartMs + durationMs;
|
|
6301
|
-
|
|
6302
|
-
inWindow = durationMs > 0 ? nowMs > breakStartMs && nowMs < endMs : nowMs + tol >= breakStartMs;
|
|
6377
|
+
inWindow = durationMs > 0 ? nowMs >= breakStartMs && nowMs < endMs : nowMs >= breakStartMs;
|
|
6303
6378
|
if (!inWindow) return [
|
|
6304
6379
|
3,
|
|
6305
6380
|
4
|
|
6306
6381
|
];
|
|
6307
6382
|
this.consumedVmapBreakIds.add(key);
|
|
6308
|
-
|
|
6309
|
-
|
|
6310
|
-
|
|
6311
|
-
|
|
6312
|
-
|
|
6313
|
-
|
|
6314
|
-
4
|
|
6315
|
-
];
|
|
6383
|
+
tags = this.selectVastTagsForBreak(adBreak);
|
|
6384
|
+
if (!tags || tags.length === 0) {
|
|
6385
|
+
return [
|
|
6386
|
+
2
|
|
6387
|
+
];
|
|
6388
|
+
}
|
|
6316
6389
|
first = tags[0];
|
|
6317
6390
|
rest = tags.slice(1);
|
|
6318
6391
|
this.adPodQueue = rest;
|
|
6319
6392
|
this.adPlayer.updateOriginalMutedState(this.video.muted, this.video.volume);
|
|
6393
|
+
this.showAds = true;
|
|
6394
|
+
this.inAdBreak = true;
|
|
6395
|
+
this.currentAdBreakStartWallClockMs = Date.now();
|
|
6396
|
+
if (!this.video.paused) {
|
|
6397
|
+
this.video.pause();
|
|
6398
|
+
}
|
|
6320
6399
|
_state.label = 1;
|
|
6321
6400
|
case 1:
|
|
6322
6401
|
_state.trys.push([
|
|
@@ -6331,10 +6410,6 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
6331
6410
|
];
|
|
6332
6411
|
case 2:
|
|
6333
6412
|
_state.sent();
|
|
6334
|
-
this.inAdBreak = true;
|
|
6335
|
-
this.expectedAdBreakDurationMs = remainingMs;
|
|
6336
|
-
this.currentAdBreakStartWallClockMs = Date.now();
|
|
6337
|
-
this.scheduleAdStopCountdown(remainingMs);
|
|
6338
6413
|
return [
|
|
6339
6414
|
3,
|
|
6340
6415
|
4
|
|
@@ -6342,8 +6417,10 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
6342
6417
|
case 3:
|
|
6343
6418
|
error = _state.sent();
|
|
6344
6419
|
this.adPodQueue = [];
|
|
6420
|
+
this.inAdBreak = false;
|
|
6421
|
+
this.showAds = false;
|
|
6345
6422
|
if (this.config.debugAdTiming) {
|
|
6346
|
-
console.warn("[StormcloudVideoPlayer]
|
|
6423
|
+
console.warn("[StormcloudVideoPlayer] VMAP ad request failed:", error);
|
|
6347
6424
|
}
|
|
6348
6425
|
return [
|
|
6349
6426
|
3,
|
|
@@ -7055,9 +7132,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
7055
7132
|
{
|
|
7056
7133
|
key: "findBreakForTime",
|
|
7057
7134
|
value: function findBreakForTime(nowMs) {
|
|
7058
|
-
var _this_config_driftToleranceMs;
|
|
7059
7135
|
var schedule = this.vmapBreaks;
|
|
7060
|
-
var tol = (_this_config_driftToleranceMs = this.config.driftToleranceMs) !== null && _this_config_driftToleranceMs !== void 0 ? _this_config_driftToleranceMs : 1e3;
|
|
7061
7136
|
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
7062
7137
|
try {
|
|
7063
7138
|
for(var _iterator = schedule[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
@@ -7069,9 +7144,14 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
7069
7144
|
if (breakStartMs == null) {
|
|
7070
7145
|
continue;
|
|
7071
7146
|
}
|
|
7072
|
-
|
|
7073
|
-
|
|
7074
|
-
|
|
7147
|
+
if (b.durationMs) {
|
|
7148
|
+
var end = breakStartMs + b.durationMs;
|
|
7149
|
+
if (nowMs >= breakStartMs && nowMs < end) {
|
|
7150
|
+
return b;
|
|
7151
|
+
}
|
|
7152
|
+
continue;
|
|
7153
|
+
}
|
|
7154
|
+
if (nowMs >= breakStartMs) {
|
|
7075
7155
|
return b;
|
|
7076
7156
|
}
|
|
7077
7157
|
}
|
|
@@ -7279,6 +7359,10 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
7279
7359
|
this.video.removeEventListener("timeupdate", this.timeUpdateHandler);
|
|
7280
7360
|
delete this.timeUpdateHandler;
|
|
7281
7361
|
}
|
|
7362
|
+
if (this.endedHandler) {
|
|
7363
|
+
this.video.removeEventListener("ended", this.endedHandler);
|
|
7364
|
+
delete this.endedHandler;
|
|
7365
|
+
}
|
|
7282
7366
|
if (this.emptiedHandler) {
|
|
7283
7367
|
this.video.removeEventListener("emptied", this.emptiedHandler);
|
|
7284
7368
|
delete this.emptiedHandler;
|
|
@@ -7309,6 +7393,7 @@ var CRITICAL_PROPS = [
|
|
|
7309
7393
|
"allowNativeHls",
|
|
7310
7394
|
"isLiveStream",
|
|
7311
7395
|
"licenseKey",
|
|
7396
|
+
"isVmap",
|
|
7312
7397
|
"vmapUrl",
|
|
7313
7398
|
"lowLatencyMode",
|
|
7314
7399
|
"driftToleranceMs",
|
|
@@ -7317,7 +7402,7 @@ var CRITICAL_PROPS = [
|
|
|
7317
7402
|
var CONTROLS_HIDE_DELAY = 3e3;
|
|
7318
7403
|
var DEFAULT_PLAYER_ASPECT_RATIO = 16 / 9;
|
|
7319
7404
|
var StormcloudVideoPlayerComponent = React.memo(function(props) {
|
|
7320
|
-
var src = props.src, autoplay = props.autoplay, muted = props.muted, lowLatencyMode = props.lowLatencyMode, allowNativeHls = props.allowNativeHls, isLiveStream = props.isLiveStream, driftToleranceMs = props.driftToleranceMs, immediateManifestAds = props.immediateManifestAds, debugAdTiming = props.debugAdTiming, showCustomControls = props.showCustomControls, hideLoadingIndicator = props.hideLoadingIndicator, onVolumeToggle = props.onVolumeToggle, onFullscreenToggle = props.onFullscreenToggle, onControlClick = props.onControlClick, onReady = props.onReady, wrapperClassName = props.wrapperClassName, wrapperStyle = props.wrapperStyle, className = props.className, style = props.style, controls = props.controls, playsInline = props.playsInline, preload = props.preload, poster = props.poster, children = props.children, licenseKey = props.licenseKey, vastMode = props.vastMode, vastTagUrl = props.vastTagUrl, vmapUrl = props.vmapUrl, minSegmentsBeforePlay = props.minSegmentsBeforePlay, restVideoAttrs = _object_without_properties(props, [
|
|
7405
|
+
var src = props.src, autoplay = props.autoplay, muted = props.muted, lowLatencyMode = props.lowLatencyMode, allowNativeHls = props.allowNativeHls, isLiveStream = props.isLiveStream, driftToleranceMs = props.driftToleranceMs, immediateManifestAds = props.immediateManifestAds, debugAdTiming = props.debugAdTiming, showCustomControls = props.showCustomControls, hideLoadingIndicator = props.hideLoadingIndicator, onVolumeToggle = props.onVolumeToggle, onFullscreenToggle = props.onFullscreenToggle, onControlClick = props.onControlClick, onReady = props.onReady, wrapperClassName = props.wrapperClassName, wrapperStyle = props.wrapperStyle, className = props.className, style = props.style, controls = props.controls, playsInline = props.playsInline, preload = props.preload, poster = props.poster, children = props.children, licenseKey = props.licenseKey, vastMode = props.vastMode, vastTagUrl = props.vastTagUrl, isVmap = props.isVmap, vmapUrl = props.vmapUrl, minSegmentsBeforePlay = props.minSegmentsBeforePlay, restVideoAttrs = _object_without_properties(props, [
|
|
7321
7406
|
"src",
|
|
7322
7407
|
"autoplay",
|
|
7323
7408
|
"muted",
|
|
@@ -7345,6 +7430,7 @@ var StormcloudVideoPlayerComponent = React.memo(function(props) {
|
|
|
7345
7430
|
"licenseKey",
|
|
7346
7431
|
"vastMode",
|
|
7347
7432
|
"vastTagUrl",
|
|
7433
|
+
"isVmap",
|
|
7348
7434
|
"vmapUrl",
|
|
7349
7435
|
"minSegmentsBeforePlay"
|
|
7350
7436
|
]);
|
|
@@ -7487,6 +7573,7 @@ var StormcloudVideoPlayerComponent = React.memo(function(props) {
|
|
|
7487
7573
|
allowNativeHls,
|
|
7488
7574
|
isLiveStream,
|
|
7489
7575
|
licenseKey,
|
|
7576
|
+
isVmap,
|
|
7490
7577
|
vmapUrl,
|
|
7491
7578
|
lowLatencyMode,
|
|
7492
7579
|
driftToleranceMs,
|
|
@@ -7531,6 +7618,7 @@ var StormcloudVideoPlayerComponent = React.memo(function(props) {
|
|
|
7531
7618
|
if (licenseKey !== void 0) cfg.licenseKey = licenseKey;
|
|
7532
7619
|
if (vastMode !== void 0) cfg.vastMode = vastMode;
|
|
7533
7620
|
if (vastTagUrl !== void 0) cfg.vastTagUrl = vastTagUrl;
|
|
7621
|
+
if (isVmap !== void 0) cfg.isVmap = isVmap;
|
|
7534
7622
|
if (vmapUrl !== void 0) cfg.vmapUrl = vmapUrl;
|
|
7535
7623
|
if (minSegmentsBeforePlay !== void 0) cfg.minSegmentsBeforePlay = minSegmentsBeforePlay;
|
|
7536
7624
|
var player = new StormcloudVideoPlayer(cfg);
|
|
@@ -8693,6 +8781,7 @@ var defaultProps = {
|
|
|
8693
8781
|
showCustomControls: false,
|
|
8694
8782
|
hideLoadingIndicator: false,
|
|
8695
8783
|
licenseKey: "",
|
|
8784
|
+
isVmap: false,
|
|
8696
8785
|
vmapUrl: "",
|
|
8697
8786
|
adFailsafeTimeoutMs: 1e4,
|
|
8698
8787
|
minSegmentsBeforePlay: 2,
|
|
@@ -9640,6 +9729,7 @@ var SUPPORTED_PROPS = [
|
|
|
9640
9729
|
"debugAdTiming",
|
|
9641
9730
|
"showCustomControls",
|
|
9642
9731
|
"licenseKey",
|
|
9732
|
+
"isVmap",
|
|
9643
9733
|
"vmapUrl",
|
|
9644
9734
|
"adFailsafeTimeoutMs",
|
|
9645
9735
|
"minSegmentsBeforePlay",
|
|
@@ -9828,5 +9918,5 @@ var createStormcloudPlayer = function createStormcloudPlayer(playerList, fallbac
|
|
|
9828
9918
|
};
|
|
9829
9919
|
var StormcloudPlayer = createStormcloudPlayer(players_default, players_default[players_default.length - 1]);
|
|
9830
9920
|
var StormcloudPlayer_default = StormcloudPlayer;
|
|
9831
|
-
export { IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer_default as StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, canPlay, createHlsAdPlayer, createPalNonceManager, createStormcloudPlayer, StormcloudVideoPlayerComponent as default, detectBrowser, getBrowserConfigOverrides, getBrowserID, getClientInfo, initializePolyfills, isMediaStream, lazy, logBrowserInfo, merge, omit, parseQuery, players_default as players, randomString, sendAdDetectTracking, sendAdImpressionTracking, sendAdLoadedTracking, sendHeartbeat, sendInitialTracking, supportsFeature, supportsModernJS, supportsWebKitPresentationMode };
|
|
9921
|
+
export { DEFAULT_MQTT_CONFIG, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, MQTT_CA_CERT_FILE, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer_default as StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, applyMQTTConfig, buildMQTTBrokerUrl, buildPlayerTopic, canPlay, configureMQTT, createHlsAdPlayer, createPalNonceManager, createStormcloudPlayer, StormcloudVideoPlayerComponent as default, detectBrowser, disconnectMQTT, ensureMQTTClient, getBrowserConfigOverrides, getBrowserID, getClientInfo, getMQTTStatus, initMQTTClient, initializePolyfills, isMQTTConfigured, isMQTTConnected, isMQTTEnabled, isMediaStream, lazy, logBrowserInfo, merge, mqttConfig, omit, parseQuery, players_default as players, publishMQTT, randomString, sendAdDetectTracking, sendAdImpressionTracking, sendAdLoadedTracking, sendHeartbeat, sendInitialTracking, supportsFeature, supportsModernJS, supportsWebKitPresentationMode };
|
|
9832
9922
|
//# sourceMappingURL=index.js.map
|