@cloud-app-dev/vidc 3.0.16 → 3.0.18
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/DisableMark/index.d.ts +2 -1
- package/es/DisableMark/index.js +6 -2
- package/es/Map/BasicMap/AMapInstance.d.ts +3 -0
- package/es/Map/BasicMap/AMapInstance.js +16 -1
- package/es/Map/BasicMap/LeafletInstance.d.ts +4 -1
- package/es/Map/BasicMap/LeafletInstance.js +17 -2
- package/es/Map/LevelCenter/index.d.ts +3 -0
- package/es/Map/LevelCenter/index.js +29 -9
- package/es/Map/SinglePoint/index.js +8 -5
- package/es/Map/hook/useMapEvent.d.ts +2 -0
- package/es/Map/hook/useMapEvent.js +23 -0
- package/es/Map/interface.d.ts +3 -0
- package/es/Player/api/index.d.ts +3 -1
- package/es/Player/api/index.js +27 -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 +26 -23
- 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/useBarStatus.js +17 -24
- package/es/Player/demo.js +5 -1
- package/es/Player/event/errorEvent.d.ts +3 -3
- package/es/Player/event/errorEvent.js +39 -40
- 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 +10 -0
- package/es/Player/fps_play.js +80 -0
- package/es/Player/frontend_player.js +0 -2
- package/es/Player/frontend_timeline.d.ts +1 -5
- package/es/Player/frontend_timeline.js +8 -4
- package/es/Player/live_heart.d.ts +4 -4
- package/es/Player/live_heart.js +10 -7
- package/es/Player/message.js +69 -84
- package/es/Player/player.d.ts +10 -15
- package/es/Player/segment_player.js +13 -29
- package/es/Player/segment_timeline.d.ts +1 -6
- package/es/Player/segment_timeline.js +11 -7
- package/es/Player/single_player.js +94 -49
- package/es/Player/style/bar.css +1 -0
- package/es/Player/style/index.css +8 -0
- package/es/Player/timeline.d.ts +1 -1
- package/es/Player/timeline.js +26 -37
- package/es/Player/util.d.ts +1 -1
- package/es/Player/util.js +2 -5
- package/es/ScreenPlayer/Live.d.ts +1 -1
- package/es/ScreenPlayer/Live.js +6 -3
- package/es/ScreenPlayer/LiveTools.d.ts +9 -1
- package/es/ScreenPlayer/LiveTools.js +6 -3
- package/es/ScreenPlayer/PlayerWithExt.d.ts +1 -1
- package/es/ScreenPlayer/PlayerWithExt.js +2 -4
- package/es/ScreenPlayer/Record.d.ts +1 -1
- package/es/ScreenPlayer/Record.js +8 -4
- package/es/ScreenPlayer/RecordTools.d.ts +9 -1
- package/es/ScreenPlayer/RecordTools.js +5 -3
- package/es/ScreenPlayer/demo2.js +1 -1
- package/es/ScreenPlayer/interface.d.ts +51 -0
- 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/package.json +1 -1
- package/es/Player/event/browserTabEvent.d.ts +0 -9
- package/es/Player/event/browserTabEvent.js +0 -57
|
@@ -10,41 +10,40 @@ 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, { useState,
|
|
13
|
+
import React, { useState, useCallback, useMemo, useContext } from 'react';
|
|
14
14
|
import IconFont from '../iconfont';
|
|
15
15
|
import Bar from './bar';
|
|
16
16
|
import { useTimes } from '../timeline';
|
|
17
17
|
import { timeStamp } from '../util';
|
|
18
|
+
import { Context } from '../context';
|
|
19
|
+
import { useVideoEvent } from '../event';
|
|
18
20
|
|
|
19
21
|
function LeftBar(_ref) {
|
|
20
|
-
var
|
|
21
|
-
event = _ref.event,
|
|
22
|
-
container = _ref.container,
|
|
23
|
-
isLive = _ref.isLive,
|
|
24
|
-
reload = _ref.reload,
|
|
22
|
+
var reload = _ref.reload,
|
|
25
23
|
leftExtContents = _ref.leftExtContents,
|
|
26
24
|
leftMidExtContents = _ref.leftMidExtContents,
|
|
27
|
-
hideTimeProgress = _ref.hideTimeProgress
|
|
25
|
+
hideTimeProgress = _ref.hideTimeProgress,
|
|
26
|
+
oneFpsPlay = _ref.oneFpsPlay;
|
|
27
|
+
|
|
28
|
+
var _useContext = useContext(Context),
|
|
29
|
+
api = _useContext.api,
|
|
30
|
+
event = _useContext.event,
|
|
31
|
+
container = _useContext.container,
|
|
32
|
+
isLive = _useContext.isLive,
|
|
33
|
+
isFpsPlay = _useContext.isFpsPlay;
|
|
28
34
|
|
|
29
35
|
var _useState = useState(Date.now()),
|
|
30
36
|
_useState2 = _slicedToArray(_useState, 2),
|
|
31
37
|
dep = _useState2[0],
|
|
32
38
|
setDep = _useState2[1];
|
|
33
39
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
event.addEventListener('volumechange', updateRender);
|
|
42
|
-
return function () {
|
|
43
|
-
event.removeEventListener('play', updateRender);
|
|
44
|
-
event.removeEventListener('pause', updateRender);
|
|
45
|
-
event.removeEventListener('volumechange', updateRender);
|
|
46
|
-
};
|
|
47
|
-
}, [event]);
|
|
40
|
+
var updateRender = function updateRender() {
|
|
41
|
+
return setDep(Date.now());
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
useVideoEvent('play', updateRender);
|
|
45
|
+
useVideoEvent('pause', updateRender);
|
|
46
|
+
useVideoEvent('volumechange', updateRender);
|
|
48
47
|
var video = container.querySelector('video'); //缓存值
|
|
49
48
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
50
49
|
|
|
@@ -58,7 +57,7 @@ function LeftBar(_ref) {
|
|
|
58
57
|
return paused ? '播放' : '暂停';
|
|
59
58
|
}, [paused]);
|
|
60
59
|
|
|
61
|
-
var _useTimes = useTimes(api, event,
|
|
60
|
+
var _useTimes = useTimes(api, event, isFpsPlay),
|
|
62
61
|
_useTimes2 = _slicedToArray(_useTimes, 3),
|
|
63
62
|
current = _useTimes2[0],
|
|
64
63
|
duration = _useTimes2[2]; //TODO 方法
|
|
@@ -75,7 +74,7 @@ function LeftBar(_ref) {
|
|
|
75
74
|
}, [video, api]);
|
|
76
75
|
return /*#__PURE__*/React.createElement("div", {
|
|
77
76
|
className: "contraller-left-bar"
|
|
78
|
-
}, leftExtContents, /*#__PURE__*/React.createElement(Bar, null, /*#__PURE__*/React.createElement(IconFont, {
|
|
77
|
+
}, leftExtContents, !isFpsPlay && /*#__PURE__*/React.createElement(Bar, null, /*#__PURE__*/React.createElement(IconFont, {
|
|
79
78
|
onClick: changePlayStatus,
|
|
80
79
|
type: statusIconClassName,
|
|
81
80
|
title: statusText
|
|
@@ -85,6 +84,10 @@ function LeftBar(_ref) {
|
|
|
85
84
|
onClick: reload,
|
|
86
85
|
type: "lm-player-Refresh_Main",
|
|
87
86
|
title: "\u91CD\u8F7D"
|
|
87
|
+
})), !isLive && oneFpsPlay && /*#__PURE__*/React.createElement(Bar, null, /*#__PURE__*/React.createElement(IconFont, {
|
|
88
|
+
onClick: isFpsPlay ? api.closeFpsPlay : api.openFpsPlay,
|
|
89
|
+
type: "lm-player-Refresh_Main",
|
|
90
|
+
title: "\u9010\u5E27\u64AD\u653E"
|
|
88
91
|
})), leftMidExtContents);
|
|
89
92
|
}
|
|
90
93
|
|
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import Api from '../api';
|
|
3
2
|
interface IRightBarProps {
|
|
4
|
-
container?: HTMLElement;
|
|
5
3
|
visibel?: boolean;
|
|
6
|
-
api: Api;
|
|
7
|
-
video?: HTMLVideoElement;
|
|
8
|
-
isLive?: boolean;
|
|
9
4
|
rightExtContents: React.ReactNode;
|
|
10
5
|
rightMidExtContents: React.ReactNode;
|
|
11
6
|
}
|
|
12
|
-
declare function RightBar({
|
|
7
|
+
declare function RightBar({ rightExtContents, rightMidExtContents }: IRightBarProps): JSX.Element;
|
|
13
8
|
export default RightBar;
|
|
@@ -10,16 +10,19 @@ 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 from 'react';
|
|
13
|
+
import React, { useContext } from 'react';
|
|
14
14
|
import IconFont from '../iconfont';
|
|
15
15
|
import Bar from './bar';
|
|
16
16
|
import useFullscreen from '../../useFullscreen';
|
|
17
|
+
import { Context } from '../context';
|
|
17
18
|
|
|
18
19
|
function RightBar(_ref) {
|
|
19
|
-
var
|
|
20
|
-
rightExtContents = _ref.rightExtContents,
|
|
20
|
+
var rightExtContents = _ref.rightExtContents,
|
|
21
21
|
rightMidExtContents = _ref.rightMidExtContents;
|
|
22
22
|
|
|
23
|
+
var _useContext = useContext(Context),
|
|
24
|
+
container = _useContext.container;
|
|
25
|
+
|
|
23
26
|
var _useFullscreen = useFullscreen(container),
|
|
24
27
|
_useFullscreen2 = _slicedToArray(_useFullscreen, 2),
|
|
25
28
|
isFullScreen = _useFullscreen2[0],
|
|
@@ -10,7 +10,8 @@ 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 {
|
|
13
|
+
import { useState } from 'react';
|
|
14
|
+
import { useRegisterPlayerEvents } from '../event';
|
|
14
15
|
import EventName from '../event/eventName';
|
|
15
16
|
|
|
16
17
|
function useBarStatus(event) {
|
|
@@ -19,33 +20,25 @@ function useBarStatus(event) {
|
|
|
19
20
|
}),
|
|
20
21
|
_useState2 = _slicedToArray(_useState, 2),
|
|
21
22
|
state = _useState2[0],
|
|
22
|
-
setState = _useState2[1];
|
|
23
|
+
setState = _useState2[1];
|
|
23
24
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
return Object.assign(Object.assign({}, old), {
|
|
29
|
-
status: 1
|
|
30
|
-
});
|
|
25
|
+
var show = function show() {
|
|
26
|
+
return setState(function (old) {
|
|
27
|
+
return Object.assign(Object.assign({}, old), {
|
|
28
|
+
status: 1
|
|
31
29
|
});
|
|
32
|
-
};
|
|
30
|
+
});
|
|
31
|
+
};
|
|
33
32
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
});
|
|
33
|
+
var hide = function hide() {
|
|
34
|
+
return setState(function (old) {
|
|
35
|
+
return Object.assign(Object.assign({}, old), {
|
|
36
|
+
status: 0
|
|
39
37
|
});
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
return function () {
|
|
45
|
-
event.off(EventName.SHOW_CONTRALLER, show);
|
|
46
|
-
event.off(EventName.HIDE_CONTRALLER, hide);
|
|
47
|
-
};
|
|
48
|
-
}, []);
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
useRegisterPlayerEvents(event, [[EventName.SHOW_CONTRALLER, show], [EventName.HIDE_CONTRALLER, hide]]);
|
|
49
42
|
return state.status;
|
|
50
43
|
}
|
|
51
44
|
|
package/es/Player/demo.js
CHANGED
|
@@ -117,6 +117,8 @@ function Demo1() {
|
|
|
117
117
|
});
|
|
118
118
|
}
|
|
119
119
|
}, "\u64AD\u653E")), /*#__PURE__*/React.createElement(Player, {
|
|
120
|
+
fpsDelay: 800,
|
|
121
|
+
oneFpsPlay: true,
|
|
120
122
|
type: state.type,
|
|
121
123
|
url: state.url,
|
|
122
124
|
isLive: !!state.isLive,
|
|
@@ -214,6 +216,7 @@ function Demo2() {
|
|
|
214
216
|
});
|
|
215
217
|
}
|
|
216
218
|
}, "\u64AD\u653E")), /*#__PURE__*/React.createElement(SegmentPlayer, {
|
|
219
|
+
oneFpsPlay: true,
|
|
217
220
|
begin: mm.valueOf(),
|
|
218
221
|
segments: state.segments,
|
|
219
222
|
isLive: false
|
|
@@ -278,7 +281,8 @@ function Demo3() {
|
|
|
278
281
|
url: "".concat(old.url, "?").concat(time)
|
|
279
282
|
});
|
|
280
283
|
});
|
|
281
|
-
}
|
|
284
|
+
},
|
|
285
|
+
type: "native"
|
|
282
286
|
}));
|
|
283
287
|
}
|
|
284
288
|
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
1
|
import type VideoEventInstance from '.';
|
|
3
2
|
import type Api from '../api';
|
|
4
3
|
import Flvjs from '@cloud-app-dev/flv.js';
|
|
@@ -11,6 +10,7 @@ interface IErrorEventProps {
|
|
|
11
10
|
hls: Hls;
|
|
12
11
|
reload: () => void;
|
|
13
12
|
unload: () => void;
|
|
13
|
+
errorHandleAdapter?: (errorInfo: any) => boolean;
|
|
14
14
|
}
|
|
15
|
-
declare function
|
|
16
|
-
export default
|
|
15
|
+
declare function useErrorEvent({ event, api, reload, unload, errorReloadTimer, flv, hls, errorHandleAdapter }: IErrorEventProps): void;
|
|
16
|
+
export default useErrorEvent;
|
|
@@ -18,19 +18,21 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
|
|
|
18
18
|
|
|
19
19
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
20
20
|
|
|
21
|
-
import
|
|
21
|
+
import { useState, useEffect, useRef } from 'react';
|
|
22
22
|
import EventName from './eventName';
|
|
23
23
|
import Flvjs from '@cloud-app-dev/flv.js';
|
|
24
24
|
import Hls from 'hls.js';
|
|
25
|
+
import { useRegisterPlayerEvent, useVideoEvent } from '.';
|
|
25
26
|
|
|
26
|
-
function
|
|
27
|
+
function useErrorEvent(_ref) {
|
|
27
28
|
var event = _ref.event,
|
|
28
29
|
api = _ref.api,
|
|
29
30
|
reload = _ref.reload,
|
|
30
31
|
unload = _ref.unload,
|
|
31
32
|
errorReloadTimer = _ref.errorReloadTimer,
|
|
32
33
|
flv = _ref.flv,
|
|
33
|
-
hls = _ref.hls
|
|
34
|
+
hls = _ref.hls,
|
|
35
|
+
errorHandleAdapter = _ref.errorHandleAdapter;
|
|
34
36
|
|
|
35
37
|
var _useState = useState(0),
|
|
36
38
|
_useState2 = _slicedToArray(_useState, 2),
|
|
@@ -39,56 +41,54 @@ function ErrorEvent(_ref) {
|
|
|
39
41
|
|
|
40
42
|
var errorInfo = useRef(null);
|
|
41
43
|
var reloadTimer = useRef(null);
|
|
42
|
-
useEffect(function () {
|
|
43
|
-
var errorHandle = function errorHandle() {
|
|
44
|
-
var _console;
|
|
45
44
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
45
|
+
var errorHandle = function errorHandle() {
|
|
46
|
+
var _console;
|
|
47
|
+
|
|
48
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
49
|
+
args[_key] = arguments[_key];
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (args[2] && args[2].msg && args[2].msg.includes('Unsupported audio')) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
49
55
|
|
|
50
|
-
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
56
|
+
(_console = console).error.apply(_console, args);
|
|
53
57
|
|
|
54
|
-
|
|
58
|
+
errorInfo.current = args;
|
|
55
59
|
|
|
56
|
-
|
|
60
|
+
if (!(errorHandleAdapter === null || errorHandleAdapter === void 0 ? void 0 : errorHandleAdapter(args))) {
|
|
57
61
|
setErrorTime(errorTimer + 1);
|
|
58
|
-
}
|
|
62
|
+
}
|
|
63
|
+
};
|
|
59
64
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
event.emit(EventName.RELOAD_SUCCESS);
|
|
64
|
-
clearErrorTimer();
|
|
65
|
-
}
|
|
66
|
-
};
|
|
65
|
+
var clearErrorTimer = function clearErrorTimer() {
|
|
66
|
+
return setErrorTime(0);
|
|
67
|
+
};
|
|
67
68
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
69
|
+
var reloadSuccess = function reloadSuccess() {
|
|
70
|
+
if (errorTimer > 0) {
|
|
71
|
+
console.warn('视频重连成功!');
|
|
72
|
+
event.emit(EventName.RELOAD_SUCCESS);
|
|
73
|
+
clearErrorTimer();
|
|
74
|
+
}
|
|
75
|
+
};
|
|
71
76
|
|
|
77
|
+
useVideoEvent('error', errorHandle);
|
|
78
|
+
useVideoEvent('canplay', reloadSuccess);
|
|
79
|
+
useRegisterPlayerEvent(EventName.ERROR, errorHandle);
|
|
80
|
+
useRegisterPlayerEvent(EventName.CLEAR_ERROR_TIMER, clearErrorTimer);
|
|
81
|
+
useEffect(function () {
|
|
72
82
|
if (flv) {
|
|
73
83
|
flv.on(Flvjs.Events.ERROR, errorHandle);
|
|
74
84
|
}
|
|
75
85
|
|
|
76
86
|
if (hls) {
|
|
77
87
|
hls.on(Hls.Events.ERROR, errorHandle);
|
|
78
|
-
}
|
|
88
|
+
} //事件销毁由flv、hls销毁时控制
|
|
89
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
79
90
|
|
|
80
|
-
|
|
81
|
-
event.on(EventName.CLEAR_ERROR_TIMER, clearErrorTimer);
|
|
82
|
-
event.addEventListener('error', errorHandle); //获取video状态清除错误状态
|
|
83
|
-
|
|
84
|
-
event.addEventListener('canplay', reloadSuccess);
|
|
85
|
-
return function () {
|
|
86
|
-
// flv, hls事件不用主动销毁,库内部自己处理
|
|
87
|
-
event.off(EventName.ERROR, errorHandle);
|
|
88
|
-
event.removeEventListener('error', errorHandle);
|
|
89
|
-
event.removeEventListener('canplay', reloadSuccess);
|
|
90
|
-
};
|
|
91
|
-
}, [event, flv, hls, errorTimer]);
|
|
91
|
+
}, [flv, hls]);
|
|
92
92
|
useEffect(function () {
|
|
93
93
|
if (errorTimer === 0) {
|
|
94
94
|
return undefined;
|
|
@@ -109,7 +109,6 @@ function ErrorEvent(_ref) {
|
|
|
109
109
|
clearTimeout(reloadTimer.current);
|
|
110
110
|
}; // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
111
111
|
}, [errorTimer, api, event, flv, hls]);
|
|
112
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null);
|
|
113
112
|
}
|
|
114
113
|
|
|
115
|
-
export default
|
|
114
|
+
export default useErrorEvent;
|
|
@@ -1,3 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
declare const Events: {
|
|
2
|
+
RELOAD: string;
|
|
3
|
+
RELOAD_FAIL: string;
|
|
4
|
+
RELOAD_SUCCESS: string;
|
|
5
|
+
ERROR: string;
|
|
6
|
+
ERROR_RELOAD: string;
|
|
7
|
+
HISTORY_PLAY_END: string;
|
|
8
|
+
PLAY_ENDED: string;
|
|
9
|
+
SEEK: string;
|
|
10
|
+
TRANSFORM: string;
|
|
11
|
+
CHANGE_PLAY_INDEX: string;
|
|
12
|
+
HIDE_CONTRALLER: string;
|
|
13
|
+
SHOW_CONTRALLER: string;
|
|
14
|
+
CLEAR_ERROR_TIMER: string;
|
|
15
|
+
CANVAS_PAUSE: string;
|
|
16
|
+
CANVAS_PLAY: string;
|
|
17
|
+
};
|
|
3
18
|
export default Events;
|
|
@@ -5,11 +5,15 @@ var Events = {
|
|
|
5
5
|
ERROR: 'error',
|
|
6
6
|
ERROR_RELOAD: 'errorRload',
|
|
7
7
|
HISTORY_PLAY_END: 'historyPlayEnd',
|
|
8
|
+
PLAY_ENDED: 'play_ended',
|
|
8
9
|
SEEK: 'seek',
|
|
9
10
|
TRANSFORM: 'transform',
|
|
10
11
|
CHANGE_PLAY_INDEX: 'changePlayIndex',
|
|
11
12
|
HIDE_CONTRALLER: 'hideContraller',
|
|
12
13
|
SHOW_CONTRALLER: 'showContraller',
|
|
13
|
-
CLEAR_ERROR_TIMER: 'clearErrorTimer'
|
|
14
|
+
CLEAR_ERROR_TIMER: 'clearErrorTimer',
|
|
15
|
+
CANVAS_PAUSE: 'canvasPause',
|
|
16
|
+
CANVAS_PLAY: 'canvasPlay' //逐帧播放
|
|
17
|
+
|
|
14
18
|
};
|
|
15
19
|
export default Events;
|
|
@@ -17,6 +17,8 @@ declare class VideoEventInstance {
|
|
|
17
17
|
}
|
|
18
18
|
declare type PlayEvent = VideoEventInstance;
|
|
19
19
|
export declare function usePlayerEvent(video: HTMLVideoElement): PlayEvent;
|
|
20
|
+
export declare function useVideoEvent(eventName: string, handle: (event: any) => void, context?: VideoEventInstance): void;
|
|
21
|
+
export declare function useRegisterPlayerEvent(eventName: string, handle: (event: any) => void, context?: VideoEventInstance): void;
|
|
20
22
|
export declare function useVideoEvents(event: VideoEventInstance, events: CustomEvent[]): void;
|
|
21
23
|
export declare function useRegisterPlayerEvents(event: VideoEventInstance, events: CustomEvent[]): void;
|
|
22
24
|
export default VideoEventInstance;
|
package/es/Player/event/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import _useLatest from "ahooks/es/useLatest";
|
|
1
2
|
import _nextTick from "@cloud-app-dev/utils/es/nextTick";
|
|
2
3
|
|
|
3
4
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
@@ -18,7 +19,8 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+
|
|
|
18
19
|
|
|
19
20
|
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
20
21
|
|
|
21
|
-
import { useEffect, useState } from 'react';
|
|
22
|
+
import { useContext, useEffect, useMemo, useState } from 'react';
|
|
23
|
+
import { Context } from '../context';
|
|
22
24
|
|
|
23
25
|
var VideoEventInstance = /*#__PURE__*/function () {
|
|
24
26
|
function VideoEventInstance(video) {
|
|
@@ -128,6 +130,56 @@ export function usePlayerEvent(video) {
|
|
|
128
130
|
}, [video]);
|
|
129
131
|
return event;
|
|
130
132
|
}
|
|
133
|
+
export function useVideoEvent(eventName, handle, context) {
|
|
134
|
+
var ctx = useContext(Context);
|
|
135
|
+
var event = useMemo(function () {
|
|
136
|
+
var _a;
|
|
137
|
+
|
|
138
|
+
return (_a = ctx === null || ctx === void 0 ? void 0 : ctx.event) !== null && _a !== void 0 ? _a : context;
|
|
139
|
+
}, [context, ctx === null || ctx === void 0 ? void 0 : ctx.event]);
|
|
140
|
+
|
|
141
|
+
var handlerRef = _useLatest(handle);
|
|
142
|
+
|
|
143
|
+
useEffect(function () {
|
|
144
|
+
if (!event) {
|
|
145
|
+
return undefined;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
var eventListener = function eventListener(event) {
|
|
149
|
+
return handlerRef.current(event);
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
event.addEventListener(eventName, eventListener);
|
|
153
|
+
return function () {
|
|
154
|
+
event.removeEventListener(eventName, eventListener);
|
|
155
|
+
}; // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
156
|
+
}, [event, eventName]);
|
|
157
|
+
}
|
|
158
|
+
export function useRegisterPlayerEvent(eventName, handle, context) {
|
|
159
|
+
var ctx = useContext(Context);
|
|
160
|
+
var event = useMemo(function () {
|
|
161
|
+
var _a;
|
|
162
|
+
|
|
163
|
+
return (_a = ctx === null || ctx === void 0 ? void 0 : ctx.event) !== null && _a !== void 0 ? _a : context;
|
|
164
|
+
}, [context, ctx === null || ctx === void 0 ? void 0 : ctx.event]);
|
|
165
|
+
|
|
166
|
+
var handlerRef = _useLatest(handle);
|
|
167
|
+
|
|
168
|
+
useEffect(function () {
|
|
169
|
+
if (!event) {
|
|
170
|
+
return undefined;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
var eventListener = function eventListener(event) {
|
|
174
|
+
return handlerRef.current(event);
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
event.on(eventName, eventListener);
|
|
178
|
+
return function () {
|
|
179
|
+
event.off(eventName, eventListener);
|
|
180
|
+
}; // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
181
|
+
}, [event, eventName]);
|
|
182
|
+
}
|
|
131
183
|
export function useVideoEvents(event, events) {
|
|
132
184
|
useEffect(function () {
|
|
133
185
|
if (!event || !events) {
|
|
@@ -149,7 +201,7 @@ export function useVideoEvents(event, events) {
|
|
|
149
201
|
|
|
150
202
|
event.removeEventListener(eventName, handle);
|
|
151
203
|
});
|
|
152
|
-
};
|
|
204
|
+
}; // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
153
205
|
}, [event]);
|
|
154
206
|
}
|
|
155
207
|
export function useRegisterPlayerEvents(event, events) {
|
|
@@ -173,7 +225,7 @@ export function useRegisterPlayerEvents(event, events) {
|
|
|
173
225
|
|
|
174
226
|
event.off(eventName, handle);
|
|
175
227
|
});
|
|
176
|
-
};
|
|
228
|
+
}; // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
177
229
|
}, [event]);
|
|
178
230
|
}
|
|
179
231
|
export default VideoEventInstance;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type Api from './api';
|
|
3
|
+
import type VideoEventInstance from './event';
|
|
4
|
+
interface IFPSPlay {
|
|
5
|
+
api: Api;
|
|
6
|
+
event: VideoEventInstance;
|
|
7
|
+
fpsDelay?: number;
|
|
8
|
+
}
|
|
9
|
+
declare function FPSPlay({ api, event, fpsDelay }: IFPSPlay): JSX.Element;
|
|
10
|
+
export default FPSPlay;
|
|
@@ -0,0 +1,80 @@
|
|
|
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, useRef, useState } from 'react';
|
|
14
|
+
import Events from './event/eventName';
|
|
15
|
+
import useRafInterval from '../useRafInterval';
|
|
16
|
+
import { useRegisterPlayerEvent } from './event';
|
|
17
|
+
var oneFps = 1 / 30;
|
|
18
|
+
|
|
19
|
+
function FPSPlay(_ref) {
|
|
20
|
+
var api = _ref.api,
|
|
21
|
+
event = _ref.event,
|
|
22
|
+
fpsDelay = _ref.fpsDelay;
|
|
23
|
+
|
|
24
|
+
var _useState = useState(Date.now()),
|
|
25
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
26
|
+
forceKey = _useState2[0],
|
|
27
|
+
update = _useState2[1];
|
|
28
|
+
|
|
29
|
+
var ref = useRef(null);
|
|
30
|
+
var timerRef = useRef(null);
|
|
31
|
+
useEffect(function () {
|
|
32
|
+
var fpsCapture = function fpsCapture() {
|
|
33
|
+
if (!ref.current || !event.video) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
var video = event.video;
|
|
38
|
+
var fpsTime = api.getCurrentTime() + oneFps;
|
|
39
|
+
video.currentTime = fpsTime;
|
|
40
|
+
|
|
41
|
+
if (video.currentTime >= api.getDuration()) {
|
|
42
|
+
clearInterval(timerRef.current);
|
|
43
|
+
video.currentTime = 0;
|
|
44
|
+
event.emit(Events.PLAY_ENDED);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
var canvas = ref.current;
|
|
48
|
+
var ctx = canvas.getContext('2d');
|
|
49
|
+
|
|
50
|
+
var _video$getBoundingCli = video.getBoundingClientRect(),
|
|
51
|
+
width = _video$getBoundingCli.width,
|
|
52
|
+
height = _video$getBoundingCli.height;
|
|
53
|
+
|
|
54
|
+
canvas.width = width;
|
|
55
|
+
canvas.height = height;
|
|
56
|
+
ctx.drawImage(video, 0, 0, width, height);
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
fpsCapture();
|
|
60
|
+
timerRef.current = setInterval(fpsCapture, fpsDelay);
|
|
61
|
+
return function () {
|
|
62
|
+
clearInterval(timerRef.current);
|
|
63
|
+
};
|
|
64
|
+
}, [api, event, fpsDelay, forceKey]);
|
|
65
|
+
useRegisterPlayerEvent(Events.CANVAS_PAUSE, function () {
|
|
66
|
+
clearInterval(timerRef.current);
|
|
67
|
+
});
|
|
68
|
+
useRegisterPlayerEvent(Events.CANVAS_PLAY, function () {
|
|
69
|
+
update(Date.now());
|
|
70
|
+
});
|
|
71
|
+
useRafInterval(function () {
|
|
72
|
+
return !api.paused ? api.pause() : null;
|
|
73
|
+
}, 10);
|
|
74
|
+
return /*#__PURE__*/React.createElement("canvas", {
|
|
75
|
+
className: "fps-play-canvas",
|
|
76
|
+
ref: ref
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
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;
|
|
@@ -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({
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
1
|
import type Api from './api';
|
|
3
2
|
import type VideoEventInstance from './event';
|
|
4
|
-
declare function
|
|
3
|
+
declare function useLiveHeart({ api, event, isLive }: {
|
|
5
4
|
api: Api;
|
|
6
5
|
event: VideoEventInstance;
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
isLive: boolean;
|
|
7
|
+
}): void;
|
|
8
|
+
export default useLiveHeart;
|