stormcloud-video-player 0.3.62 → 0.3.64
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 +382 -206
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +37 -2
- package/lib/index.d.ts +37 -2
- package/lib/index.js +323 -207
- package/lib/index.js.map +1 -1
- package/lib/player/StormcloudVideoPlayer.cjs +291 -205
- package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/player/StormcloudVideoPlayer.d.cts +6 -2
- package/lib/players/HlsPlayer.cjs +291 -205
- package/lib/players/HlsPlayer.cjs.map +1 -1
- package/lib/players/HlsPlayer.d.cts +1 -1
- package/lib/players/index.cjs +291 -205
- package/lib/players/index.cjs.map +1 -1
- package/lib/sdk/hlsAdPlayer.d.cts +1 -1
- package/lib/sdk/ima.d.cts +1 -1
- package/lib/{types-BJPNhfLV.d.cts → types-CjI14dPN.d.cts} +1 -0
- package/lib/ui/StormcloudVideoPlayer.cjs +296 -206
- 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.cjs
CHANGED
|
@@ -428,6 +428,9 @@ var __toCommonJS = function __toCommonJS(mod) {
|
|
|
428
428
|
// src/index.ts
|
|
429
429
|
var index_exports = {};
|
|
430
430
|
__export(index_exports, {
|
|
431
|
+
DEFAULT_MQTT_CONFIG: function DEFAULT_MQTT_CONFIG1() {
|
|
432
|
+
return DEFAULT_MQTT_CONFIG;
|
|
433
|
+
},
|
|
431
434
|
IS_BROWSER: function IS_BROWSER1() {
|
|
432
435
|
return IS_BROWSER;
|
|
433
436
|
},
|
|
@@ -440,6 +443,9 @@ __export(index_exports, {
|
|
|
440
443
|
IS_SAFARI: function IS_SAFARI1() {
|
|
441
444
|
return IS_SAFARI;
|
|
442
445
|
},
|
|
446
|
+
MQTT_CA_CERT_FILE: function MQTT_CA_CERT_FILE1() {
|
|
447
|
+
return MQTT_CA_CERT_FILE;
|
|
448
|
+
},
|
|
443
449
|
SUPPORTS_DASH: function SUPPORTS_DASH1() {
|
|
444
450
|
return SUPPORTS_DASH;
|
|
445
451
|
},
|
|
@@ -455,9 +461,21 @@ __export(index_exports, {
|
|
|
455
461
|
StormcloudVideoPlayerComponent: function StormcloudVideoPlayerComponent1() {
|
|
456
462
|
return StormcloudVideoPlayerComponent;
|
|
457
463
|
},
|
|
464
|
+
applyMQTTConfig: function applyMQTTConfig1() {
|
|
465
|
+
return applyMQTTConfig;
|
|
466
|
+
},
|
|
467
|
+
buildMQTTBrokerUrl: function buildMQTTBrokerUrl1() {
|
|
468
|
+
return buildMQTTBrokerUrl;
|
|
469
|
+
},
|
|
470
|
+
buildPlayerTopic: function buildPlayerTopic1() {
|
|
471
|
+
return buildPlayerTopic;
|
|
472
|
+
},
|
|
458
473
|
canPlay: function canPlay1() {
|
|
459
474
|
return canPlay;
|
|
460
475
|
},
|
|
476
|
+
configureMQTT: function configureMQTT1() {
|
|
477
|
+
return configureMQTT;
|
|
478
|
+
},
|
|
461
479
|
createHlsAdPlayer: function createHlsAdPlayer1() {
|
|
462
480
|
return createHlsAdPlayer;
|
|
463
481
|
},
|
|
@@ -473,6 +491,12 @@ __export(index_exports, {
|
|
|
473
491
|
detectBrowser: function detectBrowser1() {
|
|
474
492
|
return detectBrowser;
|
|
475
493
|
},
|
|
494
|
+
disconnectMQTT: function disconnectMQTT1() {
|
|
495
|
+
return disconnectMQTT;
|
|
496
|
+
},
|
|
497
|
+
ensureMQTTClient: function ensureMQTTClient1() {
|
|
498
|
+
return ensureMQTTClient;
|
|
499
|
+
},
|
|
476
500
|
getBrowserConfigOverrides: function getBrowserConfigOverrides1() {
|
|
477
501
|
return getBrowserConfigOverrides;
|
|
478
502
|
},
|
|
@@ -482,12 +506,27 @@ __export(index_exports, {
|
|
|
482
506
|
getClientInfo: function getClientInfo1() {
|
|
483
507
|
return getClientInfo;
|
|
484
508
|
},
|
|
509
|
+
getMQTTStatus: function getMQTTStatus1() {
|
|
510
|
+
return getMQTTStatus;
|
|
511
|
+
},
|
|
485
512
|
getRecommendedAdPlayer: function getRecommendedAdPlayer1() {
|
|
486
513
|
return getRecommendedAdPlayer;
|
|
487
514
|
},
|
|
515
|
+
initMQTTClient: function initMQTTClient1() {
|
|
516
|
+
return initMQTTClient;
|
|
517
|
+
},
|
|
488
518
|
initializePolyfills: function initializePolyfills1() {
|
|
489
519
|
return initializePolyfills;
|
|
490
520
|
},
|
|
521
|
+
isMQTTConfigured: function isMQTTConfigured1() {
|
|
522
|
+
return isMQTTConfigured;
|
|
523
|
+
},
|
|
524
|
+
isMQTTConnected: function isMQTTConnected1() {
|
|
525
|
+
return isMQTTConnected;
|
|
526
|
+
},
|
|
527
|
+
isMQTTEnabled: function isMQTTEnabled1() {
|
|
528
|
+
return isMQTTEnabled;
|
|
529
|
+
},
|
|
491
530
|
isMediaStream: function isMediaStream1() {
|
|
492
531
|
return isMediaStream;
|
|
493
532
|
},
|
|
@@ -500,6 +539,9 @@ __export(index_exports, {
|
|
|
500
539
|
merge: function merge1() {
|
|
501
540
|
return merge;
|
|
502
541
|
},
|
|
542
|
+
mqttConfig: function mqttConfig1() {
|
|
543
|
+
return mqttConfig;
|
|
544
|
+
},
|
|
503
545
|
omit: function omit1() {
|
|
504
546
|
return omit;
|
|
505
547
|
},
|
|
@@ -509,6 +551,9 @@ __export(index_exports, {
|
|
|
509
551
|
players: function players() {
|
|
510
552
|
return players_default;
|
|
511
553
|
},
|
|
554
|
+
publishMQTT: function publishMQTT1() {
|
|
555
|
+
return publishMQTT;
|
|
556
|
+
},
|
|
512
557
|
randomString: function randomString1() {
|
|
513
558
|
return randomString;
|
|
514
559
|
},
|
|
@@ -2604,6 +2649,123 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
2604
2649
|
}
|
|
2605
2650
|
};
|
|
2606
2651
|
}
|
|
2652
|
+
// src/utils/mqttConfig.ts
|
|
2653
|
+
var MQTT_CA_CERT_FILE = "src/certs/emqxsl-ca.crt";
|
|
2654
|
+
var DEFAULT_MQTT_CONFIG = {
|
|
2655
|
+
enabled: true,
|
|
2656
|
+
brokerAddress: "vecbae77.ala.us-east-1.emqxsl.com",
|
|
2657
|
+
brokerPort: 8883,
|
|
2658
|
+
wsPort: 8084,
|
|
2659
|
+
username: "for-sonifi",
|
|
2660
|
+
password: "sonifi-mqtt",
|
|
2661
|
+
topicPrefix: "adstorm/players",
|
|
2662
|
+
qos: 1
|
|
2663
|
+
};
|
|
2664
|
+
var mqttConfig = _object_spread({}, DEFAULT_MQTT_CONFIG);
|
|
2665
|
+
function applyMQTTConfig(overrides) {
|
|
2666
|
+
Object.assign(mqttConfig, overrides);
|
|
2667
|
+
}
|
|
2668
|
+
function isMQTTEnabled() {
|
|
2669
|
+
return mqttConfig.enabled;
|
|
2670
|
+
}
|
|
2671
|
+
function buildMQTTBrokerUrl() {
|
|
2672
|
+
if (mqttConfig.brokerUrl) return mqttConfig.brokerUrl;
|
|
2673
|
+
return "wss://".concat(mqttConfig.brokerAddress, ":").concat(mqttConfig.wsPort, "/mqtt");
|
|
2674
|
+
}
|
|
2675
|
+
function buildPlayerTopic(licenseKey, channel) {
|
|
2676
|
+
return "".concat(mqttConfig.topicPrefix, "/").concat(licenseKey, "/").concat(channel);
|
|
2677
|
+
}
|
|
2678
|
+
// src/utils/mqttClient.ts
|
|
2679
|
+
var import_mqtt = __toESM(require("mqtt"), 1);
|
|
2680
|
+
var LOG = "[StormcloudVideoPlayer][MQTT]";
|
|
2681
|
+
var client = null;
|
|
2682
|
+
var status = "disconnected";
|
|
2683
|
+
function getMQTTStatus() {
|
|
2684
|
+
return status;
|
|
2685
|
+
}
|
|
2686
|
+
function isMQTTConnected() {
|
|
2687
|
+
return status === "connected" && client !== null && client.connected;
|
|
2688
|
+
}
|
|
2689
|
+
function isMQTTConfigured() {
|
|
2690
|
+
return isMQTTEnabled();
|
|
2691
|
+
}
|
|
2692
|
+
function configureMQTT(overrides) {
|
|
2693
|
+
applyMQTTConfig(overrides);
|
|
2694
|
+
disconnectMQTT();
|
|
2695
|
+
}
|
|
2696
|
+
function initMQTTClient() {
|
|
2697
|
+
if (client || !isMQTTEnabled()) return;
|
|
2698
|
+
var url = buildMQTTBrokerUrl();
|
|
2699
|
+
status = "connecting";
|
|
2700
|
+
var clientId = "stormcloud-vp-".concat(Math.random().toString(36).slice(2, 9));
|
|
2701
|
+
try {
|
|
2702
|
+
client = import_mqtt.default.connect(url, {
|
|
2703
|
+
clientId: clientId,
|
|
2704
|
+
username: mqttConfig.username,
|
|
2705
|
+
password: mqttConfig.password,
|
|
2706
|
+
keepalive: 60,
|
|
2707
|
+
clean: true,
|
|
2708
|
+
reconnectPeriod: 5e3,
|
|
2709
|
+
connectTimeout: 1e4,
|
|
2710
|
+
queueQoSZero: false
|
|
2711
|
+
});
|
|
2712
|
+
} catch (err) {
|
|
2713
|
+
status = "error";
|
|
2714
|
+
console.warn("".concat(LOG, " connect() threw:"), err);
|
|
2715
|
+
return;
|
|
2716
|
+
}
|
|
2717
|
+
client.on("connect", function() {
|
|
2718
|
+
status = "connected";
|
|
2719
|
+
console.info("".concat(LOG, " connected to ").concat(url));
|
|
2720
|
+
});
|
|
2721
|
+
client.on("reconnect", function() {
|
|
2722
|
+
status = "connecting";
|
|
2723
|
+
console.info("".concat(LOG, " reconnecting…"));
|
|
2724
|
+
});
|
|
2725
|
+
client.on("offline", function() {
|
|
2726
|
+
status = "disconnected";
|
|
2727
|
+
console.warn("".concat(LOG, " offline"));
|
|
2728
|
+
});
|
|
2729
|
+
client.on("error", function(err) {
|
|
2730
|
+
status = "error";
|
|
2731
|
+
console.warn("".concat(LOG, " error:"), err.message);
|
|
2732
|
+
});
|
|
2733
|
+
client.on("close", function() {
|
|
2734
|
+
if (status === "connected") {
|
|
2735
|
+
status = "disconnected";
|
|
2736
|
+
}
|
|
2737
|
+
});
|
|
2738
|
+
}
|
|
2739
|
+
function ensureMQTTClient() {
|
|
2740
|
+
if (isMQTTEnabled() && !client) {
|
|
2741
|
+
initMQTTClient();
|
|
2742
|
+
}
|
|
2743
|
+
}
|
|
2744
|
+
function publishMQTT(topic, payload) {
|
|
2745
|
+
if (!isMQTTEnabled()) {
|
|
2746
|
+
return false;
|
|
2747
|
+
}
|
|
2748
|
+
ensureMQTTClient();
|
|
2749
|
+
if (!client) {
|
|
2750
|
+
return false;
|
|
2751
|
+
}
|
|
2752
|
+
try {
|
|
2753
|
+
client.publish(topic, JSON.stringify(payload), {
|
|
2754
|
+
qos: mqttConfig.qos
|
|
2755
|
+
});
|
|
2756
|
+
return true;
|
|
2757
|
+
} catch (err) {
|
|
2758
|
+
console.warn("".concat(LOG, " publish failed on ").concat(topic, ":"), err);
|
|
2759
|
+
return false;
|
|
2760
|
+
}
|
|
2761
|
+
}
|
|
2762
|
+
function disconnectMQTT() {
|
|
2763
|
+
if (client) {
|
|
2764
|
+
client.end(true);
|
|
2765
|
+
client = null;
|
|
2766
|
+
status = "disconnected";
|
|
2767
|
+
}
|
|
2768
|
+
}
|
|
2607
2769
|
// src/utils/tracking.ts
|
|
2608
2770
|
var cachedBrowserId = null;
|
|
2609
2771
|
function getClientInfo() {
|
|
@@ -2750,7 +2912,7 @@ function getClientInfo() {
|
|
|
2750
2912
|
}
|
|
2751
2913
|
function getBrowserID(clientInfo) {
|
|
2752
2914
|
return _async_to_generator(function() {
|
|
2753
|
-
var fingerprintString, encodedData, utf8, buffer, i, hashBuffer,
|
|
2915
|
+
var _crypto_subtle, fingerprintString, encodedData, utf8, buffer, i, hashBuffer, hashHex, unused, hash, i1, char, fallbackHash, timestamp, random;
|
|
2754
2916
|
return _ts_generator(this, function(_state) {
|
|
2755
2917
|
switch(_state.label){
|
|
2756
2918
|
case 0:
|
|
@@ -2761,7 +2923,7 @@ function getBrowserID(clientInfo) {
|
|
|
2761
2923
|
];
|
|
2762
2924
|
}
|
|
2763
2925
|
fingerprintString = JSON.stringify(clientInfo);
|
|
2764
|
-
if (!(typeof crypto !== "undefined" && crypto.subtle
|
|
2926
|
+
if (!(typeof crypto !== "undefined" && ((_crypto_subtle = crypto.subtle) === null || _crypto_subtle === void 0 ? void 0 : _crypto_subtle.digest))) return [
|
|
2765
2927
|
3,
|
|
2766
2928
|
5
|
|
2767
2929
|
];
|
|
@@ -2799,8 +2961,7 @@ function getBrowserID(clientInfo) {
|
|
|
2799
2961
|
];
|
|
2800
2962
|
case 3:
|
|
2801
2963
|
hashBuffer = _state.sent();
|
|
2802
|
-
|
|
2803
|
-
hashHex = hashArray.map(function(b) {
|
|
2964
|
+
hashHex = Array.from(new Uint8Array(hashBuffer)).map(function(b) {
|
|
2804
2965
|
return b.toString(16).padStart(2, "0");
|
|
2805
2966
|
}).join("");
|
|
2806
2967
|
cachedBrowserId = hashHex;
|
|
@@ -2809,8 +2970,8 @@ function getBrowserID(clientInfo) {
|
|
|
2809
2970
|
hashHex
|
|
2810
2971
|
];
|
|
2811
2972
|
case 4:
|
|
2812
|
-
|
|
2813
|
-
console.warn("[StormcloudVideoPlayer] crypto.subtle
|
|
2973
|
+
unused = _state.sent();
|
|
2974
|
+
console.warn("[StormcloudVideoPlayer] crypto.subtle not supported, using fallback hash");
|
|
2814
2975
|
return [
|
|
2815
2976
|
3,
|
|
2816
2977
|
5
|
|
@@ -2834,177 +2995,91 @@ function getBrowserID(clientInfo) {
|
|
|
2834
2995
|
});
|
|
2835
2996
|
})();
|
|
2836
2997
|
}
|
|
2837
|
-
|
|
2838
|
-
|
|
2839
|
-
var HEARTBEAT_URL = "".concat(PLAYER_TRACKING_BASE_URL, "/heartbeat");
|
|
2840
|
-
var IMPRESSIONS_URL = "".concat(PLAYER_TRACKING_BASE_URL, "/impressions/ingest");
|
|
2841
|
-
function buildHeaders(licenseKey) {
|
|
2842
|
-
var headers = {
|
|
2843
|
-
"Content-Type": "application/json"
|
|
2844
|
-
};
|
|
2845
|
-
if (licenseKey) {
|
|
2846
|
-
headers["Authorization"] = "Bearer ".concat(licenseKey);
|
|
2847
|
-
}
|
|
2848
|
-
return headers;
|
|
2998
|
+
function canPublish(licenseKey) {
|
|
2999
|
+
return Boolean(isMQTTEnabled() && licenseKey);
|
|
2849
3000
|
}
|
|
2850
|
-
function
|
|
3001
|
+
function buildPlayerMetricEvent() {
|
|
2851
3002
|
return _async_to_generator(function() {
|
|
2852
|
-
var
|
|
2853
|
-
return _ts_generator(this, function(_state) {
|
|
2854
|
-
switch(_state.label){
|
|
2855
|
-
case 0:
|
|
2856
|
-
return [
|
|
2857
|
-
4,
|
|
2858
|
-
fetch(TRACK_URL, {
|
|
2859
|
-
method: "POST",
|
|
2860
|
-
headers: buildHeaders(licenseKey),
|
|
2861
|
-
body: JSON.stringify(body)
|
|
2862
|
-
})
|
|
2863
|
-
];
|
|
2864
|
-
case 1:
|
|
2865
|
-
response = _state.sent();
|
|
2866
|
-
if (!response.ok) {
|
|
2867
|
-
throw new Error("HTTP error! status: ".concat(response.status));
|
|
2868
|
-
}
|
|
2869
|
-
return [
|
|
2870
|
-
4,
|
|
2871
|
-
response.json()
|
|
2872
|
-
];
|
|
2873
|
-
case 2:
|
|
2874
|
-
_state.sent();
|
|
2875
|
-
return [
|
|
2876
|
-
2
|
|
2877
|
-
];
|
|
2878
|
-
}
|
|
2879
|
-
});
|
|
2880
|
-
})();
|
|
2881
|
-
}
|
|
2882
|
-
function postJson(url, licenseKey, body) {
|
|
2883
|
-
return _async_to_generator(function() {
|
|
2884
|
-
var response;
|
|
2885
|
-
return _ts_generator(this, function(_state) {
|
|
2886
|
-
switch(_state.label){
|
|
2887
|
-
case 0:
|
|
2888
|
-
return [
|
|
2889
|
-
4,
|
|
2890
|
-
fetch(url, {
|
|
2891
|
-
method: "POST",
|
|
2892
|
-
headers: buildHeaders(licenseKey),
|
|
2893
|
-
body: JSON.stringify(body)
|
|
2894
|
-
})
|
|
2895
|
-
];
|
|
2896
|
-
case 1:
|
|
2897
|
-
response = _state.sent();
|
|
2898
|
-
if (!response.ok) {
|
|
2899
|
-
throw new Error("HTTP error! status: ".concat(response.status));
|
|
2900
|
-
}
|
|
2901
|
-
return [
|
|
2902
|
-
4,
|
|
2903
|
-
response.json()
|
|
2904
|
-
];
|
|
2905
|
-
case 2:
|
|
2906
|
-
_state.sent();
|
|
2907
|
-
return [
|
|
2908
|
-
2
|
|
2909
|
-
];
|
|
2910
|
-
}
|
|
2911
|
-
});
|
|
2912
|
-
})();
|
|
2913
|
-
}
|
|
2914
|
-
function buildPlayerMetricEvent(_0) {
|
|
2915
|
-
return _async_to_generator(function(licenseKey) {
|
|
2916
|
-
var context, flags, _flags_captureAt, clientInfo, browserId, captureAt;
|
|
3003
|
+
var context, flags, _flags_captureAt, _flags_adLoaded, _flags_adDetect, clientInfo, playerId, captureAt;
|
|
2917
3004
|
var _arguments = arguments;
|
|
2918
3005
|
return _ts_generator(this, function(_state) {
|
|
2919
3006
|
switch(_state.label){
|
|
2920
3007
|
case 0:
|
|
2921
|
-
context = _arguments.length >
|
|
3008
|
+
context = _arguments.length > 0 && _arguments[0] !== void 0 ? _arguments[0] : {}, flags = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {};
|
|
2922
3009
|
clientInfo = getClientInfo();
|
|
2923
3010
|
return [
|
|
2924
3011
|
4,
|
|
2925
3012
|
getBrowserID(clientInfo)
|
|
2926
3013
|
];
|
|
2927
3014
|
case 1:
|
|
2928
|
-
|
|
3015
|
+
playerId = _state.sent();
|
|
2929
3016
|
captureAt = (_flags_captureAt = flags.captureAt) !== null && _flags_captureAt !== void 0 ? _flags_captureAt : /* @__PURE__ */ new Date().toISOString();
|
|
2930
3017
|
return [
|
|
2931
3018
|
2,
|
|
2932
|
-
{
|
|
2933
|
-
player_id:
|
|
2934
|
-
browserId: browserId,
|
|
3019
|
+
_object_spread({
|
|
3020
|
+
player_id: playerId,
|
|
2935
3021
|
device_type: clientInfo.deviceType,
|
|
2936
|
-
|
|
2937
|
-
|
|
2938
|
-
|
|
2939
|
-
|
|
2940
|
-
|
|
2941
|
-
|
|
2942
|
-
|
|
2943
|
-
timestamp: captureAt
|
|
2944
|
-
}
|
|
3022
|
+
os: clientInfo.os.toLowerCase(),
|
|
3023
|
+
ad_loaded: (_flags_adLoaded = flags.adLoaded) !== null && _flags_adLoaded !== void 0 ? _flags_adLoaded : false,
|
|
3024
|
+
ad_detect: (_flags_adDetect = flags.adDetect) !== null && _flags_adDetect !== void 0 ? _flags_adDetect : false,
|
|
3025
|
+
capture_at: captureAt
|
|
3026
|
+
}, context.inputStreamType ? {
|
|
3027
|
+
input_stream_type: context.inputStreamType
|
|
3028
|
+
} : {})
|
|
2945
3029
|
];
|
|
2946
3030
|
}
|
|
2947
3031
|
});
|
|
2948
3032
|
}).apply(this, arguments);
|
|
2949
3033
|
}
|
|
3034
|
+
function publishTracking(licenseKey, channel, body) {
|
|
3035
|
+
ensureMQTTClient();
|
|
3036
|
+
publishMQTT(buildPlayerTopic(licenseKey, channel), body);
|
|
3037
|
+
}
|
|
2950
3038
|
function sendInitialTracking(_0) {
|
|
2951
3039
|
return _async_to_generator(function(licenseKey) {
|
|
2952
|
-
var context,
|
|
3040
|
+
var context, metricEvent, error;
|
|
2953
3041
|
var _arguments = arguments;
|
|
2954
3042
|
return _ts_generator(this, function(_state) {
|
|
2955
3043
|
switch(_state.label){
|
|
2956
3044
|
case 0:
|
|
2957
3045
|
context = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {};
|
|
3046
|
+
if (!canPublish(licenseKey)) return [
|
|
3047
|
+
2
|
|
3048
|
+
];
|
|
2958
3049
|
_state.label = 1;
|
|
2959
3050
|
case 1:
|
|
2960
3051
|
_state.trys.push([
|
|
2961
3052
|
1,
|
|
2962
|
-
|
|
3053
|
+
3,
|
|
2963
3054
|
,
|
|
2964
|
-
|
|
3055
|
+
4
|
|
2965
3056
|
]);
|
|
2966
|
-
clientInfo = getClientInfo();
|
|
2967
3057
|
return [
|
|
2968
3058
|
4,
|
|
2969
|
-
|
|
2970
|
-
|
|
2971
|
-
|
|
2972
|
-
browserId = _state.sent();
|
|
2973
|
-
trackingData = _object_spread({
|
|
2974
|
-
browserId: browserId
|
|
2975
|
-
}, clientInfo);
|
|
2976
|
-
return [
|
|
2977
|
-
4,
|
|
2978
|
-
sendTrackRequest(licenseKey, {
|
|
2979
|
-
events: [
|
|
2980
|
-
{
|
|
2981
|
-
player_id: browserId,
|
|
2982
|
-
device_type: clientInfo.deviceType,
|
|
2983
|
-
input_stream_type: context.inputStreamType,
|
|
2984
|
-
os: clientInfo.os,
|
|
2985
|
-
ad_loaded: false,
|
|
2986
|
-
ad_detect: false,
|
|
2987
|
-
license_key: licenseKey,
|
|
2988
|
-
capture_at: /* @__PURE__ */ new Date().toISOString()
|
|
2989
|
-
}
|
|
2990
|
-
],
|
|
2991
|
-
trackingData: trackingData
|
|
3059
|
+
buildPlayerMetricEvent(context, {
|
|
3060
|
+
adLoaded: false,
|
|
3061
|
+
adDetect: false
|
|
2992
3062
|
})
|
|
2993
3063
|
];
|
|
2994
|
-
case
|
|
2995
|
-
_state.sent();
|
|
3064
|
+
case 2:
|
|
3065
|
+
metricEvent = _state.sent();
|
|
3066
|
+
publishTracking(licenseKey, "metrics", {
|
|
3067
|
+
events: [
|
|
3068
|
+
metricEvent
|
|
3069
|
+
]
|
|
3070
|
+
});
|
|
2996
3071
|
return [
|
|
2997
3072
|
3,
|
|
2998
|
-
|
|
3073
|
+
4
|
|
2999
3074
|
];
|
|
3000
|
-
case
|
|
3075
|
+
case 3:
|
|
3001
3076
|
error = _state.sent();
|
|
3002
3077
|
console.error("[StormcloudVideoPlayer] Error sending initial tracking data:", error);
|
|
3003
3078
|
return [
|
|
3004
3079
|
3,
|
|
3005
|
-
|
|
3080
|
+
4
|
|
3006
3081
|
];
|
|
3007
|
-
case
|
|
3082
|
+
case 4:
|
|
3008
3083
|
return [
|
|
3009
3084
|
2
|
|
3010
3085
|
];
|
|
@@ -3108,53 +3183,48 @@ function sendAdImpressionTracking(_0, _1) {
|
|
|
3108
3183
|
switch(_state.label){
|
|
3109
3184
|
case 0:
|
|
3110
3185
|
context = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : {};
|
|
3186
|
+
if (!canPublish(licenseKey)) return [
|
|
3187
|
+
2
|
|
3188
|
+
];
|
|
3111
3189
|
_state.label = 1;
|
|
3112
3190
|
case 1:
|
|
3113
3191
|
_state.trys.push([
|
|
3114
3192
|
1,
|
|
3115
|
-
|
|
3193
|
+
3,
|
|
3116
3194
|
,
|
|
3117
|
-
|
|
3195
|
+
4
|
|
3118
3196
|
]);
|
|
3119
3197
|
return [
|
|
3120
3198
|
4,
|
|
3121
|
-
buildPlayerMetricEvent(
|
|
3199
|
+
buildPlayerMetricEvent(context, {
|
|
3122
3200
|
captureAt: adImpressionInfo.timestamp
|
|
3123
3201
|
})
|
|
3124
3202
|
];
|
|
3125
3203
|
case 2:
|
|
3126
3204
|
metricEvent = _state.sent();
|
|
3127
|
-
|
|
3128
|
-
|
|
3129
|
-
|
|
3130
|
-
|
|
3131
|
-
|
|
3132
|
-
|
|
3133
|
-
|
|
3134
|
-
|
|
3135
|
-
|
|
3136
|
-
|
|
3137
|
-
|
|
3138
|
-
capture_at: adImpressionInfo.timestamp
|
|
3139
|
-
}
|
|
3140
|
-
]
|
|
3141
|
-
})
|
|
3142
|
-
])
|
|
3143
|
-
];
|
|
3144
|
-
case 3:
|
|
3145
|
-
_state.sent();
|
|
3205
|
+
publishTracking(licenseKey, "heartbeat", metricEvent);
|
|
3206
|
+
publishTracking(licenseKey, "impressions", {
|
|
3207
|
+
events: [
|
|
3208
|
+
{
|
|
3209
|
+
player_id: metricEvent.player_id,
|
|
3210
|
+
ad_played_count: 1,
|
|
3211
|
+
ad_url: adImpressionInfo.adUrl,
|
|
3212
|
+
capture_at: adImpressionInfo.timestamp
|
|
3213
|
+
}
|
|
3214
|
+
]
|
|
3215
|
+
});
|
|
3146
3216
|
return [
|
|
3147
3217
|
3,
|
|
3148
|
-
|
|
3218
|
+
4
|
|
3149
3219
|
];
|
|
3150
|
-
case
|
|
3220
|
+
case 3:
|
|
3151
3221
|
error = _state.sent();
|
|
3152
3222
|
console.error("[StormcloudVideoPlayer] Error sending ad impression tracking:", error);
|
|
3153
3223
|
return [
|
|
3154
3224
|
3,
|
|
3155
|
-
|
|
3225
|
+
4
|
|
3156
3226
|
];
|
|
3157
|
-
case
|
|
3227
|
+
case 4:
|
|
3158
3228
|
return [
|
|
3159
3229
|
2
|
|
3160
3230
|
];
|
|
@@ -3170,38 +3240,36 @@ function sendHeartbeat(_0) {
|
|
|
3170
3240
|
switch(_state.label){
|
|
3171
3241
|
case 0:
|
|
3172
3242
|
context = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {}, flags = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : {};
|
|
3243
|
+
if (!canPublish(licenseKey)) return [
|
|
3244
|
+
2
|
|
3245
|
+
];
|
|
3173
3246
|
_state.label = 1;
|
|
3174
3247
|
case 1:
|
|
3175
3248
|
_state.trys.push([
|
|
3176
3249
|
1,
|
|
3177
|
-
|
|
3250
|
+
3,
|
|
3178
3251
|
,
|
|
3179
|
-
|
|
3252
|
+
4
|
|
3180
3253
|
]);
|
|
3181
3254
|
return [
|
|
3182
3255
|
4,
|
|
3183
|
-
buildPlayerMetricEvent(
|
|
3256
|
+
buildPlayerMetricEvent(context, flags)
|
|
3184
3257
|
];
|
|
3185
3258
|
case 2:
|
|
3186
3259
|
heartbeatData = _state.sent();
|
|
3187
|
-
|
|
3188
|
-
4,
|
|
3189
|
-
postJson(HEARTBEAT_URL, licenseKey, heartbeatData)
|
|
3190
|
-
];
|
|
3191
|
-
case 3:
|
|
3192
|
-
_state.sent();
|
|
3260
|
+
publishTracking(licenseKey, "heartbeat", heartbeatData);
|
|
3193
3261
|
return [
|
|
3194
3262
|
3,
|
|
3195
|
-
|
|
3263
|
+
4
|
|
3196
3264
|
];
|
|
3197
|
-
case
|
|
3265
|
+
case 3:
|
|
3198
3266
|
error = _state.sent();
|
|
3199
3267
|
console.error("[StormcloudVideoPlayer] Error sending heartbeat:", error);
|
|
3200
3268
|
return [
|
|
3201
3269
|
3,
|
|
3202
|
-
|
|
3270
|
+
4
|
|
3203
3271
|
];
|
|
3204
|
-
case
|
|
3272
|
+
case 4:
|
|
3205
3273
|
return [
|
|
3206
3274
|
2
|
|
3207
3275
|
];
|
|
@@ -3666,7 +3734,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
3666
3734
|
var _level_details, _level_details1;
|
|
3667
3735
|
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";
|
|
3668
3736
|
})) !== null && _ref !== void 0 ? _ref : false;
|
|
3669
|
-
if (!this.isLiveStream && this.vmapBreaks.length === 0 && this.apiVastTagUrl) {
|
|
3737
|
+
if (!this.isVmapEnabled() && !this.isLiveStream && this.vmapBreaks.length === 0 && this.apiVastTagUrl) {
|
|
3670
3738
|
prerollKey = "synthetic-vod-preroll";
|
|
3671
3739
|
if (!this.consumedVmapBreakIds.has(prerollKey)) {
|
|
3672
3740
|
this.vmapBreaks = [
|
|
@@ -4249,6 +4317,10 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
4249
4317
|
_this.onTimeUpdate(_this.video.currentTime);
|
|
4250
4318
|
};
|
|
4251
4319
|
this.video.addEventListener("timeupdate", this.timeUpdateHandler);
|
|
4320
|
+
this.endedHandler = function() {
|
|
4321
|
+
_this.onVideoEnded();
|
|
4322
|
+
};
|
|
4323
|
+
this.video.addEventListener("ended", this.endedHandler);
|
|
4252
4324
|
this.emptiedHandler = function() {
|
|
4253
4325
|
if (_this.nativeHlsMode && _this.videoSrcProtection && !_this.ima.isAdPlaying()) {
|
|
4254
4326
|
if (_this.config.debugAdTiming) {
|
|
@@ -5560,6 +5632,13 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
5560
5632
|
}
|
|
5561
5633
|
}
|
|
5562
5634
|
},
|
|
5635
|
+
{
|
|
5636
|
+
key: "isVmapEnabled",
|
|
5637
|
+
value: function isVmapEnabled() {
|
|
5638
|
+
var _this_config_vmapUrl;
|
|
5639
|
+
return !!(this.config.isVmap && ((_this_config_vmapUrl = this.config.vmapUrl) === null || _this_config_vmapUrl === void 0 ? void 0 : _this_config_vmapUrl.trim()));
|
|
5640
|
+
}
|
|
5641
|
+
},
|
|
5563
5642
|
{
|
|
5564
5643
|
key: "fetchAdConfiguration",
|
|
5565
5644
|
value: function fetchAdConfiguration() {
|
|
@@ -5568,7 +5647,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
5568
5647
|
return _ts_generator(this, function(_state) {
|
|
5569
5648
|
switch(_state.label){
|
|
5570
5649
|
case 0:
|
|
5571
|
-
if (!this.
|
|
5650
|
+
if (!this.isVmapEnabled()) return [
|
|
5572
5651
|
3,
|
|
5573
5652
|
2
|
|
5574
5653
|
];
|
|
@@ -5578,7 +5657,12 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
5578
5657
|
];
|
|
5579
5658
|
case 1:
|
|
5580
5659
|
_state.sent();
|
|
5581
|
-
|
|
5660
|
+
if (this.config.debugAdTiming) {
|
|
5661
|
+
console.log("[StormcloudVideoPlayer] VMAP mode enabled");
|
|
5662
|
+
}
|
|
5663
|
+
return [
|
|
5664
|
+
2
|
|
5665
|
+
];
|
|
5582
5666
|
case 2:
|
|
5583
5667
|
vastMode = this.config.vastMode || "default";
|
|
5584
5668
|
if (this.config.debugAdTiming) {
|
|
@@ -5746,7 +5830,16 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
5746
5830
|
}
|
|
5747
5831
|
return [];
|
|
5748
5832
|
}
|
|
5749
|
-
var
|
|
5833
|
+
var VMAP_NS = "http://www.iab.net/videosuite/vmap";
|
|
5834
|
+
var adBreakNodes = Array.from(doc.getElementsByTagNameNS(VMAP_NS, "AdBreak"));
|
|
5835
|
+
if (adBreakNodes.length === 0) {
|
|
5836
|
+
adBreakNodes = Array.from(doc.querySelectorAll("AdBreak, vmap\\:AdBreak"));
|
|
5837
|
+
}
|
|
5838
|
+
if (adBreakNodes.length === 0) {
|
|
5839
|
+
adBreakNodes = Array.from(doc.getElementsByTagName("*")).filter(function(el) {
|
|
5840
|
+
return el.localName === "AdBreak";
|
|
5841
|
+
});
|
|
5842
|
+
}
|
|
5750
5843
|
var parsed = [];
|
|
5751
5844
|
adBreakNodes.forEach(function(node, index) {
|
|
5752
5845
|
var timeOffsetRaw = (node.getAttribute("timeOffset") || "").trim();
|
|
@@ -5754,8 +5847,17 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
5754
5847
|
if (startTimeMs == null) {
|
|
5755
5848
|
return;
|
|
5756
5849
|
}
|
|
5757
|
-
var adTagNode = node.
|
|
5758
|
-
|
|
5850
|
+
var adTagNode = node.getElementsByTagNameNS(VMAP_NS, "AdTagURI")[0];
|
|
5851
|
+
if (!adTagNode) {
|
|
5852
|
+
var _node_querySelector;
|
|
5853
|
+
adTagNode = (_node_querySelector = node.querySelector("AdTagURI, vmap\\:AdTagURI")) !== null && _node_querySelector !== void 0 ? _node_querySelector : void 0;
|
|
5854
|
+
}
|
|
5855
|
+
if (!adTagNode) {
|
|
5856
|
+
adTagNode = Array.from(node.getElementsByTagName("*")).find(function(el) {
|
|
5857
|
+
return el.localName === "AdTagURI";
|
|
5858
|
+
});
|
|
5859
|
+
}
|
|
5860
|
+
var adTagUrl = _this.resolveVmapAdTagUrl(((adTagNode === null || adTagNode === void 0 ? void 0 : adTagNode.textContent) || "").trim());
|
|
5759
5861
|
if (!adTagUrl) {
|
|
5760
5862
|
return;
|
|
5761
5863
|
}
|
|
@@ -5774,6 +5876,15 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
5774
5876
|
return parsed;
|
|
5775
5877
|
}
|
|
5776
5878
|
},
|
|
5879
|
+
{
|
|
5880
|
+
key: "resolveVmapAdTagUrl",
|
|
5881
|
+
value: function resolveVmapAdTagUrl(url) {
|
|
5882
|
+
if (!url) {
|
|
5883
|
+
return "";
|
|
5884
|
+
}
|
|
5885
|
+
return url.replace(/\[timestamp\]/gi, String(Date.now())).replace(/\$\{GDPR\}/gi, "0").trim();
|
|
5886
|
+
}
|
|
5887
|
+
},
|
|
5777
5888
|
{
|
|
5778
5889
|
key: "parseVmapTimeOffsetToMs",
|
|
5779
5890
|
value: function parseVmapTimeOffsetToMs(timeOffset) {
|
|
@@ -5796,6 +5907,14 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
5796
5907
|
var millis = Number(ms.padEnd(3, "0").slice(0, 3));
|
|
5797
5908
|
return (hours * 3600 + minutes * 60 + seconds) * 1e3 + millis;
|
|
5798
5909
|
}
|
|
5910
|
+
var msOnly = timeOffset.match(/^(\d{1,2}):(\d{2})(?:\.(\d{1,3}))?$/);
|
|
5911
|
+
if (msOnly) {
|
|
5912
|
+
var _msOnly = _sliced_to_array(msOnly, 4), mm1 = _msOnly[1], ss1 = _msOnly[2], tmp1 = _msOnly[3], ms1 = tmp1 === void 0 ? "0" : tmp1;
|
|
5913
|
+
var minutes1 = Number(mm1);
|
|
5914
|
+
var seconds1 = Number(ss1);
|
|
5915
|
+
var millis1 = Number(ms1.padEnd(3, "0").slice(0, 3));
|
|
5916
|
+
return (minutes1 * 60 + seconds1) * 1e3 + millis1;
|
|
5917
|
+
}
|
|
5799
5918
|
var percent = timeOffset.match(/^(\d+(?:\.\d+)?)%$/);
|
|
5800
5919
|
if (percent) {
|
|
5801
5920
|
var ratio = Number(percent[1]) / 100;
|
|
@@ -7311,23 +7430,49 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
7311
7430
|
key: "onTimeUpdate",
|
|
7312
7431
|
value: function onTimeUpdate(currentTimeSec) {
|
|
7313
7432
|
var _this = this;
|
|
7433
|
+
if (!this.isVmapEnabled() || this.vmapBreaks.length === 0) {
|
|
7434
|
+
return;
|
|
7435
|
+
}
|
|
7314
7436
|
if (this.ima.isAdPlaying() || this.inAdBreak) return;
|
|
7315
7437
|
var nowMs = currentTimeSec * 1e3;
|
|
7316
7438
|
var breakToPlay = this.findBreakForTime(nowMs);
|
|
7317
7439
|
if (breakToPlay) {
|
|
7318
|
-
void this.
|
|
7440
|
+
void this.handleVmapAdBreak(breakToPlay, nowMs).catch(function(error) {
|
|
7319
7441
|
if (_this.config.debugAdTiming) {
|
|
7320
|
-
console.warn("[StormcloudVideoPlayer]
|
|
7442
|
+
console.warn("[StormcloudVideoPlayer] VMAP ad break failed gracefully:", error);
|
|
7321
7443
|
}
|
|
7322
7444
|
});
|
|
7323
7445
|
}
|
|
7324
7446
|
}
|
|
7325
7447
|
},
|
|
7326
7448
|
{
|
|
7327
|
-
key: "
|
|
7328
|
-
value: function
|
|
7449
|
+
key: "onVideoEnded",
|
|
7450
|
+
value: function onVideoEnded() {
|
|
7451
|
+
var _this = this;
|
|
7452
|
+
if (!this.isVmapEnabled() || this.vmapBreaks.length === 0) {
|
|
7453
|
+
return;
|
|
7454
|
+
}
|
|
7455
|
+
if (this.ima.isAdPlaying() || this.inAdBreak) {
|
|
7456
|
+
return;
|
|
7457
|
+
}
|
|
7458
|
+
var durationMs = Number.isFinite(this.video.duration) ? Math.floor(this.video.duration * 1e3) : 0;
|
|
7459
|
+
var postroll = this.vmapBreaks.find(function(b) {
|
|
7460
|
+
return b.startTimeMs === -1 && !_this.consumedVmapBreakIds.has(_this.getAdBreakKey(b));
|
|
7461
|
+
});
|
|
7462
|
+
if (postroll) {
|
|
7463
|
+
void this.handleVmapAdBreak(postroll, durationMs).catch(function(error) {
|
|
7464
|
+
if (_this.config.debugAdTiming) {
|
|
7465
|
+
console.warn("[StormcloudVideoPlayer] VMAP post-roll failed gracefully:", error);
|
|
7466
|
+
}
|
|
7467
|
+
});
|
|
7468
|
+
}
|
|
7469
|
+
}
|
|
7470
|
+
},
|
|
7471
|
+
{
|
|
7472
|
+
key: "handleVmapAdBreak",
|
|
7473
|
+
value: function handleVmapAdBreak(adBreak, nowMs) {
|
|
7329
7474
|
return _async_to_generator(function() {
|
|
7330
|
-
var _adBreak_durationMs,
|
|
7475
|
+
var _adBreak_durationMs, key, breakStartMs, durationMs, endMs, inWindow, tags, first, rest, error;
|
|
7331
7476
|
return _ts_generator(this, function(_state) {
|
|
7332
7477
|
switch(_state.label){
|
|
7333
7478
|
case 0:
|
|
@@ -7345,25 +7490,28 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
7345
7490
|
}
|
|
7346
7491
|
durationMs = (_adBreak_durationMs = adBreak.durationMs) !== null && _adBreak_durationMs !== void 0 ? _adBreak_durationMs : 0;
|
|
7347
7492
|
endMs = breakStartMs + durationMs;
|
|
7348
|
-
|
|
7349
|
-
inWindow = durationMs > 0 ? nowMs > breakStartMs && nowMs < endMs : nowMs + tol >= breakStartMs;
|
|
7493
|
+
inWindow = durationMs > 0 ? nowMs >= breakStartMs && nowMs < endMs : nowMs >= breakStartMs;
|
|
7350
7494
|
if (!inWindow) return [
|
|
7351
7495
|
3,
|
|
7352
7496
|
4
|
|
7353
7497
|
];
|
|
7354
7498
|
this.consumedVmapBreakIds.add(key);
|
|
7355
|
-
|
|
7356
|
-
|
|
7357
|
-
|
|
7358
|
-
|
|
7359
|
-
|
|
7360
|
-
|
|
7361
|
-
4
|
|
7362
|
-
];
|
|
7499
|
+
tags = this.selectVastTagsForBreak(adBreak);
|
|
7500
|
+
if (!tags || tags.length === 0) {
|
|
7501
|
+
return [
|
|
7502
|
+
2
|
|
7503
|
+
];
|
|
7504
|
+
}
|
|
7363
7505
|
first = tags[0];
|
|
7364
7506
|
rest = tags.slice(1);
|
|
7365
7507
|
this.adPodQueue = rest;
|
|
7366
7508
|
this.ima.updateOriginalMutedState(this.video.muted, this.video.volume);
|
|
7509
|
+
this.showAds = true;
|
|
7510
|
+
this.inAdBreak = true;
|
|
7511
|
+
this.currentAdBreakStartWallClockMs = Date.now();
|
|
7512
|
+
if (!this.video.paused) {
|
|
7513
|
+
this.video.pause();
|
|
7514
|
+
}
|
|
7367
7515
|
_state.label = 1;
|
|
7368
7516
|
case 1:
|
|
7369
7517
|
_state.trys.push([
|
|
@@ -7378,10 +7526,6 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
7378
7526
|
];
|
|
7379
7527
|
case 2:
|
|
7380
7528
|
_state.sent();
|
|
7381
|
-
this.inAdBreak = true;
|
|
7382
|
-
this.expectedAdBreakDurationMs = remainingMs;
|
|
7383
|
-
this.currentAdBreakStartWallClockMs = Date.now();
|
|
7384
|
-
this.scheduleAdStopCountdown(remainingMs);
|
|
7385
7529
|
return [
|
|
7386
7530
|
3,
|
|
7387
7531
|
4
|
|
@@ -7389,8 +7533,10 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
7389
7533
|
case 3:
|
|
7390
7534
|
error = _state.sent();
|
|
7391
7535
|
this.adPodQueue = [];
|
|
7536
|
+
this.inAdBreak = false;
|
|
7537
|
+
this.showAds = false;
|
|
7392
7538
|
if (this.config.debugAdTiming) {
|
|
7393
|
-
console.warn("[StormcloudVideoPlayer]
|
|
7539
|
+
console.warn("[StormcloudVideoPlayer] VMAP ad request failed:", error);
|
|
7394
7540
|
}
|
|
7395
7541
|
return [
|
|
7396
7542
|
3,
|
|
@@ -8061,16 +8207,18 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
8061
8207
|
{
|
|
8062
8208
|
key: "selectVastTagsForBreak",
|
|
8063
8209
|
value: function selectVastTagsForBreak(b) {
|
|
8210
|
+
var _this = this;
|
|
8064
8211
|
if (!b || !b.vastTagUrl) return void 0;
|
|
8065
|
-
|
|
8066
|
-
|
|
8067
|
-
|
|
8212
|
+
var resolvedUrl = this.resolveVmapAdTagUrl(b.vastTagUrl);
|
|
8213
|
+
if (resolvedUrl.includes(",")) {
|
|
8214
|
+
return resolvedUrl.split(",").map(function(s) {
|
|
8215
|
+
return _this.resolveVmapAdTagUrl(s.trim());
|
|
8068
8216
|
}).filter(function(s) {
|
|
8069
8217
|
return s.length > 0;
|
|
8070
8218
|
});
|
|
8071
8219
|
}
|
|
8072
8220
|
return [
|
|
8073
|
-
|
|
8221
|
+
resolvedUrl
|
|
8074
8222
|
];
|
|
8075
8223
|
}
|
|
8076
8224
|
},
|
|
@@ -8102,9 +8250,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
8102
8250
|
{
|
|
8103
8251
|
key: "findBreakForTime",
|
|
8104
8252
|
value: function findBreakForTime(nowMs) {
|
|
8105
|
-
var _this_config_driftToleranceMs;
|
|
8106
8253
|
var schedule = this.vmapBreaks;
|
|
8107
|
-
var tol = (_this_config_driftToleranceMs = this.config.driftToleranceMs) !== null && _this_config_driftToleranceMs !== void 0 ? _this_config_driftToleranceMs : 1e3;
|
|
8108
8254
|
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
8109
8255
|
try {
|
|
8110
8256
|
for(var _iterator = schedule[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
@@ -8116,9 +8262,14 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
8116
8262
|
if (breakStartMs == null) {
|
|
8117
8263
|
continue;
|
|
8118
8264
|
}
|
|
8119
|
-
|
|
8120
|
-
|
|
8121
|
-
|
|
8265
|
+
if (b.durationMs) {
|
|
8266
|
+
var end = breakStartMs + b.durationMs;
|
|
8267
|
+
if (nowMs >= breakStartMs && nowMs < end) {
|
|
8268
|
+
return b;
|
|
8269
|
+
}
|
|
8270
|
+
continue;
|
|
8271
|
+
}
|
|
8272
|
+
if (nowMs >= breakStartMs) {
|
|
8122
8273
|
return b;
|
|
8123
8274
|
}
|
|
8124
8275
|
}
|
|
@@ -8326,6 +8477,10 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
8326
8477
|
this.video.removeEventListener("timeupdate", this.timeUpdateHandler);
|
|
8327
8478
|
delete this.timeUpdateHandler;
|
|
8328
8479
|
}
|
|
8480
|
+
if (this.endedHandler) {
|
|
8481
|
+
this.video.removeEventListener("ended", this.endedHandler);
|
|
8482
|
+
delete this.endedHandler;
|
|
8483
|
+
}
|
|
8329
8484
|
if (this.emptiedHandler) {
|
|
8330
8485
|
this.video.removeEventListener("emptied", this.emptiedHandler);
|
|
8331
8486
|
delete this.emptiedHandler;
|
|
@@ -8351,6 +8506,7 @@ var CRITICAL_PROPS = [
|
|
|
8351
8506
|
"allowNativeHls",
|
|
8352
8507
|
"isLiveStream",
|
|
8353
8508
|
"licenseKey",
|
|
8509
|
+
"isVmap",
|
|
8354
8510
|
"vmapUrl",
|
|
8355
8511
|
"lowLatencyMode",
|
|
8356
8512
|
"driftToleranceMs",
|
|
@@ -8359,7 +8515,7 @@ var CRITICAL_PROPS = [
|
|
|
8359
8515
|
var CONTROLS_HIDE_DELAY = 3e3;
|
|
8360
8516
|
var DEFAULT_PLAYER_ASPECT_RATIO = 16 / 9;
|
|
8361
8517
|
var StormcloudVideoPlayerComponent = import_react.default.memo(function(props) {
|
|
8362
|
-
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, adPlayerType = props.adPlayerType, minSegmentsBeforePlay = props.minSegmentsBeforePlay, restVideoAttrs = _object_without_properties(props, [
|
|
8518
|
+
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, adPlayerType = props.adPlayerType, minSegmentsBeforePlay = props.minSegmentsBeforePlay, restVideoAttrs = _object_without_properties(props, [
|
|
8363
8519
|
"src",
|
|
8364
8520
|
"autoplay",
|
|
8365
8521
|
"muted",
|
|
@@ -8387,6 +8543,7 @@ var StormcloudVideoPlayerComponent = import_react.default.memo(function(props) {
|
|
|
8387
8543
|
"licenseKey",
|
|
8388
8544
|
"vastMode",
|
|
8389
8545
|
"vastTagUrl",
|
|
8546
|
+
"isVmap",
|
|
8390
8547
|
"vmapUrl",
|
|
8391
8548
|
"adPlayerType",
|
|
8392
8549
|
"minSegmentsBeforePlay"
|
|
@@ -8530,6 +8687,7 @@ var StormcloudVideoPlayerComponent = import_react.default.memo(function(props) {
|
|
|
8530
8687
|
allowNativeHls,
|
|
8531
8688
|
isLiveStream,
|
|
8532
8689
|
licenseKey,
|
|
8690
|
+
isVmap,
|
|
8533
8691
|
vmapUrl,
|
|
8534
8692
|
lowLatencyMode,
|
|
8535
8693
|
driftToleranceMs,
|
|
@@ -8574,6 +8732,7 @@ var StormcloudVideoPlayerComponent = import_react.default.memo(function(props) {
|
|
|
8574
8732
|
if (licenseKey !== void 0) cfg.licenseKey = licenseKey;
|
|
8575
8733
|
if (vastMode !== void 0) cfg.vastMode = vastMode;
|
|
8576
8734
|
if (vastTagUrl !== void 0) cfg.vastTagUrl = vastTagUrl;
|
|
8735
|
+
if (isVmap !== void 0) cfg.isVmap = isVmap;
|
|
8577
8736
|
if (vmapUrl !== void 0) cfg.vmapUrl = vmapUrl;
|
|
8578
8737
|
if (adPlayerType !== void 0) cfg.adPlayerType = adPlayerType;
|
|
8579
8738
|
if (minSegmentsBeforePlay !== void 0) cfg.minSegmentsBeforePlay = minSegmentsBeforePlay;
|
|
@@ -9737,6 +9896,7 @@ var defaultProps = {
|
|
|
9737
9896
|
showCustomControls: false,
|
|
9738
9897
|
hideLoadingIndicator: false,
|
|
9739
9898
|
licenseKey: "",
|
|
9899
|
+
isVmap: false,
|
|
9740
9900
|
vmapUrl: "",
|
|
9741
9901
|
adFailsafeTimeoutMs: 1e4,
|
|
9742
9902
|
minSegmentsBeforePlay: 2,
|
|
@@ -10681,6 +10841,7 @@ var SUPPORTED_PROPS = [
|
|
|
10681
10841
|
"debugAdTiming",
|
|
10682
10842
|
"showCustomControls",
|
|
10683
10843
|
"licenseKey",
|
|
10844
|
+
"isVmap",
|
|
10684
10845
|
"vmapUrl",
|
|
10685
10846
|
"adFailsafeTimeoutMs",
|
|
10686
10847
|
"minSegmentsBeforePlay",
|
|
@@ -10870,32 +11031,47 @@ var StormcloudPlayer = createStormcloudPlayer(players_default, players_default[p
|
|
|
10870
11031
|
var StormcloudPlayer_default = StormcloudPlayer;
|
|
10871
11032
|
// Annotate the CommonJS export names for ESM import in node:
|
|
10872
11033
|
0 && (module.exports = {
|
|
11034
|
+
DEFAULT_MQTT_CONFIG: DEFAULT_MQTT_CONFIG,
|
|
10873
11035
|
IS_BROWSER: IS_BROWSER,
|
|
10874
11036
|
IS_GLOBAL: IS_GLOBAL,
|
|
10875
11037
|
IS_IOS: IS_IOS,
|
|
10876
11038
|
IS_SAFARI: IS_SAFARI,
|
|
11039
|
+
MQTT_CA_CERT_FILE: MQTT_CA_CERT_FILE,
|
|
10877
11040
|
SUPPORTS_DASH: SUPPORTS_DASH,
|
|
10878
11041
|
SUPPORTS_HLS: SUPPORTS_HLS,
|
|
10879
11042
|
StormcloudPlayer: StormcloudPlayer,
|
|
10880
11043
|
StormcloudVideoPlayer: StormcloudVideoPlayer,
|
|
10881
11044
|
StormcloudVideoPlayerComponent: StormcloudVideoPlayerComponent,
|
|
11045
|
+
applyMQTTConfig: applyMQTTConfig,
|
|
11046
|
+
buildMQTTBrokerUrl: buildMQTTBrokerUrl,
|
|
11047
|
+
buildPlayerTopic: buildPlayerTopic,
|
|
10882
11048
|
canPlay: canPlay,
|
|
11049
|
+
configureMQTT: configureMQTT,
|
|
10883
11050
|
createHlsAdPlayer: createHlsAdPlayer,
|
|
10884
11051
|
createImaController: createImaController,
|
|
10885
11052
|
createStormcloudPlayer: createStormcloudPlayer,
|
|
10886
11053
|
detectBrowser: detectBrowser,
|
|
11054
|
+
disconnectMQTT: disconnectMQTT,
|
|
11055
|
+
ensureMQTTClient: ensureMQTTClient,
|
|
10887
11056
|
getBrowserConfigOverrides: getBrowserConfigOverrides,
|
|
10888
11057
|
getBrowserID: getBrowserID,
|
|
10889
11058
|
getClientInfo: getClientInfo,
|
|
11059
|
+
getMQTTStatus: getMQTTStatus,
|
|
10890
11060
|
getRecommendedAdPlayer: getRecommendedAdPlayer,
|
|
11061
|
+
initMQTTClient: initMQTTClient,
|
|
10891
11062
|
initializePolyfills: initializePolyfills,
|
|
11063
|
+
isMQTTConfigured: isMQTTConfigured,
|
|
11064
|
+
isMQTTConnected: isMQTTConnected,
|
|
11065
|
+
isMQTTEnabled: isMQTTEnabled,
|
|
10892
11066
|
isMediaStream: isMediaStream,
|
|
10893
11067
|
lazy: lazy,
|
|
10894
11068
|
logBrowserInfo: logBrowserInfo,
|
|
10895
11069
|
merge: merge,
|
|
11070
|
+
mqttConfig: mqttConfig,
|
|
10896
11071
|
omit: omit,
|
|
10897
11072
|
parseQuery: parseQuery,
|
|
10898
11073
|
players: players,
|
|
11074
|
+
publishMQTT: publishMQTT,
|
|
10899
11075
|
randomString: randomString,
|
|
10900
11076
|
sendAdDetectTracking: sendAdDetectTracking,
|
|
10901
11077
|
sendAdImpressionTracking: sendAdImpressionTracking,
|