@cloud-app-dev/vidc 3.0.17 → 3.0.19
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 +1 -1
- package/es/CustomRenderSelect/index.d.ts +1 -1
- package/es/CustomRenderSelect/index.js +3 -3
- package/es/LoaderScript/utils.js +1 -0
- package/es/Map/LevelCenter/DragMarker/index.d.ts +1 -4
- package/es/Map/LevelCenter/DragMarker/index.js +2 -5
- package/es/Map/LevelCenter/index.js +13 -2
- package/es/Map/SinglePoint/index.d.ts +10 -3
- package/es/Map/SinglePoint/index.js +37 -15
- package/es/Map/hook/useMapEvent.js +9 -8
- package/es/Map/index.d.ts +1 -1
- package/es/Player/api/index.d.ts +5 -1
- package/es/Player/api/index.js +36 -24
- package/es/Player/context.d.ts +21 -0
- package/es/Player/context.js +16 -0
- package/es/Player/contraller_bar/contraller_event.d.ts +1 -4
- package/es/Player/contraller_bar/contraller_event.js +37 -28
- package/es/Player/contraller_bar/index.d.ts +2 -7
- package/es/Player/contraller_bar/index.js +4 -12
- package/es/Player/contraller_bar/left_bar.d.ts +2 -7
- package/es/Player/contraller_bar/left_bar.js +29 -33
- package/es/Player/contraller_bar/right_bar.d.ts +1 -6
- package/es/Player/contraller_bar/right_bar.js +6 -3
- package/es/Player/contraller_bar/time.d.ts +3 -0
- package/es/Player/contraller_bar/time.js +34 -0
- package/es/Player/contraller_bar/useBarStatus.js +17 -24
- package/es/Player/contraller_bar/volume.d.ts +9 -0
- package/es/Player/contraller_bar/volume.js +86 -0
- package/es/Player/demo.js +5 -1
- package/es/Player/event/errorEvent.js +34 -43
- package/es/Player/event/eventName.d.ts +17 -2
- package/es/Player/event/eventName.js +5 -1
- package/es/Player/event/index.d.ts +2 -0
- package/es/Player/event/index.js +55 -3
- package/es/Player/fps_play.d.ts +11 -0
- package/es/Player/fps_play.js +99 -0
- package/es/Player/frontend_player.js +0 -2
- package/es/Player/frontend_timeline.d.ts +1 -5
- package/es/Player/frontend_timeline.js +14 -11
- package/es/Player/live_heart.js +1 -1
- package/es/Player/message.js +69 -84
- package/es/Player/player.d.ts +15 -15
- package/es/Player/segment_player.js +12 -29
- package/es/Player/segment_timeline.d.ts +1 -6
- package/es/Player/segment_timeline.js +56 -11
- package/es/Player/single_player.js +80 -35
- package/es/Player/style/bar.css +2 -1
- package/es/Player/style/iconfont.js +15 -16
- package/es/Player/style/index.css +8 -0
- package/es/Player/style/timeline.css +7 -0
- package/es/Player/style/volume.css +19 -0
- package/es/Player/timeline.d.ts +1 -1
- package/es/Player/timeline.js +26 -37
- package/es/Player/util.d.ts +2 -1
- package/es/Player/util.js +10 -6
- package/es/ScreenPlayer/Live.js +0 -1
- package/es/ScreenPlayer/LiveTools.js +7 -27
- package/es/ScreenPlayer/PlayerWithExt.d.ts +1 -1
- package/es/ScreenPlayer/PlayerWithExt.js +2 -4
- package/es/ScreenPlayer/Record.js +0 -1
- package/es/ScreenPlayer/RecordTools.js +31 -16
- package/es/ScreenPlayer/ScreenSelect.js +2 -2
- package/es/ScreenPlayer/TimeMode.js +1 -1
- package/es/ScreenPlayer/demo2.js +1 -1
- package/es/ScreenPlayer/index.css +17 -8
- package/es/ScreenPlayer/utils.js +4 -4
- package/es/index.d.ts +1 -0
- package/es/index.js +1 -0
- package/es/useRafInterval/index.d.ts +5 -0
- package/es/useRafInterval/index.js +94 -0
- package/icon-fix.js +31 -0
- package/package.json +1 -1
- package/es/Map/SinglePoint/Marker/index.d.ts +0 -7
- package/es/Map/SinglePoint/Marker/index.js +0 -29
- package/es/Player/event/browserTabEvent.d.ts +0 -9
- package/es/Player/event/browserTabEvent.js +0 -57
- package/es/ScreenPlayer/TimeSlider.d.ts +0 -129
- package/es/ScreenPlayer/TimeSlider.js +0 -556
|
@@ -0,0 +1,99 @@
|
|
|
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, useMemo, useRef, useState } from 'react';
|
|
14
|
+
import Events from './event/eventName';
|
|
15
|
+
import useRafInterval from '../useRafInterval';
|
|
16
|
+
import { useRegisterPlayerEvent } from './event';
|
|
17
|
+
import { getDomStyleValue } from './util';
|
|
18
|
+
var oneFps = 1 / 30;
|
|
19
|
+
|
|
20
|
+
function FPSPlay(_ref) {
|
|
21
|
+
var api = _ref.api,
|
|
22
|
+
event = _ref.event,
|
|
23
|
+
fpsDelay = _ref.fpsDelay,
|
|
24
|
+
fps = _ref.fps;
|
|
25
|
+
|
|
26
|
+
var _useState = useState(Date.now()),
|
|
27
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
28
|
+
forceKey = _useState2[0],
|
|
29
|
+
update = _useState2[1];
|
|
30
|
+
|
|
31
|
+
var ref = useRef(null);
|
|
32
|
+
var timerRef = useRef(null);
|
|
33
|
+
var fps_second = useMemo(function () {
|
|
34
|
+
return fps ? 1 / fps : oneFps;
|
|
35
|
+
}, [fps]);
|
|
36
|
+
useEffect(function () {
|
|
37
|
+
var fpsCapture = function fpsCapture() {
|
|
38
|
+
if (!ref.current || !event.video) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
var video = event.video;
|
|
43
|
+
var fpsTime = api.getCurrentTime() + fps_second;
|
|
44
|
+
video.currentTime = fpsTime;
|
|
45
|
+
|
|
46
|
+
if (video.currentTime >= api.getDuration()) {
|
|
47
|
+
clearInterval(timerRef.current);
|
|
48
|
+
video.currentTime = 0;
|
|
49
|
+
event.emit(Events.PLAY_ENDED);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
var canvas = ref.current;
|
|
53
|
+
var ctx = canvas.getContext('2d');
|
|
54
|
+
|
|
55
|
+
var _video$getBoundingCli = video.getBoundingClientRect(),
|
|
56
|
+
width = _video$getBoundingCli.width,
|
|
57
|
+
height = _video$getBoundingCli.height;
|
|
58
|
+
|
|
59
|
+
canvas.width = width;
|
|
60
|
+
canvas.height = height;
|
|
61
|
+
var fit = getDomStyleValue(video, 'object-fit');
|
|
62
|
+
|
|
63
|
+
if (fit === 'fill') {
|
|
64
|
+
//全画面绘制,存在拉伸
|
|
65
|
+
ctx.drawImage(video, 0, 0, width, height);
|
|
66
|
+
} else {
|
|
67
|
+
// 自适应绘制
|
|
68
|
+
var videoWidth = video.videoWidth;
|
|
69
|
+
var videoHeight = video.videoHeight;
|
|
70
|
+
var scale = height / videoHeight;
|
|
71
|
+
var s_vw = scale * videoWidth;
|
|
72
|
+
var paddingSize = (width - s_vw) / 2;
|
|
73
|
+
ctx.drawImage(video, paddingSize, 0, s_vw, height);
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
fpsCapture();
|
|
78
|
+
timerRef.current = setInterval(fpsCapture, fpsDelay);
|
|
79
|
+
return function () {
|
|
80
|
+
clearInterval(timerRef.current);
|
|
81
|
+
};
|
|
82
|
+
}, [api, event, fpsDelay, forceKey, fps_second]);
|
|
83
|
+
useRegisterPlayerEvent(Events.CANVAS_PAUSE, function () {
|
|
84
|
+
clearInterval(timerRef.current);
|
|
85
|
+
});
|
|
86
|
+
useRegisterPlayerEvent(Events.CANVAS_PLAY, function () {
|
|
87
|
+
update(Date.now());
|
|
88
|
+
}); // TODO: 未知情况,video会自动播放,轮训检测并暂停零时解决
|
|
89
|
+
|
|
90
|
+
useRafInterval(function () {
|
|
91
|
+
return !api.paused ? api.pause() : null;
|
|
92
|
+
}, 10);
|
|
93
|
+
return /*#__PURE__*/React.createElement("canvas", {
|
|
94
|
+
className: "fps-play-canvas",
|
|
95
|
+
ref: ref
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export default FPSPlay;
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import type Api from './api';
|
|
3
|
-
import type VideoEventInstance from './event';
|
|
4
2
|
import './style/timeline.less';
|
|
5
3
|
interface ITimeLineProps {
|
|
6
|
-
api: Api;
|
|
7
|
-
event: VideoEventInstance;
|
|
8
4
|
duration: number;
|
|
9
5
|
begin: number;
|
|
10
6
|
end: number;
|
|
11
7
|
onSeek?: (time: number) => void;
|
|
12
8
|
url?: string;
|
|
13
9
|
}
|
|
14
|
-
declare function FrontendTimeLine({
|
|
10
|
+
declare function FrontendTimeLine({ duration, begin, end, onSeek, url }: ITimeLineProps): JSX.Element;
|
|
15
11
|
export default FrontendTimeLine;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import _useUpdateEffect from "ahooks/es/useUpdateEffect";
|
|
2
2
|
|
|
3
3
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
4
4
|
|
|
@@ -12,21 +12,25 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
|
|
|
12
12
|
|
|
13
13
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
14
14
|
|
|
15
|
-
import React, { useCallback, useEffect, useMemo, useState, startTransition, useRef } from 'react';
|
|
15
|
+
import React, { useCallback, useEffect, useMemo, useState, startTransition, useRef, useContext } from 'react';
|
|
16
16
|
import useBarStatus from './contraller_bar/useBarStatus';
|
|
17
17
|
import { useTimes } from './timeline';
|
|
18
18
|
import { FMT } from './util';
|
|
19
19
|
import moment from 'moment';
|
|
20
|
+
import { Context } from './context';
|
|
20
21
|
import "./style/timeline.css";
|
|
21
22
|
|
|
22
23
|
function FrontendTimeLine(_ref) {
|
|
23
|
-
var
|
|
24
|
-
event = _ref.event,
|
|
25
|
-
duration = _ref.duration,
|
|
24
|
+
var duration = _ref.duration,
|
|
26
25
|
begin = _ref.begin,
|
|
27
26
|
end = _ref.end,
|
|
28
27
|
onSeek = _ref.onSeek,
|
|
29
28
|
url = _ref.url;
|
|
29
|
+
|
|
30
|
+
var _useContext = useContext(Context),
|
|
31
|
+
api = _useContext.api,
|
|
32
|
+
event = _useContext.event;
|
|
33
|
+
|
|
30
34
|
var lastSeekCTimeRef = useRef(0); // time 是记录seek时跳了多少
|
|
31
35
|
|
|
32
36
|
var _useState = useState({
|
|
@@ -43,13 +47,12 @@ function FrontendTimeLine(_ref) {
|
|
|
43
47
|
|
|
44
48
|
var _useTimes = useTimes(api, event),
|
|
45
49
|
_useTimes2 = _slicedToArray(_useTimes, 1),
|
|
46
|
-
currentTime = _useTimes2[0];
|
|
50
|
+
currentTime = _useTimes2[0]; // eslint-disable-next-line no-sequences
|
|
47
51
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}, [currentTime, url]);
|
|
52
|
+
|
|
53
|
+
_useUpdateEffect(function () {
|
|
54
|
+
return lastSeekCTimeRef.current = currentTime, undefined;
|
|
55
|
+
}, [currentTime]);
|
|
53
56
|
|
|
54
57
|
var rTime = useMemo(function () {
|
|
55
58
|
return state.time + currentTime + lastSeekCTimeRef.current;
|
package/es/Player/live_heart.js
CHANGED
package/es/Player/message.js
CHANGED
|
@@ -10,8 +10,9 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
|
|
|
10
10
|
|
|
11
11
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
12
12
|
|
|
13
|
-
import React, {
|
|
13
|
+
import React, { useState, useMemo, useRef } from 'react';
|
|
14
14
|
import IconFont from './iconfont';
|
|
15
|
+
import { useRegisterPlayerEvent, useVideoEvent } from './event';
|
|
15
16
|
import EventName from './event/eventName';
|
|
16
17
|
import "./style/message.css";
|
|
17
18
|
|
|
@@ -42,99 +43,83 @@ function VideoMessage(_ref) {
|
|
|
42
43
|
|
|
43
44
|
return '';
|
|
44
45
|
}, [state.errorTimer, state.status]);
|
|
45
|
-
useEffect(function () {
|
|
46
|
-
var openLoading = function openLoading() {
|
|
47
|
-
clearTimeout(timeRef.current);
|
|
48
|
-
timeRef.current = setTimeout(function () {
|
|
49
|
-
return setState(function (old) {
|
|
50
|
-
return Object.assign(Object.assign({}, old), {
|
|
51
|
-
loading: true
|
|
52
|
-
});
|
|
53
|
-
});
|
|
54
|
-
}, 200);
|
|
55
|
-
};
|
|
56
46
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
47
|
+
var openLoading = function openLoading() {
|
|
48
|
+
clearTimeout(timeRef.current);
|
|
49
|
+
timeRef.current = setTimeout(function () {
|
|
50
|
+
return setState(function (old) {
|
|
60
51
|
return Object.assign(Object.assign({}, old), {
|
|
61
|
-
loading:
|
|
52
|
+
loading: true
|
|
62
53
|
});
|
|
63
54
|
});
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
loading: true
|
|
73
|
-
};
|
|
55
|
+
}, 200);
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
var closeLoading = function closeLoading() {
|
|
59
|
+
clearTimeout(timeRef.current);
|
|
60
|
+
setState(function (old) {
|
|
61
|
+
return Object.assign(Object.assign({}, old), {
|
|
62
|
+
loading: false
|
|
74
63
|
});
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
64
|
+
});
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
var errorReload = function errorReload(timer) {
|
|
68
|
+
clearTimeout(timeRef.current);
|
|
69
|
+
setState(function () {
|
|
70
|
+
return {
|
|
71
|
+
status: 'reload',
|
|
72
|
+
errorTimer: timer,
|
|
73
|
+
loading: true
|
|
74
|
+
};
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
var reloadFail = function reloadFail() {
|
|
79
|
+
return setState(function (old) {
|
|
80
|
+
return Object.assign(Object.assign({}, old), {
|
|
81
|
+
status: 'fail'
|
|
82
82
|
});
|
|
83
|
-
};
|
|
83
|
+
});
|
|
84
|
+
};
|
|
84
85
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
});
|
|
86
|
+
var reloadSuccess = function reloadSuccess() {
|
|
87
|
+
return setState(function (old) {
|
|
88
|
+
return Object.assign(Object.assign({}, old), {
|
|
89
|
+
status: null
|
|
90
90
|
});
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
91
|
+
});
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
var reload = function reload() {
|
|
95
|
+
return setState(function (old) {
|
|
96
|
+
return Object.assign(Object.assign({}, old), {
|
|
97
|
+
status: 'reload',
|
|
98
|
+
loading: true
|
|
99
99
|
});
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
100
|
+
});
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
var playEnd = function playEnd() {
|
|
104
|
+
clearTimeout(timeRef.current);
|
|
105
|
+
setState(function (old) {
|
|
106
|
+
return Object.assign(Object.assign({}, old), {
|
|
107
|
+
status: null,
|
|
108
|
+
loading: false
|
|
109
109
|
});
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
event.on(EventName.CLEAR_ERROR_TIMER, reloadSuccess);
|
|
124
|
-
return function () {
|
|
125
|
-
event.removeEventListener('loadstart', openLoading); // event.removeEventListener('waiting', openLoading);
|
|
126
|
-
// event.removeEventListener('seeking', openLoading)
|
|
127
|
-
|
|
128
|
-
event.removeEventListener('loadeddata', closeLoading);
|
|
129
|
-
event.removeEventListener('canplay', closeLoading);
|
|
130
|
-
event.off(EventName.ERROR_RELOAD, errorReload);
|
|
131
|
-
event.off(EventName.RELOAD_FAIL, reloadFail);
|
|
132
|
-
event.off(EventName.RELOAD_SUCCESS, reloadSuccess);
|
|
133
|
-
event.off(EventName.RELOAD, reload);
|
|
134
|
-
event.off(EventName.HISTORY_PLAY_END, playEnd);
|
|
135
|
-
event.off(EventName.CLEAR_ERROR_TIMER, reloadSuccess);
|
|
136
|
-
};
|
|
137
|
-
}, [api, event]);
|
|
110
|
+
});
|
|
111
|
+
api.pause();
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
useVideoEvent('loadstart', openLoading);
|
|
115
|
+
useVideoEvent('loadeddata', closeLoading);
|
|
116
|
+
useVideoEvent('canplay', closeLoading);
|
|
117
|
+
useRegisterPlayerEvent(EventName.ERROR_RELOAD, errorReload);
|
|
118
|
+
useRegisterPlayerEvent(EventName.RELOAD_FAIL, reloadFail);
|
|
119
|
+
useRegisterPlayerEvent(EventName.RELOAD_SUCCESS, reloadSuccess);
|
|
120
|
+
useRegisterPlayerEvent(EventName.RELOAD, reload);
|
|
121
|
+
useRegisterPlayerEvent(EventName.HISTORY_PLAY_END, playEnd);
|
|
122
|
+
useRegisterPlayerEvent(EventName.CLEAR_ERROR_TIMER, reloadSuccess);
|
|
138
123
|
var loading = state.loading,
|
|
139
124
|
status = state.status;
|
|
140
125
|
return /*#__PURE__*/React.createElement("div", {
|
package/es/Player/player.d.ts
CHANGED
|
@@ -132,6 +132,21 @@ export interface ISinglePlayerProps {
|
|
|
132
132
|
* 自定义播放器的事件
|
|
133
133
|
*/
|
|
134
134
|
playerEvents?: CustomEvent[];
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* 开启单帧播放
|
|
138
|
+
*/
|
|
139
|
+
oneFpsPlay?: boolean;
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* 获取视频针的频次 (ms)
|
|
143
|
+
*/
|
|
144
|
+
fpsDelay?: number;
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* 视频每秒多少帧,用于控制逐帧播放
|
|
148
|
+
*/
|
|
149
|
+
fps?: number;
|
|
135
150
|
}
|
|
136
151
|
|
|
137
152
|
export interface IFrontendPlayerProps extends Omit<ISinglePlayerProps, 'isLive' | 'reload'> {
|
|
@@ -173,21 +188,6 @@ export const SinglePlayer: React.FunctionComponent<ISinglePlayerProps>;
|
|
|
173
188
|
export const FrontendPlayer: React.FunctionComponent<IFrontendPlayerProps>;
|
|
174
189
|
export const SegmentPlayer: React.FunctionComponent<ISegmentPlayerProps>;
|
|
175
190
|
|
|
176
|
-
export interface EventName {
|
|
177
|
-
RELOAD: 'reload'; //手动视频重载
|
|
178
|
-
RELOAD_FAIL: 'reloadFail'; // 视频出错,重连失败
|
|
179
|
-
RELOAD_SUCCESS: 'reloadSuccess'; //视频出错,重连成功
|
|
180
|
-
ERROR: 'error'; //视频出错
|
|
181
|
-
ERROR_RELOAD: 'errorRload'; //视频出错,自动重连
|
|
182
|
-
HISTORY_PLAY_END: 'historyPlayEnd'; //历史视频列表播放结束
|
|
183
|
-
SEEK: 'seek'; //跳跃播放时间
|
|
184
|
-
TRANSFORM: 'transform'; //视频容器缩放
|
|
185
|
-
CHANGE_PLAY_INDEX: 'changePlayIndex'; //历史视频列表播放索引改变
|
|
186
|
-
HIDE_CONTRALLER: 'hideContraller';
|
|
187
|
-
SHOW_CONTRALLER: 'showContraller';
|
|
188
|
-
CLEAR_ERROR_TIMER: 'clearErrorTimer';
|
|
189
|
-
}
|
|
190
|
-
|
|
191
191
|
export type EventInfo = {
|
|
192
192
|
type: string;
|
|
193
193
|
listener: ((...args: any) => void)[];
|
|
@@ -1,14 +1,6 @@
|
|
|
1
1
|
import _useUpdate from "ahooks/es/useUpdate";
|
|
2
2
|
import _useLatest from "ahooks/es/useLatest";
|
|
3
3
|
|
|
4
|
-
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
5
|
-
|
|
6
|
-
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
7
|
-
|
|
8
|
-
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
9
|
-
|
|
10
|
-
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
11
|
-
|
|
12
4
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
13
5
|
|
|
14
6
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
@@ -26,13 +18,14 @@ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
|
|
|
26
18
|
import SinglePlayer from './single_player';
|
|
27
19
|
import SegmentTimeLine from './segment_timeline';
|
|
28
20
|
import Events from './event/eventName';
|
|
29
|
-
|
|
21
|
+
import { useRegisterPlayerEvent, useVideoEvent } from './event';
|
|
30
22
|
/**
|
|
31
23
|
* @desc 计算第一个url
|
|
32
24
|
* @param segments
|
|
33
25
|
* @param defaultIndex
|
|
34
26
|
* @returns
|
|
35
27
|
*/
|
|
28
|
+
|
|
36
29
|
function getFirstUrlIndex(segments) {
|
|
37
30
|
var defaultIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
38
31
|
|
|
@@ -94,24 +87,16 @@ function usePlayIndex(event, segments) {
|
|
|
94
87
|
}
|
|
95
88
|
}, [segments, state.index]); // 监听片段播放状态,自动跳转下一个片段
|
|
96
89
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
return
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
var fn = function fn() {
|
|
103
|
-
return setState(function (old) {
|
|
104
|
-
return Object.assign(Object.assign({}, old), {
|
|
105
|
-
index: old.index + 1 < segments.length ? old.index + 1 : old.index
|
|
106
|
-
});
|
|
90
|
+
var endHandle = function endHandle() {
|
|
91
|
+
return setState(function (old) {
|
|
92
|
+
return Object.assign(Object.assign({}, old), {
|
|
93
|
+
index: old.index + 1 < segments.length ? old.index + 1 : old.index
|
|
107
94
|
});
|
|
108
|
-
};
|
|
95
|
+
});
|
|
96
|
+
};
|
|
109
97
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
return event.removeEventListener('ended', fn);
|
|
113
|
-
}; // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
114
|
-
}, [event, segments].concat(_toConsumableArray(deps)));
|
|
98
|
+
useVideoEvent('ended', endHandle, event);
|
|
99
|
+
useRegisterPlayerEvent(Events.PLAY_ENDED, endHandle, event);
|
|
115
100
|
return {
|
|
116
101
|
index: state.index,
|
|
117
102
|
setIndex: function setIndex(i) {
|
|
@@ -214,13 +199,10 @@ function SegmentPlayer(_a) {
|
|
|
214
199
|
var hasReady = api && event;
|
|
215
200
|
var timeline = customTimeLine !== null && customTimeLine !== void 0 ? customTimeLine : /*#__PURE__*/React.createElement(SegmentTimeLine, {
|
|
216
201
|
begin: begin,
|
|
217
|
-
api: api,
|
|
218
|
-
event: event,
|
|
219
202
|
seekTo: seekTo,
|
|
220
203
|
index: index,
|
|
221
204
|
segments: segments,
|
|
222
|
-
duration: duration
|
|
223
|
-
setIndex: setIndex
|
|
205
|
+
duration: duration
|
|
224
206
|
});
|
|
225
207
|
var onInit = useCallback(function () {
|
|
226
208
|
update();
|
|
@@ -229,6 +211,7 @@ function SegmentPlayer(_a) {
|
|
|
229
211
|
return /*#__PURE__*/React.createElement(SinglePlayer, Object.assign({
|
|
230
212
|
ref: playRef,
|
|
231
213
|
url: url,
|
|
214
|
+
isLive: false,
|
|
232
215
|
onCanPlayerInit: onInit,
|
|
233
216
|
reload: reload,
|
|
234
217
|
extActions: {
|
|
@@ -1,17 +1,12 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import type Api from './api';
|
|
3
|
-
import type VideoEventInstance from './event';
|
|
4
2
|
import type { ISegmentType } from './player';
|
|
5
3
|
import './style/timeline.less';
|
|
6
4
|
interface ITimeLineProps {
|
|
7
|
-
api: Api;
|
|
8
|
-
event: VideoEventInstance;
|
|
9
5
|
index: number;
|
|
10
6
|
segments: ISegmentType[];
|
|
11
7
|
duration: number;
|
|
12
|
-
setIndex: (i: number) => void;
|
|
13
8
|
begin: number;
|
|
14
9
|
seekTo: (time: number) => void;
|
|
15
10
|
}
|
|
16
|
-
declare function SegmentTimeLine({
|
|
11
|
+
declare function SegmentTimeLine({ index, segments, duration, begin, seekTo }: ITimeLineProps): JSX.Element;
|
|
17
12
|
export default SegmentTimeLine;
|
|
@@ -13,25 +13,39 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
|
|
|
13
13
|
|
|
14
14
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
15
15
|
|
|
16
|
-
import React, { useCallback, useMemo } from 'react';
|
|
16
|
+
import React, { startTransition, useCallback, useContext, useMemo, useState } from 'react';
|
|
17
17
|
import { useTimes } from './timeline';
|
|
18
18
|
import useBarStatus from './contraller_bar/useBarStatus';
|
|
19
19
|
import moment from 'moment';
|
|
20
20
|
import { FMT } from './util';
|
|
21
|
+
import { Context } from './context';
|
|
21
22
|
import "./style/timeline.css";
|
|
22
23
|
|
|
23
24
|
function SegmentTimeLine(_ref) {
|
|
24
|
-
var
|
|
25
|
-
event = _ref.event,
|
|
26
|
-
index = _ref.index,
|
|
25
|
+
var index = _ref.index,
|
|
27
26
|
segments = _ref.segments,
|
|
28
27
|
duration = _ref.duration,
|
|
29
28
|
begin = _ref.begin,
|
|
30
|
-
setIndex = _ref.setIndex,
|
|
31
29
|
seekTo = _ref.seekTo;
|
|
30
|
+
|
|
31
|
+
var _useState = useState({
|
|
32
|
+
time: 0,
|
|
33
|
+
markTime: 0,
|
|
34
|
+
left: -1,
|
|
35
|
+
visible: false
|
|
36
|
+
}),
|
|
37
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
38
|
+
state = _useState2[0],
|
|
39
|
+
setState = _useState2[1];
|
|
40
|
+
|
|
41
|
+
var _useContext = useContext(Context),
|
|
42
|
+
api = _useContext.api,
|
|
43
|
+
event = _useContext.event,
|
|
44
|
+
isFpsPlay = _useContext.isFpsPlay;
|
|
45
|
+
|
|
32
46
|
var status = useBarStatus(event);
|
|
33
47
|
|
|
34
|
-
var _useTimes = useTimes(api, event),
|
|
48
|
+
var _useTimes = useTimes(api, event, isFpsPlay),
|
|
35
49
|
_useTimes2 = _slicedToArray(_useTimes, 2),
|
|
36
50
|
currentTime = _useTimes2[0],
|
|
37
51
|
buffered = _useTimes2[1];
|
|
@@ -62,9 +76,31 @@ function SegmentTimeLine(_ref) {
|
|
|
62
76
|
var duration = segments[i].endTime - segments[i].beginTime;
|
|
63
77
|
var currentTime = current / rect.width * duration;
|
|
64
78
|
seekTo(Math.round(currentTime + pTime));
|
|
65
|
-
}, [segments,
|
|
79
|
+
}, [segments, begin, seekTo]);
|
|
80
|
+
var onLineMouseOver = useCallback(function (e) {
|
|
81
|
+
var rect = e.currentTarget.getBoundingClientRect();
|
|
82
|
+
var left = e.pageX - rect.left;
|
|
83
|
+
var mTime = left / rect.width * duration;
|
|
84
|
+
setState(function (old) {
|
|
85
|
+
return Object.assign(Object.assign({}, old), {
|
|
86
|
+
left: left,
|
|
87
|
+
markTime: begin + mTime * 1000
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
}, [begin, duration]);
|
|
91
|
+
var onLineMouseOut = useCallback(function () {
|
|
92
|
+
return startTransition(function () {
|
|
93
|
+
return setState(function (old) {
|
|
94
|
+
return Object.assign(Object.assign({}, old), {
|
|
95
|
+
left: -1
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
}, []);
|
|
66
100
|
return /*#__PURE__*/React.createElement("div", {
|
|
67
|
-
className: "player-timeline-layout player-segment-timeline-layout ".concat(status === 0 ? 'hide-time-line' : '')
|
|
101
|
+
className: "player-timeline-layout player-segment-timeline-layout ".concat(status === 0 ? 'hide-time-line' : ''),
|
|
102
|
+
onMouseMove: onLineMouseOver,
|
|
103
|
+
onMouseOut: onLineMouseOut
|
|
68
104
|
}, /*#__PURE__*/React.createElement("div", {
|
|
69
105
|
className: "segment-line-box"
|
|
70
106
|
}, segments.map(function (v, i) {
|
|
@@ -73,7 +109,9 @@ function SegmentTimeLine(_ref) {
|
|
|
73
109
|
title: /*#__PURE__*/React.createElement(TipTitle, {
|
|
74
110
|
segments: segments,
|
|
75
111
|
index: i,
|
|
76
|
-
begin: begin
|
|
112
|
+
begin: begin,
|
|
113
|
+
current: currentTime * 1000 + begin,
|
|
114
|
+
markTime: state.markTime
|
|
77
115
|
})
|
|
78
116
|
}, /*#__PURE__*/React.createElement("div", {
|
|
79
117
|
className: "segment-line-item ".concat(!v.url ? 'segment-line-item-none' : '', " ").concat(i === segments.length - 1 ? 'last-segment-line-item' : ''),
|
|
@@ -94,13 +132,20 @@ function SegmentTimeLine(_ref) {
|
|
|
94
132
|
style: {
|
|
95
133
|
width: "".concat(playPercent, "%")
|
|
96
134
|
}
|
|
135
|
+
}), state.left !== -1 && /*#__PURE__*/React.createElement("span", {
|
|
136
|
+
className: "segment-line-mark",
|
|
137
|
+
style: {
|
|
138
|
+
left: state.left
|
|
139
|
+
}
|
|
97
140
|
})));
|
|
98
141
|
}
|
|
99
142
|
|
|
100
143
|
function TipTitle(_ref2) {
|
|
101
144
|
var index = _ref2.index,
|
|
102
145
|
segments = _ref2.segments,
|
|
103
|
-
begin = _ref2.begin
|
|
146
|
+
begin = _ref2.begin,
|
|
147
|
+
current = _ref2.current,
|
|
148
|
+
markTime = _ref2.markTime;
|
|
104
149
|
|
|
105
150
|
var _useMemo = useMemo(function () {
|
|
106
151
|
if (index === 0) {
|
|
@@ -140,7 +185,7 @@ function TipTitle(_ref2) {
|
|
|
140
185
|
style: {
|
|
141
186
|
fontWeight: 600
|
|
142
187
|
}
|
|
143
|
-
}, "\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", {
|
|
188
|
+
}, "\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, "\u523B\u5EA6\uFF1A", moment(markTime).format(FMT)), /*#__PURE__*/React.createElement("div", null, "\u5F53\u524D\uFF1A", moment(current).format(FMT)), /*#__PURE__*/React.createElement("div", null, "\u72B6\u6001\uFF1A", /*#__PURE__*/React.createElement("span", {
|
|
144
189
|
style: {
|
|
145
190
|
color: hasUrl ? 'green' : 'red'
|
|
146
191
|
}
|