stormcloud-video-player 0.8.39 → 0.8.41

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/lib/index.cjs CHANGED
@@ -2183,10 +2183,19 @@ function openConnection() {
2183
2183
  password: mqttConfig.password,
2184
2184
  keepalive: KEEPALIVE_SECONDS,
2185
2185
  clean: true,
2186
+ // Disable MQTT.js internal reconnect; we manage reconnection ourselves.
2186
2187
  reconnectPeriod: 0,
2187
2188
  connectTimeout: CONNECT_TIMEOUT_MS,
2188
2189
  queueQoSZero: false,
2189
- reschedulePings: true
2190
+ reschedulePings: true,
2191
+ // Root-cause fix for the Tizen 4.0 "Keepalive timeout" loop: MQTT.js's
2192
+ // default timerVariant "auto" runs the keepalive interval inside a
2193
+ // Blob-URL Web Worker (via worker-timers). On Samsung Tizen 4.0 (old
2194
+ // WebKit) served from a file:// origin that worker can't tick reliably,
2195
+ // so the keepalive counter trips onKeepaliveTimeout almost immediately
2196
+ // after connect. Force the native setInterval timer instead; the main
2197
+ // thread is free because video is decoded by the native AVPlay pipeline.
2198
+ timerVariant: "native"
2190
2199
  });
2191
2200
  } catch (err) {
2192
2201
  status = "error";
@@ -9011,12 +9020,10 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
9011
9020
  ];
9012
9021
  case 3:
9013
9022
  error = _state.sent();
9014
- this.adBreak.adPodQueue = [];
9015
- this.adBreak.inAdBreak = false;
9016
- this.adBreak.showAds = false;
9017
9023
  if (this.debug) {
9018
9024
  console.warn("[StormcloudVideoPlayer] VMAP ad request failed:", error);
9019
9025
  }
9026
+ this.adBreak.handleAdPodComplete();
9020
9027
  return [
9021
9028
  3,
9022
9029
  4
@@ -9186,6 +9193,64 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
9186
9193
  // src/ui/StormcloudVideoPlayer.tsx
9187
9194
  var import_fa = require("react-icons/fa");
9188
9195
  var import_jsx_runtime = require("react/jsx-runtime");
9196
+ var ExpandIcon = function ExpandIcon(param) {
9197
+ var _param_size = param.size, size = _param_size === void 0 ? 18 : _param_size;
9198
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", {
9199
+ width: size,
9200
+ height: size,
9201
+ viewBox: "0 0 24 24",
9202
+ fill: "none",
9203
+ stroke: "currentColor",
9204
+ strokeWidth: 2,
9205
+ strokeLinecap: "round",
9206
+ strokeLinejoin: "round",
9207
+ "aria-hidden": "true",
9208
+ focusable: "false",
9209
+ children: [
9210
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", {
9211
+ d: "M9 4H4v5"
9212
+ }),
9213
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", {
9214
+ d: "M20 9V4h-5"
9215
+ }),
9216
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", {
9217
+ d: "M15 20h5v-5"
9218
+ }),
9219
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", {
9220
+ d: "M4 15v5h5"
9221
+ })
9222
+ ]
9223
+ });
9224
+ };
9225
+ var CompressIcon = function CompressIcon(param) {
9226
+ var _param_size = param.size, size = _param_size === void 0 ? 18 : _param_size;
9227
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", {
9228
+ width: size,
9229
+ height: size,
9230
+ viewBox: "0 0 24 24",
9231
+ fill: "none",
9232
+ stroke: "currentColor",
9233
+ strokeWidth: 2,
9234
+ strokeLinecap: "round",
9235
+ strokeLinejoin: "round",
9236
+ "aria-hidden": "true",
9237
+ focusable: "false",
9238
+ children: [
9239
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", {
9240
+ d: "M4 9h5V4"
9241
+ }),
9242
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", {
9243
+ d: "M15 4v5h5"
9244
+ }),
9245
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", {
9246
+ d: "M20 15h-5v5"
9247
+ }),
9248
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", {
9249
+ d: "M9 20v-5H4"
9250
+ })
9251
+ ]
9252
+ });
9253
+ };
9189
9254
  var CRITICAL_PROPS = [
9190
9255
  "src",
9191
9256
  "allowNativeHls",
@@ -10223,9 +10288,9 @@ var StormcloudVideoPlayerComponent = import_react.default.memo(function(props) {
10223
10288
  minHeight: "".concat(36 * responsiveScale, "px")
10224
10289
  },
10225
10290
  title: isFullscreen2 ? "Exit Fullscreen" : "Enter Fullscreen",
10226
- children: isFullscreen2 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_fa.FaCompress, {
10291
+ children: isFullscreen2 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CompressIcon, {
10227
10292
  size: Math.max(14, 18 * responsiveScale)
10228
- }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_fa.FaExpand, {
10293
+ }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ExpandIcon, {
10229
10294
  size: Math.max(14, 18 * responsiveScale)
10230
10295
  })
10231
10296
  })
@@ -10424,9 +10489,9 @@ var StormcloudVideoPlayerComponent = import_react.default.memo(function(props) {
10424
10489
  background: "rgba(0, 0, 0, 0.6)"
10425
10490
  },
10426
10491
  title: isFullscreen2 ? "Exit Fullscreen" : "Enter Fullscreen",
10427
- children: isFullscreen2 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_fa.FaCompress, {
10492
+ children: isFullscreen2 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CompressIcon, {
10428
10493
  size: Math.max(14, 18 * responsiveScale)
10429
- }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_fa.FaExpand, {
10494
+ }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ExpandIcon, {
10430
10495
  size: Math.max(14, 18 * responsiveScale)
10431
10496
  })
10432
10497
  })