@ezuikit/player-theme 3.1.4-beta.2 → 3.1.5-beta.2

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/constant.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /*
2
- * @ezuikit/player-theme v3.1.4-beta.2
3
- * Copyright (c) 2026-08-27 19:42:35 Ezviz-OpenBiz
2
+ * @ezuikit/player-theme v3.1.5-beta.2
3
+ * Copyright (c) 2026-09-04 02:44:28 Ezviz-OpenBiz
4
4
  * Released under the MIT License.
5
5
  */
6
6
  /**
package/dist/index.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  /*
2
- * @ezuikit/player-theme v3.1.4-beta.2
3
- * Copyright (c) 2026-08-27 19:42:35 Ezviz-OpenBiz
2
+ * @ezuikit/player-theme v3.1.5-beta.2
3
+ * Copyright (c) 2026-09-04 02:44:28 Ezviz-OpenBiz
4
4
  * Released under the MIT License.
5
5
  */
6
6
  'use strict';
@@ -2142,11 +2142,10 @@ var Provider = /*#__PURE__*/ function() {
2142
2142
  return item.element === element;
2143
2143
  });
2144
2144
  if (index >= 0) {
2145
- if (!this.fullscreens[index].onChange) {
2146
- this.fullscreens[index].onChange = [];
2147
- this.fullscreens[index].onChange.push(onChange);
2148
- } else {
2149
- this.fullscreens[index].onChange.push(onChange);
2145
+ var target = this.fullscreens[index];
2146
+ target.onChange = Array.isArray(target.onChange) ? target.onChange : [];
2147
+ if (!target.onChange.includes(onChange)) {
2148
+ target.onChange.push(onChange);
2150
2149
  }
2151
2150
  } else {
2152
2151
  this.fullscreens.push({
@@ -3263,6 +3262,12 @@ var en = {
3263
3262
  part: 'left',
3264
3263
  isrender: 1
3265
3264
  },
3265
+ {
3266
+ iconId: 'capturePicture',
3267
+ part: 'left',
3268
+ defaultActive: 0,
3269
+ isrender: 1
3270
+ },
3266
3271
  {
3267
3272
  iconId: 'volume',
3268
3273
  part: 'left',
@@ -3276,6 +3281,72 @@ var en = {
3276
3281
  defaultActive: 0,
3277
3282
  isrender: 1
3278
3283
  },
3284
+ {
3285
+ // flv 录制 2.1.2 新增
3286
+ iconId: 'zoom',
3287
+ part: 'left',
3288
+ defaultActive: 0,
3289
+ isrender: 1
3290
+ },
3291
+ {
3292
+ iconId: 'fullscreen',
3293
+ part: 'right',
3294
+ defaultActive: 0,
3295
+ isrender: 1
3296
+ },
3297
+ {
3298
+ iconId: 'globalFullscreen',
3299
+ part: 'right',
3300
+ defaultActive: 0,
3301
+ isrender: 1
3302
+ }
3303
+ ]
3304
+ }
3305
+ };
3306
+
3307
+ /**
3308
+ * flv 预览
3309
+ */ var RecTemplate = {
3310
+ autoFocus: 3,
3311
+ // poster:
3312
+ // "https://img2.baidu.com/it/u=3209353042,356122753&fm=253&fmt=auto&app=138&f=JPEG?w=889&h=500",
3313
+ footer: {
3314
+ btnList: [
3315
+ {
3316
+ iconId: 'play',
3317
+ part: 'left',
3318
+ isrender: 1
3319
+ },
3320
+ {
3321
+ iconId: 'capturePicture',
3322
+ part: 'left',
3323
+ defaultActive: 0,
3324
+ isrender: 1
3325
+ },
3326
+ {
3327
+ iconId: 'volume',
3328
+ part: 'left',
3329
+ defaultActive: 0,
3330
+ isrender: 1
3331
+ },
3332
+ {
3333
+ iconId: 'recordvideo',
3334
+ part: 'left',
3335
+ defaultActive: 0,
3336
+ isrender: 1
3337
+ },
3338
+ {
3339
+ iconId: 'zoom',
3340
+ part: 'left',
3341
+ defaultActive: 0,
3342
+ isrender: 1
3343
+ },
3344
+ {
3345
+ iconId: 'speed',
3346
+ part: 'right',
3347
+ defaultActive: 0,
3348
+ isrender: 1
3349
+ },
3279
3350
  {
3280
3351
  iconId: 'fullscreen',
3281
3352
  part: 'right',
@@ -4774,7 +4845,7 @@ function debounce(func, wait) {
4774
4845
  theme.emit(EVENTS.control.dateChange, date);
4775
4846
  });
4776
4847
  theme.controls.dateControl.on(EVENTS.control.dateDestroy, function() {
4777
- theme.emit(EVENTS.control.recDestroy);
4848
+ theme.emit(EVENTS.control.dateDestroy);
4778
4849
  });
4779
4850
  }
4780
4851
  // 时间控件
@@ -5576,7 +5647,7 @@ function _filterLeftRightControls(btnList) {
5576
5647
  2,
5577
5648
  null
5578
5649
  ];
5579
- theme.emit(EVENTS.message, theme.i18n.t('FETCH_THEME_FAILED'), 'themeError');
5650
+ theme.emit(EVENTS.message, theme.i18n.t('FETCH_THEME_FAILED') + ' ' + data, 'themeError');
5580
5651
  return [
5581
5652
  2,
5582
5653
  null
@@ -5588,7 +5659,7 @@ function _filterLeftRightControls(btnList) {
5588
5659
  2,
5589
5660
  null
5590
5661
  ];
5591
- theme.emit(EVENTS.message, theme.i18n.t('FETCH_THEME_FAILED'), 'themeError');
5662
+ theme.emit(EVENTS.message, theme.i18n.t('FETCH_THEME_FAILED') + ' ' + data, 'themeError');
5592
5663
  return [
5593
5664
  2,
5594
5665
  null
@@ -5913,32 +5984,29 @@ function interactiveHF($container, second, callback) {
5913
5984
  if (Utils.isMobile && _touchStart) {
5914
5985
  var eventName = "click";
5915
5986
  $container.removeEventListener(eventName, _touchStart);
5916
- if (_$footer && _setTimeoutShow) {
5987
+ if (_$footer && _headerFooterTouchStart) {
5917
5988
  _$footer.removeEventListener(eventName, _headerFooterTouchStart);
5918
5989
  }
5919
- if (_$header && _setTimeoutShow) {
5990
+ if (_$header && _headerFooterTouchStart) {
5920
5991
  _$header.removeEventListener(eventName, _headerFooterTouchStart);
5921
5992
  }
5922
5993
  }
5923
- if (_setTimeoutShow) {
5994
+ if (_hide || _setTimeoutShow) {
5924
5995
  var eventName1 = window.PointerEvent ? "pointerdown" : "click";
5925
5996
  $container.removeEventListener(eventName1, _setTimeoutShow);
5926
5997
  $container.removeEventListener('mousemove', _setTimeoutShow); // 不要被 header 和 footer 冒泡过来
5927
5998
  $container.removeEventListener('mouseleave', _hide);
5928
- if (_$footer && _clearTimeout) {
5999
+ if (_$footer && _headerFooterMousemove) {
5929
6000
  var _$footer_removeEventListener, _$footer_removeEventListener1;
5930
6001
  _$footer == null ? void 0 : (_$footer_removeEventListener = _$footer.removeEventListener) == null ? void 0 : _$footer_removeEventListener.call(_$footer, eventName1, _headerFooterMousemove);
5931
6002
  _$footer == null ? void 0 : (_$footer_removeEventListener1 = _$footer.removeEventListener) == null ? void 0 : _$footer_removeEventListener1.call(_$footer, "mousemove", _headerFooterMousemove);
5932
6003
  }
5933
- if (_$header && _clearTimeout) {
6004
+ if (_$header && _headerFooterMousemove) {
5934
6005
  var _$header_removeEventListener, _$header_removeEventListener1;
5935
6006
  _$header == null ? void 0 : (_$header_removeEventListener = _$header.removeEventListener) == null ? void 0 : _$header_removeEventListener.call(_$header, eventName1, _headerFooterMousemove);
5936
6007
  _$header == null ? void 0 : (_$header_removeEventListener1 = _$header.removeEventListener) == null ? void 0 : _$header_removeEventListener1.call(_$header, "mousemove", _headerFooterMousemove);
5937
6008
  }
5938
6009
  }
5939
- if (_hide) {
5940
- $container.removeEventListener('mouseleave', _hide);
5941
- }
5942
6010
  _touchStart = null;
5943
6011
  _setTimeoutShow = null;
5944
6012
  _hide = null;
@@ -10472,6 +10540,7 @@ var THEME_DEFAULT_OPTIONS = {
10472
10540
  var themeData = (_this_options = _this.options) == null ? void 0 : _this_options.themeData; // IThemeData | null | undefined
10473
10541
  var template = (_this_options1 = _this.options) == null ? void 0 : _this_options1.template; // ThemeTemplateType | string | undefined
10474
10542
  var initialThemeData;
10543
+ // hls ezhls flv mp4 不支持 template
10475
10544
  if (options.type === 'hls' || options.type === 'ezhls') {
10476
10545
  var _options_url;
10477
10546
  // hls / ezhls:@3.1.1 起支持自定义 themeData,但不支持标准提供的模板;未传时回退 hlsLiveTemplate
@@ -10481,8 +10550,9 @@ var THEME_DEFAULT_OPTIONS = {
10481
10550
  'flv',
10482
10551
  'mp4'
10483
10552
  ].includes(options.type)) {
10553
+ var _options_url1;
10484
10554
  // flv / mp4:支持自定义 themeData,未传时回退到标准直播模板 LiveTemplate(2026-01-19 起支持自定义)
10485
- initialThemeData = themeData !== undefined ? themeData : LiveTemplate;
10555
+ initialThemeData = themeData !== undefined ? themeData : ((_options_url1 = options.url) == null ? void 0 : _options_url1.includes('/openpb/')) ? RecTemplate : LiveTemplate;
10486
10556
  } else {
10487
10557
  var _ref6;
10488
10558
  // 其余类型(如 ezopen 私有流):template 优先级高于 themeData,二者都未设置时为 null
@@ -11435,7 +11505,6 @@ var THEME_DEFAULT_OPTIONS = {
11435
11505
  * theme.on(Theme.EVENTS.loading, (loading: boolean) => {})
11436
11506
  * ```
11437
11507
  */ function set(loading) {
11438
- this._loading = loading;
11439
11508
  if (loading) {
11440
11509
  var _this__loadingControl;
11441
11510
  (_this__loadingControl = this._loadingControl) == null ? void 0 : _this__loadingControl.show();
@@ -11444,6 +11513,7 @@ var THEME_DEFAULT_OPTIONS = {
11444
11513
  (_this__loadingControl1 = this._loadingControl) == null ? void 0 : _this__loadingControl1.hide();
11445
11514
  }
11446
11515
  if (this._loading !== loading) {
11516
+ this._loading = loading;
11447
11517
  this.emit(EVENTS.loading, loading);
11448
11518
  }
11449
11519
  }
@@ -11740,7 +11810,9 @@ var THEME_DEFAULT_OPTIONS = {
11740
11810
  },
11741
11811
  {
11742
11812
  key: "isEzopen",
11743
- get: function get() {
11813
+ get: /**
11814
+ * 私有流地址
11815
+ */ function get() {
11744
11816
  // 私有流地址
11745
11817
  return /^ezopen:\/\//.test(this._url);
11746
11818
  }
@@ -11751,21 +11823,26 @@ var THEME_DEFAULT_OPTIONS = {
11751
11823
  * 判断播放地址是萤石的播放地址
11752
11824
  * @since 3.1.2
11753
11825
  */ function get() {
11754
- var path = this._url.split('?')[0];
11755
- var queryStr = this._url.split('?')[1];
11756
- var lastPath = path.split('/')[path.split('/').length - 1];
11757
- // ezopen://open.ys7.com/BC7799091/1.rec
11758
- // rtmp://rtmp05open.ys7.com:1935/v3/openpb/BC7799091_1_1
11759
- // https://open.ys7.com/v3/openpb/llhls/BC7799091_1_1.m3u8
11760
- // https://rtmp05open.ys7.com:9188/v3/openpb/BC7799091_1_1.flv
11761
- // https://host:2001/live?dev=D08197169&chn=1&ss=token&stream=1
11762
- if (// 私有流地址
11763
- /^ezopen:\/\//.test(path) || // 标准流地址
11764
- path.includes('/openlive/') || path.includes('/openpb/') && /[a-zA-Z0-9:]+_\d+_\d+/.test(lastPath) || // webtransport 取流
11765
- utilsTools.isHttp(this._url) && queryStr && /dev=[a-zA-Z0-9:]+/.test(queryStr) && /chn=\d+/.test(queryStr) && /stream=\d+/.test(queryStr) && queryStr.includes('ssn=')) {
11766
- return true;
11826
+ try {
11827
+ var _this__url_split, _this__url_split1, _path_split;
11828
+ var path = (_this__url_split = this._url.split('?')) == null ? void 0 : _this__url_split[0];
11829
+ var queryStr = (_this__url_split1 = this._url.split('?')) == null ? void 0 : _this__url_split1[1];
11830
+ var lastPath = (_path_split = path.split('/')) == null ? void 0 : _path_split[path.split('/').length - 1];
11831
+ // ezopen://open.ys7.com/BC7799091/1.rec
11832
+ // rtmp://rtmp05open.ys7.com:1935/v3/openpb/BC7799091_1_1
11833
+ // https://open.ys7.com/v3/openpb/llhls/BC7799091_1_1.m3u8
11834
+ // https://rtmp05open.ys7.com:9188/v3/openpb/BC7799091_1_1.flv
11835
+ // https://host:2001/live?dev=D08197169&chn=1&ss=token&stream=1
11836
+ if (// 私有流地址
11837
+ /^ezopen:\/\//.test(path) || // 标准流地址
11838
+ path.includes('/openlive/') || path.includes('/openpb/') && /[a-zA-Z0-9:]+_\d+_\d+/.test(lastPath) || // webtransport 取流
11839
+ utilsTools.isHttp(this._url) && queryStr && /dev=[a-zA-Z0-9:]+/.test(queryStr) && /chn=\d+/.test(queryStr) && /stream=\d+/.test(queryStr) && queryStr.includes('ssn=')) {
11840
+ return true;
11841
+ }
11842
+ return false;
11843
+ } catch (error) {
11844
+ return false;
11767
11845
  }
11768
- return false;
11769
11846
  }
11770
11847
  }
11771
11848
  ]);
@@ -11777,7 +11854,7 @@ var THEME_DEFAULT_OPTIONS = {
11777
11854
  zh: zh,
11778
11855
  en: en
11779
11856
  };
11780
- /** 版本号 @since 0.0.1 */ Theme.THEME_VERSION = '3.1.4-beta.2';
11857
+ /** 版本号 @since 0.0.1 */ Theme.THEME_VERSION = '3.1.5-beta.2';
11781
11858
 
11782
11859
  exports.Control = Control;
11783
11860
  exports.EVENTS = EVENTS;
package/dist/index.esm.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /*
2
- * @ezuikit/player-theme v3.1.4-beta.2
3
- * Copyright (c) 2026-08-27 19:42:35 Ezviz-OpenBiz
2
+ * @ezuikit/player-theme v3.1.5-beta.2
3
+ * Copyright (c) 2026-09-04 02:44:28 Ezviz-OpenBiz
4
4
  * Released under the MIT License.
5
5
  */
6
6
  import EventEmitter from 'eventemitter3';
@@ -2140,11 +2140,10 @@ var Provider = /*#__PURE__*/ function() {
2140
2140
  return item.element === element;
2141
2141
  });
2142
2142
  if (index >= 0) {
2143
- if (!this.fullscreens[index].onChange) {
2144
- this.fullscreens[index].onChange = [];
2145
- this.fullscreens[index].onChange.push(onChange);
2146
- } else {
2147
- this.fullscreens[index].onChange.push(onChange);
2143
+ var target = this.fullscreens[index];
2144
+ target.onChange = Array.isArray(target.onChange) ? target.onChange : [];
2145
+ if (!target.onChange.includes(onChange)) {
2146
+ target.onChange.push(onChange);
2148
2147
  }
2149
2148
  } else {
2150
2149
  this.fullscreens.push({
@@ -3261,6 +3260,12 @@ var en = {
3261
3260
  part: 'left',
3262
3261
  isrender: 1
3263
3262
  },
3263
+ {
3264
+ iconId: 'capturePicture',
3265
+ part: 'left',
3266
+ defaultActive: 0,
3267
+ isrender: 1
3268
+ },
3264
3269
  {
3265
3270
  iconId: 'volume',
3266
3271
  part: 'left',
@@ -3274,6 +3279,72 @@ var en = {
3274
3279
  defaultActive: 0,
3275
3280
  isrender: 1
3276
3281
  },
3282
+ {
3283
+ // flv 录制 2.1.2 新增
3284
+ iconId: 'zoom',
3285
+ part: 'left',
3286
+ defaultActive: 0,
3287
+ isrender: 1
3288
+ },
3289
+ {
3290
+ iconId: 'fullscreen',
3291
+ part: 'right',
3292
+ defaultActive: 0,
3293
+ isrender: 1
3294
+ },
3295
+ {
3296
+ iconId: 'globalFullscreen',
3297
+ part: 'right',
3298
+ defaultActive: 0,
3299
+ isrender: 1
3300
+ }
3301
+ ]
3302
+ }
3303
+ };
3304
+
3305
+ /**
3306
+ * flv 预览
3307
+ */ var RecTemplate = {
3308
+ autoFocus: 3,
3309
+ // poster:
3310
+ // "https://img2.baidu.com/it/u=3209353042,356122753&fm=253&fmt=auto&app=138&f=JPEG?w=889&h=500",
3311
+ footer: {
3312
+ btnList: [
3313
+ {
3314
+ iconId: 'play',
3315
+ part: 'left',
3316
+ isrender: 1
3317
+ },
3318
+ {
3319
+ iconId: 'capturePicture',
3320
+ part: 'left',
3321
+ defaultActive: 0,
3322
+ isrender: 1
3323
+ },
3324
+ {
3325
+ iconId: 'volume',
3326
+ part: 'left',
3327
+ defaultActive: 0,
3328
+ isrender: 1
3329
+ },
3330
+ {
3331
+ iconId: 'recordvideo',
3332
+ part: 'left',
3333
+ defaultActive: 0,
3334
+ isrender: 1
3335
+ },
3336
+ {
3337
+ iconId: 'zoom',
3338
+ part: 'left',
3339
+ defaultActive: 0,
3340
+ isrender: 1
3341
+ },
3342
+ {
3343
+ iconId: 'speed',
3344
+ part: 'right',
3345
+ defaultActive: 0,
3346
+ isrender: 1
3347
+ },
3277
3348
  {
3278
3349
  iconId: 'fullscreen',
3279
3350
  part: 'right',
@@ -4772,7 +4843,7 @@ function debounce(func, wait) {
4772
4843
  theme.emit(EVENTS.control.dateChange, date);
4773
4844
  });
4774
4845
  theme.controls.dateControl.on(EVENTS.control.dateDestroy, function() {
4775
- theme.emit(EVENTS.control.recDestroy);
4846
+ theme.emit(EVENTS.control.dateDestroy);
4776
4847
  });
4777
4848
  }
4778
4849
  // 时间控件
@@ -5574,7 +5645,7 @@ function _filterLeftRightControls(btnList) {
5574
5645
  2,
5575
5646
  null
5576
5647
  ];
5577
- theme.emit(EVENTS.message, theme.i18n.t('FETCH_THEME_FAILED'), 'themeError');
5648
+ theme.emit(EVENTS.message, theme.i18n.t('FETCH_THEME_FAILED') + ' ' + data, 'themeError');
5578
5649
  return [
5579
5650
  2,
5580
5651
  null
@@ -5586,7 +5657,7 @@ function _filterLeftRightControls(btnList) {
5586
5657
  2,
5587
5658
  null
5588
5659
  ];
5589
- theme.emit(EVENTS.message, theme.i18n.t('FETCH_THEME_FAILED'), 'themeError');
5660
+ theme.emit(EVENTS.message, theme.i18n.t('FETCH_THEME_FAILED') + ' ' + data, 'themeError');
5590
5661
  return [
5591
5662
  2,
5592
5663
  null
@@ -5911,32 +5982,29 @@ function interactiveHF($container, second, callback) {
5911
5982
  if (Utils.isMobile && _touchStart) {
5912
5983
  var eventName = "click";
5913
5984
  $container.removeEventListener(eventName, _touchStart);
5914
- if (_$footer && _setTimeoutShow) {
5985
+ if (_$footer && _headerFooterTouchStart) {
5915
5986
  _$footer.removeEventListener(eventName, _headerFooterTouchStart);
5916
5987
  }
5917
- if (_$header && _setTimeoutShow) {
5988
+ if (_$header && _headerFooterTouchStart) {
5918
5989
  _$header.removeEventListener(eventName, _headerFooterTouchStart);
5919
5990
  }
5920
5991
  }
5921
- if (_setTimeoutShow) {
5992
+ if (_hide || _setTimeoutShow) {
5922
5993
  var eventName1 = window.PointerEvent ? "pointerdown" : "click";
5923
5994
  $container.removeEventListener(eventName1, _setTimeoutShow);
5924
5995
  $container.removeEventListener('mousemove', _setTimeoutShow); // 不要被 header 和 footer 冒泡过来
5925
5996
  $container.removeEventListener('mouseleave', _hide);
5926
- if (_$footer && _clearTimeout) {
5997
+ if (_$footer && _headerFooterMousemove) {
5927
5998
  var _$footer_removeEventListener, _$footer_removeEventListener1;
5928
5999
  _$footer == null ? void 0 : (_$footer_removeEventListener = _$footer.removeEventListener) == null ? void 0 : _$footer_removeEventListener.call(_$footer, eventName1, _headerFooterMousemove);
5929
6000
  _$footer == null ? void 0 : (_$footer_removeEventListener1 = _$footer.removeEventListener) == null ? void 0 : _$footer_removeEventListener1.call(_$footer, "mousemove", _headerFooterMousemove);
5930
6001
  }
5931
- if (_$header && _clearTimeout) {
6002
+ if (_$header && _headerFooterMousemove) {
5932
6003
  var _$header_removeEventListener, _$header_removeEventListener1;
5933
6004
  _$header == null ? void 0 : (_$header_removeEventListener = _$header.removeEventListener) == null ? void 0 : _$header_removeEventListener.call(_$header, eventName1, _headerFooterMousemove);
5934
6005
  _$header == null ? void 0 : (_$header_removeEventListener1 = _$header.removeEventListener) == null ? void 0 : _$header_removeEventListener1.call(_$header, "mousemove", _headerFooterMousemove);
5935
6006
  }
5936
6007
  }
5937
- if (_hide) {
5938
- $container.removeEventListener('mouseleave', _hide);
5939
- }
5940
6008
  _touchStart = null;
5941
6009
  _setTimeoutShow = null;
5942
6010
  _hide = null;
@@ -10470,6 +10538,7 @@ var THEME_DEFAULT_OPTIONS = {
10470
10538
  var themeData = (_this_options = _this.options) == null ? void 0 : _this_options.themeData; // IThemeData | null | undefined
10471
10539
  var template = (_this_options1 = _this.options) == null ? void 0 : _this_options1.template; // ThemeTemplateType | string | undefined
10472
10540
  var initialThemeData;
10541
+ // hls ezhls flv mp4 不支持 template
10473
10542
  if (options.type === 'hls' || options.type === 'ezhls') {
10474
10543
  var _options_url;
10475
10544
  // hls / ezhls:@3.1.1 起支持自定义 themeData,但不支持标准提供的模板;未传时回退 hlsLiveTemplate
@@ -10479,8 +10548,9 @@ var THEME_DEFAULT_OPTIONS = {
10479
10548
  'flv',
10480
10549
  'mp4'
10481
10550
  ].includes(options.type)) {
10551
+ var _options_url1;
10482
10552
  // flv / mp4:支持自定义 themeData,未传时回退到标准直播模板 LiveTemplate(2026-01-19 起支持自定义)
10483
- initialThemeData = themeData !== undefined ? themeData : LiveTemplate;
10553
+ initialThemeData = themeData !== undefined ? themeData : ((_options_url1 = options.url) == null ? void 0 : _options_url1.includes('/openpb/')) ? RecTemplate : LiveTemplate;
10484
10554
  } else {
10485
10555
  var _ref6;
10486
10556
  // 其余类型(如 ezopen 私有流):template 优先级高于 themeData,二者都未设置时为 null
@@ -11433,7 +11503,6 @@ var THEME_DEFAULT_OPTIONS = {
11433
11503
  * theme.on(Theme.EVENTS.loading, (loading: boolean) => {})
11434
11504
  * ```
11435
11505
  */ function set(loading) {
11436
- this._loading = loading;
11437
11506
  if (loading) {
11438
11507
  var _this__loadingControl;
11439
11508
  (_this__loadingControl = this._loadingControl) == null ? void 0 : _this__loadingControl.show();
@@ -11442,6 +11511,7 @@ var THEME_DEFAULT_OPTIONS = {
11442
11511
  (_this__loadingControl1 = this._loadingControl) == null ? void 0 : _this__loadingControl1.hide();
11443
11512
  }
11444
11513
  if (this._loading !== loading) {
11514
+ this._loading = loading;
11445
11515
  this.emit(EVENTS.loading, loading);
11446
11516
  }
11447
11517
  }
@@ -11738,7 +11808,9 @@ var THEME_DEFAULT_OPTIONS = {
11738
11808
  },
11739
11809
  {
11740
11810
  key: "isEzopen",
11741
- get: function get() {
11811
+ get: /**
11812
+ * 私有流地址
11813
+ */ function get() {
11742
11814
  // 私有流地址
11743
11815
  return /^ezopen:\/\//.test(this._url);
11744
11816
  }
@@ -11749,21 +11821,26 @@ var THEME_DEFAULT_OPTIONS = {
11749
11821
  * 判断播放地址是萤石的播放地址
11750
11822
  * @since 3.1.2
11751
11823
  */ function get() {
11752
- var path = this._url.split('?')[0];
11753
- var queryStr = this._url.split('?')[1];
11754
- var lastPath = path.split('/')[path.split('/').length - 1];
11755
- // ezopen://open.ys7.com/BC7799091/1.rec
11756
- // rtmp://rtmp05open.ys7.com:1935/v3/openpb/BC7799091_1_1
11757
- // https://open.ys7.com/v3/openpb/llhls/BC7799091_1_1.m3u8
11758
- // https://rtmp05open.ys7.com:9188/v3/openpb/BC7799091_1_1.flv
11759
- // https://host:2001/live?dev=D08197169&chn=1&ss=token&stream=1
11760
- if (// 私有流地址
11761
- /^ezopen:\/\//.test(path) || // 标准流地址
11762
- path.includes('/openlive/') || path.includes('/openpb/') && /[a-zA-Z0-9:]+_\d+_\d+/.test(lastPath) || // webtransport 取流
11763
- isHttp(this._url) && queryStr && /dev=[a-zA-Z0-9:]+/.test(queryStr) && /chn=\d+/.test(queryStr) && /stream=\d+/.test(queryStr) && queryStr.includes('ssn=')) {
11764
- return true;
11824
+ try {
11825
+ var _this__url_split, _this__url_split1, _path_split;
11826
+ var path = (_this__url_split = this._url.split('?')) == null ? void 0 : _this__url_split[0];
11827
+ var queryStr = (_this__url_split1 = this._url.split('?')) == null ? void 0 : _this__url_split1[1];
11828
+ var lastPath = (_path_split = path.split('/')) == null ? void 0 : _path_split[path.split('/').length - 1];
11829
+ // ezopen://open.ys7.com/BC7799091/1.rec
11830
+ // rtmp://rtmp05open.ys7.com:1935/v3/openpb/BC7799091_1_1
11831
+ // https://open.ys7.com/v3/openpb/llhls/BC7799091_1_1.m3u8
11832
+ // https://rtmp05open.ys7.com:9188/v3/openpb/BC7799091_1_1.flv
11833
+ // https://host:2001/live?dev=D08197169&chn=1&ss=token&stream=1
11834
+ if (// 私有流地址
11835
+ /^ezopen:\/\//.test(path) || // 标准流地址
11836
+ path.includes('/openlive/') || path.includes('/openpb/') && /[a-zA-Z0-9:]+_\d+_\d+/.test(lastPath) || // webtransport 取流
11837
+ isHttp(this._url) && queryStr && /dev=[a-zA-Z0-9:]+/.test(queryStr) && /chn=\d+/.test(queryStr) && /stream=\d+/.test(queryStr) && queryStr.includes('ssn=')) {
11838
+ return true;
11839
+ }
11840
+ return false;
11841
+ } catch (error) {
11842
+ return false;
11765
11843
  }
11766
- return false;
11767
11844
  }
11768
11845
  }
11769
11846
  ]);
@@ -11775,6 +11852,6 @@ var THEME_DEFAULT_OPTIONS = {
11775
11852
  zh: zh,
11776
11853
  en: en
11777
11854
  };
11778
- /** 版本号 @since 0.0.1 */ Theme.THEME_VERSION = '3.1.4-beta.2';
11855
+ /** 版本号 @since 0.0.1 */ Theme.THEME_VERSION = '3.1.5-beta.2';
11779
11856
 
11780
11857
  export { Control, EVENTS, Fullscreen, Loading, Message, Play, Poster, Rec, Theme, Utils, Volume };
package/dist/index.umd.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /*
2
- * @ezuikit/player-theme v3.1.4-beta.2
3
- * Copyright (c) 2026-08-27 19:42:35 Ezviz-OpenBiz
2
+ * @ezuikit/player-theme v3.1.5-beta.2
3
+ * Copyright (c) 2026-09-04 02:44:28 Ezviz-OpenBiz
4
4
  * Released under the MIT License.
5
5
  */
6
6
  (function (global, factory) {
@@ -2406,9 +2406,9 @@
2406
2406
  var dist$3 = {};
2407
2407
 
2408
2408
  /*
2409
- * @ezuikit/utils-tools v2.0.6
2409
+ * @ezuikit/utils-tools v2.0.7
2410
2410
  * tools utils
2411
- * Copyright (c) 2026-08-02 Ezviz-OpenBiz
2411
+ * Copyright (c) 2026-09-02 Ezviz-OpenBiz
2412
2412
  * Released under the MIT License.
2413
2413
  */
2414
2414
 
@@ -2417,7 +2417,7 @@
2417
2417
  function requireDist$3 () {
2418
2418
  if (hasRequiredDist$3) return dist$3;
2419
2419
  hasRequiredDist$3 = 1;
2420
- function isHttp(url){return /^http[s]?:\/\//.test(url)}var getQuery=function(url){var query=url.split("?")[1],obj={};if(query)for(var vars=query.split("&"),i=0;i<vars.length;i++){var pair=vars[i].split("=");obj[pair[0]]=decodeURIComponent(pair[1]);}return obj};function parseEzopenUrl(url){var obj={};if(/^ezopen:\/\//.test(url)){if(url.includes("@")){var endIndex=url.indexOf("@"),startIndex=url.indexOf("//");obj.validateCode=url.substring(startIndex+2,endIndex),url=url.replace(obj.validateCode+"@","");}obj.protocol=url.split("//")[0],obj.search=url.split("?")[1]?"?"+url.split("?")[1]:"",obj.hostname=url.split("/")[2],obj.origin=obj.protocol+"//"+obj.hostname,obj.pathname=url.split("?")[0].replace(obj.origin,""),obj.href=url;var pathnames=obj.pathname.split("/"),lastPath=pathnames[2].split(".");return obj.deviceSerial=pathnames[1],obj.channelNo=lastPath[0],obj.type=lastPath[lastPath.length-1],"live"===obj.type&&(obj.definition=lastPath.length>2?lastPath[1]:"sd"),"rec"===obj.type&&pathnames[2]&&(obj.recType=pathnames[2].includes(".cloud.")?"cloud":""),obj.searchParams=getQuery(url),obj}if(isHttp(url))try{var u=new URL(url),file=u.pathname.split("/").pop();if(file){var m=file.match(/^([^_]+)_(\d+)_(\d+)\./);if(m){var deviceSerial=m[1],channelNo=m[2],quality=m[3];return obj.deviceSerial=deviceSerial,obj.channelNo=channelNo,u.searchParams.get("code")&&(obj.validateCode=u.searchParams.get("code")),obj.search=url.split("?")[1]?"?"+url.split("?")[1]:"",obj.protocol=url.split("//")[0],obj.hostname=url.split("/")[2],obj.origin=obj.protocol+"//"+obj.hostname,obj.pathname=url.split("?")[0].replace(obj.origin,""),obj.href=url,obj.type="live",(url.includes("rec=local")||url.includes("rec=cloud"))&&(obj.type="rec",url.includes("rec=cloud")?obj.recType="cloud":obj.recType=""),"live"===obj.type&&(obj.definition="1"===quality?"hd":"sd"),obj.searchParams=getQuery(url),obj}}}catch(e){}return {}}var codec={h264:1,h265:2,h266:4,vp8:8,vp9:16,av1:32},getQueryVC=function(CODECS){return CODECS.reduce((function(acc,key){return key=key.toLowerCase(),acc+(codec[key]||0)}),0)};function _array_like_to_array(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _instanceof(left,right){return null!=right&&"undefined"!=typeof Symbol&&right[Symbol.hasInstance]?!!right[Symbol.hasInstance](left):left instanceof right}function _create_for_of_iterator_helper_loose(o,allowArrayLike){var it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(it)return (it=it.call(o)).next.bind(it);if(Array.isArray(o)||(it=function(o,minLen){if(o){if("string"==typeof o)return _array_like_to_array(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);return "Object"===n&&o.constructor&&(n=o.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_array_like_to_array(o,minLen):void 0}}(o))||allowArrayLike){it&&(o=it);var i=0;return function(){return i>=o.length?{done:true}:{done:false,value:o[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var DateTime=function(){function DateTime(){}return DateTime.normalizeUnit=function(unit){return "year"===unit||"y"===unit||"年"===unit?"year":"month"===unit||"M"===unit||"月"===unit?"month":"day"===unit||"d"===unit||"日"===unit?"day":"hour"===unit||"h"===unit||"时"===unit?"hour":"minute"===unit||"m"===unit||"分"===unit?"minute":"second"},DateTime.daysInMonth=function(year,month){return new Date(year,month+1,0).getDate()},DateTime.shiftMonth=function(baseDate,months){var result=new Date(baseDate.getTime()),currentDate=result.getDate();result.setDate(1),result.setMonth(result.getMonth()+months);var maxDate=DateTime.daysInMonth(result.getFullYear(),result.getMonth());return result.setDate(Math.min(currentDate,maxDate)),result},DateTime.add=function(input,value,unit){if(void 0===unit&&(unit="day"),!Number.isFinite(value))throw new Error("Invalid value");var baseDate=DateTime.toDate(input),normalizedUnit=DateTime.normalizeUnit(unit);if("year"===normalizedUnit)return DateTime.shiftMonth(baseDate,12*value);if("month"===normalizedUnit)return DateTime.shiftMonth(baseDate,value);var result=new Date(baseDate.getTime());return result.setTime(result.getTime()+value*{day:864e5,hour:36e5,minute:6e4,second:1e3}[normalizedUnit]),result},DateTime.subtract=function(input,value,unit){return void 0===unit&&(unit="day"),DateTime.add(input,-value,unit)},DateTime.fillZero=function(num,len){return void 0===len&&(len=2),num.toString().padStart(len,"0")},DateTime.format=function(input,format){var date;if(_instanceof(input,Date))date=input;else {if("number"!=typeof input&&"string"!=typeof input)throw new Error("Invalid date input");date=DateTime.toDate(input+"");}for(var _step,result=format,_iterator=_create_for_of_iterator_helper_loose([[/(yyyy|YYYY)/g,function(){return DateTime.fillZero(date.getFullYear(),4)}],[/(yy|YY)/g,function(){return DateTime.fillZero(date.getFullYear()%100,2)}],[/(MM)/g,function(){return DateTime.fillZero(date.getMonth()+1,2)}],[/(M)/g,function(){return (date.getMonth()+1).toString()}],[/(dd|DD)/g,function(){return DateTime.fillZero(date.getDate(),2)}],[/(d|D)/g,function(){return date.getDate().toString()}],[/(HH|hh)/g,function(){return DateTime.fillZero(date.getHours(),2)}],[/(H|h)/g,function(){return date.getHours().toString()}],[/(mm)/g,function(){return DateTime.fillZero(date.getMinutes(),2)}],[/(m)/g,function(){return date.getMinutes().toString()}],[/(ss|SS)/g,function(){return DateTime.fillZero(date.getSeconds(),2)}],[/(s|S)/g,function(){return date.getSeconds().toString()}],[/(fff)/g,function(){return DateTime.fillZero(date.getMilliseconds(),3)}]]);!(_step=_iterator()).done;){var _step_value=_step.value,regexp=_step_value[0],fn=_step_value[1];result=result.replace(regexp,fn);}return result},DateTime.toDate=function(str){if(_instanceof(str,Date))return str;str=(str+"").trim().replace(/\/|\./gi,"-"),/^\d{4}$/.test(str)&&(str+="-01"),/^\d{4}-\d{2}$/.test(str)&&(str+="-01");try{return /^\d{4}-\d{2}-\d{2}$/.test(str)?new Date(+str.slice(0,4),+str.slice(5,7)-1,+str.slice(8,10),0,0,0):/^\d{8}$/.test(str)?(str+="",new Date(+str.slice(0,4),+str.slice(4,6)-1,+str.slice(6,8),0,0,0)):/^\d{14}$/.test(str)?(str+="",new Date(+str.slice(0,4),+str.slice(4,6)-1,+str.slice(6,8),+str.slice(8,10),+str.slice(10,12),+str.slice(12,14))):/^\d{13}$/.test(str)?new Date(Number(str)):/^\d{10}$/.test(str)?new Date(1e3*Number(str)):new Date(str)}catch(error){throw new Error("Invalid date string")}},DateTime.diff=function(date1,date2,type){ void 0===type&&(type="second");var d1=DateTime.toDate(date1),d2=DateTime.toDate(date2);return "second"===type?Math.floor((d1.getTime()-d2.getTime())/1e3):"minute"===type?Math.floor((d1.getTime()-d2.getTime())/1e3/60):"hour"===type?Math.floor((d1.getTime()-d2.getTime())/1e3/60/60):"day"===type?Math.floor((d1.getTime()-d2.getTime())/1e3/60/60/24):Math.abs(d1.getTime()-d2.getTime())},DateTime}();dist$3.DateTime=DateTime,dist$3.addVc=function(url,codecs){ void 0===codecs&&(codecs=["h264"]);var vc=getQueryVC(codecs||["h264"]),host=url.split("?")[0],query=url.split("?")[1];return query=(query||"").split("&").filter((function(item){return !/^vc=\d?/.test(item)})).join("&"),host+"?"+(query+=(query?"&":"")+"vc="+vc)},dist$3.getQuery=getQuery,dist$3.getQueryVC=getQueryVC,dist$3.getStaticPath=function(path,base){ void 0===base&&(base="");var protocolReg=/^(https?:\/\/|^\/\/)/;if(""===path||void 0===path)return "";if(protocolReg.test(path))return path;path=path.replace(/\/+/g,"/"),base=protocolReg.test(base||"")?base:window.location.href;try{return new URL(path,base).href}catch(error){return path}},dist$3.isEmpty=function(param){return void 0===param||""===param||null===param},dist$3.isHttp=isHttp,dist$3.isMobile=function(agent){var _navigator,_navigator1,_navigator2,_window,_navigator_maxTouchPoints;return /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone|Opera Mini)/i.test(null!=agent?agent:null==(_navigator=navigator)?void 0:_navigator.userAgent)||/Macintosh/i.test(agent||(null==(_navigator1=navigator)?void 0:_navigator1.userAgent))&&(null!=(_navigator_maxTouchPoints=null==(_navigator2=navigator)?void 0:_navigator2.maxTouchPoints)?_navigator_maxTouchPoints:0)>1||!!(null==(_window=window)?void 0:_window.__IS_MOBILE_SIMULATOR__)},dist$3.isRealMobile=function(agent){var _navigator,_ref,ua=(null!=(_ref=null!=agent?agent:null==(_navigator=navigator)?void 0:_navigator.userAgent)?_ref:"").toLowerCase();if(/ipad|tablet|playbook|silk|android(?!.*mobile)/i.test(ua))return false;var hasTouch="ontouchstart"in window||navigator.maxTouchPoints>0;return /android|webos|iphone|ipod|blackberry|iemobile|opera mini/i.test(ua)&&hasTouch},dist$3.objectIsNull=function(obj){try{return "{}"===JSON.stringify(obj)}catch(error){return false}},dist$3.parseEzopenUrl=parseEzopenUrl,dist$3.pick=function(obj,keys){return Object.entries(obj).reduce((function(acc,param){var key=param[0],value=param[1];return keys.includes(key)&&(acc[key]=value),acc}),{})},dist$3.switchEzopenUrl=function(url,options){var _ref=null!=options?options:{},type=_ref.type,recType=_ref.recType,search=_ref.search,definition=_ref.definition,channelNo=_ref.channelNo,deviceSerial=_ref.deviceSerial,validateCode=_ref.validateCode,obj=parseEzopenUrl(url);if(search){var ns=Object.assign({},obj.searchParams,getQuery("?"+search.replace("?","")));search=Object.entries(ns).reduce((function(acc,param){var key=param[0],value=param[1];return ""===value?acc:acc+=key+"="+encodeURIComponent(value)+"&"}),"?").replace(/&$/,"");}else search=obj.search;return type=type||obj.type,recType=null!=recType?recType:obj.recType,definition=null!=definition?definition:obj.definition,channelNo=channelNo||obj.channelNo,deviceSerial=deviceSerial||obj.deviceSerial,validateCode=null!=validateCode?validateCode:obj.validateCode,obj.protocol+"//"+(validateCode?validateCode+"@":"")+obj.hostname+"/"+deviceSerial+"/"+channelNo+("rec"===type&&recType?"."+recType:"")+("live"===type&&"hd"===definition?"."+definition:"")+"."+type+search};
2420
+ function isHttp(url){return /^http[s]?:\/\//.test(url)}var getQuery=function(url){var query=url.split("?")[1],obj={};if(query)for(var vars=query.split("&"),i=0;i<vars.length;i++){var pair=vars[i].split("=");obj[pair[0]]=decodeURIComponent(pair[1]);}return obj};function parseEzopenUrl(url){var obj={};if(/^ezopen:\/\//.test(url)){if(url.includes("@")){var endIndex=url.indexOf("@"),startIndex=url.indexOf("//");obj.validateCode=url.substring(startIndex+2,endIndex),url=url.replace(obj.validateCode+"@","");}obj.protocol=url.split("//")[0],obj.search=url.split("?")[1]?"?"+url.split("?")[1]:"",obj.hostname=url.split("/")[2],obj.origin=obj.protocol+"//"+obj.hostname,obj.pathname=url.split("?")[0].replace(obj.origin,""),obj.href=url;var pathnames=obj.pathname.split("/"),lastPath=pathnames[2].split(".");return obj.deviceSerial=pathnames[1],obj.channelNo=lastPath[0],obj.streamTypeIn=pathnames[2].includes(".hd.")?1:2,obj.type=lastPath[lastPath.length-1],"live"===obj.type&&(obj.definition=lastPath.length>2?lastPath[1]:"sd"),"rec"===obj.type&&pathnames[2]&&(obj.recType=pathnames[2].includes(".cloud.")?"cloud":""),obj.searchParams=getQuery(url),obj}if(isHttp(url))try{var u=new URL(url),file=u.pathname.split("/").pop();if(file&&["live","playback","cloudplayback","download"].includes(file)&&u.search.includes("dev=")&&u.search.includes("stream=")){var deviceSerial=u.searchParams.get("dev"),channelNo=u.searchParams.get("chn")||"1",sessionToken=u.searchParams.get("ssn"),stream=u.searchParams.get("stream"),streamTypeIn=Number(stream);if("https:"!==u.protocol||!deviceSerial||!channelNo||!sessionToken)return {};var searchParams={};u.searchParams.forEach((function(value,key){searchParams[key]=value;})),obj.protocol=u.protocol,obj.search=u.search,obj.searchParams=searchParams,obj.pathname=u.pathname,obj.origin=u.origin,obj.href=url,obj.hostname=u.host,obj.deviceSerial=deviceSerial,obj.channelNo=channelNo,obj.streamTypeIn=streamTypeIn;var validateCode=u.searchParams.get("code");return validateCode&&(obj.validateCode=validateCode),"live"===file?(obj.type="live",obj.definition=1===streamTypeIn?"hd":"sd"):"playback"===file?(obj.type="rec",obj.recType=""):"cloudplayback"===file?(obj.type="rec",obj.recType="cloud"):obj.type="download",obj}if(file){var m=file.match(/^([^_]+)_(\d+)_(\d+)\./);if(m){var deviceSerial1=m[1],channelNo1=m[2],quality=m[3];return obj.deviceSerial=deviceSerial1,obj.channelNo=channelNo1,obj.streamTypeIn=+quality,u.searchParams.get("code")&&(obj.validateCode=u.searchParams.get("code")),obj.search=url.split("?")[1]?"?"+url.split("?")[1]:"",obj.protocol=url.split("//")[0],obj.hostname=url.split("/")[2],obj.origin=obj.protocol+"//"+obj.hostname,obj.pathname=url.split("?")[0].replace(obj.origin,""),obj.href=url,obj.type="live",(url.includes("rec=local")||url.includes("rec=cloud"))&&(obj.type="rec",url.includes("rec=cloud")?obj.recType="cloud":obj.recType=""),"live"===obj.type&&(obj.definition="1"===quality?"hd":"sd"),obj.searchParams=getQuery(url),obj}}}catch(e){}return {}}var codec={h264:1,h265:2,h266:4,vp8:8,vp9:16,av1:32},getQueryVC=function(CODECS){return CODECS.reduce((function(acc,key){return key=key.toLowerCase(),acc+(codec[key]||0)}),0)};function _array_like_to_array(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _instanceof(left,right){return null!=right&&"undefined"!=typeof Symbol&&right[Symbol.hasInstance]?!!right[Symbol.hasInstance](left):left instanceof right}function _create_for_of_iterator_helper_loose(o,allowArrayLike){var it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(it)return (it=it.call(o)).next.bind(it);if(Array.isArray(o)||(it=function(o,minLen){if(o){if("string"==typeof o)return _array_like_to_array(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);return "Object"===n&&o.constructor&&(n=o.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_array_like_to_array(o,minLen):void 0}}(o))||allowArrayLike){it&&(o=it);var i=0;return function(){return i>=o.length?{done:true}:{done:false,value:o[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var DateTime=function(){function DateTime(){}return DateTime.normalizeUnit=function(unit){return "year"===unit||"y"===unit||"年"===unit?"year":"month"===unit||"M"===unit||"月"===unit?"month":"day"===unit||"d"===unit||"日"===unit?"day":"hour"===unit||"h"===unit||"时"===unit?"hour":"minute"===unit||"m"===unit||"分"===unit?"minute":"second"},DateTime.daysInMonth=function(year,month){return new Date(year,month+1,0).getDate()},DateTime.shiftMonth=function(baseDate,months){var result=new Date(baseDate.getTime()),currentDate=result.getDate();result.setDate(1),result.setMonth(result.getMonth()+months);var maxDate=DateTime.daysInMonth(result.getFullYear(),result.getMonth());return result.setDate(Math.min(currentDate,maxDate)),result},DateTime.add=function(input,value,unit){if(void 0===unit&&(unit="day"),!Number.isFinite(value))throw new Error("Invalid value");var baseDate=DateTime.toDate(input),normalizedUnit=DateTime.normalizeUnit(unit);if("year"===normalizedUnit)return DateTime.shiftMonth(baseDate,12*value);if("month"===normalizedUnit)return DateTime.shiftMonth(baseDate,value);var result=new Date(baseDate.getTime());return result.setTime(result.getTime()+value*{day:864e5,hour:36e5,minute:6e4,second:1e3}[normalizedUnit]),result},DateTime.subtract=function(input,value,unit){return void 0===unit&&(unit="day"),DateTime.add(input,-value,unit)},DateTime.fillZero=function(num,len){return void 0===len&&(len=2),num.toString().padStart(len,"0")},DateTime.format=function(input,format){var date;if(_instanceof(input,Date))date=input;else {if("number"!=typeof input&&"string"!=typeof input)throw new Error("Invalid date input");date=DateTime.toDate(input+"");}for(var _step,result=format,_iterator=_create_for_of_iterator_helper_loose([[/(yyyy|YYYY)/g,function(){return DateTime.fillZero(date.getFullYear(),4)}],[/(yy|YY)/g,function(){return DateTime.fillZero(date.getFullYear()%100,2)}],[/(MM)/g,function(){return DateTime.fillZero(date.getMonth()+1,2)}],[/(M)/g,function(){return (date.getMonth()+1).toString()}],[/(dd|DD)/g,function(){return DateTime.fillZero(date.getDate(),2)}],[/(d|D)/g,function(){return date.getDate().toString()}],[/(HH|hh)/g,function(){return DateTime.fillZero(date.getHours(),2)}],[/(H|h)/g,function(){return date.getHours().toString()}],[/(mm)/g,function(){return DateTime.fillZero(date.getMinutes(),2)}],[/(m)/g,function(){return date.getMinutes().toString()}],[/(ss|SS)/g,function(){return DateTime.fillZero(date.getSeconds(),2)}],[/(s|S)/g,function(){return date.getSeconds().toString()}],[/(fff)/g,function(){return DateTime.fillZero(date.getMilliseconds(),3)}]]);!(_step=_iterator()).done;){var _step_value=_step.value,regexp=_step_value[0],fn=_step_value[1];result=result.replace(regexp,fn);}return result},DateTime.toDate=function(str){if(_instanceof(str,Date))return str;str=(str+"").trim().replace(/\/|\./gi,"-"),/^\d{4}$/.test(str)&&(str+="-01"),/^\d{4}-\d{2}$/.test(str)&&(str+="-01");try{return /^\d{4}-\d{2}-\d{2}$/.test(str)?new Date(+str.slice(0,4),+str.slice(5,7)-1,+str.slice(8,10),0,0,0):/^\d{8}$/.test(str)?(str+="",new Date(+str.slice(0,4),+str.slice(4,6)-1,+str.slice(6,8),0,0,0)):/^\d{14}$/.test(str)?(str+="",new Date(+str.slice(0,4),+str.slice(4,6)-1,+str.slice(6,8),+str.slice(8,10),+str.slice(10,12),+str.slice(12,14))):/^\d{13}$/.test(str)?new Date(Number(str)):/^\d{10}$/.test(str)?new Date(1e3*Number(str)):new Date(str)}catch(error){throw new Error("Invalid date string")}},DateTime.diff=function(date1,date2,type){ void 0===type&&(type="second");var d1=DateTime.toDate(date1),d2=DateTime.toDate(date2);return "second"===type?Math.floor((d1.getTime()-d2.getTime())/1e3):"minute"===type?Math.floor((d1.getTime()-d2.getTime())/1e3/60):"hour"===type?Math.floor((d1.getTime()-d2.getTime())/1e3/60/60):"day"===type?Math.floor((d1.getTime()-d2.getTime())/1e3/60/60/24):Math.abs(d1.getTime()-d2.getTime())},DateTime}();dist$3.DateTime=DateTime,dist$3.addVc=function(url,codecs){ void 0===codecs&&(codecs=["h264"]);var vc=getQueryVC(codecs||["h264"]),host=url.split("?")[0],query=url.split("?")[1];return query=(query||"").split("&").filter((function(item){return !/^vc=\d?/.test(item)})).join("&"),host+"?"+(query+=(query?"&":"")+"vc="+vc)},dist$3.getQuery=getQuery,dist$3.getQueryVC=getQueryVC,dist$3.getStaticPath=function(path,base){ void 0===base&&(base="");var protocolReg=/^(https?:\/\/|^\/\/)/;if(""===path||void 0===path)return "";if(protocolReg.test(path))return path;path=path.replace(/\/+/g,"/"),base=protocolReg.test(base||"")?base:window.location.href;try{return new URL(path,base).href}catch(error){return path}},dist$3.isEmpty=function(param){return void 0===param||""===param||null===param},dist$3.isHttp=isHttp,dist$3.isMobile=function(agent){var _navigator,_navigator1,_navigator2,_window,_navigator_maxTouchPoints;return /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone|Opera Mini)/i.test(null!=agent?agent:null==(_navigator=navigator)?void 0:_navigator.userAgent)||/Macintosh/i.test(agent||(null==(_navigator1=navigator)?void 0:_navigator1.userAgent))&&(null!=(_navigator_maxTouchPoints=null==(_navigator2=navigator)?void 0:_navigator2.maxTouchPoints)?_navigator_maxTouchPoints:0)>1||!!(null==(_window=window)?void 0:_window.__IS_MOBILE_SIMULATOR__)},dist$3.isRealMobile=function(agent){var _navigator,_ref,ua=(null!=(_ref=null!=agent?agent:null==(_navigator=navigator)?void 0:_navigator.userAgent)?_ref:"").toLowerCase();if(/ipad|tablet|playbook|silk|android(?!.*mobile)/i.test(ua))return false;var hasTouch="ontouchstart"in window||navigator.maxTouchPoints>0;return /android|webos|iphone|ipod|blackberry|iemobile|opera mini/i.test(ua)&&hasTouch},dist$3.objectIsNull=function(obj){try{return "{}"===JSON.stringify(obj)}catch(error){return false}},dist$3.parseEzopenUrl=parseEzopenUrl,dist$3.pick=function(obj,keys){return Object.entries(obj).reduce((function(acc,param){var key=param[0],value=param[1];return keys.includes(key)&&(acc[key]=value),acc}),{})},dist$3.switchEzopenUrl=function(url,options){var _ref=null!=options?options:{},type=_ref.type,recType=_ref.recType,search=_ref.search,definition=_ref.definition,channelNo=_ref.channelNo,deviceSerial=_ref.deviceSerial,validateCode=_ref.validateCode,obj=parseEzopenUrl(url);if(search){var ns=Object.assign({},obj.searchParams,getQuery("?"+search.replace("?","")));search=Object.entries(ns).reduce((function(acc,param){var key=param[0],value=param[1];return ""===value?acc:acc+=key+"="+encodeURIComponent(value)+"&"}),"?").replace(/&$/,"");}else search=obj.search;return type=type||obj.type,recType=null!=recType?recType:obj.recType,definition=null!=definition?definition:obj.definition,channelNo=channelNo||obj.channelNo,deviceSerial=deviceSerial||obj.deviceSerial,validateCode=null!=validateCode?validateCode:obj.validateCode,obj.protocol+"//"+(validateCode?validateCode+"@":"")+obj.hostname+"/"+deviceSerial+"/"+channelNo+("rec"===type&&recType?"."+recType:"")+("live"===type&&"hd"===definition?"."+definition:"")+"."+type+search};
2421
2421
  return dist$3;
2422
2422
  }
2423
2423
 
@@ -3588,11 +3588,10 @@
3588
3588
  return item.element === element;
3589
3589
  });
3590
3590
  if (index >= 0) {
3591
- if (!this.fullscreens[index].onChange) {
3592
- this.fullscreens[index].onChange = [];
3593
- this.fullscreens[index].onChange.push(onChange);
3594
- } else {
3595
- this.fullscreens[index].onChange.push(onChange);
3591
+ var target = this.fullscreens[index];
3592
+ target.onChange = Array.isArray(target.onChange) ? target.onChange : [];
3593
+ if (!target.onChange.includes(onChange)) {
3594
+ target.onChange.push(onChange);
3596
3595
  }
3597
3596
  } else {
3598
3597
  this.fullscreens.push({
@@ -4750,6 +4749,12 @@
4750
4749
  part: 'left',
4751
4750
  isrender: 1
4752
4751
  },
4752
+ {
4753
+ iconId: 'capturePicture',
4754
+ part: 'left',
4755
+ defaultActive: 0,
4756
+ isrender: 1
4757
+ },
4753
4758
  {
4754
4759
  iconId: 'volume',
4755
4760
  part: 'left',
@@ -4763,6 +4768,72 @@
4763
4768
  defaultActive: 0,
4764
4769
  isrender: 1
4765
4770
  },
4771
+ {
4772
+ // flv 录制 2.1.2 新增
4773
+ iconId: 'zoom',
4774
+ part: 'left',
4775
+ defaultActive: 0,
4776
+ isrender: 1
4777
+ },
4778
+ {
4779
+ iconId: 'fullscreen',
4780
+ part: 'right',
4781
+ defaultActive: 0,
4782
+ isrender: 1
4783
+ },
4784
+ {
4785
+ iconId: 'globalFullscreen',
4786
+ part: 'right',
4787
+ defaultActive: 0,
4788
+ isrender: 1
4789
+ }
4790
+ ]
4791
+ }
4792
+ };
4793
+
4794
+ /**
4795
+ * flv 预览
4796
+ */ var RecTemplate = {
4797
+ autoFocus: 3,
4798
+ // poster:
4799
+ // "https://img2.baidu.com/it/u=3209353042,356122753&fm=253&fmt=auto&app=138&f=JPEG?w=889&h=500",
4800
+ footer: {
4801
+ btnList: [
4802
+ {
4803
+ iconId: 'play',
4804
+ part: 'left',
4805
+ isrender: 1
4806
+ },
4807
+ {
4808
+ iconId: 'capturePicture',
4809
+ part: 'left',
4810
+ defaultActive: 0,
4811
+ isrender: 1
4812
+ },
4813
+ {
4814
+ iconId: 'volume',
4815
+ part: 'left',
4816
+ defaultActive: 0,
4817
+ isrender: 1
4818
+ },
4819
+ {
4820
+ iconId: 'recordvideo',
4821
+ part: 'left',
4822
+ defaultActive: 0,
4823
+ isrender: 1
4824
+ },
4825
+ {
4826
+ iconId: 'zoom',
4827
+ part: 'left',
4828
+ defaultActive: 0,
4829
+ isrender: 1
4830
+ },
4831
+ {
4832
+ iconId: 'speed',
4833
+ part: 'right',
4834
+ defaultActive: 0,
4835
+ isrender: 1
4836
+ },
4766
4837
  {
4767
4838
  iconId: 'fullscreen',
4768
4839
  part: 'right',
@@ -6261,7 +6332,7 @@
6261
6332
  theme.emit(EVENTS$2.control.dateChange, date);
6262
6333
  });
6263
6334
  theme.controls.dateControl.on(EVENTS$2.control.dateDestroy, function() {
6264
- theme.emit(EVENTS$2.control.recDestroy);
6335
+ theme.emit(EVENTS$2.control.dateDestroy);
6265
6336
  });
6266
6337
  }
6267
6338
  // 时间控件
@@ -7070,7 +7141,7 @@
7070
7141
  2,
7071
7142
  null
7072
7143
  ];
7073
- theme.emit(EVENTS$2.message, theme.i18n.t('FETCH_THEME_FAILED'), 'themeError');
7144
+ theme.emit(EVENTS$2.message, theme.i18n.t('FETCH_THEME_FAILED') + ' ' + data, 'themeError');
7074
7145
  return [
7075
7146
  2,
7076
7147
  null
@@ -7082,7 +7153,7 @@
7082
7153
  2,
7083
7154
  null
7084
7155
  ];
7085
- theme.emit(EVENTS$2.message, theme.i18n.t('FETCH_THEME_FAILED'), 'themeError');
7156
+ theme.emit(EVENTS$2.message, theme.i18n.t('FETCH_THEME_FAILED') + ' ' + data, 'themeError');
7086
7157
  return [
7087
7158
  2,
7088
7159
  null
@@ -7407,32 +7478,29 @@
7407
7478
  if (Utils.isMobile && _touchStart) {
7408
7479
  var eventName = "click";
7409
7480
  $container.removeEventListener(eventName, _touchStart);
7410
- if (_$footer && _setTimeoutShow) {
7481
+ if (_$footer && _headerFooterTouchStart) {
7411
7482
  _$footer.removeEventListener(eventName, _headerFooterTouchStart);
7412
7483
  }
7413
- if (_$header && _setTimeoutShow) {
7484
+ if (_$header && _headerFooterTouchStart) {
7414
7485
  _$header.removeEventListener(eventName, _headerFooterTouchStart);
7415
7486
  }
7416
7487
  }
7417
- if (_setTimeoutShow) {
7488
+ if (_hide || _setTimeoutShow) {
7418
7489
  var eventName1 = window.PointerEvent ? "pointerdown" : "click";
7419
7490
  $container.removeEventListener(eventName1, _setTimeoutShow);
7420
7491
  $container.removeEventListener('mousemove', _setTimeoutShow); // 不要被 header 和 footer 冒泡过来
7421
7492
  $container.removeEventListener('mouseleave', _hide);
7422
- if (_$footer && _clearTimeout) {
7493
+ if (_$footer && _headerFooterMousemove) {
7423
7494
  var _$footer_removeEventListener, _$footer_removeEventListener1;
7424
7495
  _$footer == null ? void 0 : (_$footer_removeEventListener = _$footer.removeEventListener) == null ? void 0 : _$footer_removeEventListener.call(_$footer, eventName1, _headerFooterMousemove);
7425
7496
  _$footer == null ? void 0 : (_$footer_removeEventListener1 = _$footer.removeEventListener) == null ? void 0 : _$footer_removeEventListener1.call(_$footer, "mousemove", _headerFooterMousemove);
7426
7497
  }
7427
- if (_$header && _clearTimeout) {
7498
+ if (_$header && _headerFooterMousemove) {
7428
7499
  var _$header_removeEventListener, _$header_removeEventListener1;
7429
7500
  _$header == null ? void 0 : (_$header_removeEventListener = _$header.removeEventListener) == null ? void 0 : _$header_removeEventListener.call(_$header, eventName1, _headerFooterMousemove);
7430
7501
  _$header == null ? void 0 : (_$header_removeEventListener1 = _$header.removeEventListener) == null ? void 0 : _$header_removeEventListener1.call(_$header, "mousemove", _headerFooterMousemove);
7431
7502
  }
7432
7503
  }
7433
- if (_hide) {
7434
- $container.removeEventListener('mouseleave', _hide);
7435
- }
7436
7504
  _touchStart = null;
7437
7505
  _setTimeoutShow = null;
7438
7506
  _hide = null;
@@ -12471,6 +12539,7 @@
12471
12539
  var themeData = (_this_options = _this.options) == null ? void 0 : _this_options.themeData; // IThemeData | null | undefined
12472
12540
  var template = (_this_options1 = _this.options) == null ? void 0 : _this_options1.template; // ThemeTemplateType | string | undefined
12473
12541
  var initialThemeData;
12542
+ // hls ezhls flv mp4 不支持 template
12474
12543
  if (options.type === 'hls' || options.type === 'ezhls') {
12475
12544
  var _options_url;
12476
12545
  // hls / ezhls:@3.1.1 起支持自定义 themeData,但不支持标准提供的模板;未传时回退 hlsLiveTemplate
@@ -12480,8 +12549,9 @@
12480
12549
  'flv',
12481
12550
  'mp4'
12482
12551
  ].includes(options.type)) {
12552
+ var _options_url1;
12483
12553
  // flv / mp4:支持自定义 themeData,未传时回退到标准直播模板 LiveTemplate(2026-01-19 起支持自定义)
12484
- initialThemeData = themeData !== undefined ? themeData : LiveTemplate;
12554
+ initialThemeData = themeData !== undefined ? themeData : ((_options_url1 = options.url) == null ? void 0 : _options_url1.includes('/openpb/')) ? RecTemplate : LiveTemplate;
12485
12555
  } else {
12486
12556
  var _ref6;
12487
12557
  // 其余类型(如 ezopen 私有流):template 优先级高于 themeData,二者都未设置时为 null
@@ -13434,7 +13504,6 @@
13434
13504
  * theme.on(Theme.EVENTS.loading, (loading: boolean) => {})
13435
13505
  * ```
13436
13506
  */ function set(loading) {
13437
- this._loading = loading;
13438
13507
  if (loading) {
13439
13508
  var _this__loadingControl;
13440
13509
  (_this__loadingControl = this._loadingControl) == null ? void 0 : _this__loadingControl.show();
@@ -13443,6 +13512,7 @@
13443
13512
  (_this__loadingControl1 = this._loadingControl) == null ? void 0 : _this__loadingControl1.hide();
13444
13513
  }
13445
13514
  if (this._loading !== loading) {
13515
+ this._loading = loading;
13446
13516
  this.emit(EVENTS$2.loading, loading);
13447
13517
  }
13448
13518
  }
@@ -13739,7 +13809,9 @@
13739
13809
  },
13740
13810
  {
13741
13811
  key: "isEzopen",
13742
- get: function get() {
13812
+ get: /**
13813
+ * 私有流地址
13814
+ */ function get() {
13743
13815
  // 私有流地址
13744
13816
  return /^ezopen:\/\//.test(this._url);
13745
13817
  }
@@ -13750,21 +13822,26 @@
13750
13822
  * 判断播放地址是萤石的播放地址
13751
13823
  * @since 3.1.2
13752
13824
  */ function get() {
13753
- var path = this._url.split('?')[0];
13754
- var queryStr = this._url.split('?')[1];
13755
- var lastPath = path.split('/')[path.split('/').length - 1];
13756
- // ezopen://open.ys7.com/BC7799091/1.rec
13757
- // rtmp://rtmp05open.ys7.com:1935/v3/openpb/BC7799091_1_1
13758
- // https://open.ys7.com/v3/openpb/llhls/BC7799091_1_1.m3u8
13759
- // https://rtmp05open.ys7.com:9188/v3/openpb/BC7799091_1_1.flv
13760
- // https://host:2001/live?dev=D08197169&chn=1&ss=token&stream=1
13761
- if (// 私有流地址
13762
- /^ezopen:\/\//.test(path) || // 标准流地址
13763
- path.includes('/openlive/') || path.includes('/openpb/') && /[a-zA-Z0-9:]+_\d+_\d+/.test(lastPath) || // webtransport 取流
13764
- distExports$3.isHttp(this._url) && queryStr && /dev=[a-zA-Z0-9:]+/.test(queryStr) && /chn=\d+/.test(queryStr) && /stream=\d+/.test(queryStr) && queryStr.includes('ssn=')) {
13765
- return true;
13825
+ try {
13826
+ var _this__url_split, _this__url_split1, _path_split;
13827
+ var path = (_this__url_split = this._url.split('?')) == null ? void 0 : _this__url_split[0];
13828
+ var queryStr = (_this__url_split1 = this._url.split('?')) == null ? void 0 : _this__url_split1[1];
13829
+ var lastPath = (_path_split = path.split('/')) == null ? void 0 : _path_split[path.split('/').length - 1];
13830
+ // ezopen://open.ys7.com/BC7799091/1.rec
13831
+ // rtmp://rtmp05open.ys7.com:1935/v3/openpb/BC7799091_1_1
13832
+ // https://open.ys7.com/v3/openpb/llhls/BC7799091_1_1.m3u8
13833
+ // https://rtmp05open.ys7.com:9188/v3/openpb/BC7799091_1_1.flv
13834
+ // https://host:2001/live?dev=D08197169&chn=1&ss=token&stream=1
13835
+ if (// 私有流地址
13836
+ /^ezopen:\/\//.test(path) || // 标准流地址
13837
+ path.includes('/openlive/') || path.includes('/openpb/') && /[a-zA-Z0-9:]+_\d+_\d+/.test(lastPath) || // webtransport 取流
13838
+ distExports$3.isHttp(this._url) && queryStr && /dev=[a-zA-Z0-9:]+/.test(queryStr) && /chn=\d+/.test(queryStr) && /stream=\d+/.test(queryStr) && queryStr.includes('ssn=')) {
13839
+ return true;
13840
+ }
13841
+ return false;
13842
+ } catch (error) {
13843
+ return false;
13766
13844
  }
13767
- return false;
13768
13845
  }
13769
13846
  }
13770
13847
  ]);
@@ -13776,7 +13853,7 @@
13776
13853
  zh: zh,
13777
13854
  en: en
13778
13855
  };
13779
- /** 版本号 @since 0.0.1 */ Theme.THEME_VERSION = '3.1.4-beta.2';
13856
+ /** 版本号 @since 0.0.1 */ Theme.THEME_VERSION = '3.1.5-beta.2';
13780
13857
 
13781
13858
  // 不要动这里的代码, 这个出口是为了编译成 umd 规范的文件
13782
13859
 
package/dist/style.css CHANGED
@@ -22,7 +22,7 @@ body.ezplayer-body-mobile-noscroll{background-color:#000!important;height:100vh;
22
22
  .ezplayer-icon{align-items:center;color:inherit;display:inline-flex;font-size:var(--ezplayer-icon-font-size,24px);font-style:normal;line-height:0;text-align:center;text-rendering:optimizeLegibility;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
23
23
  .ezplayer-select-panel{background-color:var(--ezplayer-panel-bg-color,rgba(0,0,0,.7));border-radius:var(--ezplayer-border-radius,8px);color:var(--ezplayer-default-color,#fff);display:flex;flex-direction:column;overflow-x:hidden;overflow-y:auto;position:relative}.ezplayer-select-btn{width:50px}.ezplayer-select-btn span{display:inline-block;font-size:12px;font-size:calc(var(--ezplayer-font-size, 14px) - 2px);line-height:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ezplayer-select-list{align-items:center;display:flex;flex-direction:column;font-size:var(--ezplayer-font-size,14px);list-style:none;margin:0;padding:12px 0!important;width:100%}.ezplayer-select-option{box-sizing:border-box;cursor:pointer;display:inline-flex;height:28px;justify-content:center;line-height:18px;list-style:none;padding:5px 20px!important;transition:color .3s ease;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.ezplayer-select-option span{display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ezplayer-select-option:hover{color:var(--ezplayer-active-color)}.ezplayer-select-cancel,.ezplayer-select-close{display:none}.ezplayer-select-cancel{font-size:var(--ezplayer-font-size,14px)}.ezplayer-mobile .epicker-mobile.ezplayer-select-picker .ezplayer-select-panel{background-color:transparent;max-width:400px;padding-bottom:calc(54px + env(safe-area-inset-bottom));width:90%}.ezplayer-mobile .epicker-mobile.ezplayer-select-picker .ezplayer-select-list{align-items:center;background-color:#fff;border-radius:var(--ezplayer-border-radius,8px);display:flex;flex-direction:column;font-size:var(--ezplayer-font-size,14px);max-height:70vh;max-height:calc(90vh - 108px);overflow-x:hidden;overflow-y:auto;padding:20px 0!important}.ezplayer-mobile .epicker-mobile.ezplayer-select-picker .ezplayer-select-cancel,.ezplayer-mobile .epicker-mobile.ezplayer-select-picker .ezplayer-select-option{align-items:center;box-sizing:border-box;color:#2c2c2c;display:inline-flex;height:36px;justify-content:center;line-height:26px;padding:5px 20px!important}.ezplayer-mobile .epicker-mobile.ezplayer-select-picker .ezplayer-select-option{--webkit-tap-highlight-color:transparent!important}.ezplayer-mobile .epicker-mobile.ezplayer-select-picker .ezplayer-select-option:hover{color:#2c2c2c}.ezplayer-mobile .epicker-mobile.ezplayer-select-picker .ezplayer-select-option:active{background-color:#f8f8f8}.ezplayer-mobile .epicker-mobile.ezplayer-select-picker .ezplayer-select-cancel{background-color:#fff;border-radius:var(--ezplayer-border-radius,8px);display:flex;height:54px;margin-top:8px}.ezplayer-mobile .epicker-mobile.ezplayer-select-picker .ezplayer-select-cancel:active{color:var(--ezplayer-active-color)}.ezplayer-mobile.ezplayer-fullscreen .epicker-mobile.ezplayer-select-picker .epicker-body{bottom:0;left:unset;right:0;top:0;width:240px}.ezplayer-mobile.ezplayer-fullscreen .epicker-mobile.ezplayer-select-picker .ezplayer-select-panel{align-items:center;background-color:var(--ezplayer-panel-bg-color,rgba(0,0,0,.7));border-bottom-right-radius:0;border-top-right-radius:0;height:100%;justify-content:center;padding-bottom:env(safe-area-inset-bottom);width:100%}.ezplayer-mobile.ezplayer-fullscreen .epicker-mobile.ezplayer-select-picker .ezplayer-select-list{background-color:transparent;border-radius:0;color:#fff;height:auto;margin:0;max-height:100%;width:100%}.ezplayer-mobile.ezplayer-fullscreen .epicker-mobile.ezplayer-select-picker .ezplayer-select-option,.ezplayer-mobile.ezplayer-fullscreen .epicker-mobile.ezplayer-select-picker .ezplayer-select-option:hover{color:#fff}.ezplayer-mobile.ezplayer-fullscreen .epicker-mobile.ezplayer-select-picker .ezplayer-select-option:active{background-color:transparent;color:var(--ezplayer-active-color)}.ezplayer-mobile.ezplayer-fullscreen .epicker-mobile.ezplayer-select-picker .ezplayer-select-cancel{display:none}.ezplayer-mobile.ezplayer-fullscreen .epicker-mobile.ezplayer-select-picker .ezplayer-select-close{display:inline-flex;left:10px;position:absolute;top:10px}.ezplayer-mobile.ezplayer-fullscreen .epicker-mobile.ezplayer-select-picker .ezplayer-select-close:active{color:var(--ezplayer-active-color)}
24
24
  .ezplayer-control-fullscreen .ezplayer-icon-exit-fullscreen,.ezplayer-control-global-fullscreen .ezplayer-icon-exit-global-fullscreen{display:none}.ezplayer-fullscreen .ezplayer-icon-exit-fullscreen{display:inline-flex}.ezplayer-fullscreen .ezplayer-icon-fullscreen{display:none}.ezplayer-global-fullscreen .ezplayer-icon-exit-global-fullscreen{display:inline-flex}.ezplayer-global-fullscreen .ezplayer-icon-global-fullscreen{display:none}
25
- .ezplayer-loading{background-color:rgba(0,0,0,.5);bottom:0;color:#fff;display:none;font-size:14px;height:100%;left:0;position:absolute;right:0;top:0;transition:transform .3s cubic-bezier(.78,.14,.15,.86);vertical-align:middle;width:100%;z-index:4}.ezplayer-loading-dot{display:inline-block;font-size:25px;height:25px;position:relative;width:25px}.ezplayer-loading-dot-item{background-color:#fff;border-radius:2px;display:block;height:10px;position:absolute;transform-origin:50% 50%;width:10px}.ezplayer-loading-dot-item:first-child{animation:animationShape1 2s linear 0s infinite normal;left:0;opacity:1;top:0}.ezplayer-loading-dot-item:nth-child(2){animation:animationShape2 2s linear 0s infinite normal;left:15px;opacity:.8;top:0}.ezplayer-loading-dot-item:nth-child(3){animation:animationShape3 2s linear 0s infinite normal;left:0;opacity:.5;top:15px}.ezplayer-loading-dot-item:nth-child(4){animation:animationShape4 2s linear 0s infinite normal;left:15px;opacity:.3;top:15px}.ezplayer-loading-dot-load{animation:rotation 1s infinite}@media (-ms-high-contrast:active),(-ms-high-contrast:none){.ezplayer-load-blur{background:#fff;opacity:.5}}@keyframes ezdSpinMove{to{opacity:1}}@keyframes ezdRotate{to{transform:rotate(405deg)}}@keyframes rotation{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes animationShape1{0%{transform:translate(0)}25%{transform:translateY(15px)}50%{transform:translate(15px,15px)}75%{transform:translate(15px)}to{transform:translate(translate)}}@keyframes animationShape2{0%{transform:translate(0)}25%{transform:translate(-15px)}50%{transform:translate(-15px,15px)}75%{transform:translateY(15px)}}@keyframes animationShape3{0%{transform:translate(0)}25%{transform:translate(15px)}50%{transform:translate(15px,-15px)}75%{transform:translateY(-15px)}}@keyframes animationShape4{0%{transform:translate(0)}25%{transform:translateY(-15px)}50%{transform:translate(-15px,-15px)}75%{transform:translate(-15px)}}.ezplayer-loading-text{margin-top:20px}
25
+ .ezplayer-loading{background-color:rgba(0,0,0,.5);bottom:0;color:#fff;display:none;font-size:14px;height:100%;left:0;position:absolute;right:0;top:0;transition:transform .3s cubic-bezier(.78,.14,.15,.86);vertical-align:middle;width:100%;z-index:4}.ezplayer-loading-dot{display:inline-block;font-size:25px;height:25px;position:relative;width:25px}.ezplayer-loading-dot-item{background-color:#fff;border-radius:2px;display:block;height:10px;position:absolute;transform-origin:50% 50%;width:10px}.ezplayer-loading-dot-item:first-child{animation:animationShape1 2s linear 0s infinite normal!important;left:0;opacity:1;top:0}.ezplayer-loading-dot-item:nth-child(2){animation:animationShape2 2s linear 0s infinite normal!important;left:15px;opacity:.8;top:0}.ezplayer-loading-dot-item:nth-child(3){animation:animationShape3 2s linear 0s infinite normal!important;left:0;opacity:.5;top:15px}.ezplayer-loading-dot-item:nth-child(4){animation:animationShape4 2s linear 0s infinite normal!important;left:15px;opacity:.3;top:15px}.ezplayer-loading-dot-load{animation:rotation 1s infinite!important}@media (-ms-high-contrast:active),(-ms-high-contrast:none){.ezplayer-load-blur{background:#fff;opacity:.5}}@keyframes ezdSpinMove{to{opacity:1}}@keyframes ezdRotate{to{transform:rotate(405deg)}}@keyframes rotation{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes animationShape1{0%{transform:translate(0)}25%{transform:translateY(15px)}50%{transform:translate(15px,15px)}75%{transform:translate(15px)}to{transform:translate(translate)}}@keyframes animationShape2{0%{transform:translate(0)}25%{transform:translate(-15px)}50%{transform:translate(-15px,15px)}75%{transform:translateY(15px)}}@keyframes animationShape3{0%{transform:translate(0)}25%{transform:translate(15px)}50%{transform:translate(15px,-15px)}75%{transform:translateY(-15px)}}@keyframes animationShape4{0%{transform:translate(0)}25%{transform:translateY(-15px)}50%{transform:translate(-15px,-15px)}75%{transform:translate(-15px)}}.ezplayer-loading-text{margin-top:20px}
26
26
  .ezplayer-message{background-color:rgba(0,0,0,.4);bottom:0;color:#fff;display:none;font-size:16px;height:100%;left:0;overflow:hidden;position:absolute;right:0;top:0;width:100%;z-index:5}.ezplayer-message-content{align-items:center;display:flex;flex-direction:column;justify-content:center}.ezplayer-message-msg{display:-webkit-box;-webkit-line-clamp:2;margin-top:15px;max-width:500px;overflow:hidden;word-break:break-all;-webkit-box-orient:vertical;padding:0 20px}.ezplayer-message-error{color:#ff4d4f}.ezplayer-toast{background-color:rgba(0,0,0,.8);border-radius:var(--ezplayer-border-radius,8px);box-shadow:0 9px 28px 8px rgba(0,0,0,.05),0 3px 16px 0 rgba(0,0,0,.03),0 3px 7px -4px rgba(0,0,0,.05);color:#fff;display:flex;font-size:14px;left:50%;line-height:22px;max-width:450px;overflow:hidden;padding:9px 16px;position:absolute;top:50px;transform:translateX(-50%);z-index:6}.ezplayer-toast-content{padding-left:24px;position:relative}.ezplayer-toast .ezplayer-icon{font-size:16px;left:0;position:absolute;top:3px}.ezplayer-toast .ezplayer-icon-info-circle{color:var(--ezplayer-default-color,#fff)}.ezplayer-toast .ezplayer-icon-warn-circle{color:#faad14}.ezplayer-toast .ezplayer-icon-close-circle{color:#ff4d4f}.ezplayer-mobile .ezplayer-toast{font-size:12px;line-height:20px}.ezplayer-mobile .ezplayer-toast-content{padding-left:20px}.ezplayer-mobile .ezplayer-toast .ezplayer-icon{font-size:14px}
27
27
  .ezplayer-poster{bottom:0;display:none;height:100%;left:0;overflow:hidden;position:absolute;right:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%;z-index:2}.ezplayer-poster img{border:0;font-size:0;height:100%;outline:none;pointer-events:none;width:100%}
28
28
  .ezplayer-icon-volume{position:relative}.ezplayer-icon-volume svg .ezplayer-icon-volume-high,.ezplayer-icon-volume svg .ezplayer-icon-volume-low,.ezplayer-icon-volume svg .ezplayer-icon-volume-muted{display:none}.ezplayer-icon-volume.ezplayer-icon-volume-high svg .ezplayer-icon-volume-high,.ezplayer-icon-volume.ezplayer-icon-volume-high svg .ezplayer-icon-volume-low,.ezplayer-icon-volume.ezplayer-icon-volume-low svg .ezplayer-icon-volume-low,.ezplayer-icon-volume.ezplayer-icon-volume-muted svg .ezplayer-icon-volume-muted,.ezplayer-icon-volume.ezplayer-icon-volume-zero svg .ezplayer-icon-volume-muted{display:inline}.ezplayer-volume-progress{height:126px}
package/dist/style.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /*
2
- * @ezuikit/player-theme v3.1.4-beta.2
3
- * Copyright (c) 2026-08-27 19:42:35 Ezviz-OpenBiz
2
+ * @ezuikit/player-theme v3.1.5-beta.2
3
+ * Copyright (c) 2026-09-04 02:44:28 Ezviz-OpenBiz
4
4
  * Released under the MIT License.
5
5
  */
6
6
  require("./style.css");
@@ -1500,7 +1500,7 @@ declare class Theme extends EventEmitter {
1500
1500
  readonly zoomingChange: "zoomingChange";
1501
1501
  readonly zoomTranslateChange: "zoomTranslateChange";
1502
1502
  readonly audioInfo: "audioInfo";
1503
- readonly videoInfo: "videoInfo"; /** 语言包 @since 0.0.1 */
1503
+ readonly videoInfo: "videoInfo";
1504
1504
  readonly firstFrameDisplay: "firstFrameDisplay";
1505
1505
  readonly fullscreen: "fullscreen";
1506
1506
  readonly exitFullscreen: "exitFullscreen";
@@ -1514,6 +1514,12 @@ declare class Theme extends EventEmitter {
1514
1514
  readonly speedChange: "speedChange";
1515
1515
  readonly recordingChange: "recordingChange";
1516
1516
  readonly talkingChange: "talkingChange";
1517
+ /**
1518
+ * @type { "rec" | "cloudRec" | "cloudRecord" } recType 回放类型
1519
+ * ```ts
1520
+ * theme.recType // 回放类型
1521
+ * ```
1522
+ */
1517
1523
  readonly talkVolumeChange: "talkVolumeChange";
1518
1524
  readonly broadcastChange: "broadcastChange";
1519
1525
  readonly aichatChange: "aichatChange";
@@ -1536,13 +1542,13 @@ declare class Theme extends EventEmitter {
1536
1542
  readonly capturePicture: "Control.capturePicture";
1537
1543
  readonly capturePictureResult: "Control.capturePictureResult";
1538
1544
  readonly capturePictureDestroy: "Control.capturePictureDestroy";
1539
- readonly volumechange: "Control.volumechange"; /** 当前容器的全屏状态 true: 全屏, false: 非全屏 */
1545
+ readonly volumechange: "Control.volumechange";
1540
1546
  readonly volumePanelOpenChange: "Control.volumePanelOpenChange";
1541
1547
  readonly volumeDestroy: "Control.volumeDestroy";
1542
1548
  readonly controlsBarOpenChange: "Control.controlsBarOpenChange";
1543
1549
  readonly headerMoreShowControlsChange: "Control.headerMoreShowControlsChange";
1544
- readonly headerMorePanelOpenChange: "Control.headerMorePanelOpenChange"; /** 倍速 @private */
1545
- readonly footerMoreShowControlsChange: "Control.footerMoreShowControlsChange";
1550
+ readonly headerMorePanelOpenChange: "Control.headerMorePanelOpenChange";
1551
+ readonly footerMoreShowControlsChange: "Control.footerMoreShowControlsChange"; /** 清晰度列表 */
1546
1552
  readonly footerMorePanelOpenChange: "Control.footerMorePanelOpenChange";
1547
1553
  readonly deviceDestroy: "Control.deviceDestroy";
1548
1554
  readonly recTypeChange: "Control.recTypeChange";
@@ -1743,7 +1749,7 @@ declare class Theme extends EventEmitter {
1743
1749
  OPEN_INSTRUCTIONS: string;
1744
1750
  INIT_FINSHED: string;
1745
1751
  INIT_SUCCESS: string;
1746
- GET_PLAYURL_FAILED: string;
1752
+ GET_PLAYURL_FAILED: string; /** 所有私有流的模板 @since 0.0.1 */
1747
1753
  VIDEO_LOADING: string;
1748
1754
  DISCONNECT: string;
1749
1755
  DEVICE_ENCRYPTED: string;
@@ -1760,7 +1766,7 @@ declare class Theme extends EventEmitter {
1760
1766
  SPEED: string;
1761
1767
  SPEED_RATE: string;
1762
1768
  SPEED_CANCEL: string;
1763
- GET_SPEED: string; /** 所有控件列表, 所有控件名称规则(`${iconId}Control`), 如音量控件 this.controls["volumeControl"] @since 0.0.1 */
1769
+ GET_SPEED: string;
1764
1770
  MAX_SPEED_LIMIT: string;
1765
1771
  MIN_SPEED_LIMIT: string;
1766
1772
  SEEK_CANNOT_CROSS_DAYS: string;
@@ -1770,7 +1776,7 @@ declare class Theme extends EventEmitter {
1770
1776
  RESUME: string;
1771
1777
  RESUME_FAILED: string;
1772
1778
  CALL_END: string;
1773
- USER_DO_NOT_OWN_DEVICE: string; /** 消息提示控件 @since 0.0.1 @private */
1779
+ USER_DO_NOT_OWN_DEVICE: string;
1774
1780
  NO_CLOUD_RECORD: string;
1775
1781
  CHANGE_VIDEO_LEVEL: string;
1776
1782
  CHANGE_VIDEO_LEVEL_FAIL: string;
@@ -1815,9 +1821,9 @@ declare class Theme extends EventEmitter {
1815
1821
  BTN_REC: string;
1816
1822
  BTN_CALENDAR: string;
1817
1823
  BTN_TIME: string;
1818
- BTN_MORE: string; /** resizeObserver 监听销毁 */
1824
+ BTN_MORE: string;
1819
1825
  DEVICE_NAME: string;
1820
- DEVICE_ID: string;
1826
+ DEVICE_ID: string; /** resizeObserver 监听销毁 */
1821
1827
  CAPTURE_SUCCESS: string;
1822
1828
  CAPTURE_FAILED: string;
1823
1829
  START_RECORD_SUCCESS: string;
@@ -1827,7 +1833,7 @@ declare class Theme extends EventEmitter {
1827
1833
  RECORD_TIPS: string;
1828
1834
  RECORDS: string;
1829
1835
  OPEN_SOUND: string;
1830
- CLOSE_SOUND: string; /** 屏幕旋转角度 0 | 90 | 180 | 270 */
1836
+ CLOSE_SOUND: string;
1831
1837
  SOUND_OPENED: string;
1832
1838
  ZOOM: string;
1833
1839
  START_ZOOM: string;
@@ -1843,10 +1849,11 @@ declare class Theme extends EventEmitter {
1843
1849
  '3D_ZOOM_DISABLE': string;
1844
1850
  '3D_ZOOM_FAILED': string;
1845
1851
  START_3D_ZOOM: string;
1846
- CLOSE_3D_ZOOM: string;
1852
+ CLOSE_3D_ZOOM: string; /** 对讲中 @private */
1847
1853
  DEVICE_NOT_SUPPORT_3D_ZOOM: string;
1848
1854
  '3D_ZOOM_ACTIVED': string;
1849
1855
  '3D_ZOOM_NOT_ACTIVED': string;
1856
+ /** 清晰度列表 */
1850
1857
  '3D_ZOOM_CLOSED': string;
1851
1858
  CHANGE_ZOOM_TYPE: string;
1852
1859
  FULLSCREEN: string;
@@ -1854,22 +1861,25 @@ declare class Theme extends EventEmitter {
1854
1861
  GET_WEB_FULLSCREEN_STATUS: string;
1855
1862
  WEB_FULLSCREEN: string;
1856
1863
  WEB_FULLSCREEN_EXIT: string;
1857
- DESTROY: string; /** 窗口尺寸变化时,设置窗口超出隐藏,防止出现滚动条 */
1864
+ DESTROY: string;
1858
1865
  GET_CAPACITY: string;
1859
1866
  GET_PTZ_STATUS: string;
1860
1867
  GET_PTZ_STATUS_FAILED: string;
1861
- /**
1862
- * 录像回放的月份列表 @private
1863
- */
1864
1868
  MOBILE_HIDE_PTZ: string;
1865
1869
  OPTION_PTZ_FAILED: string;
1866
1870
  MOBILE_PTZ_TIPS: string;
1867
1871
  PTZ_FAST: string;
1868
1872
  PTZ_MID: string;
1869
1873
  PTZ_SLOW: string;
1874
+ /**
1875
+ * 录像回放的月份列表 @private
1876
+ */
1870
1877
  PTZ_SPEED: string;
1871
1878
  DEVICE_ZOOM: string;
1872
1879
  DEVICE_FOCUS: string;
1880
+ /**
1881
+ * 录像回放的月份列表 @private
1882
+ */
1873
1883
  NOT_SUPPORT_DEVICE_ZOOM: string;
1874
1884
  NOT_SUPPORT_FOCUS: string;
1875
1885
  MIRROR: string;
@@ -1936,14 +1946,14 @@ declare class Theme extends EventEmitter {
1936
1946
  395560: string;
1937
1947
  395561: string;
1938
1948
  395562: string;
1939
- 395563: string; /** 语言包 @since 0.0.1 */
1949
+ 395563: string;
1940
1950
  395564: string;
1941
1951
  395566: string;
1942
1952
  395567: string;
1943
1953
  395568: string;
1944
1954
  395569: string;
1945
1955
  395600: string;
1946
- 395601: string; /** 内容控件 @since 0.0.1 */
1956
+ 395601: string;
1947
1957
  395602: string;
1948
1958
  395610: string;
1949
1959
  395620: string;
@@ -1955,15 +1965,18 @@ declare class Theme extends EventEmitter {
1955
1965
  396101: string;
1956
1966
  396102: string;
1957
1967
  396103: string;
1958
- 396104: string;
1959
- 396105: string;
1968
+ 396104: string; /** 回放底部时间轴 @since 0.0.1 @private */
1969
+ 396105: string; /**
1970
+ * 移动端扩展容器, 扩展的控件渲染在指定容器以外, 仅只用端适用, 为了可以放置大的控件和方便开发接入
1971
+ * @private
1972
+ */
1960
1973
  396106: string;
1961
1974
  396107: string;
1962
1975
  396108: string;
1963
1976
  396109: string;
1964
1977
  396110: string;
1965
1978
  396501: string;
1966
- 396502: string; /** 容器的宽 */
1979
+ 396502: string;
1967
1980
  396503: string;
1968
1981
  396504: string;
1969
1982
  396505: string;
@@ -1976,9 +1989,12 @@ declare class Theme extends EventEmitter {
1976
1989
  396513: string;
1977
1990
  396514: string;
1978
1991
  396515: string;
1979
- 396516: string; /** 窗口尺寸变化时,设置窗口超出隐藏,防止出现滚动条 */
1992
+ 396516: string;
1980
1993
  396517: string;
1981
1994
  396518: string;
1995
+ /**
1996
+ * 录像回放的月份列表 @private
1997
+ */
1982
1998
  396519: string;
1983
1999
  396520: string;
1984
2000
  396700: string;
@@ -2048,9 +2064,7 @@ declare class Theme extends EventEmitter {
2048
2064
  SEEK_TIMEFORMAT_ERROR: string;
2049
2065
  PAUSE: string;
2050
2066
  PAUSE_FAILED: string;
2051
- RESUME: string; /**
2052
- * url 信息 播放地址信息
2053
- */
2067
+ RESUME: string;
2054
2068
  RESUME_FAILED: string;
2055
2069
  CALL_END: string;
2056
2070
  USER_DO_NOT_OWN_DEVICE: string;
@@ -2066,28 +2080,28 @@ declare class Theme extends EventEmitter {
2066
2080
  VIDEO_LEVEL_HEIGH: string;
2067
2081
  VIDEO_LEVEL_SUPER: string;
2068
2082
  VIDEO_LEVEL_EXTREME: string;
2083
+ /**
2084
+ * 视频分辨率 宽
2085
+ *
2086
+ * @version 3.1.2
2087
+ *
2088
+ * ```ts
2089
+ * theme.videoWidth // number
2090
+ * ```
2091
+ */
2069
2092
  VIDEO_LEVEL_3K: string;
2070
2093
  VIDEO_LEVEL_4k: string;
2071
2094
  RESET_THEME: string;
2072
2095
  BTN_PLAY: string;
2073
2096
  BTN_PAUSE: string;
2074
- BTN_VOLUME: string; /**
2075
- * 当前播放状态
2076
- * ```ts
2077
- * theme.playing // boolean
2078
- * ```
2097
+ BTN_VOLUME: string;
2098
+ BTN_MUTED: string; /**
2099
+ * 视频分辨率 高
2100
+ * @version 3.1.2
2079
2101
  */
2080
- BTN_MUTED: string;
2081
2102
  BTN_RECORDVIDEO: string;
2082
2103
  BTN_CAPTURE: string;
2083
2104
  BTN_TALK: string;
2084
- /**
2085
- * 播放状态
2086
- * ```ts
2087
- * // 事件监听
2088
- * theme.on(Theme.EVENTS.play, (playing: boolean) => {})
2089
- * ```
2090
- */
2091
2105
  BTN_BROADCAST: string;
2092
2106
  BTN_AICHAT: string;
2093
2107
  BTN_LIVE: string;
@@ -2156,7 +2170,12 @@ declare class Theme extends EventEmitter {
2156
2170
  GET_PTZ_STATUS: string;
2157
2171
  GET_PTZ_STATUS_FAILED: string;
2158
2172
  MOBILE_HIDE_PTZ: string;
2159
- OPTION_PTZ_FAILED: string;
2173
+ /**
2174
+ * 是否在缩放中
2175
+ */
2176
+ OPTION_PTZ_FAILED: string; /**
2177
+ * 是否在缩放中
2178
+ */
2160
2179
  MOBILE_PTZ_TIPS: string;
2161
2180
  PTZ_FAST: string;
2162
2181
  PTZ_MID: string;
@@ -2688,6 +2707,9 @@ declare class Theme extends EventEmitter {
2688
2707
  * 窗口全屏后旋转 90度判断, 然后设置控件已经旋转 90度, 为了解决控件交互问题
2689
2708
  */
2690
2709
  private _isRotated;
2710
+ /**
2711
+ * 私有流地址
2712
+ */
2691
2713
  get isEzopen(): boolean;
2692
2714
  /**
2693
2715
  * 判断播放地址是萤石的播放地址
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ezuikit/player-theme",
3
- "version": "3.1.4-beta.2",
3
+ "version": "3.1.5-beta.2",
4
4
  "description": "player theme",
5
5
  "title": "theme",
6
6
  "main": "dist/index.cjs",
@@ -36,7 +36,7 @@
36
36
  "dependencies": {
37
37
  "@ezuikit/utils-i18n": "^2.0.1",
38
38
  "@ezuikit/utils-logger": "^2.0.1",
39
- "@ezuikit/utils-tools": "^2.0.6",
39
+ "@ezuikit/utils-tools": "^2.0.7",
40
40
  "@ezuikit/control-date-picker": "2.1.2-beta.1",
41
41
  "@ezuikit/control-time-line": "2.1.0",
42
42
  "@ezuikit/control-ptz": "1.0.0",