@cloud-app-dev/vidc 3.0.0 → 3.0.3

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 (48) hide show
  1. package/.umirc.ts +1 -1
  2. package/es/ErrorBoundary/index.d.ts +2 -2
  3. package/es/ErrorBoundary/index.js +2 -7
  4. package/es/LoaderApp/utils.d.ts +1 -1
  5. package/es/Map/BasicMap/index.js +3 -8
  6. package/es/Modal/index.js +7 -5
  7. package/es/Picture/component/RectMenu/index.d.ts +1 -1
  8. package/es/Player/api/index.d.ts +1 -8
  9. package/es/Player/api/index.js +23 -34
  10. package/es/Player/contraller_bar/left_bar.js +2 -2
  11. package/es/Player/contraller_bar/right_bar.d.ts +1 -1
  12. package/es/Player/contraller_bar/right_bar.js +13 -27
  13. package/es/Player/demo.js +8 -3
  14. package/es/Player/frontend_player.d.ts +1 -2
  15. package/es/Player/frontend_player.js +27 -57
  16. package/es/Player/frontend_timeline.d.ts +2 -1
  17. package/es/Player/frontend_timeline.js +20 -9
  18. package/es/Player/player.d.ts +7 -9
  19. package/es/Player/segment_player.d.ts +1 -1
  20. package/es/Player/segment_player.js +74 -36
  21. package/es/Player/segment_timeline.js +8 -7
  22. package/es/Player/single_player.d.ts +2 -2
  23. package/es/Player/single_player.js +14 -10
  24. package/es/Player/util.d.ts +2 -24
  25. package/es/Player/util.js +43 -54
  26. package/es/PlayerExt/index.d.ts +1 -1
  27. package/es/ScreenPlayer/PlayerWithExt.d.ts +2 -2
  28. package/es/ScreenPlayer/PlayerWithExt.js +21 -28
  29. package/es/ScreenPlayer/Record.d.ts +5 -0
  30. package/es/ScreenPlayer/Record.js +7 -19
  31. package/es/ScreenPlayer/TimeSlider.d.ts +1 -1
  32. package/es/ScreenPlayer/TimeSlider.js +39 -35
  33. package/es/ScreenPlayer/demo2.js +1 -1
  34. package/es/ScreenPlayer/index.css +2 -3
  35. package/es/ScreenPlayer/index.d.ts +2 -3
  36. package/es/ScreenPlayer/index.js +4 -3
  37. package/es/ScreenPlayer/useRecordList.d.ts +1 -1
  38. package/es/ScreenPlayer/useVideoFit.d.ts +1 -1
  39. package/es/ScreenPlayer/useVideoFit.js +4 -2
  40. package/es/ScreenPlayer/utils.d.ts +1 -1
  41. package/es/Timeout/index.d.ts +33 -0
  42. package/es/Timeout/index.js +83 -0
  43. package/es/index.d.ts +1 -0
  44. package/es/index.js +1 -0
  45. package/es/withErrorBoundary/index.d.ts +2 -1
  46. package/es/withErrorBoundary/index.js +4 -2
  47. package/package.json +1 -1
  48. package/release-build.sh +44 -0
package/.umirc.ts CHANGED
@@ -2,7 +2,7 @@ import { defineConfig } from 'dumi';
2
2
  import path from 'path';
3
3
 
4
4
  const token =
5
- 'eyJhbGciOiJIUzI1NiJ9.eyJvcmdhbml6YXRpb25JZCI6IjEwMDEwMTAwMDQ0NSIsImV4dCI6MTY2MTA3ODE3NDEzOCwidWlkIjoiMTAxMDAwMDAwNjk5IiwidmFsaWRTdGF0ZSI6MTA0NDA2LCJyb2xlSWQiOlsxMDAwMDAxMTA1MTgsMTAwMDAwMTEwNzI4XSwidmFsaWRUaW1lIjoxNzA0MzgzOTk5MDAwLCJvcHRDZW50ZXJJZCI6IjEwMDEwMDAwMDIzMyIsInVzZXJUeXBlIjoxMDA3MDQsImlhdCI6MTY2MDgxODk3NDEzOH0.5aCna8JWe8ynj9SXuXZ3TMDizpnK7WJFeAgJZhSsRvg';
5
+ 'eyJhbGciOiJIUzI1NiJ9.eyJvcmdhbml6YXRpb25JZCI6IjEwMDEwMTAwMDQ0NSIsImV4dCI6MTY2MTM4OTU0MzA4NSwidWlkIjoiMTAxMDAwMDAwNjk5IiwidmFsaWRTdGF0ZSI6MTA0NDA2LCJyb2xlSWQiOlsxMDAwMDAxMTA1MTgsMTAwMDAwMTEwNzI4XSwidmFsaWRUaW1lIjoxNzA0MzgzOTk5MDAwLCJvcHRDZW50ZXJJZCI6IjEwMDEwMDAwMDIzMyIsInVzZXJUeXBlIjoxMDA3MDQsImlhdCI6MTY2MTEzMDM0MzA4NX0.-0vh7SpomB6UWteJ6WIA5VneryhSW3Vrsz6RnHfgcRI';
6
6
 
7
7
  export default defineConfig({
8
8
  title: 'CloudApp VIDC',
@@ -1,6 +1,6 @@
1
1
  import React, { Component, ErrorInfo } from 'react';
2
2
  export declare type IErrorBoundaryProps = {
3
- fallback?: (() => JSX.Element) | React.ReactNode;
3
+ fallback?: React.ReactNode;
4
4
  children?: React.ReactNode;
5
5
  };
6
6
  declare type State = {
@@ -13,6 +13,6 @@ declare class ErrorBoundary extends Component<IErrorBoundaryProps, State> {
13
13
  };
14
14
  static getDerivedStateFromError(error: Error): State;
15
15
  componentDidCatch(error: Error, info: ErrorInfo): void;
16
- render(): string | number | boolean | JSX.Element | React.ReactFragment;
16
+ render(): React.ReactNode;
17
17
  }
18
18
  export default ErrorBoundary;
@@ -53,13 +53,7 @@ var ErrorBoundary = /*#__PURE__*/function (_Component) {
53
53
  fallback = _this$props.fallback;
54
54
 
55
55
  if (error) {
56
- if ( /*#__PURE__*/React.isValidElement(fallback)) {
57
- return fallback;
58
- }
59
-
60
- if (typeof fallback === 'function') {
61
- return fallback();
62
- }
56
+ return fallback;
63
57
  }
64
58
 
65
59
  return children;
@@ -67,6 +61,7 @@ var ErrorBoundary = /*#__PURE__*/function (_Component) {
67
61
  }], [{
68
62
  key: "getDerivedStateFromError",
69
63
  value: function getDerivedStateFromError(error) {
64
+ console.error(error);
70
65
  return {
71
66
  error: true
72
67
  };
@@ -1,4 +1,4 @@
1
- import { AppItemType } from '@cloud-app-dev/vidc/es/Config/interface';
1
+ import { AppItemType } from '../Config/interface';
2
2
  export declare const getMicroConfig: (appConfig: AppItemType, appProps: any, container: HTMLDivElement) => {
3
3
  title: string;
4
4
  routerPrefix: string;
@@ -34,12 +34,12 @@ var Map = /*#__PURE__*/function (_React$Component) {
34
34
 
35
35
  var _super = _createSuper(Map);
36
36
 
37
- function Map(props) {
37
+ function Map() {
38
38
  var _this;
39
39
 
40
40
  _classCallCheck(this, Map);
41
41
 
42
- _this = _super.call(this, props);
42
+ _this = _super.apply(this, arguments);
43
43
  _this.domRef = /*#__PURE__*/React.createRef();
44
44
  return _this;
45
45
  }
@@ -51,8 +51,8 @@ var Map = /*#__PURE__*/function (_React$Component) {
51
51
  return;
52
52
  }
53
53
 
54
- var instance = this.props.isL ? LeafletInstance : AMapInstance;
55
54
  var mapOptions = this.props.config;
55
+ var instance = this.props.isL ? LeafletInstance : AMapInstance;
56
56
  this.mapInstance = new instance(this.domRef.current, mapOptions);
57
57
  this.mapInstance.createMap();
58
58
  this.forceUpdate();
@@ -62,11 +62,6 @@ var Map = /*#__PURE__*/function (_React$Component) {
62
62
  value: function componentWillUnmount() {
63
63
  this.mapInstance.destoryMap();
64
64
  }
65
- }, {
66
- key: "componentDidCatch",
67
- value: function componentDidCatch(error, errorInfo) {
68
- console.log(error, errorInfo);
69
- }
70
65
  }, {
71
66
  key: "render",
72
67
  value: function render() {
package/es/Modal/index.js CHANGED
@@ -19,8 +19,8 @@ import { __rest } from "tslib";
19
19
  import React, { useContext, useEffect, useImperativeHandle, useMemo, useState } from 'react';
20
20
  import * as ReactDOMClient from 'react-dom/client';
21
21
  import CC from '../ConfigContext';
22
- import "./index.css";
23
22
  import ConfigContext from '../ConfigContext';
23
+ import "./index.css";
24
24
 
25
25
  function Modal(_a) {
26
26
  var children = _a.children,
@@ -69,15 +69,16 @@ function useModal() {
69
69
 
70
70
  var root = useMemo(function () {
71
71
  return ReactDOMClient.createRoot(div);
72
- }, []);
72
+ }, [div]);
73
73
  useEffect(function () {
74
74
  container.appendChild(div);
75
75
  return function () {
76
+ // eslint-disable-next-line no-sequences
76
77
  setTimeout(function () {
77
78
  return root.unmount(), div.remove();
78
79
  }, 100);
79
80
  };
80
- }, []);
81
+ }, [container, div, root]);
81
82
  useEffect(function () {
82
83
  root.render( /*#__PURE__*/React.createElement(_ConfigProvider, {
83
84
  prefixCls: prefixCls,
@@ -96,7 +97,7 @@ function useModal() {
96
97
  className: state.className,
97
98
  getContainer: false
98
99
  }, state.content)));
99
- }, [state.content, state.visible, state.title, state.onOk, state.width, state.className]);
100
+ }, [state.content, state.visible, state.title, state.onOk, state.width, state.className, root, prefixCls, container]);
100
101
 
101
102
  var open = function open(options) {
102
103
  setState(function (old) {
@@ -152,7 +153,8 @@ var RefModal = /*#__PURE__*/React.forwardRef(function RefModal(_, ref) {
152
153
  visible: false
153
154
  });
154
155
  });
155
- };
156
+ }; // eslint-disable-next-line react-hooks/exhaustive-deps
157
+
156
158
 
157
159
  useImperativeHandle(ref, function () {
158
160
  return {
@@ -1,6 +1,6 @@
1
1
  /// <reference types="react" />
2
+ import { MenuRectType } from '../../../Picture/interface';
2
3
  import './index.less';
3
- import { MenuRectType } from 'src/Picture/interface';
4
4
  interface IRectMenuProps {
5
5
  x: number;
6
6
  y: number;
@@ -5,14 +5,6 @@ declare class Api {
5
5
  container: HTMLElement;
6
6
  constructor(container: HTMLElement);
7
7
  get video(): HTMLVideoElement;
8
- /**
9
- * 全屏
10
- */
11
- requestFullScreen: () => void;
12
- /**
13
- * 退出全屏
14
- */
15
- cancelFullScreen: () => void;
16
8
  play: () => void;
17
9
  pause: () => void;
18
10
  /**
@@ -60,6 +52,7 @@ declare class Api {
60
52
  unload: () => void;
61
53
  reload: () => void;
62
54
  toggleFit: () => void;
55
+ setIndex: (i: number) => void;
63
56
  destroy: () => void;
64
57
  }
65
58
  export declare type TypeAndPlay = {
@@ -19,7 +19,7 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+
19
19
  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
20
20
 
21
21
  import { useEffect, useState } from 'react';
22
- import { fullscreen, isFullscreen, exitFullscreen, createFlvPlayer, createHlsPlayer } from '../util';
22
+ import { createFlvPlayer, createHlsPlayer, tryCatch } from '../util';
23
23
 
24
24
  var Api = /*#__PURE__*/function () {
25
25
  function Api(container) {
@@ -27,29 +27,10 @@ var Api = /*#__PURE__*/function () {
27
27
 
28
28
  _classCallCheck(this, Api);
29
29
 
30
- /**
31
- * 全屏
32
- */
33
- this.requestFullScreen = function () {
34
- if (!isFullscreen(_this.container)) {
35
- fullscreen(_this.container);
36
- }
37
- };
38
- /**
39
- * 退出全屏
40
- */
41
-
42
-
43
- this.cancelFullScreen = function () {
44
- if (isFullscreen(_this.container)) {
45
- exitFullscreen();
46
- }
47
- };
48
-
49
30
  this.play = function () {
50
- if (_this.video.paused) {
51
- _this.video.play();
52
- }
31
+ tryCatch(function () {
32
+ return _this.video.play();
33
+ });
53
34
  };
54
35
 
55
36
  this.pause = function () {
@@ -63,6 +44,7 @@ var Api = /*#__PURE__*/function () {
63
44
 
64
45
 
65
46
  this.seekTo = function (seconds) {
47
+ debugger;
66
48
  _this.video.currentTime = seconds;
67
49
  };
68
50
 
@@ -184,6 +166,8 @@ var Api = /*#__PURE__*/function () {
184
166
 
185
167
  this.toggleFit = function () {};
186
168
 
169
+ this.setIndex = function (i) {};
170
+
187
171
  this.destroy = function () {
188
172
  _this.container = null;
189
173
  };
@@ -243,24 +227,29 @@ export function useTypeAndPlay(url, type, isLive, container, segments, flvConfig
243
227
  video.setAttribute('src', url);
244
228
  }
245
229
 
246
- try {
247
- video.play();
248
- } catch (_) {}
249
-
230
+ url && video.paused && tryCatch(function () {
231
+ return video.play();
232
+ });
250
233
  setState(options);
251
234
  return function () {
252
235
  if (options.flv) {
253
- options.flv.destroy();
254
- }
255
-
256
- if (options.hls) {
257
- options.hls.destroy();
236
+ options.flv.pause();
237
+ tryCatch(function () {
238
+ return options.flv.destroy();
239
+ });
240
+ } else if (options.hls) {
241
+ video.pause();
242
+ tryCatch(function () {
243
+ return options.hls.destroy();
244
+ });
245
+ } else {
246
+ video.pause();
247
+ video.removeAttribute('src');
258
248
  }
259
249
 
260
- video.removeAttribute('src');
261
250
  setState({});
262
251
  };
263
- }, [url, container, segments, type]);
252
+ }, [url, container, segments, type, isLive, flvConfig, hlsConfig]);
264
253
  return [state.type, state.flv, state.hls];
265
254
  } //创建Api
266
255
 
@@ -46,6 +46,7 @@ function LeftBar(_ref) {
46
46
  };
47
47
  }, [event]);
48
48
  var video = container.querySelector('video'); //缓存值
49
+ // eslint-disable-next-line react-hooks/exhaustive-deps
49
50
 
50
51
  var paused = useMemo(function () {
51
52
  return video === null || video === void 0 ? void 0 : video.paused;
@@ -60,7 +61,6 @@ function LeftBar(_ref) {
60
61
  var _useTimes = useTimes(api, event, hideTimeProgress),
61
62
  _useTimes2 = _slicedToArray(_useTimes, 3),
62
63
  current = _useTimes2[0],
63
- _ = _useTimes2[1],
64
64
  duration = _useTimes2[2]; //TODO 方法
65
65
 
66
66
 
@@ -72,7 +72,7 @@ function LeftBar(_ref) {
72
72
  } else {
73
73
  api.pause();
74
74
  }
75
- }, [video, api, isLive]);
75
+ }, [video, api]);
76
76
  return /*#__PURE__*/React.createElement("div", {
77
77
  className: "contraller-left-bar"
78
78
  }, leftExtContents, /*#__PURE__*/React.createElement(Bar, null, /*#__PURE__*/React.createElement(IconFont, {
@@ -9,5 +9,5 @@ interface IRightBarProps {
9
9
  rightExtContents: React.ReactNode;
10
10
  rightMidExtContents: React.ReactNode;
11
11
  }
12
- declare function RightBar({ container, api, rightExtContents, rightMidExtContents }: IRightBarProps): JSX.Element;
12
+ declare function RightBar({ container, rightExtContents, rightMidExtContents }: IRightBarProps): JSX.Element;
13
13
  export default RightBar;
@@ -1,3 +1,5 @@
1
+ import _useFullscreen3 from "ahooks/es/useFullscreen";
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,45 +12,29 @@ 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, { useState, useMemo, useEffect, useCallback } from 'react';
15
+ import React from 'react';
14
16
  import IconFont from '../iconfont';
15
17
  import Bar from './bar';
16
- import { isFullscreen } from '../util';
17
18
 
18
19
  function RightBar(_ref) {
19
20
  var container = _ref.container,
20
- api = _ref.api,
21
21
  rightExtContents = _ref.rightExtContents,
22
22
  rightMidExtContents = _ref.rightMidExtContents;
23
23
 
24
- var _useState = useState(Date.now()),
25
- _useState2 = _slicedToArray(_useState, 2),
26
- dep = _useState2[0],
27
- setDep = _useState2[1];
28
-
29
- useEffect(function () {
30
- var update = function update() {
31
- return setDep(Date.now());
32
- };
33
-
34
- document.addEventListener('fullscreenchange', update);
35
- return function () {
36
- return document.removeEventListener('fullscreenchange', update);
37
- };
38
- }, []);
39
- var isfull = useMemo(function () {
40
- return isFullscreen(container);
41
- }, [dep, container]);
42
- var fullscreen = useCallback(function () {
43
- !isFullscreen(container) ? api.requestFullScreen() : api.cancelFullScreen();
44
- setDep(Date.now());
45
- }, [api, container]);
24
+ var _useFullscreen = _useFullscreen3(container),
25
+ _useFullscreen2 = _slicedToArray(_useFullscreen, 2),
26
+ isFullScreen = _useFullscreen2[0],
27
+ _useFullscreen2$ = _useFullscreen2[1],
28
+ enterFullscreen = _useFullscreen2$.enterFullscreen,
29
+ exitFullscreen = _useFullscreen2$.exitFullscreen;
30
+
31
+ var fullscreen = isFullScreen ? exitFullscreen : enterFullscreen;
46
32
  return /*#__PURE__*/React.createElement("div", {
47
33
  className: "contraller-right-bar"
48
34
  }, rightMidExtContents, /*#__PURE__*/React.createElement(Bar, null, /*#__PURE__*/React.createElement(IconFont, {
49
- title: isfull ? '窗口' : '全屏',
35
+ title: isFullScreen ? '窗口' : '全屏',
50
36
  onClick: fullscreen,
51
- type: isfull ? 'lm-player-ExitFull_Main' : 'lm-player-Full_Main'
37
+ type: isFullScreen ? 'lm-player-ExitFull_Main' : 'lm-player-Full_Main'
52
38
  })), rightExtContents);
53
39
  }
54
40
 
package/es/Player/demo.js CHANGED
@@ -197,7 +197,7 @@ function Demo2() {
197
197
 
198
198
  function Demo3() {
199
199
  var _useState5 = useState({
200
- url: 'http://192.168.101.161:18090/flv/vod/2b9cb54836e136630_34/187981bd526bdf548.flv?origin_url=sdk%3A%2F%2Fadmin%3Aabc12345%40192.168.14.3%3A8000%2Fcam%2Fplayback%3Ffactory%3Dhikvision%26channel%3D34%26subType%3D0%26startTime%3D1652889636%26endTime%3D1652890200',
200
+ url: 'http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4',
201
201
  tempUrl: '',
202
202
  begin: 1652889636,
203
203
  end: 1652890200
@@ -208,7 +208,8 @@ function Demo3() {
208
208
 
209
209
  return /*#__PURE__*/React.createElement("div", {
210
210
  style: {
211
- width: '100%',
211
+ width: '600px',
212
+ height: '400px',
212
213
  marginTop: 20
213
214
  }
214
215
  }, /*#__PURE__*/React.createElement("h3", null, " \u524D\u7AEF\u5F55\u50CF\u89C6\u9891\u64AD\u653E"), /*#__PURE__*/React.createElement("div", {
@@ -247,7 +248,11 @@ function Demo3() {
247
248
  end: state.end,
248
249
  url: state.url,
249
250
  onSeek: function onSeek(time) {
250
- return console.log(time);
251
+ return setState(function (old) {
252
+ return Object.assign(Object.assign({}, old), {
253
+ url: "".concat(old.url, "?").concat(time)
254
+ });
255
+ });
251
256
  }
252
257
  }));
253
258
  }
@@ -2,8 +2,7 @@
2
2
  import type { IFrontendPlayerProps } from './player';
3
3
  /**
4
4
  * @desc 主组件,负责片段整体逻辑控制
5
- * @param param0
6
- * @returns
5
+ * @return JSX.Element
7
6
  */
8
7
  declare function FrontendPlayer({ url, begin, end, onSeek, forwordRef, customTimeLine, onCanPlayerInit, ...props }: IFrontendPlayerProps): JSX.Element;
9
8
  export default FrontendPlayer;
@@ -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,10 +12,11 @@ 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
- import { dateFormat } from './util';
18
+ import { FMT } from './util';
19
+ import moment from 'moment';
17
20
  import "./style/timeline.css";
18
21
 
19
22
  function FrontendTimeLine(_ref) {
@@ -22,7 +25,9 @@ function FrontendTimeLine(_ref) {
22
25
  duration = _ref.duration,
23
26
  begin = _ref.begin,
24
27
  end = _ref.end,
25
- onSeek = _ref.onSeek;
28
+ onSeek = _ref.onSeek,
29
+ url = _ref.url;
30
+ var lastSeekCTimeRef = useRef(0); // time 是记录seek时跳了多少
26
31
 
27
32
  var _useState = useState({
28
33
  time: 0,
@@ -34,14 +39,20 @@ function FrontendTimeLine(_ref) {
34
39
  state = _useState2[0],
35
40
  setState = _useState2[1];
36
41
 
37
- var status = useBarStatus(event);
42
+ var status = useBarStatus(event); //获取视频当前播放时长单位s
38
43
 
39
44
  var _useTimes = useTimes(api, event),
40
45
  _useTimes2 = _slicedToArray(_useTimes, 1),
41
46
  currentTime = _useTimes2[0];
42
47
 
48
+ _useTrackedEffect(function (changes) {
49
+ if (changes.includes(1)) {
50
+ lastSeekCTimeRef.current = currentTime;
51
+ }
52
+ }, [currentTime, url]);
53
+
43
54
  var rTime = useMemo(function () {
44
- return state.time + currentTime;
55
+ return state.time + currentTime + lastSeekCTimeRef.current;
45
56
  }, [state.time, currentTime]);
46
57
  useEffect(function () {
47
58
  return setState(function (old) {
@@ -52,7 +63,7 @@ function FrontendTimeLine(_ref) {
52
63
  }, [begin]);
53
64
  var playPercent = useMemo(function () {
54
65
  return rTime / duration * 100;
55
- }, [rTime]);
66
+ }, [duration, rTime]);
56
67
  var cTime = useMemo(function () {
57
68
  return begin + rTime * 1000;
58
69
  }, [begin, rTime]);
@@ -67,7 +78,7 @@ function FrontendTimeLine(_ref) {
67
78
  time: cTime - currentTime
68
79
  });
69
80
  });
70
- }, [api, duration, begin, onSeek, currentTime]);
81
+ }, [duration, begin, onSeek, currentTime]);
71
82
  var onLineMouseOver = useCallback(function (e) {
72
83
  var rect = e.currentTarget.getBoundingClientRect();
73
84
  var left = e.pageX - rect.left;
@@ -78,7 +89,7 @@ function FrontendTimeLine(_ref) {
78
89
  markTime: begin + mTime * 1000
79
90
  });
80
91
  });
81
- }, [begin]);
92
+ }, [begin, duration]);
82
93
  var onLineMouseOut = useCallback(function (e) {
83
94
  startTransition(function () {
84
95
  return setState(function (old) {
@@ -132,7 +143,7 @@ function TipTitle(_ref2) {
132
143
  style: {
133
144
  fontWeight: 600
134
145
  }
135
- }, "\u5F55\u50CF\u4FE1\u606F"), /*#__PURE__*/React.createElement("div", null, "\u5F00\u59CB\uFF1A", dateFormat(begin)), /*#__PURE__*/React.createElement("div", null, "\u7ED3\u675F\uFF1A", dateFormat(end)), /*#__PURE__*/React.createElement("div", null, "\u523B\u5EA6\uFF1A", dateFormat(markTime)), /*#__PURE__*/React.createElement("div", null, "\u5F53\u524D\uFF1A", dateFormat(current)));
146
+ }, "\u5F55\u50CF\u4FE1\u606F"), /*#__PURE__*/React.createElement("div", null, "\u5F00\u59CB\uFF1A", moment(begin).format(FMT)), /*#__PURE__*/React.createElement("div", null, "\u7ED3\u675F\uFF1A", moment(end).format(FMT)), /*#__PURE__*/React.createElement("div", null, "\u523B\u5EA6\uFF1A", moment(markTime).format(FMT)), /*#__PURE__*/React.createElement("div", null, "\u5F53\u524D\uFF1A", moment(current).format(FMT)));
136
147
  }
137
148
 
138
149
  export default FrontendTimeLine;