@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.
- package/.umirc.ts +4 -3
- package/es/Api/index.js +1 -1
- package/es/AppContext/Sync.d.ts +1 -0
- package/es/AppContext/interface.d.ts +4 -1
- package/es/CheckGroupFixed/index.d.ts +1 -0
- package/es/DeviceSelect/TreeType.d.ts +1 -0
- package/es/DeviceSelect/demo.d.ts +1 -0
- package/es/DeviceSelect/index.d.ts +1 -0
- package/es/DeviceSelect/index.js +1 -1
- package/es/Drag/DragAndDropItem.js +2 -2
- package/es/Drag/DropItem.js +2 -2
- package/es/Drawer/Demo.js +24 -3
- package/es/Drawer/Footer.d.ts +1 -0
- package/es/Drawer/index.d.ts +29 -3
- package/es/Drawer/index.js +155 -4
- package/es/FrontendPlayer/index.d.ts +2 -0
- package/es/FrontendPlayer/index.js +2 -0
- package/es/FullScreen/index.d.ts +2 -3
- package/es/FullScreen/index.js +14 -41
- package/es/InitialConfig/utils.d.ts +5 -5
- package/es/InitialConfig/utils.js +19 -19
- package/es/Input/index.d.ts +1 -0
- package/es/List/CheckExt.d.ts +1 -0
- package/es/List/DeviceList/index.js +1 -1
- package/es/List/DynamicDeviceList/Demo.d.ts +1 -0
- package/es/List/DynamicDeviceList/index.d.ts +1 -0
- package/es/List/GridList/index.js +0 -1
- package/es/List/VList/index.d.ts +1 -0
- package/es/List/index.d.ts +1 -0
- package/es/LoaderApp/index.js +26 -22
- package/es/LoaderApp/loader.js +2 -6
- package/es/LoaderApp/utils.d.ts +1 -0
- package/es/LoaderApp/utils.js +37 -0
- package/es/Modal/index.d.ts +27 -0
- package/es/Modal/index.js +155 -1
- package/es/Picture/component/DefaultRects/RectInfo.d.ts +1 -0
- package/es/Picture/component/DefaultRects/index.d.ts +2 -1
- package/es/Picture/component/DrawRect/index.d.ts +3 -4
- package/es/Picture/component/MoveContent/index.js +16 -12
- package/es/Picture/component/RectMenu/index.d.ts +2 -3
- package/es/Picture/component/Tools/index.js +0 -5
- package/es/Picture/component/WheelScale/index.d.ts +1 -0
- package/es/Picture/component/WheelScale/index.js +3 -3
- package/es/Picture/index.d.ts +1 -0
- package/es/Picture/index.js +4 -2
- package/es/Picture/interface.d.ts +4 -2
- package/es/Picture/utils.d.ts +1 -0
- package/es/Player/api/index.d.ts +71 -0
- package/es/Player/api/index.js +284 -0
- package/es/Player/contraller_bar/bar.d.ts +8 -0
- package/es/Player/contraller_bar/bar.js +21 -0
- package/es/Player/contraller_bar/contraller_event.d.ts +9 -0
- package/es/{RefModal/index.js → Player/contraller_bar/contraller_event.js} +39 -54
- package/es/Player/contraller_bar/index.d.ts +19 -0
- package/es/Player/contraller_bar/index.js +37 -0
- package/es/Player/contraller_bar/left_bar.d.ts +15 -0
- package/es/Player/contraller_bar/left_bar.js +91 -0
- package/es/Player/contraller_bar/right_bar.d.ts +13 -0
- package/es/Player/contraller_bar/right_bar.js +55 -0
- package/es/Player/contraller_bar/useBarStatus.d.ts +3 -0
- package/es/{RefDrawer/index.js → Player/contraller_bar/useBarStatus.js} +27 -46
- package/es/Player/demo.d.ts +2 -0
- package/es/Player/demo.js +269 -0
- package/es/Player/event/browserTabEvent.d.ts +9 -0
- package/es/Player/event/browserTabEvent.js +57 -0
- package/es/Player/event/errorEvent.d.ts +16 -0
- package/es/Player/event/errorEvent.js +120 -0
- package/es/Player/event/eventName.d.ts +3 -0
- package/es/Player/event/eventName.js +15 -0
- package/es/Player/event/index.d.ts +22 -0
- package/es/Player/event/index.js +175 -0
- package/es/Player/frontend_player.d.ts +15 -0
- package/es/Player/frontend_player.js +90 -0
- package/es/Player/frontend_timeline.d.ts +14 -0
- package/es/Player/frontend_timeline.js +138 -0
- package/es/Player/iconfont.d.ts +13 -0
- package/es/Player/iconfont.js +18 -0
- package/es/Player/index.d.ts +8 -0
- package/es/Player/index.js +8 -0
- package/es/Player/live_heart.d.ts +6 -0
- package/es/Player/live_heart.js +29 -0
- package/es/Player/message.d.ts +11 -0
- package/es/Player/message.js +150 -0
- package/es/Player/player.d.ts +75 -0
- package/es/Player/segment_player.d.ts +13 -0
- package/es/Player/segment_player.js +191 -0
- package/es/Player/segment_timeline.d.ts +16 -0
- package/es/Player/segment_timeline.js +154 -0
- package/es/Player/single_player.d.ts +5 -0
- package/es/Player/single_player.js +185 -0
- package/es/Player/style/bar.css +37 -0
- package/es/Player/style/iconfont.css +62 -0
- package/es/Player/style/index.css +22 -0
- package/es/Player/style/message.css +49 -0
- package/es/Player/style/slider.css +96 -0
- package/es/Player/style/timeline.css +92 -0
- package/es/Player/timeline.d.ts +11 -0
- package/es/Player/timeline.js +104 -0
- package/es/Player/util.d.ts +48 -0
- package/es/Player/util.js +172 -0
- package/es/Progress/index.d.ts +1 -0
- package/es/SegmentPlayer/index.d.ts +2 -0
- package/es/SegmentPlayer/index.js +2 -0
- package/es/Service/fetch-adapter.d.ts +12 -0
- package/es/Service/fetch-adapter.js +184 -0
- package/es/Service/http.d.ts +1 -1
- package/es/Service/http.js +4 -2
- package/es/Service/interface.d.ts +2 -1
- package/es/Tree/BaseTree/demo.d.ts +1 -0
- package/es/Tree/BaseTree/demo.js +3 -1
- package/es/Tree/BaseTree/index.d.ts +2 -2
- package/es/Tree/demo.d.ts +1 -0
- package/es/Tree/index.js +1 -1
- package/es/UserSelect/demo.d.ts +1 -0
- package/es/WorkerFlow/Form/Approver.d.ts +1 -0
- package/es/WorkerFlow/Form/Condition.d.ts +1 -0
- package/es/WorkerFlow/Form/Condition.js +2 -1
- package/es/WorkerFlow/Form/EmptyUserSet.d.ts +1 -0
- package/es/WorkerFlow/Form/EmptyUserSet.js +2 -1
- package/es/WorkerFlow/Form/FormAuth.d.ts +1 -0
- package/es/WorkerFlow/Form/GroupList.d.ts +1 -0
- package/es/WorkerFlow/Form/GroupSelect.d.ts +1 -0
- package/es/WorkerFlow/Form/GroupSelect.js +2 -1
- package/es/WorkerFlow/Form/Handle.d.ts +1 -0
- package/es/WorkerFlow/Form/LevelGroupSelect.d.ts +1 -0
- package/es/WorkerFlow/Form/LevelGroupSelect.js +2 -1
- package/es/WorkerFlow/Form/Notifier.d.ts +1 -0
- package/es/WorkerFlow/Form/UserAndGroupSelect.d.ts +1 -0
- package/es/WorkerFlow/Form/UserAndGroupSelect.js +2 -1
- package/es/WorkerFlow/Form/UserSelect.d.ts +1 -0
- package/es/WorkerFlow/Form/UserSelect.js +2 -1
- package/es/WorkerFlow/Form/UserSet.d.ts +1 -0
- package/es/WorkerFlow/Form/UsersHandleType.d.ts +1 -0
- package/es/WorkerFlow/Nodes/Add.d.ts +1 -0
- package/es/WorkerFlow/Nodes/Add.js +1 -1
- package/es/WorkerFlow/Nodes/AddOption.d.ts +1 -0
- package/es/WorkerFlow/Nodes/AddOptionList.d.ts +1 -0
- package/es/WorkerFlow/Nodes/Approver.d.ts +1 -0
- package/es/WorkerFlow/Nodes/Condition.d.ts +1 -0
- package/es/WorkerFlow/Nodes/End.d.ts +1 -0
- package/es/WorkerFlow/Nodes/Handle.d.ts +1 -0
- package/es/WorkerFlow/Nodes/Node.d.ts +1 -0
- package/es/WorkerFlow/Nodes/Notifier.d.ts +1 -0
- package/es/WorkerFlow/Nodes/Render.d.ts +1 -0
- package/es/WorkerFlow/Nodes/Start.d.ts +1 -0
- package/es/WorkerFlow/Nodes/TitleElement.d.ts +1 -0
- package/es/WorkerFlow/Nodes/TitleElement.js +6 -2
- package/es/WorkerFlow/index.js +2 -1
- package/es/index.d.ts +5 -8
- package/es/index.js +6 -9
- package/es/typings.d.ts +1 -0
- package/package.json +15 -10
- package/tsconfig.json +3 -2
- package/typings/global.d.ts +4 -0
- package/es/AppRedirect/index.css +0 -0
- package/es/AppRedirect/index.d.ts +0 -16
- package/es/AppRedirect/index.js +0 -33
- package/es/AppRouter/index.d.ts +0 -8
- package/es/AppRouter/index.js +0 -17
- package/es/RefDrawer/index.d.ts +0 -15
- package/es/RefModal/index.d.ts +0 -15
- package/es/useDrawer/index.d.ts +0 -14
- package/es/useDrawer/index.js +0 -91
- package/es/useModal/index.d.ts +0 -14
- package/es/useModal/index.js +0 -93
- package/typings.d.ts +0 -2
|
@@ -0,0 +1,185 @@
|
|
|
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 { __rest } from "tslib";
|
|
14
|
+
import React, { useEffect, useMemo, useRef, useState, useImperativeHandle } from 'react';
|
|
15
|
+
import { usePlayerApi } from './api';
|
|
16
|
+
import { usePlayerEvent, useRegisterPlayerEvents, useVideoEvents } from './event';
|
|
17
|
+
import ContrallerBar from './contraller_bar';
|
|
18
|
+
import ContrallerEvent from './contraller_bar/contraller_event';
|
|
19
|
+
import LiveHeart from './live_heart';
|
|
20
|
+
import VideoMessage from './message';
|
|
21
|
+
import ErrorEvent from './event/errorEvent';
|
|
22
|
+
import { getVideoType, playReload, playUnload } from './util';
|
|
23
|
+
import Timeline from './timeline';
|
|
24
|
+
import "./style/index.css";
|
|
25
|
+
var SinglePlayer = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
26
|
+
var _b;
|
|
27
|
+
|
|
28
|
+
var className = _a.className,
|
|
29
|
+
url = _a.url,
|
|
30
|
+
type = _a.type,
|
|
31
|
+
hideContrallerBar = _a.hideContrallerBar,
|
|
32
|
+
isLive = _a.isLive,
|
|
33
|
+
errorReloadTimer = _a.errorReloadTimer,
|
|
34
|
+
children = _a.children,
|
|
35
|
+
props = __rest(_a, ["className", "url", "type", "hideContrallerBar", "isLive", "errorReloadTimer", "children"]);
|
|
36
|
+
|
|
37
|
+
var autoPlay = props.autoPlay,
|
|
38
|
+
preload = props.preload,
|
|
39
|
+
muted = props.muted,
|
|
40
|
+
poster = props.poster,
|
|
41
|
+
playsInline = props.playsInline,
|
|
42
|
+
loop = props.loop;
|
|
43
|
+
var rightExtContents = props.rightExtContents,
|
|
44
|
+
rightMidExtContents = props.rightMidExtContents,
|
|
45
|
+
leftExtContents = props.leftExtContents,
|
|
46
|
+
leftMidExtContents = props.leftMidExtContents,
|
|
47
|
+
customTimeLine = props.customTimeLine;
|
|
48
|
+
var flvConfig = props.flvConfig,
|
|
49
|
+
hlsConfig = props.hlsConfig,
|
|
50
|
+
videoEvents = props.videoEvents,
|
|
51
|
+
playerEvents = props.playerEvents;
|
|
52
|
+
|
|
53
|
+
var _useState = useState({
|
|
54
|
+
container: null
|
|
55
|
+
}),
|
|
56
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
57
|
+
state = _useState2[0],
|
|
58
|
+
setState = _useState2[1];
|
|
59
|
+
|
|
60
|
+
var vType = useMemo(function () {
|
|
61
|
+
return type || getVideoType(url);
|
|
62
|
+
}, [url]);
|
|
63
|
+
var domRef = useRef(null);
|
|
64
|
+
var video = useMemo(function () {
|
|
65
|
+
return state.container ? state.container.querySelector('video') : undefined;
|
|
66
|
+
}, [state.container]); // 生成事件对象
|
|
67
|
+
|
|
68
|
+
var event = usePlayerEvent(video); // 注册外部自定义事件
|
|
69
|
+
|
|
70
|
+
useVideoEvents(event, videoEvents);
|
|
71
|
+
useRegisterPlayerEvents(event, playerEvents);
|
|
72
|
+
|
|
73
|
+
var _usePlayerApi = usePlayerApi(url, vType, isLive, state.container, flvConfig.mediaDataSource.segments, flvConfig, hlsConfig),
|
|
74
|
+
_usePlayerApi2 = _slicedToArray(_usePlayerApi, 2),
|
|
75
|
+
api = _usePlayerApi2[0],
|
|
76
|
+
_usePlayerApi2$ = _slicedToArray(_usePlayerApi2[1], 3),
|
|
77
|
+
_ = _usePlayerApi2$[0],
|
|
78
|
+
flv = _usePlayerApi2$[1],
|
|
79
|
+
hls = _usePlayerApi2$[2]; // 判断是否有链接传入
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
var hasLink = useMemo(function () {
|
|
83
|
+
return !!url || !!flvConfig.mediaDataSource.segments && vType === 'flv';
|
|
84
|
+
}, [url, flvConfig.mediaDataSource.segments]); // 存储容器
|
|
85
|
+
|
|
86
|
+
useEffect(function () {
|
|
87
|
+
setState(function (old) {
|
|
88
|
+
return Object.assign(Object.assign({}, old), {
|
|
89
|
+
container: domRef.current
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
}, []); // 特殊接口实现 reload是可能被重写的,但是API只暴露原生的方法
|
|
93
|
+
|
|
94
|
+
var reload = function reload() {
|
|
95
|
+
return playReload(video, flv, hls, url);
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
var unload = function unload() {
|
|
99
|
+
return playUnload(video, flv, hls);
|
|
100
|
+
}; // 合并api
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
var playApi = useMemo(function () {
|
|
104
|
+
return Object.assign(Object.assign({}, api), {
|
|
105
|
+
reload: reload,
|
|
106
|
+
unload: unload
|
|
107
|
+
});
|
|
108
|
+
}, [api]); // ref暴露接口
|
|
109
|
+
|
|
110
|
+
useImperativeHandle(ref, function () {
|
|
111
|
+
return {
|
|
112
|
+
video: video,
|
|
113
|
+
container: state.container,
|
|
114
|
+
api: playApi,
|
|
115
|
+
event: event,
|
|
116
|
+
plugins: [flv, hls]
|
|
117
|
+
};
|
|
118
|
+
}, [api, event, video]);
|
|
119
|
+
useEffect(function () {
|
|
120
|
+
if (api && event && video) {
|
|
121
|
+
props.onCanPlayerInit && props.onCanPlayerInit();
|
|
122
|
+
}
|
|
123
|
+
}, [api, event, video]);
|
|
124
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
125
|
+
className: "lm-player-container ".concat(className),
|
|
126
|
+
ref: domRef
|
|
127
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
128
|
+
className: "player-mask-layout"
|
|
129
|
+
}, /*#__PURE__*/React.createElement("video", {
|
|
130
|
+
autoPlay: autoPlay,
|
|
131
|
+
preload: preload,
|
|
132
|
+
muted: muted,
|
|
133
|
+
poster: poster,
|
|
134
|
+
controls: false,
|
|
135
|
+
playsInline: playsInline,
|
|
136
|
+
loop: loop
|
|
137
|
+
})), api && event && hasLink && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(VideoMessage, {
|
|
138
|
+
api: playApi,
|
|
139
|
+
event: event
|
|
140
|
+
}), !hideContrallerBar && /*#__PURE__*/React.createElement(ContrallerEvent, {
|
|
141
|
+
event: event,
|
|
142
|
+
container: state.container
|
|
143
|
+
}, /*#__PURE__*/React.createElement(ContrallerBar, {
|
|
144
|
+
api: playApi,
|
|
145
|
+
event: event,
|
|
146
|
+
isLive: isLive,
|
|
147
|
+
container: state.container,
|
|
148
|
+
rightExtContents: rightExtContents,
|
|
149
|
+
rightMidExtContents: rightMidExtContents,
|
|
150
|
+
leftExtContents: leftExtContents,
|
|
151
|
+
leftMidExtContents: leftMidExtContents,
|
|
152
|
+
reload: (_b = props.reload) !== null && _b !== void 0 ? _b : reload,
|
|
153
|
+
hideTimeProgress: !!customTimeLine
|
|
154
|
+
})), !isLive ? customTimeLine ? customTimeLine : /*#__PURE__*/React.createElement(Timeline, {
|
|
155
|
+
api: playApi,
|
|
156
|
+
event: event
|
|
157
|
+
}) : null, /*#__PURE__*/React.createElement(ErrorEvent, {
|
|
158
|
+
unload: unload,
|
|
159
|
+
flv: flv,
|
|
160
|
+
hls: hls,
|
|
161
|
+
api: playApi,
|
|
162
|
+
event: event,
|
|
163
|
+
reload: reload,
|
|
164
|
+
errorReloadTimer: errorReloadTimer
|
|
165
|
+
}), isLive && /*#__PURE__*/React.createElement(LiveHeart, {
|
|
166
|
+
api: playApi
|
|
167
|
+
})), children);
|
|
168
|
+
});
|
|
169
|
+
SinglePlayer.defaultProps = {
|
|
170
|
+
isLive: true,
|
|
171
|
+
errorReloadTimer: 5,
|
|
172
|
+
muted: true,
|
|
173
|
+
autoPlay: true,
|
|
174
|
+
playsInline: false,
|
|
175
|
+
preload: 'auto',
|
|
176
|
+
loop: false,
|
|
177
|
+
hideContrallerBar: false,
|
|
178
|
+
className: '',
|
|
179
|
+
flvConfig: {
|
|
180
|
+
mediaDataSource: {},
|
|
181
|
+
config: {}
|
|
182
|
+
},
|
|
183
|
+
hlsConfig: {}
|
|
184
|
+
};
|
|
185
|
+
export default /*#__PURE__*/React.memo(SinglePlayer);
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
.contraller-bar-layout {
|
|
2
|
+
position: absolute;
|
|
3
|
+
bottom: 0;
|
|
4
|
+
left: 0;
|
|
5
|
+
background: rgba(29, 33, 53, 0.8);
|
|
6
|
+
height: 28px;
|
|
7
|
+
width: 100%;
|
|
8
|
+
display: flex;
|
|
9
|
+
align-items: center;
|
|
10
|
+
z-index: 10;
|
|
11
|
+
justify-content: space-between;
|
|
12
|
+
opacity: 1;
|
|
13
|
+
transition: opacity 0.3s;
|
|
14
|
+
}
|
|
15
|
+
.contraller-bar-layout.hide-contraller-bar {
|
|
16
|
+
opacity: 0;
|
|
17
|
+
}
|
|
18
|
+
.contraller-bar-layout .contraller-bar-item {
|
|
19
|
+
float: left;
|
|
20
|
+
display: flex;
|
|
21
|
+
width: 28px;
|
|
22
|
+
height: 28px;
|
|
23
|
+
justify-content: center;
|
|
24
|
+
align-items: center;
|
|
25
|
+
}
|
|
26
|
+
.contraller-bar-layout .contraller-bar-item .lm-player-iconfont {
|
|
27
|
+
cursor: pointer;
|
|
28
|
+
}
|
|
29
|
+
.contraller-bar-layout .contraller-bar-item .lm-player-iconfont:hover {
|
|
30
|
+
color: #ffaa00;
|
|
31
|
+
}
|
|
32
|
+
.contraller-bar-layout .video-time-progress {
|
|
33
|
+
float: left;
|
|
34
|
+
line-height: 28px;
|
|
35
|
+
color: #fff;
|
|
36
|
+
font-size: 10px;
|
|
37
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
@font-face {
|
|
2
|
+
font-family: 'lm-player-iconfont';
|
|
3
|
+
src: url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2');
|
|
4
|
+
}
|
|
5
|
+
.lm-player-iconfont {
|
|
6
|
+
font-family: 'lm-player-iconfont' !important;
|
|
7
|
+
font-size: 16px;
|
|
8
|
+
font-style: normal;
|
|
9
|
+
-webkit-font-smoothing: antialiased;
|
|
10
|
+
-moz-osx-font-smoothing: grayscale;
|
|
11
|
+
}
|
|
12
|
+
.lm-player-Loading:before {
|
|
13
|
+
content: '\e65d';
|
|
14
|
+
}
|
|
15
|
+
.lm-player-volume-close:before {
|
|
16
|
+
content: '\e602';
|
|
17
|
+
}
|
|
18
|
+
.lm-player-volume-normal-fuben:before {
|
|
19
|
+
content: '\e604';
|
|
20
|
+
}
|
|
21
|
+
.lm-player-volume-max:before {
|
|
22
|
+
content: '\e605';
|
|
23
|
+
}
|
|
24
|
+
.lm-player-Pause_Main:before {
|
|
25
|
+
content: '\e652';
|
|
26
|
+
}
|
|
27
|
+
.lm-player-Play_Main:before {
|
|
28
|
+
content: '\e654';
|
|
29
|
+
}
|
|
30
|
+
.lm-player-ZoomIn_Main:before {
|
|
31
|
+
content: '\e663';
|
|
32
|
+
}
|
|
33
|
+
.lm-player-ZoomDefault_Main:before {
|
|
34
|
+
content: '\e664';
|
|
35
|
+
}
|
|
36
|
+
.lm-player-ZoomOut_Main:before {
|
|
37
|
+
content: '\e665';
|
|
38
|
+
}
|
|
39
|
+
.lm-player-Refresh_Main:before {
|
|
40
|
+
content: '\e687';
|
|
41
|
+
}
|
|
42
|
+
.lm-player-ExitFull_Main:before {
|
|
43
|
+
content: '\e68e';
|
|
44
|
+
}
|
|
45
|
+
.lm-player-Full_Main:before {
|
|
46
|
+
content: '\e690';
|
|
47
|
+
}
|
|
48
|
+
.lm-player-PlaySource:before {
|
|
49
|
+
content: '\e6cd';
|
|
50
|
+
}
|
|
51
|
+
.lm-player-YesorNo_No_Dark:before {
|
|
52
|
+
content: '\e6dd';
|
|
53
|
+
}
|
|
54
|
+
.lm-player-SearchBox:before {
|
|
55
|
+
content: '\e706';
|
|
56
|
+
}
|
|
57
|
+
.lm-player-PrevFast:before {
|
|
58
|
+
content: '\e71f';
|
|
59
|
+
}
|
|
60
|
+
.lm-player-NextFast_Light:before {
|
|
61
|
+
content: '\e720';
|
|
62
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
.lm-player-container {
|
|
2
|
+
width: 100%;
|
|
3
|
+
height: 100%;
|
|
4
|
+
position: relative;
|
|
5
|
+
background: #000;
|
|
6
|
+
box-sizing: border-box;
|
|
7
|
+
}
|
|
8
|
+
.lm-player-container .lm-player-iconfont {
|
|
9
|
+
color: #fff;
|
|
10
|
+
}
|
|
11
|
+
.lm-player-container .player-mask-layout {
|
|
12
|
+
width: 100%;
|
|
13
|
+
height: 100%;
|
|
14
|
+
overflow: hidden;
|
|
15
|
+
}
|
|
16
|
+
.lm-player-container .player-mask-layout > video {
|
|
17
|
+
display: block;
|
|
18
|
+
width: 100%;
|
|
19
|
+
height: 100%;
|
|
20
|
+
pointer-events: none;
|
|
21
|
+
background: #000;
|
|
22
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
.lm-player-message-mask {
|
|
2
|
+
position: absolute;
|
|
3
|
+
left: 0;
|
|
4
|
+
top: 0;
|
|
5
|
+
z-index: -1;
|
|
6
|
+
background: transparent;
|
|
7
|
+
opacity: 0;
|
|
8
|
+
width: 100%;
|
|
9
|
+
height: 100%;
|
|
10
|
+
transition: all 0.5s;
|
|
11
|
+
display: flex;
|
|
12
|
+
align-items: center;
|
|
13
|
+
justify-content: center;
|
|
14
|
+
flex-direction: column;
|
|
15
|
+
pointer-events: none;
|
|
16
|
+
}
|
|
17
|
+
.lm-player-message-mask.lm-player-mask-loading-animation {
|
|
18
|
+
opacity: 1;
|
|
19
|
+
background: rgba(0, 0, 0, 0.6);
|
|
20
|
+
z-index: 1;
|
|
21
|
+
}
|
|
22
|
+
.lm-player-message-mask .lm-player-loading-icon {
|
|
23
|
+
position: relative;
|
|
24
|
+
font-size: 48px;
|
|
25
|
+
z-index: -1;
|
|
26
|
+
visibility: hidden;
|
|
27
|
+
}
|
|
28
|
+
.lm-player-message-mask .lm-player-loading-icon.lm-player-loading-animation {
|
|
29
|
+
visibility: visible;
|
|
30
|
+
z-index: 9;
|
|
31
|
+
animation: loadingAnimation 1s linear infinite;
|
|
32
|
+
}
|
|
33
|
+
.lm-player-message-mask .lm-player-loading-icon.lm-player-loadfail {
|
|
34
|
+
visibility: visible;
|
|
35
|
+
z-index: 9;
|
|
36
|
+
}
|
|
37
|
+
.lm-player-message-mask .lm-player-message {
|
|
38
|
+
color: #fff;
|
|
39
|
+
font-size: 16px;
|
|
40
|
+
padding: 10px;
|
|
41
|
+
}
|
|
42
|
+
@keyframes loadingAnimation {
|
|
43
|
+
form {
|
|
44
|
+
transform: rotate(0deg);
|
|
45
|
+
}
|
|
46
|
+
to {
|
|
47
|
+
transform: rotate(360deg);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
.slider-layout {
|
|
2
|
+
width: 100%;
|
|
3
|
+
height: 100%;
|
|
4
|
+
user-select: none;
|
|
5
|
+
display: flex;
|
|
6
|
+
justify-content: center;
|
|
7
|
+
align-items: center;
|
|
8
|
+
position: relative;
|
|
9
|
+
}
|
|
10
|
+
.slider-layout .slider-content {
|
|
11
|
+
width: 100%;
|
|
12
|
+
height: 2px;
|
|
13
|
+
position: relative;
|
|
14
|
+
transition: height 0.2s;
|
|
15
|
+
cursor: pointer;
|
|
16
|
+
overflow: hidden;
|
|
17
|
+
}
|
|
18
|
+
.slider-layout .slider-other-content {
|
|
19
|
+
width: 100%;
|
|
20
|
+
height: 2px;
|
|
21
|
+
position: absolute;
|
|
22
|
+
left: 0;
|
|
23
|
+
top: 50%;
|
|
24
|
+
transform: translateY(-50%);
|
|
25
|
+
transition: height 0.2s;
|
|
26
|
+
cursor: pointer;
|
|
27
|
+
z-index: 9;
|
|
28
|
+
pointer-events: none;
|
|
29
|
+
}
|
|
30
|
+
.slider-layout .slider-max-line {
|
|
31
|
+
width: 100%;
|
|
32
|
+
height: 100%;
|
|
33
|
+
background-color: #000;
|
|
34
|
+
position: absolute;
|
|
35
|
+
left: 0;
|
|
36
|
+
top: 0;
|
|
37
|
+
z-index: 1;
|
|
38
|
+
border-radius: 4px;
|
|
39
|
+
}
|
|
40
|
+
.slider-layout .slider-visibel-line {
|
|
41
|
+
position: absolute;
|
|
42
|
+
background: #5b7eac;
|
|
43
|
+
width: 100%;
|
|
44
|
+
height: 100%;
|
|
45
|
+
left: 0;
|
|
46
|
+
top: 0;
|
|
47
|
+
z-index: 3;
|
|
48
|
+
cursor: pointer;
|
|
49
|
+
border-radius: 4px;
|
|
50
|
+
}
|
|
51
|
+
.slider-layout .slider-current-line {
|
|
52
|
+
position: absolute;
|
|
53
|
+
background-color: #ffaa00;
|
|
54
|
+
width: 100%;
|
|
55
|
+
height: 100%;
|
|
56
|
+
left: 0;
|
|
57
|
+
top: 0;
|
|
58
|
+
z-index: 3;
|
|
59
|
+
border-radius: 4px;
|
|
60
|
+
}
|
|
61
|
+
.slider-layout .drag-change-icon {
|
|
62
|
+
position: absolute;
|
|
63
|
+
width: 6px;
|
|
64
|
+
height: 6px;
|
|
65
|
+
border-radius: 50%;
|
|
66
|
+
margin-left: -3px;
|
|
67
|
+
border: 1px solid #fff;
|
|
68
|
+
background-color: #ffaa00;
|
|
69
|
+
top: -3px;
|
|
70
|
+
pointer-events: all;
|
|
71
|
+
box-sizing: content-box;
|
|
72
|
+
}
|
|
73
|
+
.slider-layout:hover .slider-content,
|
|
74
|
+
.slider-layout:hover .slider-other-content {
|
|
75
|
+
height: 4px;
|
|
76
|
+
}
|
|
77
|
+
.slider-layout:hover .drag-change-icon {
|
|
78
|
+
width: 10px;
|
|
79
|
+
height: 10px;
|
|
80
|
+
top: -4px;
|
|
81
|
+
margin-left: -5px;
|
|
82
|
+
}
|
|
83
|
+
.lm-player-slide-tips {
|
|
84
|
+
background: rgba(0, 0, 0, 0.6);
|
|
85
|
+
position: absolute;
|
|
86
|
+
left: 0;
|
|
87
|
+
top: -26px;
|
|
88
|
+
transform: translate(-50%, -100%);
|
|
89
|
+
font-size: 12px;
|
|
90
|
+
color: #fff;
|
|
91
|
+
border-radius: 4px;
|
|
92
|
+
z-index: 6;
|
|
93
|
+
padding: 2px 4px;
|
|
94
|
+
white-space: nowrap;
|
|
95
|
+
z-index: 99;
|
|
96
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
.player-timeline-layout {
|
|
2
|
+
position: absolute;
|
|
3
|
+
left: 0;
|
|
4
|
+
bottom: 28px;
|
|
5
|
+
width: 100%;
|
|
6
|
+
height: 20px;
|
|
7
|
+
background: #000000;
|
|
8
|
+
display: flex;
|
|
9
|
+
justify-content: center;
|
|
10
|
+
align-items: center;
|
|
11
|
+
z-index: 9;
|
|
12
|
+
opacity: 0.8;
|
|
13
|
+
transition: all 0.1s;
|
|
14
|
+
cursor: pointer;
|
|
15
|
+
}
|
|
16
|
+
.player-timeline-layout.hide-time-line {
|
|
17
|
+
bottom: 0;
|
|
18
|
+
height: 4px;
|
|
19
|
+
}
|
|
20
|
+
.player-timeline-layout .buffer-line {
|
|
21
|
+
position: absolute;
|
|
22
|
+
left: 0;
|
|
23
|
+
top: 0;
|
|
24
|
+
height: 100%;
|
|
25
|
+
background-color: #676767;
|
|
26
|
+
pointer-events: none;
|
|
27
|
+
max-width: 100%;
|
|
28
|
+
}
|
|
29
|
+
.player-timeline-layout .current-line {
|
|
30
|
+
position: absolute;
|
|
31
|
+
left: 0;
|
|
32
|
+
top: 0;
|
|
33
|
+
height: 100%;
|
|
34
|
+
background-color: #4661ff;
|
|
35
|
+
pointer-events: none;
|
|
36
|
+
overflow: hidden;
|
|
37
|
+
max-width: 100%;
|
|
38
|
+
}
|
|
39
|
+
.player-timeline-layout.player-segment-timeline-layout {
|
|
40
|
+
background: transparent;
|
|
41
|
+
}
|
|
42
|
+
.player-timeline-layout.player-segment-timeline-layout .segment-line-box {
|
|
43
|
+
width: 100%;
|
|
44
|
+
height: 100%;
|
|
45
|
+
display: flex;
|
|
46
|
+
}
|
|
47
|
+
.player-timeline-layout.player-segment-timeline-layout .segment-line-box .segment-line-item {
|
|
48
|
+
background: #000000;
|
|
49
|
+
position: relative;
|
|
50
|
+
box-sizing: border-box;
|
|
51
|
+
}
|
|
52
|
+
.player-timeline-layout.player-segment-timeline-layout .segment-line-box .segment-line-item:hover::after {
|
|
53
|
+
content: ' ';
|
|
54
|
+
width: 100%;
|
|
55
|
+
height: 100%;
|
|
56
|
+
left: 0;
|
|
57
|
+
top: 0;
|
|
58
|
+
border: 1px solid #fff;
|
|
59
|
+
z-index: 6;
|
|
60
|
+
position: absolute;
|
|
61
|
+
}
|
|
62
|
+
.player-timeline-layout.player-segment-timeline-layout .segment-line-box .segment-line-item.segment-line-item-none {
|
|
63
|
+
background: #de0e0e;
|
|
64
|
+
z-index: 6;
|
|
65
|
+
cursor: not-allowed;
|
|
66
|
+
}
|
|
67
|
+
.player-timeline-layout.frontend-player-timeline-layout .frontend-line-mark {
|
|
68
|
+
position: absolute;
|
|
69
|
+
height: 100%;
|
|
70
|
+
width: 2px;
|
|
71
|
+
background-color: #fff;
|
|
72
|
+
pointer-events: none;
|
|
73
|
+
}
|
|
74
|
+
.player-timeline-layout.frontend-player-timeline-layout .frontend-line-tip-box {
|
|
75
|
+
position: absolute;
|
|
76
|
+
top: -130px;
|
|
77
|
+
color: #fff;
|
|
78
|
+
font-size: 12px;
|
|
79
|
+
border-radius: 3px;
|
|
80
|
+
background-color: #000000;
|
|
81
|
+
padding: 10px;
|
|
82
|
+
width: 162px;
|
|
83
|
+
line-height: 20px;
|
|
84
|
+
margin-left: -81px;
|
|
85
|
+
}
|
|
86
|
+
.segment-line-tip-box {
|
|
87
|
+
font-size: 12px;
|
|
88
|
+
}
|
|
89
|
+
.segment-line-tip-box div {
|
|
90
|
+
margin: 0;
|
|
91
|
+
padding: 2px 0;
|
|
92
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type Api from './api';
|
|
3
|
+
import type VideoEventInstance from './event';
|
|
4
|
+
import './style/timeline.less';
|
|
5
|
+
interface ITimeLineProps {
|
|
6
|
+
api: Api;
|
|
7
|
+
event: VideoEventInstance;
|
|
8
|
+
}
|
|
9
|
+
export declare function useTimes(api: Api, event: VideoEventInstance, isHide?: boolean): number[];
|
|
10
|
+
declare function TimeLine({ api, event }: ITimeLineProps): JSX.Element;
|
|
11
|
+
export default TimeLine;
|
|
@@ -0,0 +1,104 @@
|
|
|
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, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
14
|
+
import useBarStatus from './contraller_bar/useBarStatus';
|
|
15
|
+
import "./style/timeline.css";
|
|
16
|
+
export function useTimes(api, event, isHide) {
|
|
17
|
+
var _useState = useState({
|
|
18
|
+
currentTime: 0,
|
|
19
|
+
buffered: 0
|
|
20
|
+
}),
|
|
21
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
22
|
+
state = _useState2[0],
|
|
23
|
+
setState = _useState2[1];
|
|
24
|
+
|
|
25
|
+
if (isHide) {
|
|
26
|
+
return [0, 0, 0];
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
useEffect(function () {
|
|
30
|
+
var getCurrentTime = function getCurrentTime() {
|
|
31
|
+
return setState(function (old) {
|
|
32
|
+
return Object.assign(Object.assign({}, old), {
|
|
33
|
+
currentTime: api.getCurrentTime(),
|
|
34
|
+
buffered: api.getSecondsLoaded()
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
var getBuffered = function getBuffered() {
|
|
40
|
+
return setState(function (old) {
|
|
41
|
+
return Object.assign(Object.assign({}, old), {
|
|
42
|
+
buffered: api.getSecondsLoaded()
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
var seekendPlay = function seekendPlay() {
|
|
48
|
+
return api.play();
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
event.addEventListener('timeupdate', getCurrentTime);
|
|
52
|
+
event.addEventListener('progress', getBuffered);
|
|
53
|
+
event.addEventListener('suspend', getBuffered);
|
|
54
|
+
event.addEventListener('seeked', seekendPlay);
|
|
55
|
+
return function () {
|
|
56
|
+
event.removeEventListener('timeupdate', getCurrentTime);
|
|
57
|
+
event.removeEventListener('progress', getBuffered);
|
|
58
|
+
event.removeEventListener('suspend', getBuffered);
|
|
59
|
+
event.removeEventListener('seeked', seekendPlay);
|
|
60
|
+
};
|
|
61
|
+
}, [event, api]);
|
|
62
|
+
return [state.currentTime, state.buffered, api.getDuration()];
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function TimeLine(_ref) {
|
|
66
|
+
var api = _ref.api,
|
|
67
|
+
event = _ref.event;
|
|
68
|
+
var status = useBarStatus(event);
|
|
69
|
+
|
|
70
|
+
var _useTimes = useTimes(api, event),
|
|
71
|
+
_useTimes2 = _slicedToArray(_useTimes, 3),
|
|
72
|
+
currentTime = _useTimes2[0],
|
|
73
|
+
buffered = _useTimes2[1],
|
|
74
|
+
duration = _useTimes2[2];
|
|
75
|
+
|
|
76
|
+
var playPercent = useMemo(function () {
|
|
77
|
+
return currentTime / duration * 100;
|
|
78
|
+
}, [currentTime]);
|
|
79
|
+
var bufferedPercent = useMemo(function () {
|
|
80
|
+
return buffered / duration * 100;
|
|
81
|
+
}, [buffered]);
|
|
82
|
+
var seekWithLine = useCallback(function (e) {
|
|
83
|
+
var rect = e.currentTarget.getBoundingClientRect();
|
|
84
|
+
var current = e.pageX - rect.left;
|
|
85
|
+
var cTime = current / rect.width * api.getDuration();
|
|
86
|
+
api.seekTo(cTime);
|
|
87
|
+
}, [api]);
|
|
88
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
89
|
+
className: "player-timeline-layout ".concat(status === 0 ? 'hide-time-line' : ''),
|
|
90
|
+
onClick: seekWithLine
|
|
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
|
+
export default TimeLine;
|