@cloud-app-dev/vidc 3.0.1 → 3.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/.umirc.ts +1 -1
  2. package/es/LoaderApp/utils.d.ts +1 -1
  3. package/es/Map/AMap.d.ts +6839 -1319
  4. package/es/Map/BasicMap/AMapInstance.d.ts +4 -3
  5. package/es/Map/BasicMap/AMapInstance.js +3 -4
  6. package/es/Map/BasicMap/LeafletInstance.d.ts +3 -3
  7. package/es/Map/ClusterLayer/hook.d.ts +4 -4
  8. package/es/Map/ClusterLayer/hook.js +20 -24
  9. package/es/Map/ClusterLayer/index.d.ts +1 -0
  10. package/es/Map/ClusterLayer/index.js +1 -0
  11. package/es/Map/InfoWindow/MakerLikeWindow.d.ts +4 -0
  12. package/es/Map/InfoWindow/MakerLikeWindow.js +103 -0
  13. package/es/Map/InfoWindow/demo.js +48 -21
  14. package/es/Map/InfoWindow/index.d.ts +7 -5
  15. package/es/Map/InfoWindow/index.js +7 -6
  16. package/es/Map/interface.d.ts +1 -1
  17. package/es/Map/useMarker/index.d.ts +2 -2
  18. package/es/Map/useMarker/index.js +3 -19
  19. package/es/Player/api/index.d.ts +1 -0
  20. package/es/Player/api/index.js +2 -0
  21. package/es/Player/demo.js +8 -3
  22. package/es/Player/event/errorEvent.js +3 -8
  23. package/es/Player/frontend_player.d.ts +1 -2
  24. package/es/Player/frontend_player.js +27 -57
  25. package/es/Player/frontend_timeline.d.ts +2 -1
  26. package/es/Player/frontend_timeline.js +14 -4
  27. package/es/Player/player.d.ts +7 -9
  28. package/es/Player/segment_player.d.ts +1 -1
  29. package/es/Player/segment_player.js +74 -36
  30. package/es/Player/single_player.d.ts +2 -2
  31. package/es/Player/single_player.js +20 -11
  32. package/es/ScreenPlayer/Live.js +9 -1
  33. package/es/ScreenPlayer/LiveTools.d.ts +3 -1
  34. package/es/ScreenPlayer/LiveTools.js +8 -1
  35. package/es/ScreenPlayer/PlayerWithExt.js +48 -27
  36. package/es/ScreenPlayer/Record.d.ts +5 -0
  37. package/es/ScreenPlayer/Record.js +7 -19
  38. package/es/ScreenPlayer/TimeSlider.d.ts +1 -1
  39. package/es/ScreenPlayer/TimeSlider.js +39 -35
  40. package/es/ScreenPlayer/demo2.js +1 -1
  41. package/es/ScreenPlayer/index.css +2 -3
  42. package/es/ScreenPlayer/useVideoFit.d.ts +1 -1
  43. package/es/ScreenPlayer/useVideoFit.js +4 -2
  44. package/package.json +1 -1
  45. package/release-build.sh +29 -4
@@ -1,26 +1,14 @@
1
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2
-
3
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4
-
5
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
6
-
7
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
8
-
9
- function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
10
-
11
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
12
-
1
+ import _useUpdate from "ahooks/es/useUpdate";
13
2
  import { __rest } from "tslib";
14
- import React, { useMemo, useRef, useState } from 'react';
3
+ import React, { useCallback, useMemo, useRef } from 'react';
15
4
  import SinglePlayer from './single_player';
16
5
  import FrontendTimeLine from './frontend_timeline';
17
6
  import Events from './event/eventName';
7
+
18
8
  /**
19
9
  * @desc 主组件,负责片段整体逻辑控制
20
- * @param param0
21
- * @returns
10
+ * @return JSX.Element
22
11
  */
23
-
24
12
  function FrontendPlayer(_a) {
25
13
  var url = _a.url,
26
14
  begin = _a.begin,
@@ -28,69 +16,51 @@ function FrontendPlayer(_a) {
28
16
  onSeek = _a.onSeek,
29
17
  forwordRef = _a.forwordRef,
30
18
  customTimeLine = _a.customTimeLine,
31
- _onCanPlayerInit = _a.onCanPlayerInit,
19
+ onCanPlayerInit = _a.onCanPlayerInit,
32
20
  props = __rest(_a, ["url", "begin", "end", "onSeek", "forwordRef", "customTimeLine", "onCanPlayerInit"]);
33
21
 
34
- var _useState = useState({
35
- forceKey: Date.now()
36
- }),
37
- _useState2 = _slicedToArray(_useState, 2),
38
- state = _useState2[0],
39
- setState = _useState2[1];
22
+ var update = _useUpdate();
40
23
 
41
24
  var ref = useRef(null);
42
25
  var playRef = forwordRef ? forwordRef : ref;
43
26
 
44
27
  var _ref = playRef.current || {},
45
28
  api = _ref.api,
46
- event = _ref.event; // 秒级别转换毫秒
29
+ event = _ref.event; // 转换毫秒
47
30
 
48
31
 
49
- var beginTemp = useMemo(function () {
50
- return begin ? String(begin).length === 10 ? Math.floor(begin * 1000) : begin : begin;
51
- }, []);
52
- var endTemp = useMemo(function () {
53
- return end ? String(end).length === 10 ? Math.floor(end * 1000) : end : end;
54
- }, []);
55
32
  var duration = useMemo(function () {
56
- return (endTemp - beginTemp) / 1000;
57
- }, [beginTemp, endTemp]); //单位s 秒
33
+ return (begin - end) / 1000;
34
+ }, [begin, end]); //单位s 秒
58
35
  // 重置reload
59
36
 
60
37
  var reload = function reload() {
61
38
  playRef.current.event.emit(Events.RELOAD);
62
- onSeek && onSeek(beginTemp);
39
+ onSeek && onSeek(begin);
63
40
  playRef.current.api.reload();
64
- setState(function (old) {
65
- return Object.assign(Object.assign({}, old), {
66
- forceKey: Date.now()
67
- });
68
- });
69
41
  };
70
42
 
43
+ var onInit = useCallback(function () {
44
+ update();
45
+ onCanPlayerInit && onCanPlayerInit(); // eslint-disable-next-line react-hooks/exhaustive-deps
46
+ }, []);
47
+ var hasReady = api && event;
48
+ var timeline = customTimeLine !== null && customTimeLine !== void 0 ? customTimeLine : /*#__PURE__*/React.createElement(FrontendTimeLine, {
49
+ end: end,
50
+ url: url,
51
+ onSeek: onSeek,
52
+ begin: begin,
53
+ api: api,
54
+ event: event,
55
+ duration: duration
56
+ });
71
57
  return /*#__PURE__*/React.createElement(SinglePlayer, Object.assign({
72
58
  ref: playRef,
73
59
  url: url,
74
- type: "flv",
75
60
  reload: reload,
76
- isLive: true,
77
- onCanPlayerInit: function onCanPlayerInit() {
78
- setState({
79
- forceKey: Date.now()
80
- });
81
- _onCanPlayerInit && _onCanPlayerInit({
82
- reload: reload
83
- });
84
- },
85
- customTimeLine: api && event && (customTimeLine || /*#__PURE__*/React.createElement(FrontendTimeLine, {
86
- end: endTemp,
87
- onSeek: onSeek,
88
- key: state.forceKey,
89
- begin: beginTemp,
90
- api: api,
91
- event: event,
92
- duration: duration
93
- }))
61
+ onCanPlayerInit: onInit,
62
+ isLive: false,
63
+ customTimeLine: hasReady ? timeline : /*#__PURE__*/React.createElement(React.Fragment, null)
94
64
  }, props));
95
65
  }
96
66
 
@@ -9,6 +9,7 @@ interface ITimeLineProps {
9
9
  begin: number;
10
10
  end: number;
11
11
  onSeek?: (time: number) => void;
12
+ url?: string;
12
13
  }
13
- declare function FrontendTimeLine({ api, event, duration, begin, end, onSeek }: ITimeLineProps): JSX.Element;
14
+ declare function FrontendTimeLine({ api, event, duration, begin, end, onSeek, url }: ITimeLineProps): JSX.Element;
14
15
  export default FrontendTimeLine;
@@ -1,3 +1,5 @@
1
+ import _useTrackedEffect from "ahooks/es/useTrackedEffect";
2
+
1
3
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2
4
 
3
5
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -10,7 +12,7 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
10
12
 
11
13
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
12
14
 
13
- import React, { useCallback, useEffect, useMemo, useState, startTransition } from 'react';
15
+ import React, { useCallback, useEffect, useMemo, useState, startTransition, useRef } from 'react';
14
16
  import useBarStatus from './contraller_bar/useBarStatus';
15
17
  import { useTimes } from './timeline';
16
18
  import { FMT } from './util';
@@ -23,7 +25,9 @@ function FrontendTimeLine(_ref) {
23
25
  duration = _ref.duration,
24
26
  begin = _ref.begin,
25
27
  end = _ref.end,
26
- onSeek = _ref.onSeek;
28
+ onSeek = _ref.onSeek,
29
+ url = _ref.url;
30
+ var lastSeekCTimeRef = useRef(0); // time 是记录seek时跳了多少
27
31
 
28
32
  var _useState = useState({
29
33
  time: 0,
@@ -35,14 +39,20 @@ function FrontendTimeLine(_ref) {
35
39
  state = _useState2[0],
36
40
  setState = _useState2[1];
37
41
 
38
- var status = useBarStatus(event);
42
+ var status = useBarStatus(event); //获取视频当前播放时长单位s
39
43
 
40
44
  var _useTimes = useTimes(api, event),
41
45
  _useTimes2 = _slicedToArray(_useTimes, 1),
42
46
  currentTime = _useTimes2[0];
43
47
 
48
+ _useTrackedEffect(function (changes) {
49
+ if (changes.includes(1)) {
50
+ lastSeekCTimeRef.current = currentTime;
51
+ }
52
+ }, [currentTime, url]);
53
+
44
54
  var rTime = useMemo(function () {
45
- return state.time + currentTime;
55
+ return state.time + currentTime + lastSeekCTimeRef.current;
46
56
  }, [state.time, currentTime]);
47
57
  useEffect(function () {
48
58
  return setState(function (old) {
@@ -113,6 +113,11 @@ export interface ISinglePlayerProps {
113
113
  */
114
114
  reload?: () => void;
115
115
 
116
+ /**
117
+ * extaction
118
+ */
119
+ extActions?: { [key: string]: (...args: any) => void };
120
+
116
121
  /**
117
122
  * 视频可播放时执行钩子
118
123
  */
@@ -129,7 +134,7 @@ export interface ISinglePlayerProps {
129
134
  playerEvents?: CustomEvent[];
130
135
  }
131
136
 
132
- export interface IFrontendPlayerProps extends Omit<ISinglePlayerProps, 'isLive' | 'reload' | 'type'> {
137
+ export interface IFrontendPlayerProps extends Omit<ISinglePlayerProps, 'isLive' | 'reload'> {
133
138
  /**
134
139
  * 前端录像开始时间
135
140
  */
@@ -146,16 +151,9 @@ export interface IFrontendPlayerProps extends Omit<ISinglePlayerProps, 'isLive'
146
151
  onSeek?: (time: number) => void;
147
152
 
148
153
  forwordRef?: React.MutableRefObject<ExportPlayerType>;
149
-
150
- /**
151
- * 视频可播放时执行钩子
152
- */
153
- onCanPlayerInit?: (data: any) => void;
154
154
  }
155
155
 
156
- export interface ISegmentPlayerProps extends Omit<ISinglePlayerProps, 'url' | 'onCanPlayerInit'> {
157
- onCanPlayerInit?: (ext: { [key: string]: any }) => void;
158
-
156
+ export interface ISegmentPlayerProps extends Omit<ISinglePlayerProps, 'url'> {
159
157
  /**
160
158
  * 云录像片段信息
161
159
  */
@@ -5,5 +5,5 @@ import type { ISegmentPlayerProps } from './player';
5
5
  * @param param0
6
6
  * @returns
7
7
  */
8
- declare function SegmentPlayer({ segments, begin, forwordRef, onCanPlayerInit, defaultIndex, customTimeLine, ...props }: ISegmentPlayerProps): JSX.Element;
8
+ declare function SegmentPlayer({ segments, begin, forwordRef, defaultIndex, onCanPlayerInit, customTimeLine, ...props }: ISegmentPlayerProps): JSX.Element;
9
9
  export default SegmentPlayer;
@@ -1,3 +1,6 @@
1
+ import _useUpdate from "ahooks/es/useUpdate";
2
+ import _useLatest from "ahooks/es/useLatest";
3
+
1
4
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
2
5
 
3
6
  function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -19,17 +22,17 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
19
22
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
20
23
 
21
24
  import { __rest } from "tslib";
22
- import React, { useEffect, useMemo, useRef, useState } from 'react';
25
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
23
26
  import SinglePlayer from './single_player';
24
27
  import SegmentTimeLine from './segment_timeline';
25
28
  import Events from './event/eventName';
29
+
26
30
  /**
27
31
  * @desc 计算第一个url
28
32
  * @param segments
29
33
  * @param defaultIndex
30
34
  * @returns
31
35
  */
32
-
33
36
  function getFirstUrlIndex(segments) {
34
37
  var defaultIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
35
38
 
@@ -60,7 +63,7 @@ function getFirstUrlIndex(segments) {
60
63
 
61
64
  function usePlayIndex(event, segments) {
62
65
  var defaultIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
63
- var deps = arguments.length > 3 ? arguments[3] : undefined;
66
+ var deps = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
64
67
 
65
68
  var _useState = useState({
66
69
  index: getFirstUrlIndex(segments, defaultIndex)
@@ -89,7 +92,7 @@ function usePlayIndex(event, segments) {
89
92
  });
90
93
  });
91
94
  }
92
- }, [state.index]); // 监听片段播放状态,自动跳转下一个片段
95
+ }, [segments, state.index]); // 监听片段播放状态,自动跳转下一个片段
93
96
 
94
97
  useEffect(function () {
95
98
  if (!event) {
@@ -98,7 +101,7 @@ function usePlayIndex(event, segments) {
98
101
 
99
102
  var fn = function fn() {
100
103
  return setState(function (old) {
101
- return Object.assign(Object.assign({}, onload), {
104
+ return Object.assign(Object.assign({}, old), {
102
105
  index: old.index + 1 < segments.length ? old.index + 1 : old.index
103
106
  });
104
107
  });
@@ -107,7 +110,7 @@ function usePlayIndex(event, segments) {
107
110
  event.addEventListener('ended', fn);
108
111
  return function () {
109
112
  return event.removeEventListener('ended', fn);
110
- };
113
+ }; // eslint-disable-next-line react-hooks/exhaustive-deps
111
114
  }, [event, segments].concat(_toConsumableArray(deps)));
112
115
  return {
113
116
  index: state.index,
@@ -131,10 +134,21 @@ function SegmentPlayer(_a) {
131
134
  var segments = _a.segments,
132
135
  begin = _a.begin,
133
136
  forwordRef = _a.forwordRef,
134
- _onCanPlayerInit = _a.onCanPlayerInit,
135
137
  defaultIndex = _a.defaultIndex,
138
+ onCanPlayerInit = _a.onCanPlayerInit,
136
139
  customTimeLine = _a.customTimeLine,
137
- props = __rest(_a, ["segments", "begin", "forwordRef", "onCanPlayerInit", "defaultIndex", "customTimeLine"]);
140
+ props = __rest(_a, ["segments", "begin", "forwordRef", "defaultIndex", "onCanPlayerInit", "customTimeLine"]);
141
+
142
+ var _useState3 = useState({
143
+ seekTime: 0
144
+ }),
145
+ _useState4 = _slicedToArray(_useState3, 2),
146
+ state = _useState4[0],
147
+ setState = _useState4[1];
148
+
149
+ var latestSegmentsRef = _useLatest(segments);
150
+
151
+ var update = _useUpdate();
138
152
 
139
153
  var ref = useRef(null);
140
154
  var playRef = forwordRef ? forwordRef : ref;
@@ -143,13 +157,6 @@ function SegmentPlayer(_a) {
143
157
  api = _ref.api,
144
158
  event = _ref.event;
145
159
 
146
- var _useState3 = useState({
147
- forceKey: Date.now()
148
- }),
149
- _useState4 = _slicedToArray(_useState3, 2),
150
- state = _useState4[0],
151
- setState = _useState4[1];
152
-
153
160
  var duration = useMemo(function () {
154
161
  return segments === null || segments === void 0 ? void 0 : segments.map(function (v) {
155
162
  return (v.endTime - v.beginTime) / 1000;
@@ -158,45 +165,76 @@ function SegmentPlayer(_a) {
158
165
  }, 0);
159
166
  }, [segments]);
160
167
 
161
- var _usePlayIndex = usePlayIndex(event, segments, defaultIndex, [state.forceKey]),
168
+ var _usePlayIndex = usePlayIndex(event, segments, defaultIndex, [segments, defaultIndex]),
162
169
  index = _usePlayIndex.index,
163
170
  setIndex = _usePlayIndex.setIndex;
164
171
 
165
172
  var url = useMemo(function () {
166
- return segments && segments[index] ? segments[index].url : undefined;
173
+ return segments[index] ? segments[index].url : undefined;
167
174
  }, [segments, index]); // 重置reload
168
175
 
169
176
  var reload = function reload() {
170
177
  playRef.current.event.emit(Events.RELOAD);
171
178
  setIndex(0);
172
179
  playRef.current.api.reload();
173
- }; // 秒级别转换
180
+ }; // time 毫秒的时间戳
174
181
 
175
182
 
176
- var beginTemp = useMemo(function () {
177
- return begin ? String(begin).length === 10 ? Math.floor(begin * 1000) : begin : begin;
183
+ var seekTo = function seekTo(time) {
184
+ var index = latestSegmentsRef.current.findIndex(function (v) {
185
+ return time >= v.beginTime && time < v.endTime;
186
+ });
187
+
188
+ if (index === -1) {
189
+ return;
190
+ }
191
+
192
+ var currentTime = time - latestSegmentsRef.current[index].beginTime;
193
+ setIndex(index);
194
+ setState(function (old) {
195
+ return Object.assign(Object.assign({}, old), {
196
+ seekTime: currentTime / 1000
197
+ });
198
+ });
199
+ }; // 处理seek 后index变化后 cuurenttime变化的过程
200
+
201
+
202
+ useEffect(function () {
203
+ if (state.seekTime === 0) {
204
+ return;
205
+ }
206
+
207
+ setState(function (old) {
208
+ return Object.assign(Object.assign({}, old), {
209
+ seekTime: 0
210
+ });
211
+ });
212
+ playRef.current.video.currentTime = state.seekTime; // eslint-disable-next-line react-hooks/exhaustive-deps
213
+ }, [state.seekTime]);
214
+ var hasReady = api && event;
215
+ var timeline = customTimeLine !== null && customTimeLine !== void 0 ? customTimeLine : /*#__PURE__*/React.createElement(SegmentTimeLine, {
216
+ begin: begin,
217
+ api: api,
218
+ event: event,
219
+ index: index,
220
+ segments: segments,
221
+ duration: duration,
222
+ setIndex: setIndex
223
+ });
224
+ var onInit = useCallback(function () {
225
+ update();
226
+ onCanPlayerInit && onCanPlayerInit(); // eslint-disable-next-line react-hooks/exhaustive-deps
178
227
  }, []);
179
228
  return /*#__PURE__*/React.createElement(SinglePlayer, Object.assign({
180
229
  ref: playRef,
181
230
  url: url,
231
+ onCanPlayerInit: onInit,
182
232
  reload: reload,
183
- onCanPlayerInit: function onCanPlayerInit() {
184
- setState({
185
- forceKey: Date.now()
186
- });
187
- _onCanPlayerInit && _onCanPlayerInit({
188
- setIndex: setIndex
189
- });
233
+ extActions: {
234
+ setIndex: setIndex,
235
+ seekTo: seekTo
190
236
  },
191
- customTimeLine: api && event && (customTimeLine || /*#__PURE__*/React.createElement(SegmentTimeLine, {
192
- begin: beginTemp,
193
- api: api,
194
- event: event,
195
- index: index,
196
- segments: segments,
197
- duration: duration,
198
- setIndex: setIndex
199
- }))
237
+ customTimeLine: hasReady ? timeline : /*#__PURE__*/React.createElement(React.Fragment, null)
200
238
  }, props));
201
239
  }
202
240
 
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
2
  import type { ISinglePlayerProps, ExportPlayerType } from './player';
3
3
  import './style/index.less';
4
- declare const _default: React.MemoExoticComponent<React.ForwardRefExoticComponent<ISinglePlayerProps & React.RefAttributes<ExportPlayerType>>>;
5
- export default _default;
4
+ declare const SinglePlayer: React.ForwardRefExoticComponent<ISinglePlayerProps & React.RefAttributes<ExportPlayerType>>;
5
+ export default SinglePlayer;
@@ -16,6 +16,7 @@ import { __rest } from "tslib";
16
16
  import React, { useEffect, useMemo, useRef, useState, useImperativeHandle } from 'react';
17
17
  import { usePlayerApi } from './api';
18
18
  import { usePlayerEvent, useRegisterPlayerEvents, useVideoEvents } from './event';
19
+ import EventName from './event/eventName';
19
20
  import ContrallerBar from './contraller_bar';
20
21
  import ContrallerEvent from './contraller_bar/contraller_event';
21
22
  import LiveHeart from './live_heart';
@@ -34,7 +35,9 @@ var SinglePlayer = /*#__PURE__*/React.forwardRef(function (_a, ref) {
34
35
  isLive = _a.isLive,
35
36
  errorReloadTimer = _a.errorReloadTimer,
36
37
  children = _a.children,
37
- props = __rest(_a, ["className", "url", "type", "hideContrallerBar", "isLive", "errorReloadTimer", "children"]);
38
+ onCanPlayerInit = _a.onCanPlayerInit,
39
+ extActions = _a.extActions,
40
+ props = __rest(_a, ["className", "url", "type", "hideContrallerBar", "isLive", "errorReloadTimer", "children", "onCanPlayerInit", "extActions"]);
38
41
 
39
42
  var autoPlay = props.autoPlay,
40
43
  preload = props.preload,
@@ -97,7 +100,11 @@ var SinglePlayer = /*#__PURE__*/React.forwardRef(function (_a, ref) {
97
100
  container: domRef.current
98
101
  });
99
102
  });
100
- }, []); // 特殊接口实现 reload是可能被重写的,但是API只暴露原生的方法
103
+ }, []); // url 变化清理错误次数
104
+
105
+ useEffect(function () {
106
+ event && event.emit(EventName.CLEAR_ERROR_TIMER); // eslint-disable-next-line react-hooks/exhaustive-deps
107
+ }, [url]); // 特殊接口实现 reload是可能被重写的,但是API只暴露原生的方法
101
108
 
102
109
  var reload = function reload() {
103
110
  return playReload(video, event, flv, hls, url);
@@ -113,11 +120,11 @@ var SinglePlayer = /*#__PURE__*/React.forwardRef(function (_a, ref) {
113
120
  return undefined;
114
121
  }
115
122
 
116
- var map = {
123
+ var map = Object.assign({
117
124
  reload: reload,
118
125
  unload: unload,
119
126
  toggleFit: toggle
120
- };
127
+ }, extActions);
121
128
  return new Proxy(api, {
122
129
  get: function get(target, key) {
123
130
  var _a;
@@ -127,7 +134,7 @@ var SinglePlayer = /*#__PURE__*/React.forwardRef(function (_a, ref) {
127
134
  set: function set() {
128
135
  return true;
129
136
  }
130
- });
137
+ }); // eslint-disable-next-line react-hooks/exhaustive-deps
131
138
  }, [api]); // 代理Event
132
139
 
133
140
  var playEvent = useMemo(function () {
@@ -154,11 +161,12 @@ var SinglePlayer = /*#__PURE__*/React.forwardRef(function (_a, ref) {
154
161
  plugins: [flv, hls],
155
162
  fit: fit
156
163
  };
157
- }, [api, event, video, fit]);
164
+ }, [video, state.container, playApi, playEvent, flv, hls, fit]);
158
165
  useEffect(function () {
159
166
  if (api && event && video) {
160
- props.onCanPlayerInit && props.onCanPlayerInit();
161
- }
167
+ onCanPlayerInit && onCanPlayerInit();
168
+ } // eslint-disable-next-line react-hooks/exhaustive-deps
169
+
162
170
  }, [api, event, video]);
163
171
  return /*#__PURE__*/React.createElement("div", {
164
172
  className: "lm-player-container ".concat(className),
@@ -193,7 +201,7 @@ var SinglePlayer = /*#__PURE__*/React.forwardRef(function (_a, ref) {
193
201
  leftMidExtContents: leftMidExtContents,
194
202
  reload: (_b = props.reload) !== null && _b !== void 0 ? _b : reload,
195
203
  hideTimeProgress: !!customTimeLine
196
- })), !isLive ? customTimeLine ? customTimeLine : /*#__PURE__*/React.createElement(Timeline, {
204
+ })), customTimeLine ? customTimeLine : !hideContrallerBar ? /*#__PURE__*/React.createElement(Timeline, {
197
205
  api: playApi,
198
206
  event: event
199
207
  }) : null, /*#__PURE__*/React.createElement(ErrorEvent, {
@@ -222,6 +230,7 @@ SinglePlayer.defaultProps = {
222
230
  mediaDataSource: {},
223
231
  config: {}
224
232
  },
225
- hlsConfig: {}
233
+ hlsConfig: {},
234
+ extActions: {}
226
235
  };
227
- export default /*#__PURE__*/React.memo(SinglePlayer);
236
+ export default SinglePlayer;
@@ -14,6 +14,7 @@ import React, { useMemo, useRef, useState } from 'react';
14
14
  import { ScreenType, mergeFill } from './utils';
15
15
  import { LivePlayerWithExt } from './PlayerWithExt';
16
16
  import Tools from './LiveTools';
17
+ import useVideoFit from './useVideoFit';
17
18
  import "./index.css";
18
19
 
19
20
  function LivePlayer(_ref) {
@@ -30,7 +31,12 @@ function LivePlayer(_ref) {
30
31
  state = _useState2[0],
31
32
  setState = _useState2[1];
32
33
 
33
- var domRef = useRef(null); // 缓存所有player对象
34
+ var domRef = useRef(null);
35
+
36
+ var _useVideoFit = useVideoFit(domRef, []),
37
+ fit = _useVideoFit.fit,
38
+ toggleFit = _useVideoFit.toggleFit; // 缓存所有player对象
39
+
34
40
 
35
41
  var playerRef = useRef([]);
36
42
  var screenType = useMemo(function () {
@@ -96,6 +102,8 @@ function LivePlayer(_ref) {
96
102
  }
97
103
  }));
98
104
  })), /*#__PURE__*/React.createElement(Tools, {
105
+ fit: fit,
106
+ toggleFit: toggleFit,
99
107
  getPlayerItem: getPlayerItem,
100
108
  screenNum: state.screenNum,
101
109
  mode: state.mode,
@@ -10,6 +10,8 @@ interface IToolsProps {
10
10
  screenNum: number;
11
11
  mode: PlayModeType;
12
12
  getPlayerItem: () => ExportPlayerType | undefined;
13
+ fit?: string;
14
+ toggleFit?: () => void;
13
15
  }
14
- declare function LiveTools({ containerRef, updateState, screenNum, getPlayerItem, mode }: IToolsProps): JSX.Element;
16
+ declare function LiveTools({ containerRef, updateState, screenNum, getPlayerItem, mode, toggleFit, fit }: IToolsProps): JSX.Element;
15
17
  export default LiveTools;
@@ -20,7 +20,9 @@ function LiveTools(_ref) {
20
20
  updateState = _ref.updateState,
21
21
  screenNum = _ref.screenNum,
22
22
  getPlayerItem = _ref.getPlayerItem,
23
- mode = _ref.mode;
23
+ mode = _ref.mode,
24
+ toggleFit = _ref.toggleFit,
25
+ fit = _ref.fit;
24
26
 
25
27
  var _useFullscreen = _useFullscreen3(containerRef),
26
28
  _useFullscreen2 = _slicedToArray(_useFullscreen, 2),
@@ -85,6 +87,11 @@ function LiveTools(_ref) {
85
87
  },
86
88
  onClick: reload
87
89
  }, "\u91CD\u8FDE"), /*#__PURE__*/React.createElement("span", {
90
+ style: {
91
+ padding: 6
92
+ },
93
+ onClick: toggleFit
94
+ }, fit === 'fill' ? '自适应' : '填充'), /*#__PURE__*/React.createElement("span", {
88
95
  style: {
89
96
  padding: 6
90
97
  },