@cloud-app-dev/vidc 3.0.7 → 3.0.10
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/.prettierrc +1 -1
- package/.umirc.ts +2 -1
- package/es/CustomRenderSelect/index.css +20 -0
- package/es/CustomRenderSelect/index.d.ts +10 -0
- package/es/CustomRenderSelect/index.js +67 -0
- package/es/Player/demo.js +36 -12
- package/es/Player/segment_player.js +1 -0
- package/es/Player/segment_timeline.d.ts +2 -1
- package/es/Player/segment_timeline.js +7 -12
- package/es/Player/style/iconfont.css +150 -33
- package/es/Player/style/iconfont.ttf +0 -0
- package/es/Player/style/iconfont.woff +0 -0
- package/es/Player/style/iconfont.woff2 +0 -0
- package/es/ScreenPlayer/Live.js +17 -4
- package/es/ScreenPlayer/LiveTools.js +58 -28
- package/es/ScreenPlayer/PlayerWithExt.d.ts +2 -2
- package/es/ScreenPlayer/PlayerWithExt.js +3 -2
- package/es/ScreenPlayer/Record.d.ts +1 -1
- package/es/ScreenPlayer/Record.js +27 -25
- package/es/ScreenPlayer/RecordTools.d.ts +2 -1
- package/es/ScreenPlayer/RecordTools.js +42 -32
- package/es/ScreenPlayer/ScreenSelect.js +41 -20
- package/es/ScreenPlayer/SegmentTimeLine.d.ts +1 -1
- package/es/ScreenPlayer/SegmentTimeLine.js +26 -7
- package/es/ScreenPlayer/TimeMode.js +8 -2
- package/es/ScreenPlayer/TimeSlider.d.ts +2 -0
- package/es/ScreenPlayer/TimeSlider.js +29 -6
- package/es/ScreenPlayer/index.css +26 -10
- package/es/ScreenPlayer/interface.d.ts +8 -4
- package/es/ScreenPlayer/utils.d.ts +1 -0
- package/es/ScreenPlayer/utils.js +17 -8
- package/es/index.d.ts +1 -0
- package/es/index.js +1 -0
- package/package.json +1 -1
- package/release-build.sh +3 -0
|
@@ -69,7 +69,8 @@ export function SegmentPlayerWithExt(_a) {
|
|
|
69
69
|
segments = _a.segments,
|
|
70
70
|
updatePlayer = _a.updatePlayer,
|
|
71
71
|
onClick = _a.onClick,
|
|
72
|
-
|
|
72
|
+
mode = _a.mode,
|
|
73
|
+
props = __rest(_a, ["begin", "style", "className", "segments", "updatePlayer", "onClick", "mode"]);
|
|
73
74
|
|
|
74
75
|
var ref = useRef();
|
|
75
76
|
var update = useCallback(function () {
|
|
@@ -87,7 +88,7 @@ export function SegmentPlayerWithExt(_a) {
|
|
|
87
88
|
onDoubleClick: toggleFullscreen
|
|
88
89
|
}, /*#__PURE__*/React.createElement(ExtModel, {
|
|
89
90
|
segments: segments,
|
|
90
|
-
mode:
|
|
91
|
+
mode: mode
|
|
91
92
|
}, /*#__PURE__*/React.createElement(SegmentPlayer, Object.assign({}, props, {
|
|
92
93
|
segments: segments,
|
|
93
94
|
type: "hls",
|
|
@@ -6,5 +6,5 @@ import './index.less';
|
|
|
6
6
|
* @param param0
|
|
7
7
|
* @returns
|
|
8
8
|
*/
|
|
9
|
-
declare function RecordPlayer({ list, children, queryRecord, onIndexChange, onClose, onCloseAll }: IRecordPlayerProps): JSX.Element;
|
|
9
|
+
declare function RecordPlayer({ list, children, queryRecord, onIndexChange, onClose, onCloseAll, download }: IRecordPlayerProps): JSX.Element;
|
|
10
10
|
export default RecordPlayer;
|
|
@@ -36,6 +36,16 @@ import useRecordList from './useRecordList';
|
|
|
36
36
|
import useVideoFit from './useVideoFit';
|
|
37
37
|
import DisableMark from '../DisableMark';
|
|
38
38
|
import "./index.css";
|
|
39
|
+
var defaultState = {
|
|
40
|
+
screenNum: 4,
|
|
41
|
+
selectIndex: 0,
|
|
42
|
+
modes: [],
|
|
43
|
+
currentTimes: [],
|
|
44
|
+
loading: false,
|
|
45
|
+
seekTo: 0,
|
|
46
|
+
mergeSegments: [],
|
|
47
|
+
timeMode: 24
|
|
48
|
+
};
|
|
39
49
|
/**
|
|
40
50
|
* @desc 录像设计的时间全部需要到毫秒
|
|
41
51
|
* @param param0
|
|
@@ -50,18 +60,10 @@ function RecordPlayer(_ref) {
|
|
|
50
60
|
queryRecord = _ref.queryRecord,
|
|
51
61
|
onIndexChange = _ref.onIndexChange,
|
|
52
62
|
onClose = _ref.onClose,
|
|
53
|
-
onCloseAll = _ref.onCloseAll
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
selectIndex: 0,
|
|
58
|
-
mode: 1,
|
|
59
|
-
currentTimes: [],
|
|
60
|
-
loading: false,
|
|
61
|
-
seekTo: 0,
|
|
62
|
-
mergeSegments: [],
|
|
63
|
-
timeMode: 24
|
|
64
|
-
}),
|
|
63
|
+
onCloseAll = _ref.onCloseAll,
|
|
64
|
+
download = _ref.download;
|
|
65
|
+
|
|
66
|
+
var _useState = useState(Object.assign({}, defaultState)),
|
|
65
67
|
_useState2 = _slicedToArray(_useState, 2),
|
|
66
68
|
state = _useState2[0],
|
|
67
69
|
setState = _useState2[1];
|
|
@@ -113,11 +115,6 @@ function RecordPlayer(_ref) {
|
|
|
113
115
|
|
|
114
116
|
return (_a = state.currentTimes[state.selectIndex]) !== null && _a !== void 0 ? _a : segmentItem.date;
|
|
115
117
|
}, [segmentItem.date, state.currentTimes, state.selectIndex]);
|
|
116
|
-
/**
|
|
117
|
-
* 专门
|
|
118
|
-
*/
|
|
119
|
-
|
|
120
|
-
useEffect(function () {}, [fit]);
|
|
121
118
|
/**
|
|
122
119
|
* @desc 用户缓存接收list的变化。
|
|
123
120
|
*/
|
|
@@ -202,7 +199,10 @@ function RecordPlayer(_ref) {
|
|
|
202
199
|
}
|
|
203
200
|
|
|
204
201
|
if (newState.hasOwnProperty('mode')) {
|
|
205
|
-
|
|
202
|
+
var newModes = _toConsumableArray(state.modes);
|
|
203
|
+
|
|
204
|
+
newModes[state.selectIndex] = newState.mode;
|
|
205
|
+
obj.modes = newModes;
|
|
206
206
|
}
|
|
207
207
|
|
|
208
208
|
if (newState.hasOwnProperty('timeMode')) {
|
|
@@ -319,7 +319,7 @@ function RecordPlayer(_ref) {
|
|
|
319
319
|
}, /*#__PURE__*/React.createElement("div", {
|
|
320
320
|
className: "player-layout"
|
|
321
321
|
}, screenList.map(function (item, index) {
|
|
322
|
-
var _a, _b, _c, _d, _e, _f;
|
|
322
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
323
323
|
|
|
324
324
|
return item.recordType === 1 ? /*#__PURE__*/React.createElement(SegmentPlayerWithExt, Object.assign({}, item, {
|
|
325
325
|
segments: ((_a = recordList[index]) === null || _a === void 0 ? void 0 : _a.segments) || [],
|
|
@@ -338,10 +338,11 @@ function RecordPlayer(_ref) {
|
|
|
338
338
|
style: {
|
|
339
339
|
width: screenType.width,
|
|
340
340
|
height: screenType.height
|
|
341
|
-
}
|
|
341
|
+
},
|
|
342
|
+
mode: (_d = item.mode) !== null && _d !== void 0 ? _d : state.modes[index]
|
|
342
343
|
})) : /*#__PURE__*/React.createElement(FrontendPlayerWithExt, Object.assign({}, item, {
|
|
343
344
|
className: state.selectIndex === index ? 'player-current-index' : '',
|
|
344
|
-
segments: ((
|
|
345
|
+
segments: ((_e = recordList[index]) === null || _e === void 0 ? void 0 : _e.segments) || [],
|
|
345
346
|
updatePlayer: function updatePlayer(player) {
|
|
346
347
|
return _updatePlayer(player, index);
|
|
347
348
|
},
|
|
@@ -352,8 +353,8 @@ function RecordPlayer(_ref) {
|
|
|
352
353
|
});
|
|
353
354
|
});
|
|
354
355
|
},
|
|
355
|
-
mode: state.
|
|
356
|
-
key: "".concat((
|
|
356
|
+
mode: (_f = item.mode) !== null && _f !== void 0 ? _f : state.modes[index],
|
|
357
|
+
key: "".concat((_g = item === null || item === void 0 ? void 0 : item.date) !== null && _g !== void 0 ? _g : '', "-").concat((_h = item.cid) !== null && _h !== void 0 ? _h : '', "-").concat(index),
|
|
357
358
|
style: {
|
|
358
359
|
width: screenType.width,
|
|
359
360
|
height: screenType.height
|
|
@@ -369,13 +370,14 @@ function RecordPlayer(_ref) {
|
|
|
369
370
|
toggleFit: toggleFit,
|
|
370
371
|
getPlayerItem: getPlayerItem,
|
|
371
372
|
screenNum: state.screenNum,
|
|
372
|
-
mode: state.
|
|
373
|
+
mode: state.modes[state.selectIndex],
|
|
373
374
|
containerRef: domRef,
|
|
374
375
|
updateState: updateState,
|
|
375
376
|
onTimeChange: onTimeChange,
|
|
376
377
|
onClose: onClose,
|
|
377
378
|
onCloseAll: onCloseAll,
|
|
378
|
-
timeMode: state.timeMode
|
|
379
|
+
timeMode: state.timeMode,
|
|
380
|
+
download: download
|
|
379
381
|
}), /*#__PURE__*/React.createElement(SegmentTimeLine, {
|
|
380
382
|
begin: timeBegin,
|
|
381
383
|
updateState: updateState,
|
|
@@ -18,6 +18,7 @@ interface IToolsProps {
|
|
|
18
18
|
onClose?: () => void;
|
|
19
19
|
onCloseAll?: () => void;
|
|
20
20
|
timeMode: number;
|
|
21
|
+
download?: () => void;
|
|
21
22
|
}
|
|
22
|
-
declare function RecordTools({ containerRef, updateState, screenNum, timeMode, getPlayerItem, mode, toggleFit, fit, time, onTimeChange, onClose, onCloseAll }: IToolsProps): JSX.Element;
|
|
23
|
+
declare function RecordTools({ containerRef, updateState, download, screenNum, timeMode, getPlayerItem, mode, toggleFit, fit, time, onTimeChange, onClose, onCloseAll, }: IToolsProps): JSX.Element;
|
|
23
24
|
export default RecordTools;
|
|
@@ -22,6 +22,7 @@ import TimeMode from './TimeMode';
|
|
|
22
22
|
function RecordTools(_ref) {
|
|
23
23
|
var containerRef = _ref.containerRef,
|
|
24
24
|
updateState = _ref.updateState,
|
|
25
|
+
download = _ref.download,
|
|
25
26
|
screenNum = _ref.screenNum,
|
|
26
27
|
timeMode = _ref.timeMode,
|
|
27
28
|
getPlayerItem = _ref.getPlayerItem,
|
|
@@ -84,37 +85,56 @@ function RecordTools(_ref) {
|
|
|
84
85
|
title: "\u91CD\u8F7D"
|
|
85
86
|
})), /*#__PURE__*/React.createElement("span", {
|
|
86
87
|
className: "player-tools-item",
|
|
87
|
-
onClick:
|
|
88
|
+
onClick: download
|
|
88
89
|
}, /*#__PURE__*/React.createElement(IconFont, {
|
|
89
|
-
type: "lm-player-
|
|
90
|
-
title: "\
|
|
90
|
+
type: "lm-player-xiazai",
|
|
91
|
+
title: "\u4E0B\u8F7D\u5F53\u524D\u5F55\u50CF"
|
|
91
92
|
})), /*#__PURE__*/React.createElement("span", {
|
|
92
|
-
className: "player-tools-item"
|
|
93
|
+
className: "player-tools-item",
|
|
94
|
+
onClick: function onClick() {
|
|
95
|
+
return updateState({
|
|
96
|
+
mode: mode !== 2 ? 2 : 1
|
|
97
|
+
});
|
|
98
|
+
}
|
|
93
99
|
}, /*#__PURE__*/React.createElement(IconFont, {
|
|
94
|
-
|
|
95
|
-
|
|
100
|
+
style: {
|
|
101
|
+
top: 2,
|
|
102
|
+
position: 'relative',
|
|
103
|
+
left: 1
|
|
104
|
+
},
|
|
105
|
+
type: "lm-player-S_Device_shezhi",
|
|
106
|
+
title: "\u5207\u6362".concat(mode === 1 ? '插件' : '浏览器', "\u6A21\u5F0F")
|
|
96
107
|
}))), /*#__PURE__*/React.createElement("div", {
|
|
97
108
|
className: "player-tools-mid"
|
|
98
|
-
}, /*#__PURE__*/React.createElement("
|
|
109
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
99
110
|
className: "player-tools-item",
|
|
100
|
-
onClick:
|
|
101
|
-
},
|
|
102
|
-
type: "lm-player-
|
|
103
|
-
title: "\
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
111
|
+
onClick: onClose
|
|
112
|
+
}, /*#__PURE__*/React.createElement(IconFont, {
|
|
113
|
+
type: "lm-player-tingzhi",
|
|
114
|
+
title: "\u505C\u6B62",
|
|
115
|
+
style: {
|
|
116
|
+
fontSize: 16
|
|
117
|
+
}
|
|
107
118
|
})), /*#__PURE__*/React.createElement(TimeSelect, {
|
|
108
119
|
time: time,
|
|
109
120
|
onChange: onTimeChange
|
|
110
|
-
}), /*#__PURE__*/React.createElement("
|
|
121
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
111
122
|
className: "player-tools-item",
|
|
112
123
|
onClick: playToggle
|
|
113
124
|
}, player && !player.video.paused ? /*#__PURE__*/React.createElement(IconFont, {
|
|
114
125
|
type: "lm-player-Pause_Main",
|
|
115
|
-
title: "\u6682\u505C"
|
|
126
|
+
title: "\u6682\u505C",
|
|
127
|
+
style: {
|
|
128
|
+
fontSize: 22
|
|
129
|
+
}
|
|
116
130
|
}) : /*#__PURE__*/React.createElement(IconFont, {
|
|
117
|
-
|
|
131
|
+
style: {
|
|
132
|
+
fontSize: 17,
|
|
133
|
+
position: 'relative',
|
|
134
|
+
left: 2,
|
|
135
|
+
top: 2
|
|
136
|
+
},
|
|
137
|
+
type: "lm-player-bofang",
|
|
118
138
|
title: "\u64AD\u653E"
|
|
119
139
|
}))), /*#__PURE__*/React.createElement("div", {
|
|
120
140
|
className: "player-tools-right"
|
|
@@ -122,26 +142,16 @@ function RecordTools(_ref) {
|
|
|
122
142
|
className: "player-tools-item",
|
|
123
143
|
onClick: onCloseAll
|
|
124
144
|
}, /*#__PURE__*/React.createElement(IconFont, {
|
|
125
|
-
type: "lm-player-
|
|
145
|
+
type: "lm-player-quanbuguanbi",
|
|
126
146
|
title: "\u5173\u95ED\u6240\u6709"
|
|
127
|
-
})), /*#__PURE__*/React.createElement("span", {
|
|
128
|
-
className: "player-tools-item",
|
|
129
|
-
onClick: function onClick() {
|
|
130
|
-
return updateState({
|
|
131
|
-
mode: mode === 1 ? 2 : 1
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
}, /*#__PURE__*/React.createElement(IconFont, {
|
|
135
|
-
type: "lm-player-YesorNo_No_Dark",
|
|
136
|
-
title: "\u5207\u6362".concat(mode === 1 ? '插件' : '浏览器', "\u6A21\u5F0F")
|
|
137
147
|
})), /*#__PURE__*/React.createElement("span", {
|
|
138
148
|
className: "player-tools-item",
|
|
139
149
|
onClick: toggleFit
|
|
140
150
|
}, fit === 'fill' ? /*#__PURE__*/React.createElement(IconFont, {
|
|
141
|
-
type: "lm-player-
|
|
151
|
+
type: "lm-player-huamianshiying",
|
|
142
152
|
title: "\u81EA\u9002\u5E94"
|
|
143
153
|
}) : /*#__PURE__*/React.createElement(IconFont, {
|
|
144
|
-
type: "lm-player-
|
|
154
|
+
type: "lm-player-huamianshiying",
|
|
145
155
|
title: "\u586B\u5145"
|
|
146
156
|
})), /*#__PURE__*/React.createElement(ScreenSelect, {
|
|
147
157
|
screenNum: screenNum,
|
|
@@ -150,10 +160,10 @@ function RecordTools(_ref) {
|
|
|
150
160
|
className: "player-tools-item",
|
|
151
161
|
onClick: toggleFullscreen
|
|
152
162
|
}, isFullscreen ? /*#__PURE__*/React.createElement(IconFont, {
|
|
153
|
-
type: "lm-player-
|
|
163
|
+
type: "lm-player-quanping",
|
|
154
164
|
title: "\u5168\u5C4F"
|
|
155
165
|
}) : /*#__PURE__*/React.createElement(IconFont, {
|
|
156
|
-
type: "lm-player-
|
|
166
|
+
type: "lm-player-quanping",
|
|
157
167
|
title: "\u5168\u5C4F"
|
|
158
168
|
})), /*#__PURE__*/React.createElement(TimeMode, {
|
|
159
169
|
timeMode: timeMode,
|
|
@@ -1,28 +1,49 @@
|
|
|
1
|
-
import "antd/lib/
|
|
2
|
-
import
|
|
3
|
-
import React from 'react';
|
|
1
|
+
import "antd/lib/select/style";
|
|
2
|
+
import _Select from "antd/lib/select";
|
|
3
|
+
import React, { useMemo } from 'react';
|
|
4
|
+
import CustomRenderSelect from '../CustomRenderSelect';
|
|
4
5
|
import { ScreenType } from './utils';
|
|
6
|
+
import IconFont from '../Player/iconfont';
|
|
5
7
|
|
|
6
8
|
function ScreenSelect(_ref) {
|
|
7
9
|
var screenNum = _ref.screenNum,
|
|
8
10
|
updateState = _ref.updateState;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
return
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
11
|
+
var icon = useMemo(function () {
|
|
12
|
+
return ScreenType.find(function (v) {
|
|
13
|
+
return v.name === screenNum;
|
|
14
|
+
}).icon;
|
|
15
|
+
}, []);
|
|
16
|
+
return /*#__PURE__*/React.createElement(CustomRenderSelect, {
|
|
17
|
+
value: screenNum,
|
|
18
|
+
dropdownClassName: "custom-select-dropdown ",
|
|
19
|
+
customRender: function customRender() {
|
|
20
|
+
return /*#__PURE__*/React.createElement("span", {
|
|
21
|
+
className: "select-current-screen-item"
|
|
22
|
+
}, /*#__PURE__*/React.createElement(IconFont, {
|
|
23
|
+
type: icon
|
|
24
|
+
}));
|
|
25
|
+
},
|
|
26
|
+
onChange: function onChange(v) {
|
|
27
|
+
return updateState({
|
|
28
|
+
screenNum: v
|
|
29
|
+
});
|
|
30
|
+
},
|
|
31
|
+
placement: "topLeft"
|
|
32
|
+
}, ScreenType.map(function (item) {
|
|
33
|
+
return /*#__PURE__*/React.createElement(_Select.Option, {
|
|
34
|
+
key: "".concat(item.name),
|
|
35
|
+
value: item.name
|
|
36
|
+
}, /*#__PURE__*/React.createElement("span", {
|
|
37
|
+
style: {
|
|
38
|
+
paddingRight: 4,
|
|
39
|
+
color: 'var(--icon)',
|
|
40
|
+
position: 'relative',
|
|
41
|
+
top: 1
|
|
42
|
+
}
|
|
43
|
+
}, /*#__PURE__*/React.createElement(IconFont, {
|
|
44
|
+
type: item.icon
|
|
45
|
+
})), item.name, "\u5206\u5C4F");
|
|
46
|
+
}));
|
|
26
47
|
}
|
|
27
48
|
|
|
28
49
|
export default ScreenSelect;
|
|
@@ -9,5 +9,5 @@ interface ISegmentTimeLineProps {
|
|
|
9
9
|
timeMode: number;
|
|
10
10
|
}) => void;
|
|
11
11
|
}
|
|
12
|
-
declare function SegmentTimeLine({ begin, timeCell, onTimeChange, timeMode }: ISegmentTimeLineProps): JSX.Element;
|
|
12
|
+
declare function SegmentTimeLine({ begin, timeCell, onTimeChange, timeMode, updateState }: ISegmentTimeLineProps): JSX.Element;
|
|
13
13
|
export default SegmentTimeLine;
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import _useUnmount from "ahooks/es/useUnmount";
|
|
2
|
+
import _useUpdateEffect from "ahooks/es/useUpdateEffect";
|
|
1
3
|
import _useThrottleFn2 from "ahooks/es/useThrottleFn";
|
|
2
4
|
import _useSize from "ahooks/es/useSize";
|
|
3
5
|
import moment from 'moment';
|
|
@@ -8,8 +10,10 @@ function SegmentTimeLine(_ref) {
|
|
|
8
10
|
var begin = _ref.begin,
|
|
9
11
|
timeCell = _ref.timeCell,
|
|
10
12
|
onTimeChange = _ref.onTimeChange,
|
|
11
|
-
timeMode = _ref.timeMode
|
|
13
|
+
timeMode = _ref.timeMode,
|
|
14
|
+
updateState = _ref.updateState;
|
|
12
15
|
var ref = useRef();
|
|
16
|
+
var timeSliderRef = useRef();
|
|
13
17
|
|
|
14
18
|
var size = _useSize(ref);
|
|
15
19
|
|
|
@@ -24,17 +28,32 @@ function SegmentTimeLine(_ref) {
|
|
|
24
28
|
minutes: 0,
|
|
25
29
|
seconds: 0
|
|
26
30
|
}).valueOf();
|
|
27
|
-
|
|
31
|
+
timeSliderRef.current = new TimeSlider(ref.current, {
|
|
28
32
|
onTimeChange: run,
|
|
29
33
|
start_timestamp: time - timeMode / 2 * 3600 * 1000,
|
|
30
34
|
current_timestamp: time,
|
|
31
35
|
timecell: timeCell,
|
|
32
|
-
hours_per_ruler: timeMode
|
|
36
|
+
hours_per_ruler: timeMode,
|
|
37
|
+
onHoursPerChange: function onHoursPerChange(hour) {
|
|
38
|
+
return updateState({
|
|
39
|
+
timeMode: hour
|
|
40
|
+
});
|
|
41
|
+
}
|
|
33
42
|
});
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
43
|
+
}, [begin, timeCell, size === null || size === void 0 ? void 0 : size.width, run]);
|
|
44
|
+
/**
|
|
45
|
+
* hour变化更新时间轴而不是重绘
|
|
46
|
+
*/
|
|
47
|
+
|
|
48
|
+
_useUpdateEffect(function () {
|
|
49
|
+
return timeSliderRef.current.drawHourChange(timeMode);
|
|
50
|
+
}, [timeMode]);
|
|
51
|
+
|
|
52
|
+
_useUnmount(function () {
|
|
53
|
+
timeSliderRef.current.destory();
|
|
54
|
+
timeSliderRef.current = null;
|
|
55
|
+
});
|
|
56
|
+
|
|
38
57
|
return /*#__PURE__*/React.createElement("div", {
|
|
39
58
|
className: "record-time-line"
|
|
40
59
|
}, /*#__PURE__*/React.createElement("canvas", {
|
|
@@ -10,13 +10,19 @@ function TimeMode(_ref) {
|
|
|
10
10
|
value: timeMode,
|
|
11
11
|
onChange: onChange,
|
|
12
12
|
className: "time-mode-select",
|
|
13
|
-
dropdownClassName: "
|
|
13
|
+
dropdownClassName: "custom-select-dropdown",
|
|
14
14
|
placement: "topLeft"
|
|
15
15
|
}, TimeModeLibs.map(function (item) {
|
|
16
16
|
return /*#__PURE__*/React.createElement(_Select.Option, {
|
|
17
17
|
value: item.name,
|
|
18
18
|
key: item.name
|
|
19
|
-
},
|
|
19
|
+
}, /*#__PURE__*/React.createElement("span", {
|
|
20
|
+
style: {
|
|
21
|
+
display: 'inline-block',
|
|
22
|
+
width: 20,
|
|
23
|
+
textAlign: 'center'
|
|
24
|
+
}
|
|
25
|
+
}, item.name), "\u5C0F\u65F6");
|
|
20
26
|
}));
|
|
21
27
|
}
|
|
22
28
|
|
|
@@ -5,6 +5,7 @@ export interface ITimeSliderOptions {
|
|
|
5
5
|
timecell?: TimeCellItem[];
|
|
6
6
|
current_timestamp?: number;
|
|
7
7
|
onTimeChange?: (time: number, outTimeline?: boolean) => void;
|
|
8
|
+
onHoursPerChange?: (hour: number) => void;
|
|
8
9
|
}
|
|
9
10
|
export declare type TimeCellItem = ISegmentType;
|
|
10
11
|
export default class TimeSlider {
|
|
@@ -115,6 +116,7 @@ export default class TimeSlider {
|
|
|
115
116
|
* 滚轮放大缩小,以时间轴中心为准 mousewheel事件
|
|
116
117
|
*/
|
|
117
118
|
mousewheelFunc: (event: any) => void;
|
|
119
|
+
drawHourChange(hour: number): void;
|
|
118
120
|
/**
|
|
119
121
|
* 获取鼠标posx
|
|
120
122
|
* @param {*} e
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import _nextTick from "@cloud-app-dev/utils/es/nextTick";
|
|
2
|
+
|
|
1
3
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
2
4
|
|
|
3
5
|
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
@@ -5,6 +7,7 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+
|
|
|
5
7
|
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
6
8
|
|
|
7
9
|
import moment from 'moment';
|
|
10
|
+
var hours = [1, 6, 12, 24];
|
|
8
11
|
var currentColor = '#FF000A';
|
|
9
12
|
var normalLineColor = '#ffffff';
|
|
10
13
|
var hoverLineColor = '#319BFF';
|
|
@@ -177,24 +180,33 @@ var TimeSlider = /*#__PURE__*/function () {
|
|
|
177
180
|
var middle_time = _this.start_timestamp + _this.hours_per_ruler * 3600 * 1000 / 2; //ms 记住当前中间的时间
|
|
178
181
|
|
|
179
182
|
if (delta < 0) {
|
|
180
|
-
|
|
183
|
+
// 缩小
|
|
184
|
+
var index = hours.indexOf(_this.zoom);
|
|
181
185
|
|
|
182
|
-
if (
|
|
183
|
-
_this.zoom =
|
|
186
|
+
if (index === hours.length - 1) {
|
|
187
|
+
_this.zoom = hours[index];
|
|
188
|
+
} else {
|
|
189
|
+
_this.zoom = hours[index + 1];
|
|
184
190
|
}
|
|
185
191
|
|
|
186
192
|
_this.hours_per_ruler = _this.zoom;
|
|
187
193
|
} else if (delta > 0) {
|
|
188
194
|
// 放大
|
|
189
|
-
|
|
195
|
+
var _index = hours.indexOf(_this.zoom);
|
|
190
196
|
|
|
191
|
-
if (
|
|
192
|
-
_this.zoom =
|
|
197
|
+
if (_index === 0) {
|
|
198
|
+
_this.zoom = hours[0];
|
|
199
|
+
} else {
|
|
200
|
+
_this.zoom = hours[_index - 1];
|
|
193
201
|
}
|
|
194
202
|
|
|
195
203
|
_this.hours_per_ruler = _this.zoom;
|
|
196
204
|
}
|
|
197
205
|
|
|
206
|
+
_nextTick(function () {
|
|
207
|
+
return _this.options.onHoursPerChange && _this.options.onHoursPerChange(_this.hours_per_ruler);
|
|
208
|
+
});
|
|
209
|
+
|
|
198
210
|
_this.clearCanvas();
|
|
199
211
|
|
|
200
212
|
_this.start_timestamp = middle_time - _this.hours_per_ruler * 3600 * 1000 / 2; //start_timestamp = 当前中间的时间 - zoom/2
|
|
@@ -512,6 +524,17 @@ var TimeSlider = /*#__PURE__*/function () {
|
|
|
512
524
|
}
|
|
513
525
|
}
|
|
514
526
|
}
|
|
527
|
+
}, {
|
|
528
|
+
key: "drawHourChange",
|
|
529
|
+
value: function drawHourChange(hour) {
|
|
530
|
+
var middle_time = this.start_timestamp + this.hours_per_ruler * 3600 * 1000 / 2; //ms 记住当前中间的时间
|
|
531
|
+
|
|
532
|
+
this.hours_per_ruler = this.zoom = hour;
|
|
533
|
+
this.clearCanvas();
|
|
534
|
+
this.start_timestamp = middle_time - this.hours_per_ruler * 3600 * 1000 / 2; //start_timestamp = 当前中间的时间 - zoom/2
|
|
535
|
+
|
|
536
|
+
this.init(this.start_timestamp, this.timecell, true);
|
|
537
|
+
}
|
|
515
538
|
/**
|
|
516
539
|
* 清除canvas 每次重新绘制需要先清除
|
|
517
540
|
*/
|
|
@@ -24,8 +24,6 @@
|
|
|
24
24
|
position: relative;
|
|
25
25
|
}
|
|
26
26
|
.split-screen-player-wrapper .player-record-time {
|
|
27
|
-
width: 100%;
|
|
28
|
-
height: 100%;
|
|
29
27
|
text-align: center;
|
|
30
28
|
background-color: var(--gray11);
|
|
31
29
|
line-height: 42px;
|
|
@@ -69,7 +67,8 @@
|
|
|
69
67
|
color: var(--gray1);
|
|
70
68
|
text-align: center;
|
|
71
69
|
cursor: pointer;
|
|
72
|
-
margin-right:
|
|
70
|
+
margin-right: 10px;
|
|
71
|
+
display: inline-block;
|
|
73
72
|
}
|
|
74
73
|
.split-screen-player-wrapper .player-tools .player-tools-item .lm-player-iconfont {
|
|
75
74
|
font-size: 20px;
|
|
@@ -78,6 +77,23 @@
|
|
|
78
77
|
background-color: var(--gray11);
|
|
79
78
|
border-radius: var(--radius1);
|
|
80
79
|
}
|
|
80
|
+
.split-screen-player-wrapper .player-tools .select-current-screen-item {
|
|
81
|
+
font-size: 18px;
|
|
82
|
+
width: 32px;
|
|
83
|
+
height: 32px;
|
|
84
|
+
color: var(--gray1);
|
|
85
|
+
text-align: center;
|
|
86
|
+
cursor: pointer;
|
|
87
|
+
margin-right: 6px;
|
|
88
|
+
display: inline-block;
|
|
89
|
+
}
|
|
90
|
+
.split-screen-player-wrapper .player-tools .select-current-screen-item .lm-player-iconfont {
|
|
91
|
+
font-size: 20px;
|
|
92
|
+
}
|
|
93
|
+
.split-screen-player-wrapper .player-tools .select-current-screen-item:hover {
|
|
94
|
+
background-color: var(--gray11);
|
|
95
|
+
border-radius: var(--radius1);
|
|
96
|
+
}
|
|
81
97
|
.split-screen-player-wrapper.split-screen-player-wrapper-record .record-time-line {
|
|
82
98
|
width: 100%;
|
|
83
99
|
height: 46px;
|
|
@@ -105,20 +121,20 @@
|
|
|
105
121
|
justify-content: space-around;
|
|
106
122
|
align-items: center;
|
|
107
123
|
}
|
|
108
|
-
.time-mode-select {
|
|
124
|
+
.cloudapp-select.time-mode-select {
|
|
109
125
|
font-size: var(--fs-small);
|
|
110
126
|
color: var(--gray1);
|
|
111
127
|
}
|
|
112
|
-
.time-mode-select .cloudapp-select-selector {
|
|
113
|
-
background-color: transparent
|
|
114
|
-
border-radius: var(--radius1)
|
|
128
|
+
.cloudapp-select.time-mode-select .cloudapp-select-selector {
|
|
129
|
+
background-color: transparent;
|
|
130
|
+
border-radius: var(--radius1);
|
|
115
131
|
}
|
|
116
|
-
.time-mode-select .anticon {
|
|
132
|
+
.cloudapp-select.time-mode-select .anticon {
|
|
117
133
|
color: var(--gray1);
|
|
118
134
|
}
|
|
119
|
-
.
|
|
135
|
+
.custom-select-dropdown {
|
|
120
136
|
font-size: var(--fs-small);
|
|
121
137
|
}
|
|
122
|
-
.
|
|
138
|
+
.custom-select-dropdown .cloudapp-select-item {
|
|
123
139
|
font-size: var(--fs-small);
|
|
124
140
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import { PlayModeType } from '../PlayerExt';
|
|
2
3
|
import { ISegmentType } from '../Player/player';
|
|
3
4
|
|
|
4
5
|
export type RecordItem = {
|
|
@@ -8,6 +9,7 @@ export type RecordItem = {
|
|
|
8
9
|
segments?: ISegmentType[];
|
|
9
10
|
url?: string;
|
|
10
11
|
recordType?: 1 | 2; //1云录像 2前端录像
|
|
12
|
+
mode?: PlayModeType;
|
|
11
13
|
};
|
|
12
14
|
|
|
13
15
|
export interface IRecordPlayerProps {
|
|
@@ -34,8 +36,9 @@ export interface IRecordPlayerProps {
|
|
|
34
36
|
*/
|
|
35
37
|
onCloseAll?: () => void;
|
|
36
38
|
/**
|
|
37
|
-
*
|
|
39
|
+
* 录像下载回调
|
|
38
40
|
*/
|
|
41
|
+
download?: () => void;
|
|
39
42
|
}
|
|
40
43
|
|
|
41
44
|
export interface IRecordPlayerState {
|
|
@@ -52,7 +55,7 @@ export interface IRecordPlayerState {
|
|
|
52
55
|
/**
|
|
53
56
|
* 插件OR浏览器
|
|
54
57
|
*/
|
|
55
|
-
|
|
58
|
+
modes: PlayModeType[];
|
|
56
59
|
|
|
57
60
|
/**
|
|
58
61
|
* 时间轴开始时间
|
|
@@ -77,12 +80,13 @@ export interface IRecordPlayerState {
|
|
|
77
80
|
/**
|
|
78
81
|
* 录像时间轴单页绘制时长单位(hour)
|
|
79
82
|
*/
|
|
80
|
-
timeMode:number
|
|
83
|
+
timeMode: number;
|
|
81
84
|
}
|
|
82
85
|
|
|
83
86
|
export type ScreenItemLivePlayerType = {
|
|
84
87
|
url?: string;
|
|
85
88
|
type?: 'flv' | 'hls' | 'native';
|
|
89
|
+
mode?: PlayModeType;
|
|
86
90
|
};
|
|
87
91
|
|
|
88
92
|
export interface ILivePlayerProps {
|
|
@@ -107,7 +111,7 @@ export interface ILivePlayerProps {
|
|
|
107
111
|
export interface ILivePlayerState {
|
|
108
112
|
screenNum: number;
|
|
109
113
|
selectIndex: number;
|
|
110
|
-
|
|
114
|
+
modes: PlayModeType[];
|
|
111
115
|
}
|
|
112
116
|
|
|
113
117
|
export const RecordPlayer: React.FC<IRecordPlayerProps>;
|