@cloud-app-dev/vidc 2.1.0-alpha.8 → 2.2.0-alpha.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.
Files changed (166) hide show
  1. package/.umirc.ts +4 -3
  2. package/es/Api/index.js +1 -1
  3. package/es/AppContext/Sync.d.ts +1 -0
  4. package/es/AppContext/interface.d.ts +4 -1
  5. package/es/CheckGroupFixed/index.d.ts +1 -0
  6. package/es/DeviceSelect/TreeType.d.ts +1 -0
  7. package/es/DeviceSelect/demo.d.ts +1 -0
  8. package/es/DeviceSelect/index.d.ts +1 -0
  9. package/es/DeviceSelect/index.js +1 -1
  10. package/es/Drag/DragAndDropItem.js +2 -2
  11. package/es/Drag/DropItem.js +2 -2
  12. package/es/Drawer/Demo.js +24 -3
  13. package/es/Drawer/Footer.d.ts +1 -0
  14. package/es/Drawer/index.d.ts +29 -3
  15. package/es/Drawer/index.js +155 -4
  16. package/es/FrontendPlayer/index.d.ts +2 -0
  17. package/es/FrontendPlayer/index.js +2 -0
  18. package/es/FullScreen/index.d.ts +2 -3
  19. package/es/FullScreen/index.js +14 -41
  20. package/es/InitialConfig/utils.d.ts +5 -5
  21. package/es/InitialConfig/utils.js +19 -19
  22. package/es/Input/index.d.ts +1 -0
  23. package/es/List/CheckExt.d.ts +1 -0
  24. package/es/List/DeviceList/index.js +1 -1
  25. package/es/List/DynamicDeviceList/Demo.d.ts +1 -0
  26. package/es/List/DynamicDeviceList/index.d.ts +1 -0
  27. package/es/List/GridList/index.js +0 -1
  28. package/es/List/VList/index.d.ts +1 -0
  29. package/es/List/index.d.ts +1 -0
  30. package/es/LoaderApp/index.js +26 -22
  31. package/es/LoaderApp/loader.js +2 -6
  32. package/es/LoaderApp/utils.d.ts +1 -0
  33. package/es/LoaderApp/utils.js +37 -0
  34. package/es/Modal/index.d.ts +27 -0
  35. package/es/Modal/index.js +155 -1
  36. package/es/Picture/component/DefaultRects/RectInfo.d.ts +1 -0
  37. package/es/Picture/component/DefaultRects/index.d.ts +2 -1
  38. package/es/Picture/component/DrawRect/index.d.ts +3 -4
  39. package/es/Picture/component/MoveContent/index.js +16 -12
  40. package/es/Picture/component/RectMenu/index.d.ts +2 -3
  41. package/es/Picture/component/Tools/index.js +0 -5
  42. package/es/Picture/component/WheelScale/index.d.ts +1 -0
  43. package/es/Picture/component/WheelScale/index.js +3 -3
  44. package/es/Picture/index.d.ts +1 -0
  45. package/es/Picture/index.js +4 -2
  46. package/es/Picture/interface.d.ts +4 -2
  47. package/es/Picture/utils.d.ts +1 -0
  48. package/es/Player/api/index.d.ts +71 -0
  49. package/es/Player/api/index.js +284 -0
  50. package/es/Player/contraller_bar/bar.d.ts +8 -0
  51. package/es/Player/contraller_bar/bar.js +21 -0
  52. package/es/Player/contraller_bar/contraller_event.d.ts +9 -0
  53. package/es/{RefModal/index.js → Player/contraller_bar/contraller_event.js} +39 -54
  54. package/es/Player/contraller_bar/index.d.ts +19 -0
  55. package/es/Player/contraller_bar/index.js +37 -0
  56. package/es/Player/contraller_bar/left_bar.d.ts +15 -0
  57. package/es/Player/contraller_bar/left_bar.js +91 -0
  58. package/es/Player/contraller_bar/right_bar.d.ts +13 -0
  59. package/es/Player/contraller_bar/right_bar.js +55 -0
  60. package/es/Player/contraller_bar/useBarStatus.d.ts +3 -0
  61. package/es/{RefDrawer/index.js → Player/contraller_bar/useBarStatus.js} +27 -46
  62. package/es/Player/demo.d.ts +2 -0
  63. package/es/Player/demo.js +269 -0
  64. package/es/Player/event/browserTabEvent.d.ts +9 -0
  65. package/es/Player/event/browserTabEvent.js +57 -0
  66. package/es/Player/event/errorEvent.d.ts +16 -0
  67. package/es/Player/event/errorEvent.js +120 -0
  68. package/es/Player/event/eventName.d.ts +3 -0
  69. package/es/Player/event/eventName.js +15 -0
  70. package/es/Player/event/index.d.ts +22 -0
  71. package/es/Player/event/index.js +175 -0
  72. package/es/Player/frontend_player.d.ts +15 -0
  73. package/es/Player/frontend_player.js +90 -0
  74. package/es/Player/frontend_timeline.d.ts +14 -0
  75. package/es/Player/frontend_timeline.js +138 -0
  76. package/es/Player/iconfont.d.ts +13 -0
  77. package/es/Player/iconfont.js +18 -0
  78. package/es/Player/index.d.ts +8 -0
  79. package/es/Player/index.js +8 -0
  80. package/es/Player/live_heart.d.ts +6 -0
  81. package/es/Player/live_heart.js +29 -0
  82. package/es/Player/message.d.ts +11 -0
  83. package/es/Player/message.js +150 -0
  84. package/es/Player/player.d.ts +75 -0
  85. package/es/Player/segment_player.d.ts +13 -0
  86. package/es/Player/segment_player.js +191 -0
  87. package/es/Player/segment_timeline.d.ts +16 -0
  88. package/es/Player/segment_timeline.js +154 -0
  89. package/es/Player/single_player.d.ts +5 -0
  90. package/es/Player/single_player.js +185 -0
  91. package/es/Player/style/bar.css +37 -0
  92. package/es/Player/style/iconfont.css +62 -0
  93. package/es/Player/style/index.css +22 -0
  94. package/es/Player/style/message.css +49 -0
  95. package/es/Player/style/slider.css +96 -0
  96. package/es/Player/style/timeline.css +92 -0
  97. package/es/Player/timeline.d.ts +11 -0
  98. package/es/Player/timeline.js +104 -0
  99. package/es/Player/util.d.ts +48 -0
  100. package/es/Player/util.js +172 -0
  101. package/es/Progress/index.d.ts +1 -0
  102. package/es/SegmentPlayer/index.d.ts +2 -0
  103. package/es/SegmentPlayer/index.js +2 -0
  104. package/es/Service/fetch-adapter.d.ts +12 -0
  105. package/es/Service/fetch-adapter.js +184 -0
  106. package/es/Service/http.d.ts +1 -1
  107. package/es/Service/http.js +4 -2
  108. package/es/Service/interface.d.ts +2 -1
  109. package/es/Tree/BaseTree/demo.d.ts +1 -0
  110. package/es/Tree/BaseTree/demo.js +3 -1
  111. package/es/Tree/BaseTree/index.d.ts +2 -2
  112. package/es/Tree/demo.d.ts +1 -0
  113. package/es/Tree/index.js +1 -1
  114. package/es/UserSelect/demo.d.ts +1 -0
  115. package/es/WorkerFlow/Form/Approver.d.ts +1 -0
  116. package/es/WorkerFlow/Form/Condition.d.ts +1 -0
  117. package/es/WorkerFlow/Form/Condition.js +2 -1
  118. package/es/WorkerFlow/Form/EmptyUserSet.d.ts +1 -0
  119. package/es/WorkerFlow/Form/EmptyUserSet.js +2 -1
  120. package/es/WorkerFlow/Form/FormAuth.d.ts +1 -0
  121. package/es/WorkerFlow/Form/GroupList.d.ts +1 -0
  122. package/es/WorkerFlow/Form/GroupSelect.d.ts +1 -0
  123. package/es/WorkerFlow/Form/GroupSelect.js +2 -1
  124. package/es/WorkerFlow/Form/Handle.d.ts +1 -0
  125. package/es/WorkerFlow/Form/LevelGroupSelect.d.ts +1 -0
  126. package/es/WorkerFlow/Form/LevelGroupSelect.js +2 -1
  127. package/es/WorkerFlow/Form/Notifier.d.ts +1 -0
  128. package/es/WorkerFlow/Form/UserAndGroupSelect.d.ts +1 -0
  129. package/es/WorkerFlow/Form/UserAndGroupSelect.js +2 -1
  130. package/es/WorkerFlow/Form/UserSelect.d.ts +1 -0
  131. package/es/WorkerFlow/Form/UserSelect.js +2 -1
  132. package/es/WorkerFlow/Form/UserSet.d.ts +1 -0
  133. package/es/WorkerFlow/Form/UsersHandleType.d.ts +1 -0
  134. package/es/WorkerFlow/Nodes/Add.d.ts +1 -0
  135. package/es/WorkerFlow/Nodes/Add.js +1 -1
  136. package/es/WorkerFlow/Nodes/AddOption.d.ts +1 -0
  137. package/es/WorkerFlow/Nodes/AddOptionList.d.ts +1 -0
  138. package/es/WorkerFlow/Nodes/Approver.d.ts +1 -0
  139. package/es/WorkerFlow/Nodes/Condition.d.ts +1 -0
  140. package/es/WorkerFlow/Nodes/End.d.ts +1 -0
  141. package/es/WorkerFlow/Nodes/Handle.d.ts +1 -0
  142. package/es/WorkerFlow/Nodes/Node.d.ts +1 -0
  143. package/es/WorkerFlow/Nodes/Notifier.d.ts +1 -0
  144. package/es/WorkerFlow/Nodes/Render.d.ts +1 -0
  145. package/es/WorkerFlow/Nodes/Start.d.ts +1 -0
  146. package/es/WorkerFlow/Nodes/TitleElement.d.ts +1 -0
  147. package/es/WorkerFlow/Nodes/TitleElement.js +6 -2
  148. package/es/WorkerFlow/index.js +2 -1
  149. package/es/index.d.ts +5 -8
  150. package/es/index.js +6 -9
  151. package/es/typings.d.ts +1 -0
  152. package/package.json +15 -10
  153. package/tsconfig.json +3 -2
  154. package/typings/global.d.ts +4 -0
  155. package/es/AppRedirect/index.css +0 -0
  156. package/es/AppRedirect/index.d.ts +0 -16
  157. package/es/AppRedirect/index.js +0 -33
  158. package/es/AppRouter/index.d.ts +0 -8
  159. package/es/AppRouter/index.js +0 -17
  160. package/es/RefDrawer/index.d.ts +0 -15
  161. package/es/RefModal/index.d.ts +0 -15
  162. package/es/useDrawer/index.d.ts +0 -14
  163. package/es/useDrawer/index.js +0 -91
  164. package/es/useModal/index.d.ts +0 -14
  165. package/es/useModal/index.js +0 -93
  166. package/typings.d.ts +0 -2
@@ -0,0 +1,150 @@
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
+
13
+ import React, { useEffect, useState, useMemo } from 'react';
14
+ import IconFont from './iconfont';
15
+ import EventName from './event/eventName';
16
+ import "./style/message.css";
17
+
18
+ function VideoMessage(_ref) {
19
+ var event = _ref.event,
20
+ api = _ref.api;
21
+
22
+ var _useState = useState({
23
+ status: null,
24
+ errorTimer: null,
25
+ loading: false
26
+ }),
27
+ _useState2 = _slicedToArray(_useState, 2),
28
+ state = _useState2[0],
29
+ setState = _useState2[1];
30
+
31
+ var message = useMemo(function () {
32
+ if (state.status === 'fail') {
33
+ return '视频错误';
34
+ }
35
+
36
+ if (state.status === 'reload') {
37
+ return "\u89C6\u9891\u52A0\u8F7D\u9519\u8BEF\uFF0C\u6B63\u5728\u8FDB\u884C\u91CD\u8FDE\u7B2C".concat(state.errorTimer, "\u6B21\u91CD\u8FDE");
38
+ }
39
+
40
+ return '';
41
+ }, [state.errorTimer, state.status]);
42
+ useEffect(function () {
43
+ var openLoading = function openLoading() {
44
+ return setState(function (old) {
45
+ return Object.assign(Object.assign({}, old), {
46
+ loading: true
47
+ });
48
+ });
49
+ };
50
+
51
+ var closeLoading = function closeLoading() {
52
+ return setState(function (old) {
53
+ return Object.assign(Object.assign({}, old), {
54
+ loading: false
55
+ });
56
+ });
57
+ };
58
+
59
+ var errorReload = function errorReload(timer) {
60
+ return setState(function () {
61
+ return {
62
+ status: 'reload',
63
+ errorTimer: timer,
64
+ loading: true
65
+ };
66
+ });
67
+ };
68
+
69
+ var reloadFail = function reloadFail() {
70
+ return setState(function (old) {
71
+ return Object.assign(Object.assign({}, old), {
72
+ status: 'fail'
73
+ });
74
+ });
75
+ };
76
+
77
+ var reloadSuccess = function reloadSuccess() {
78
+ return setState(function (old) {
79
+ return Object.assign(Object.assign({}, old), {
80
+ status: null
81
+ });
82
+ });
83
+ };
84
+
85
+ var reload = function reload() {
86
+ return setState(function (old) {
87
+ return Object.assign(Object.assign({}, old), {
88
+ status: 'reload'
89
+ });
90
+ });
91
+ };
92
+
93
+ var playEnd = function playEnd() {
94
+ return setState(function (old) {
95
+ return Object.assign(Object.assign({}, old), {
96
+ status: null,
97
+ loading: false
98
+ });
99
+ }), api.pause();
100
+ };
101
+
102
+ event.addEventListener('loadstart', openLoading);
103
+ event.addEventListener('waiting', openLoading); // event.addEventListener('seeking', openLoading)
104
+
105
+ event.addEventListener('loadeddata', closeLoading);
106
+ event.addEventListener('canplay', closeLoading);
107
+ event.on(EventName.ERROR_RELOAD, errorReload);
108
+ event.on(EventName.RELOAD_FAIL, reloadFail);
109
+ event.on(EventName.RELOAD_SUCCESS, reloadSuccess);
110
+ event.on(EventName.RELOAD, reload);
111
+ event.on(EventName.HISTORY_PLAY_END, playEnd);
112
+ event.on(EventName.CLEAR_ERROR_TIMER, reloadSuccess);
113
+ return function () {
114
+ event.removeEventListener('loadstart', openLoading);
115
+ event.removeEventListener('waiting', openLoading); // event.removeEventListener('seeking', openLoading)
116
+
117
+ event.removeEventListener('loadeddata', closeLoading);
118
+ event.removeEventListener('canplay', closeLoading);
119
+ event.off(EventName.ERROR_RELOAD, errorReload);
120
+ event.off(EventName.RELOAD_FAIL, reloadFail);
121
+ event.off(EventName.RELOAD_SUCCESS, reloadSuccess);
122
+ event.off(EventName.RELOAD, reload);
123
+ event.off(EventName.HISTORY_PLAY_END, playEnd);
124
+ event.off(EventName.CLEAR_ERROR_TIMER, reloadSuccess);
125
+ };
126
+ }, [event]);
127
+ var loading = state.loading,
128
+ status = state.status;
129
+ return /*#__PURE__*/React.createElement("div", {
130
+ className: "lm-player-message-mask ".concat(loading || status === 'fail' ? 'lm-player-mask-loading-animation' : '')
131
+ }, /*#__PURE__*/React.createElement(IconFont, {
132
+ type: status === 'fail' ? 'lm-player-YesorNo_No_Dark' : 'lm-player-Loading',
133
+ className: "".concat(loading && status !== 'fail' ? 'lm-player-loading-animation' : status === 'fail' ? 'lm-player-loadfail' : '', " lm-player-loading-icon")
134
+ }), /*#__PURE__*/React.createElement("span", {
135
+ className: "lm-player-message"
136
+ }, message));
137
+ }
138
+
139
+ export var NoSource = function NoSource() {
140
+ return /*#__PURE__*/React.createElement("div", {
141
+ className: "lm-player-message-mask lm-player-mask-loading-animation"
142
+ }, /*#__PURE__*/React.createElement(IconFont, {
143
+ style: {
144
+ fontSize: 80
145
+ },
146
+ type: "lm-player-PlaySource",
147
+ title: "\u8BF7\u9009\u62E9\u89C6\u9891\u6E90"
148
+ }));
149
+ };
150
+ export default VideoMessage;
@@ -0,0 +1,75 @@
1
+ import type FlvJs from 'flv.zv.js';
2
+ import type Hls, { HlsConfig } from 'hls.js';
3
+ import type React from 'react';
4
+ import type Api from './api';
5
+ import type VideoEventInstance from './event';
6
+
7
+ export type FlvPlayerConfig = {
8
+ mediaDataSource: FlvJs.MediaDataSource;
9
+ config: FlvJs.Config;
10
+ };
11
+
12
+ export interface ISinglePlayerProps {
13
+ url?: string;
14
+ className?: string;
15
+ children?: React.ReactNode;
16
+ muted?: boolean;
17
+ scale?: boolean;
18
+ autoPlay?: boolean;
19
+ playsInline?: boolean;
20
+ preload?: string;
21
+ poster?: string;
22
+ loop?: boolean;
23
+ type?: 'flv' | 'hls' | 'native';
24
+ hideContrallerBar?: boolean;
25
+ isLive?: boolean;
26
+ rightExtContents?: React.ReactNode;
27
+ rightMidExtContents?: React.ReactNode;
28
+ leftExtContents?: React.ReactNode;
29
+ leftMidExtContents?: React.ReactNode;
30
+ customTimeLine?: React.ReactNode;
31
+ errorReloadTimer?: number;
32
+ flvConfig?: FlvPlayerConfig;
33
+ hlsConfig?: HlsConfig;
34
+ reload?: () => void;
35
+ onCanPlayerInit?: () => void;
36
+ videoEvents?: CustomEvent[];
37
+ playerEvents?: CustomEvent[];
38
+ }
39
+
40
+ export const SinglePlayer: React.FunctionComponent<ISinglePlayerProps>;
41
+
42
+ export interface EventName {
43
+ RELOAD: 'reload'; //手动视频重载
44
+ RELOAD_FAIL: 'reloadFail'; // 视频出错,重连失败
45
+ RELOAD_SUCCESS: 'reloadSuccess'; //视频出错,重连成功
46
+ ERROR: 'error'; //视频出错
47
+ ERROR_RELOAD: 'errorRload'; //视频出错,自动重连
48
+ HISTORY_PLAY_END: 'historyPlayEnd'; //历史视频列表播放结束
49
+ SEEK: 'seek'; //跳跃播放时间
50
+ TRANSFORM: 'transform'; //视频容器缩放
51
+ CHANGE_PLAY_INDEX: 'changePlayIndex'; //历史视频列表播放索引改变
52
+ HIDE_CONTRALLER: 'hideContraller';
53
+ SHOW_CONTRALLER: 'showContraller';
54
+ CLEAR_ERROR_TIMER: 'clearErrorTimer';
55
+ }
56
+
57
+ export type EventInfo = {
58
+ type: string;
59
+ listener: ((...args: any) => void)[];
60
+ };
61
+
62
+ export type ExportPlayerType = {
63
+ video: HTMLVideoElement;
64
+ container: HTMLElement;
65
+ api: Api;
66
+ event: VideoEventInstance;
67
+ plugins: [FlvJs.Player, Hls];
68
+ };
69
+
70
+ export interface ISegmentType {
71
+ url?: string;
72
+ duration: number;
73
+ }
74
+
75
+ export type CustomEvent = [string, () => void];
@@ -0,0 +1,13 @@
1
+ /// <reference types="react" />
2
+ import type { ISegmentType, ISinglePlayerProps } from './player';
3
+ interface ISegmentPlayerProps extends Omit<ISinglePlayerProps, 'url' | 'customTimeLine' | 'onCanPlayerInit'> {
4
+ segments?: ISegmentType[];
5
+ begin?: number;
6
+ }
7
+ /**
8
+ * @desc 主组件,负责片段整体逻辑控制
9
+ * @param param0
10
+ * @returns
11
+ */
12
+ declare function SegmentPlayer({ segments, begin, ...props }: ISegmentPlayerProps): JSX.Element;
13
+ export default SegmentPlayer;
@@ -0,0 +1,191 @@
1
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
2
+
3
+ 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."); }
4
+
5
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
6
+
7
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
8
+
9
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
10
+
11
+ 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."); }
12
+
13
+ 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); }
14
+
15
+ 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; }
16
+
17
+ 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; }
18
+
19
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
20
+
21
+ import { __rest } from "tslib";
22
+ import React, { useEffect, useMemo, useRef, useState } from 'react';
23
+ import SinglePlayer from './single_player';
24
+ import SegmentTimeLine from './segment_timeline';
25
+ /**
26
+ * @desc 计算第一个url
27
+ * @param segments
28
+ * @param defaultIndex
29
+ * @returns
30
+ */
31
+
32
+ function getFirstUrlIndex(segments) {
33
+ var defaultIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
34
+
35
+ if (!(Array.isArray(segments) && segments.length > 0)) {
36
+ return defaultIndex;
37
+ }
38
+
39
+ if (segments[defaultIndex].url) {
40
+ return defaultIndex;
41
+ } else {
42
+ var i = defaultIndex + 1;
43
+
44
+ if (i > segments.length) {
45
+ return i;
46
+ }
47
+
48
+ return getFirstUrlIndex(segments, i);
49
+ }
50
+ }
51
+ /**
52
+ * @desc 片段索引控制
53
+ * @param event
54
+ * @param segments
55
+ * @param deps
56
+ * @returns
57
+ */
58
+
59
+
60
+ function usePlayIndex(event, segments, deps) {
61
+ var _useState = useState({
62
+ index: getFirstUrlIndex(segments, 0)
63
+ }),
64
+ _useState2 = _slicedToArray(_useState, 2),
65
+ state = _useState2[0],
66
+ setState = _useState2[1]; // 片段发生变化重新开始计算索引
67
+
68
+
69
+ useEffect(function () {
70
+ var index = getFirstUrlIndex(segments, 0);
71
+ setState(function (old) {
72
+ return Object.assign(Object.assign({}, old), {
73
+ index: index
74
+ });
75
+ });
76
+ }, [segments]); // 索引不存在播放地址,自动跳转下一段
77
+
78
+ useEffect(function () {
79
+ var _a;
80
+
81
+ if (!((_a = segments[state.index]) === null || _a === void 0 ? void 0 : _a.url) && state.index < segments.length - 1) {
82
+ setState(function (old) {
83
+ return Object.assign(Object.assign({}, old), {
84
+ index: old.index + 1
85
+ });
86
+ });
87
+ }
88
+ }, [state.index]); // 监听片段播放状态,自动跳转下一个片段
89
+
90
+ useEffect(function () {
91
+ if (!event) {
92
+ return undefined;
93
+ }
94
+
95
+ var fn = function fn() {
96
+ return setState(function (old) {
97
+ return Object.assign(Object.assign({}, onload), {
98
+ index: old.index + 1 < segments.length ? old.index + 1 : old.index
99
+ });
100
+ });
101
+ };
102
+
103
+ event.addEventListener('ended', fn);
104
+ return function () {
105
+ return event.removeEventListener('ended', fn);
106
+ };
107
+ }, [event, segments].concat(_toConsumableArray(deps)));
108
+ return {
109
+ index: state.index,
110
+ setIndex: function setIndex(i) {
111
+ return setState(function (old) {
112
+ return Object.assign(Object.assign({}, old), {
113
+ index: i
114
+ });
115
+ });
116
+ }
117
+ };
118
+ }
119
+ /**
120
+ * @desc 主组件,负责片段整体逻辑控制
121
+ * @param param0
122
+ * @returns
123
+ */
124
+
125
+
126
+ function SegmentPlayer(_a) {
127
+ var _b;
128
+
129
+ var segments = _a.segments,
130
+ begin = _a.begin,
131
+ props = __rest(_a, ["segments", "begin"]);
132
+
133
+ var _useState3 = useState({
134
+ forceKey: Date.now()
135
+ }),
136
+ _useState4 = _slicedToArray(_useState3, 2),
137
+ state = _useState4[0],
138
+ setState = _useState4[1];
139
+
140
+ var duration = useMemo(function () {
141
+ return segments === null || segments === void 0 ? void 0 : segments.map(function (v) {
142
+ return v.duration;
143
+ }).reduce(function (a, b) {
144
+ return a + b;
145
+ }, 0);
146
+ }, [segments]);
147
+ var playerRef = useRef(null);
148
+
149
+ var _usePlayIndex = usePlayIndex((_b = playerRef.current) === null || _b === void 0 ? void 0 : _b.event, segments, [state.forceKey]),
150
+ index = _usePlayIndex.index,
151
+ setIndex = _usePlayIndex.setIndex;
152
+
153
+ var url = useMemo(function () {
154
+ return segments && segments[index] ? segments[index].url : undefined;
155
+ }, [segments, index]); // 重置reload
156
+
157
+ var reload = function reload() {
158
+ setIndex(0);
159
+ playerRef.current.api.reload();
160
+ };
161
+
162
+ var _ref = playerRef.current || {},
163
+ api = _ref.api,
164
+ event = _ref.event; // 秒级别转换
165
+
166
+
167
+ var beginTemp = useMemo(function () {
168
+ return begin ? String(begin).length === 10 ? Math.floor(begin * 1000) : begin : begin;
169
+ }, []);
170
+ return /*#__PURE__*/React.createElement(SinglePlayer, Object.assign({
171
+ ref: playerRef,
172
+ url: url,
173
+ reload: reload,
174
+ onCanPlayerInit: function onCanPlayerInit() {
175
+ return setState({
176
+ forceKey: Date.now()
177
+ });
178
+ },
179
+ customTimeLine: api && event ? /*#__PURE__*/React.createElement(SegmentTimeLine, {
180
+ begin: beginTemp,
181
+ api: api,
182
+ event: event,
183
+ index: index,
184
+ segments: segments,
185
+ duration: duration,
186
+ setIndex: setIndex
187
+ }) : /*#__PURE__*/React.createElement(React.Fragment, null)
188
+ }, props));
189
+ }
190
+
191
+ export default SegmentPlayer;
@@ -0,0 +1,16 @@
1
+ /// <reference types="react" />
2
+ import type Api from './api';
3
+ import type VideoEventInstance from './event';
4
+ import type { ISegmentType } from './player';
5
+ import './style/timeline.less';
6
+ interface ITimeLineProps {
7
+ api: Api;
8
+ event: VideoEventInstance;
9
+ index: number;
10
+ segments: ISegmentType[];
11
+ duration: number;
12
+ setIndex: (i: number) => void;
13
+ begin: number;
14
+ }
15
+ declare function SegmentTimeLine({ api, event, index, segments, duration, begin, setIndex }: ITimeLineProps): JSX.Element;
16
+ export default SegmentTimeLine;
@@ -0,0 +1,154 @@
1
+ import "antd/lib/tooltip/style";
2
+ import _Tooltip from "antd/lib/tooltip";
3
+
4
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
5
+
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."); }
7
+
8
+ 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); }
9
+
10
+ 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; }
11
+
12
+ 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; }
13
+
14
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
15
+
16
+ import React, { useCallback, useMemo } from 'react';
17
+ import { useTimes } from './timeline';
18
+ import useBarStatus from './contraller_bar/useBarStatus';
19
+ import { dateFormat } from './util';
20
+ import "./style/timeline.css";
21
+
22
+ function SegmentTimeLine(_ref) {
23
+ var api = _ref.api,
24
+ event = _ref.event,
25
+ index = _ref.index,
26
+ segments = _ref.segments,
27
+ duration = _ref.duration,
28
+ begin = _ref.begin,
29
+ setIndex = _ref.setIndex;
30
+ var status = useBarStatus(event);
31
+
32
+ var _useTimes = useTimes(api, event),
33
+ _useTimes2 = _slicedToArray(_useTimes, 2),
34
+ currentTime = _useTimes2[0],
35
+ buffered = _useTimes2[1];
36
+
37
+ var indexDuration = useMemo(function () {
38
+ return segments.map(function (v) {
39
+ return v.duration;
40
+ }).reduce(function (a, b, i) {
41
+ return i >= index ? a : a + b;
42
+ }, 0);
43
+ }, [index]);
44
+ var playPercent = useMemo(function () {
45
+ return (currentTime + indexDuration) / duration * 100;
46
+ }, [currentTime, duration, indexDuration]);
47
+ var bufferedPercent = useMemo(function () {
48
+ return (buffered + indexDuration) / duration * 100;
49
+ }, [buffered, duration, indexDuration]);
50
+ var seekWithLine = useCallback(function (e, i) {
51
+ if (!segments[i].url) {
52
+ return;
53
+ }
54
+
55
+ var ele = e.currentTarget;
56
+ var rect = ele.getBoundingClientRect();
57
+ var current = e.pageX - rect.left;
58
+ var currentTime = current / rect.width * api.getDuration();
59
+
60
+ if (i !== index) {
61
+ setIndex(i); // 临时方案,最好方案在初始化播放器时实现,这样处理理论上也可以
62
+
63
+ setTimeout(function () {
64
+ return api.seekTo(currentTime);
65
+ }, 500);
66
+ } else {
67
+ api.seekTo(currentTime);
68
+ }
69
+ }, [api, segments, index]);
70
+ return /*#__PURE__*/React.createElement("div", {
71
+ className: "player-timeline-layout player-segment-timeline-layout ".concat(status === 0 ? 'hide-time-line' : '')
72
+ }, /*#__PURE__*/React.createElement("div", {
73
+ className: "segment-line-box"
74
+ }, segments.map(function (v, i) {
75
+ return /*#__PURE__*/React.createElement(_Tooltip, {
76
+ key: "time-line-".concat(i),
77
+ title: /*#__PURE__*/React.createElement(TipTitle, {
78
+ segments: segments,
79
+ index: i,
80
+ begin: begin
81
+ })
82
+ }, /*#__PURE__*/React.createElement("div", {
83
+ className: "segment-line-item ".concat(!v.url ? 'segment-line-item-none' : '', " ").concat(i === segments.length - 1 ? 'last-segment-line-item' : ''),
84
+ onClick: function onClick(e) {
85
+ return seekWithLine(e, i);
86
+ },
87
+ style: {
88
+ width: "".concat(v.duration / duration * 100, "%")
89
+ }
90
+ }));
91
+ }), /*#__PURE__*/React.createElement("div", {
92
+ className: "buffer-line",
93
+ style: {
94
+ width: "".concat(bufferedPercent, "%")
95
+ }
96
+ }), /*#__PURE__*/React.createElement("div", {
97
+ className: "current-line",
98
+ style: {
99
+ width: "".concat(playPercent, "%")
100
+ }
101
+ })));
102
+ }
103
+
104
+ function TipTitle(_ref2) {
105
+ var index = _ref2.index,
106
+ segments = _ref2.segments,
107
+ begin = _ref2.begin;
108
+
109
+ var _useMemo = useMemo(function () {
110
+ if (index === 0) {
111
+ var _start = begin;
112
+
113
+ var _end = begin + segments[0].duration * 1000;
114
+
115
+ return {
116
+ start: dateFormat(_start),
117
+ end: dateFormat(_end)
118
+ };
119
+ }
120
+
121
+ var indexDuration = segments.map(function (v) {
122
+ return v.duration;
123
+ }).reduce(function (a, b, i) {
124
+ return i >= index ? a : a + b;
125
+ }, 0);
126
+ var start = begin + indexDuration * 1000;
127
+ var end = start + segments[index].duration * 1000;
128
+ return {
129
+ start: dateFormat(start),
130
+ end: dateFormat(end)
131
+ };
132
+ }, [index, segments, begin]),
133
+ start = _useMemo.start,
134
+ end = _useMemo.end;
135
+
136
+ var hasUrl = useMemo(function () {
137
+ var _a;
138
+
139
+ return ((_a = segments[index]) === null || _a === void 0 ? void 0 : _a.url) ? true : false;
140
+ }, [index, segments]);
141
+ return /*#__PURE__*/React.createElement("div", {
142
+ className: "segment-line-tip-box"
143
+ }, /*#__PURE__*/React.createElement("div", {
144
+ style: {
145
+ fontWeight: 600
146
+ }
147
+ }, "\u5F55\u50CF\u7247\u6BB5\u4FE1\u606F"), /*#__PURE__*/React.createElement("div", null, "\u5F00\u59CB\uFF1A", start), /*#__PURE__*/React.createElement("div", null, "\u7ED3\u675F\uFF1A", end), /*#__PURE__*/React.createElement("div", null, "\u72B6\u6001\uFF1A", /*#__PURE__*/React.createElement("span", {
148
+ style: {
149
+ color: hasUrl ? 'green' : 'red'
150
+ }
151
+ }, hasUrl ? '正常' : '缺失')));
152
+ }
153
+
154
+ export default SegmentTimeLine;
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import type { ISinglePlayerProps, ExportPlayerType } from './player';
3
+ import './style/index.less';
4
+ declare const _default: React.MemoExoticComponent<React.ForwardRefExoticComponent<ISinglePlayerProps & React.RefAttributes<ExportPlayerType>>>;
5
+ export default _default;