@cloud-app-dev/vidc 3.0.16 → 3.0.18

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 (71) hide show
  1. package/.umirc.ts +1 -1
  2. package/es/DisableMark/index.d.ts +2 -1
  3. package/es/DisableMark/index.js +6 -2
  4. package/es/Map/BasicMap/AMapInstance.d.ts +3 -0
  5. package/es/Map/BasicMap/AMapInstance.js +16 -1
  6. package/es/Map/BasicMap/LeafletInstance.d.ts +4 -1
  7. package/es/Map/BasicMap/LeafletInstance.js +17 -2
  8. package/es/Map/LevelCenter/index.d.ts +3 -0
  9. package/es/Map/LevelCenter/index.js +29 -9
  10. package/es/Map/SinglePoint/index.js +8 -5
  11. package/es/Map/hook/useMapEvent.d.ts +2 -0
  12. package/es/Map/hook/useMapEvent.js +23 -0
  13. package/es/Map/interface.d.ts +3 -0
  14. package/es/Player/api/index.d.ts +3 -1
  15. package/es/Player/api/index.js +27 -24
  16. package/es/Player/context.d.ts +21 -0
  17. package/es/Player/context.js +16 -0
  18. package/es/Player/contraller_bar/contraller_event.d.ts +1 -4
  19. package/es/Player/contraller_bar/contraller_event.js +37 -28
  20. package/es/Player/contraller_bar/index.d.ts +2 -7
  21. package/es/Player/contraller_bar/index.js +4 -12
  22. package/es/Player/contraller_bar/left_bar.d.ts +2 -7
  23. package/es/Player/contraller_bar/left_bar.js +26 -23
  24. package/es/Player/contraller_bar/right_bar.d.ts +1 -6
  25. package/es/Player/contraller_bar/right_bar.js +6 -3
  26. package/es/Player/contraller_bar/useBarStatus.js +17 -24
  27. package/es/Player/demo.js +5 -1
  28. package/es/Player/event/errorEvent.d.ts +3 -3
  29. package/es/Player/event/errorEvent.js +39 -40
  30. package/es/Player/event/eventName.d.ts +17 -2
  31. package/es/Player/event/eventName.js +5 -1
  32. package/es/Player/event/index.d.ts +2 -0
  33. package/es/Player/event/index.js +55 -3
  34. package/es/Player/fps_play.d.ts +10 -0
  35. package/es/Player/fps_play.js +80 -0
  36. package/es/Player/frontend_player.js +0 -2
  37. package/es/Player/frontend_timeline.d.ts +1 -5
  38. package/es/Player/frontend_timeline.js +8 -4
  39. package/es/Player/live_heart.d.ts +4 -4
  40. package/es/Player/live_heart.js +10 -7
  41. package/es/Player/message.js +69 -84
  42. package/es/Player/player.d.ts +10 -15
  43. package/es/Player/segment_player.js +13 -29
  44. package/es/Player/segment_timeline.d.ts +1 -6
  45. package/es/Player/segment_timeline.js +11 -7
  46. package/es/Player/single_player.js +94 -49
  47. package/es/Player/style/bar.css +1 -0
  48. package/es/Player/style/index.css +8 -0
  49. package/es/Player/timeline.d.ts +1 -1
  50. package/es/Player/timeline.js +26 -37
  51. package/es/Player/util.d.ts +1 -1
  52. package/es/Player/util.js +2 -5
  53. package/es/ScreenPlayer/Live.d.ts +1 -1
  54. package/es/ScreenPlayer/Live.js +6 -3
  55. package/es/ScreenPlayer/LiveTools.d.ts +9 -1
  56. package/es/ScreenPlayer/LiveTools.js +6 -3
  57. package/es/ScreenPlayer/PlayerWithExt.d.ts +1 -1
  58. package/es/ScreenPlayer/PlayerWithExt.js +2 -4
  59. package/es/ScreenPlayer/Record.d.ts +1 -1
  60. package/es/ScreenPlayer/Record.js +8 -4
  61. package/es/ScreenPlayer/RecordTools.d.ts +9 -1
  62. package/es/ScreenPlayer/RecordTools.js +5 -3
  63. package/es/ScreenPlayer/demo2.js +1 -1
  64. package/es/ScreenPlayer/interface.d.ts +51 -0
  65. package/es/index.d.ts +1 -0
  66. package/es/index.js +1 -0
  67. package/es/useRafInterval/index.d.ts +5 -0
  68. package/es/useRafInterval/index.js +94 -0
  69. package/package.json +1 -1
  70. package/es/Player/event/browserTabEvent.d.ts +0 -9
  71. package/es/Player/event/browserTabEvent.js +0 -57
@@ -1,18 +1,23 @@
1
1
  import _useRafInterval from "ahooks/es/useRafInterval";
2
2
  import _useUpdateEffect from "ahooks/es/useUpdateEffect";
3
3
  import _useDocumentVisibility from "ahooks/es/useDocumentVisibility";
4
- import React, { useRef } from 'react';
4
+ import { useRef } from 'react';
5
5
  import Events from './event/eventName';
6
6
 
7
- function LiveHeart(_ref) {
7
+ function useLiveHeart(_ref) {
8
8
  var api = _ref.api,
9
- event = _ref.event;
9
+ event = _ref.event,
10
+ isLive = _ref.isLive;
10
11
 
11
12
  var documentVisibility = _useDocumentVisibility();
12
13
 
13
14
  var cTimeRef = useRef(null);
14
15
 
15
16
  var run = function run() {
17
+ if (!isLive || documentVisibility !== 'visible') {
18
+ return;
19
+ }
20
+
16
21
  var current = api.getCurrentTime();
17
22
  var buffered = api.getSecondsLoaded();
18
23
 
@@ -38,12 +43,10 @@ function LiveHeart(_ref) {
38
43
  _useRafInterval(function () {
39
44
  var cuurentTime = api.getCurrentTime();
40
45
 
41
- if (!api.video.paused && cuurentTime === cTimeRef.current) {
46
+ if (!!isLive && !api.video.paused && cuurentTime === cTimeRef.current) {
42
47
  event.emit(Events.ERROR);
43
48
  }
44
49
  }, 20 * 1000);
45
-
46
- return /*#__PURE__*/React.createElement(React.Fragment, null);
47
50
  }
48
51
 
49
- export default LiveHeart;
52
+ export default useLiveHeart;
@@ -10,8 +10,9 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
10
10
 
11
11
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
12
12
 
13
- import React, { useEffect, useState, useMemo, useRef } from 'react';
13
+ import React, { useState, useMemo, useRef } from 'react';
14
14
  import IconFont from './iconfont';
15
+ import { useRegisterPlayerEvent, useVideoEvent } from './event';
15
16
  import EventName from './event/eventName';
16
17
  import "./style/message.css";
17
18
 
@@ -42,99 +43,83 @@ function VideoMessage(_ref) {
42
43
 
43
44
  return '';
44
45
  }, [state.errorTimer, state.status]);
45
- useEffect(function () {
46
- var openLoading = function openLoading() {
47
- clearTimeout(timeRef.current);
48
- timeRef.current = setTimeout(function () {
49
- return setState(function (old) {
50
- return Object.assign(Object.assign({}, old), {
51
- loading: true
52
- });
53
- });
54
- }, 200);
55
- };
56
46
 
57
- var closeLoading = function closeLoading() {
58
- clearTimeout(timeRef.current);
59
- setState(function (old) {
47
+ var openLoading = function openLoading() {
48
+ clearTimeout(timeRef.current);
49
+ timeRef.current = setTimeout(function () {
50
+ return setState(function (old) {
60
51
  return Object.assign(Object.assign({}, old), {
61
- loading: false
52
+ loading: true
62
53
  });
63
54
  });
64
- };
65
-
66
- var errorReload = function errorReload(timer) {
67
- clearTimeout(timeRef.current);
68
- setState(function () {
69
- return {
70
- status: 'reload',
71
- errorTimer: timer,
72
- loading: true
73
- };
55
+ }, 200);
56
+ };
57
+
58
+ var closeLoading = function closeLoading() {
59
+ clearTimeout(timeRef.current);
60
+ setState(function (old) {
61
+ return Object.assign(Object.assign({}, old), {
62
+ loading: false
74
63
  });
75
- };
76
-
77
- var reloadFail = function reloadFail() {
78
- return setState(function (old) {
79
- return Object.assign(Object.assign({}, old), {
80
- status: 'fail'
81
- });
64
+ });
65
+ };
66
+
67
+ var errorReload = function errorReload(timer) {
68
+ clearTimeout(timeRef.current);
69
+ setState(function () {
70
+ return {
71
+ status: 'reload',
72
+ errorTimer: timer,
73
+ loading: true
74
+ };
75
+ });
76
+ };
77
+
78
+ var reloadFail = function reloadFail() {
79
+ return setState(function (old) {
80
+ return Object.assign(Object.assign({}, old), {
81
+ status: 'fail'
82
82
  });
83
- };
83
+ });
84
+ };
84
85
 
85
- var reloadSuccess = function reloadSuccess() {
86
- return setState(function (old) {
87
- return Object.assign(Object.assign({}, old), {
88
- status: null
89
- });
86
+ var reloadSuccess = function reloadSuccess() {
87
+ return setState(function (old) {
88
+ return Object.assign(Object.assign({}, old), {
89
+ status: null
90
90
  });
91
- };
92
-
93
- var reload = function reload() {
94
- return setState(function (old) {
95
- return Object.assign(Object.assign({}, old), {
96
- status: 'reload',
97
- loading: true
98
- });
91
+ });
92
+ };
93
+
94
+ var reload = function reload() {
95
+ return setState(function (old) {
96
+ return Object.assign(Object.assign({}, old), {
97
+ status: 'reload',
98
+ loading: true
99
99
  });
100
- };
101
-
102
- var playEnd = function playEnd() {
103
- clearTimeout(timeRef.current);
104
- setState(function (old) {
105
- return Object.assign(Object.assign({}, old), {
106
- status: null,
107
- loading: false
108
- });
100
+ });
101
+ };
102
+
103
+ var playEnd = function playEnd() {
104
+ clearTimeout(timeRef.current);
105
+ setState(function (old) {
106
+ return Object.assign(Object.assign({}, old), {
107
+ status: null,
108
+ loading: false
109
109
  });
110
- api.pause();
111
- };
112
-
113
- event.addEventListener('loadstart', openLoading); // event.addEventListener('waiting', openLoading);
114
- // event.addEventListener('seeking', openLoading)
115
-
116
- event.addEventListener('loadeddata', closeLoading);
117
- event.addEventListener('canplay', closeLoading);
118
- event.on(EventName.ERROR_RELOAD, errorReload);
119
- event.on(EventName.RELOAD_FAIL, reloadFail);
120
- event.on(EventName.RELOAD_SUCCESS, reloadSuccess);
121
- event.on(EventName.RELOAD, reload);
122
- event.on(EventName.HISTORY_PLAY_END, playEnd);
123
- event.on(EventName.CLEAR_ERROR_TIMER, reloadSuccess);
124
- return function () {
125
- event.removeEventListener('loadstart', openLoading); // event.removeEventListener('waiting', openLoading);
126
- // event.removeEventListener('seeking', openLoading)
127
-
128
- event.removeEventListener('loadeddata', closeLoading);
129
- event.removeEventListener('canplay', closeLoading);
130
- event.off(EventName.ERROR_RELOAD, errorReload);
131
- event.off(EventName.RELOAD_FAIL, reloadFail);
132
- event.off(EventName.RELOAD_SUCCESS, reloadSuccess);
133
- event.off(EventName.RELOAD, reload);
134
- event.off(EventName.HISTORY_PLAY_END, playEnd);
135
- event.off(EventName.CLEAR_ERROR_TIMER, reloadSuccess);
136
- };
137
- }, [event]);
110
+ });
111
+ api.pause();
112
+ };
113
+
114
+ useVideoEvent('loadstart', openLoading);
115
+ useVideoEvent('loadeddata', closeLoading);
116
+ useVideoEvent('canplay', closeLoading);
117
+ useRegisterPlayerEvent(EventName.ERROR_RELOAD, errorReload);
118
+ useRegisterPlayerEvent(EventName.RELOAD_FAIL, reloadFail);
119
+ useRegisterPlayerEvent(EventName.RELOAD_SUCCESS, reloadSuccess);
120
+ useRegisterPlayerEvent(EventName.RELOAD, reload);
121
+ useRegisterPlayerEvent(EventName.HISTORY_PLAY_END, playEnd);
122
+ useRegisterPlayerEvent(EventName.CLEAR_ERROR_TIMER, reloadSuccess);
138
123
  var loading = state.loading,
139
124
  status = state.status;
140
125
  return /*#__PURE__*/React.createElement("div", {
@@ -132,6 +132,16 @@ export interface ISinglePlayerProps {
132
132
  * 自定义播放器的事件
133
133
  */
134
134
  playerEvents?: CustomEvent[];
135
+
136
+ /**
137
+ * 开启单帧播放
138
+ */
139
+ oneFpsPlay?: boolean;
140
+
141
+ /**
142
+ * 获取视频针的频次 (ms)
143
+ */
144
+ fpsDelay?: number;
135
145
  }
136
146
 
137
147
  export interface IFrontendPlayerProps extends Omit<ISinglePlayerProps, 'isLive' | 'reload'> {
@@ -173,21 +183,6 @@ export const SinglePlayer: React.FunctionComponent<ISinglePlayerProps>;
173
183
  export const FrontendPlayer: React.FunctionComponent<IFrontendPlayerProps>;
174
184
  export const SegmentPlayer: React.FunctionComponent<ISegmentPlayerProps>;
175
185
 
176
- export interface EventName {
177
- RELOAD: 'reload'; //手动视频重载
178
- RELOAD_FAIL: 'reloadFail'; // 视频出错,重连失败
179
- RELOAD_SUCCESS: 'reloadSuccess'; //视频出错,重连成功
180
- ERROR: 'error'; //视频出错
181
- ERROR_RELOAD: 'errorRload'; //视频出错,自动重连
182
- HISTORY_PLAY_END: 'historyPlayEnd'; //历史视频列表播放结束
183
- SEEK: 'seek'; //跳跃播放时间
184
- TRANSFORM: 'transform'; //视频容器缩放
185
- CHANGE_PLAY_INDEX: 'changePlayIndex'; //历史视频列表播放索引改变
186
- HIDE_CONTRALLER: 'hideContraller';
187
- SHOW_CONTRALLER: 'showContraller';
188
- CLEAR_ERROR_TIMER: 'clearErrorTimer';
189
- }
190
-
191
186
  export type EventInfo = {
192
187
  type: string;
193
188
  listener: ((...args: any) => void)[];
@@ -1,14 +1,6 @@
1
1
  import _useUpdate from "ahooks/es/useUpdate";
2
2
  import _useLatest from "ahooks/es/useLatest";
3
3
 
4
- function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
5
-
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."); }
7
-
8
- function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
9
-
10
- function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
11
-
12
4
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
13
5
 
14
6
  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."); }
@@ -26,13 +18,14 @@ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
26
18
  import SinglePlayer from './single_player';
27
19
  import SegmentTimeLine from './segment_timeline';
28
20
  import Events from './event/eventName';
29
-
21
+ import { useRegisterPlayerEvent, useVideoEvent } from './event';
30
22
  /**
31
23
  * @desc 计算第一个url
32
24
  * @param segments
33
25
  * @param defaultIndex
34
26
  * @returns
35
27
  */
28
+
36
29
  function getFirstUrlIndex(segments) {
37
30
  var defaultIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
38
31
 
@@ -94,24 +87,16 @@ function usePlayIndex(event, segments) {
94
87
  }
95
88
  }, [segments, state.index]); // 监听片段播放状态,自动跳转下一个片段
96
89
 
97
- useEffect(function () {
98
- if (!event) {
99
- return undefined;
100
- }
101
-
102
- var fn = function fn() {
103
- return setState(function (old) {
104
- return Object.assign(Object.assign({}, old), {
105
- index: old.index + 1 < segments.length ? old.index + 1 : old.index
106
- });
90
+ var endHandle = function endHandle() {
91
+ return setState(function (old) {
92
+ return Object.assign(Object.assign({}, old), {
93
+ index: old.index + 1 < segments.length ? old.index + 1 : old.index
107
94
  });
108
- };
95
+ });
96
+ };
109
97
 
110
- event.addEventListener('ended', fn);
111
- return function () {
112
- return event.removeEventListener('ended', fn);
113
- }; // eslint-disable-next-line react-hooks/exhaustive-deps
114
- }, [event, segments].concat(_toConsumableArray(deps)));
98
+ useVideoEvent('ended', endHandle, event);
99
+ useRegisterPlayerEvent(Events.PLAY_ENDED, endHandle, event);
115
100
  return {
116
101
  index: state.index,
117
102
  setIndex: function setIndex(i) {
@@ -214,21 +199,20 @@ function SegmentPlayer(_a) {
214
199
  var hasReady = api && event;
215
200
  var timeline = customTimeLine !== null && customTimeLine !== void 0 ? customTimeLine : /*#__PURE__*/React.createElement(SegmentTimeLine, {
216
201
  begin: begin,
217
- api: api,
218
- event: event,
219
202
  seekTo: seekTo,
220
203
  index: index,
221
204
  segments: segments,
222
- duration: duration,
223
- setIndex: setIndex
205
+ duration: duration
224
206
  });
225
207
  var onInit = useCallback(function () {
226
208
  update();
227
209
  onCanPlayerInit === null || onCanPlayerInit === void 0 ? void 0 : onCanPlayerInit(); // eslint-disable-next-line react-hooks/exhaustive-deps
228
210
  }, []);
211
+ console.log(playRef);
229
212
  return /*#__PURE__*/React.createElement(SinglePlayer, Object.assign({
230
213
  ref: playRef,
231
214
  url: url,
215
+ isLive: false,
232
216
  onCanPlayerInit: onInit,
233
217
  reload: reload,
234
218
  extActions: {
@@ -1,17 +1,12 @@
1
1
  /// <reference types="react" />
2
- import type Api from './api';
3
- import type VideoEventInstance from './event';
4
2
  import type { ISegmentType } from './player';
5
3
  import './style/timeline.less';
6
4
  interface ITimeLineProps {
7
- api: Api;
8
- event: VideoEventInstance;
9
5
  index: number;
10
6
  segments: ISegmentType[];
11
7
  duration: number;
12
- setIndex: (i: number) => void;
13
8
  begin: number;
14
9
  seekTo: (time: number) => void;
15
10
  }
16
- declare function SegmentTimeLine({ api, event, index, segments, duration, begin, setIndex, seekTo }: ITimeLineProps): JSX.Element;
11
+ declare function SegmentTimeLine({ index, segments, duration, begin, seekTo }: ITimeLineProps): JSX.Element;
17
12
  export default SegmentTimeLine;
@@ -13,25 +13,29 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
13
13
 
14
14
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
15
15
 
16
- import React, { useCallback, useMemo } from 'react';
16
+ import React, { useCallback, useContext, useMemo } from 'react';
17
17
  import { useTimes } from './timeline';
18
18
  import useBarStatus from './contraller_bar/useBarStatus';
19
19
  import moment from 'moment';
20
20
  import { FMT } from './util';
21
+ import { Context } from './context';
21
22
  import "./style/timeline.css";
22
23
 
23
24
  function SegmentTimeLine(_ref) {
24
- var api = _ref.api,
25
- event = _ref.event,
26
- index = _ref.index,
25
+ var index = _ref.index,
27
26
  segments = _ref.segments,
28
27
  duration = _ref.duration,
29
28
  begin = _ref.begin,
30
- setIndex = _ref.setIndex,
31
29
  seekTo = _ref.seekTo;
30
+
31
+ var _useContext = useContext(Context),
32
+ api = _useContext.api,
33
+ event = _useContext.event,
34
+ isFpsPlay = _useContext.isFpsPlay;
35
+
32
36
  var status = useBarStatus(event);
33
37
 
34
- var _useTimes = useTimes(api, event),
38
+ var _useTimes = useTimes(api, event, isFpsPlay),
35
39
  _useTimes2 = _slicedToArray(_useTimes, 2),
36
40
  currentTime = _useTimes2[0],
37
41
  buffered = _useTimes2[1];
@@ -62,7 +66,7 @@ function SegmentTimeLine(_ref) {
62
66
  var duration = segments[i].endTime - segments[i].beginTime;
63
67
  var currentTime = current / rect.width * duration;
64
68
  seekTo(Math.round(currentTime + pTime));
65
- }, [segments, api, index, setIndex]);
69
+ }, [segments, begin, seekTo]);
66
70
  return /*#__PURE__*/React.createElement("div", {
67
71
  className: "player-timeline-layout player-segment-timeline-layout ".concat(status === 0 ? 'hide-time-line' : '')
68
72
  }, /*#__PURE__*/React.createElement("div", {
@@ -1,3 +1,4 @@
1
+ import _useUpdateEffect from "ahooks/es/useUpdateEffect";
1
2
  import _useToggle3 from "ahooks/es/useToggle";
2
3
 
3
4
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
@@ -19,11 +20,13 @@ import { usePlayerEvent, useRegisterPlayerEvents, useVideoEvents } from './event
19
20
  import EventName from './event/eventName';
20
21
  import ContrallerBar from './contraller_bar';
21
22
  import ContrallerEvent from './contraller_bar/contraller_event';
22
- import LiveHeart from './live_heart';
23
+ import useLiveHeart from './live_heart';
23
24
  import VideoMessage from './message';
24
- import ErrorEvent from './event/errorEvent';
25
+ import useErrorEvent from './event/errorEvent';
25
26
  import { getVideoType, playReload, playUnload } from './util';
26
27
  import Timeline from './timeline';
28
+ import FPSPlay from './fps_play';
29
+ import { Provider } from './context';
27
30
  import "./style/index.css";
28
31
  var SinglePlayer = /*#__PURE__*/React.forwardRef(function (_a, ref) {
29
32
  var _b;
@@ -53,10 +56,13 @@ var SinglePlayer = /*#__PURE__*/React.forwardRef(function (_a, ref) {
53
56
  var flvConfig = props.flvConfig,
54
57
  hlsConfig = props.hlsConfig,
55
58
  videoEvents = props.videoEvents,
56
- playerEvents = props.playerEvents;
59
+ playerEvents = props.playerEvents,
60
+ oneFpsPlay = props.oneFpsPlay,
61
+ fpsDelay = props.fpsDelay;
57
62
 
58
63
  var _useState = useState({
59
- container: null
64
+ container: null,
65
+ isFpsPlay: false
60
66
  }),
61
67
  _useState2 = _slicedToArray(_useState, 2),
62
68
  state = _useState2[0],
@@ -85,7 +91,6 @@ var SinglePlayer = /*#__PURE__*/React.forwardRef(function (_a, ref) {
85
91
  _usePlayerApi2 = _slicedToArray(_usePlayerApi, 2),
86
92
  api = _usePlayerApi2[0],
87
93
  _usePlayerApi2$ = _slicedToArray(_usePlayerApi2[1], 3),
88
- _ = _usePlayerApi2$[0],
89
94
  flv = _usePlayerApi2$[1],
90
95
  hls = _usePlayerApi2$[2]; // 判断是否有链接传入
91
96
 
@@ -112,6 +117,23 @@ var SinglePlayer = /*#__PURE__*/React.forwardRef(function (_a, ref) {
112
117
 
113
118
  var unload = function unload() {
114
119
  return playUnload(video, flv, hls);
120
+ };
121
+
122
+ var openFpsPlay = function openFpsPlay() {
123
+ setState(function (old) {
124
+ return Object.assign(Object.assign({}, old), {
125
+ isFpsPlay: true
126
+ });
127
+ });
128
+ api.pause();
129
+ };
130
+
131
+ var closeFpsPlay = function closeFpsPlay() {
132
+ return setState(function (old) {
133
+ return Object.assign(Object.assign({}, old), {
134
+ isFpsPlay: false
135
+ });
136
+ });
115
137
  }; // 合并api,加上代理
116
138
 
117
139
 
@@ -123,7 +145,9 @@ var SinglePlayer = /*#__PURE__*/React.forwardRef(function (_a, ref) {
123
145
  var map = Object.assign({
124
146
  reload: reload,
125
147
  unload: unload,
126
- toggleFit: toggle
148
+ toggleFit: toggle,
149
+ openFpsPlay: openFpsPlay,
150
+ closeFpsPlay: closeFpsPlay
127
151
  }, extActions);
128
152
  return new Proxy(api, {
129
153
  get: function get(target, key) {
@@ -162,61 +186,80 @@ var SinglePlayer = /*#__PURE__*/React.forwardRef(function (_a, ref) {
162
186
  fit: fit
163
187
  };
164
188
  }, [video, state.container, playApi, playEvent, flv, hls, fit]);
165
- useEffect(function () {
166
- if (api && event && video) {
167
- onCanPlayerInit === null || onCanPlayerInit === void 0 ? void 0 : onCanPlayerInit();
168
- } // eslint-disable-next-line react-hooks/exhaustive-deps
169
189
 
170
- }, [api, event, video]);
171
- return /*#__PURE__*/React.createElement("div", {
172
- className: "lm-player-container ".concat(className),
173
- ref: domRef
174
- }, /*#__PURE__*/React.createElement("div", {
175
- className: "player-mask-layout"
176
- }, /*#__PURE__*/React.createElement("video", {
177
- style: {
178
- objectFit: fit
179
- },
180
- autoPlay: autoPlay,
181
- preload: preload,
182
- muted: muted,
183
- poster: poster,
184
- controls: false,
185
- playsInline: playsInline,
186
- loop: loop
187
- })), api && event && hasLink && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(VideoMessage, {
190
+ _useUpdateEffect(function () {
191
+ return api && event && video ? onCanPlayerInit === null || onCanPlayerInit === void 0 ? void 0 : onCanPlayerInit() : undefined;
192
+ }, [api, event, video]); // 补货视频错误,自定义处理
193
+
194
+
195
+ useErrorEvent({
196
+ unload: unload,
197
+ flv: flv,
198
+ hls: hls,
188
199
  api: playApi,
189
- event: event
190
- }), !hideContrallerBar && /*#__PURE__*/React.createElement(ContrallerEvent, {
191
200
  event: event,
192
- container: state.container
193
- }, /*#__PURE__*/React.createElement(ContrallerBar, {
201
+ reload: reload,
202
+ errorReloadTimer: errorReloadTimer
203
+ }); // 直播缓冲追回
204
+
205
+ useLiveHeart({
194
206
  api: playApi,
195
207
  event: event,
196
- isLive: isLive,
197
- container: state.container,
208
+ isLive: isLive
209
+ });
210
+ var videoProps = {
211
+ autoPlay: state.isFpsPlay ? false : autoPlay,
212
+ preload: preload,
213
+ muted: state.isFpsPlay ? false : muted,
214
+ poster: poster,
215
+ controls: false,
216
+ playsInline: playsInline,
217
+ loop: state.isFpsPlay ? false : loop
218
+ };
219
+ var contrallerProps = {
198
220
  rightExtContents: rightExtContents,
199
221
  rightMidExtContents: rightMidExtContents,
200
- leftExtContents: leftExtContents,
201
222
  leftMidExtContents: leftMidExtContents,
223
+ leftExtContents: leftExtContents,
202
224
  reload: (_b = props.reload) !== null && _b !== void 0 ? _b : reload,
203
- hideTimeProgress: !!customTimeLine
204
- })), customTimeLine ? customTimeLine : !hideContrallerBar ? /*#__PURE__*/React.createElement(Timeline, {
205
- api: playApi,
206
- event: event
207
- }) : null, /*#__PURE__*/React.createElement(ErrorEvent, {
208
- unload: unload,
209
- flv: flv,
210
- hls: hls,
225
+ hideTimeProgress: !!customTimeLine,
226
+ oneFpsPlay: oneFpsPlay
227
+ };
228
+ return /*#__PURE__*/React.createElement(Provider, {
211
229
  api: playApi,
212
230
  event: event,
213
- reload: reload,
214
- errorReloadTimer: errorReloadTimer
215
- }), isLive && /*#__PURE__*/React.createElement(LiveHeart, {
231
+ container: state.container,
232
+ isLive: isLive,
233
+ isFpsPlay: state.isFpsPlay
234
+ }, /*#__PURE__*/React.createElement("div", {
235
+ className: "lm-player-container ".concat(className),
236
+ ref: domRef
237
+ }, /*#__PURE__*/React.createElement("div", {
238
+ className: "player-mask-layout"
239
+ }, /*#__PURE__*/React.createElement("video", Object.assign({}, videoProps, {
240
+ style: {
241
+ objectFit: fit,
242
+ visibility: state.isFpsPlay ? 'hidden' : 'unset'
243
+ }
244
+ })), api && event && hasLink && state.isFpsPlay ? /*#__PURE__*/React.createElement(FPSPlay, {
245
+ event: event,
246
+ api: playApi,
247
+ fpsDelay: fpsDelay
248
+ }) : /*#__PURE__*/React.createElement(Empty, null)), api && event && hasLink ? /*#__PURE__*/React.createElement(VideoMessage, {
249
+ api: playApi,
250
+ event: event
251
+ }) : /*#__PURE__*/React.createElement(Empty, null), api && event && hasLink && !hideContrallerBar ? /*#__PURE__*/React.createElement(ContrallerEvent, {
252
+ children: /*#__PURE__*/React.createElement(ContrallerBar, Object.assign({}, contrallerProps))
253
+ }) : /*#__PURE__*/React.createElement(Empty, null), customTimeLine ? customTimeLine : !hideContrallerBar ? /*#__PURE__*/React.createElement(Timeline, {
216
254
  api: playApi,
217
- event: playEvent
218
- })), children);
255
+ event: event
256
+ }) : /*#__PURE__*/React.createElement(Empty, null), children));
219
257
  });
258
+
259
+ function Empty() {
260
+ return /*#__PURE__*/React.createElement(React.Fragment, null);
261
+ }
262
+
220
263
  SinglePlayer.defaultProps = {
221
264
  isLive: true,
222
265
  errorReloadTimer: 5,
@@ -232,6 +275,8 @@ SinglePlayer.defaultProps = {
232
275
  config: {}
233
276
  },
234
277
  hlsConfig: {},
235
- extActions: {}
278
+ extActions: {},
279
+ oneFpsPlay: false,
280
+ fpsDelay: 100
236
281
  };
237
282
  export default SinglePlayer;
@@ -34,4 +34,5 @@
34
34
  line-height: 28px;
35
35
  color: #fff;
36
36
  font-size: 10px;
37
+ padding: 0 6px;
37
38
  }
@@ -8,6 +8,14 @@
8
8
  .lm-player-container .lm-player-iconfont {
9
9
  color: #fff;
10
10
  }
11
+ .lm-player-container .fps-play-canvas {
12
+ width: 100%;
13
+ height: 100%;
14
+ position: absolute;
15
+ left: 0;
16
+ top: 0;
17
+ background-color: #000;
18
+ }
11
19
  .lm-player-container .player-mask-layout {
12
20
  width: 100%;
13
21
  height: 100%;
@@ -6,6 +6,6 @@ interface ITimeLineProps {
6
6
  api: Api;
7
7
  event: VideoEventInstance;
8
8
  }
9
- export declare function useTimes(api: Api, event: VideoEventInstance, isHide?: boolean): number[];
9
+ export declare function useTimes(api: Api, event: VideoEventInstance, isFpsPlay?: boolean): number[];
10
10
  declare function TimeLine({ api, event }: ITimeLineProps): JSX.Element;
11
11
  export default TimeLine;