@cloud-app-dev/vidc 3.0.0 → 3.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/.umirc.ts +1 -1
  2. package/es/ErrorBoundary/index.d.ts +2 -2
  3. package/es/ErrorBoundary/index.js +2 -7
  4. package/es/LoaderApp/utils.d.ts +1 -1
  5. package/es/Map/BasicMap/index.js +3 -8
  6. package/es/Modal/index.js +7 -5
  7. package/es/Picture/component/RectMenu/index.d.ts +1 -1
  8. package/es/Player/api/index.d.ts +1 -8
  9. package/es/Player/api/index.js +23 -34
  10. package/es/Player/contraller_bar/left_bar.js +2 -2
  11. package/es/Player/contraller_bar/right_bar.d.ts +1 -1
  12. package/es/Player/contraller_bar/right_bar.js +13 -27
  13. package/es/Player/demo.js +8 -3
  14. package/es/Player/frontend_player.d.ts +1 -2
  15. package/es/Player/frontend_player.js +27 -57
  16. package/es/Player/frontend_timeline.d.ts +2 -1
  17. package/es/Player/frontend_timeline.js +20 -9
  18. package/es/Player/player.d.ts +7 -9
  19. package/es/Player/segment_player.d.ts +1 -1
  20. package/es/Player/segment_player.js +74 -36
  21. package/es/Player/segment_timeline.js +8 -7
  22. package/es/Player/single_player.d.ts +2 -2
  23. package/es/Player/single_player.js +14 -10
  24. package/es/Player/util.d.ts +2 -24
  25. package/es/Player/util.js +43 -54
  26. package/es/PlayerExt/index.d.ts +1 -1
  27. package/es/ScreenPlayer/PlayerWithExt.d.ts +2 -2
  28. package/es/ScreenPlayer/PlayerWithExt.js +21 -28
  29. package/es/ScreenPlayer/Record.d.ts +5 -0
  30. package/es/ScreenPlayer/Record.js +7 -19
  31. package/es/ScreenPlayer/TimeSlider.d.ts +1 -1
  32. package/es/ScreenPlayer/TimeSlider.js +39 -35
  33. package/es/ScreenPlayer/demo2.js +1 -1
  34. package/es/ScreenPlayer/index.css +2 -3
  35. package/es/ScreenPlayer/index.d.ts +2 -3
  36. package/es/ScreenPlayer/index.js +4 -3
  37. package/es/ScreenPlayer/useRecordList.d.ts +1 -1
  38. package/es/ScreenPlayer/useVideoFit.d.ts +1 -1
  39. package/es/ScreenPlayer/useVideoFit.js +4 -2
  40. package/es/ScreenPlayer/utils.d.ts +1 -1
  41. package/es/Timeout/index.d.ts +33 -0
  42. package/es/Timeout/index.js +83 -0
  43. package/es/index.d.ts +1 -0
  44. package/es/index.js +1 -0
  45. package/es/withErrorBoundary/index.d.ts +2 -1
  46. package/es/withErrorBoundary/index.js +4 -2
  47. package/package.json +1 -1
  48. package/release-build.sh +44 -0
@@ -113,6 +113,11 @@ export interface ISinglePlayerProps {
113
113
  */
114
114
  reload?: () => void;
115
115
 
116
+ /**
117
+ * extaction
118
+ */
119
+ extActions?: { [key: string]: (...args: any) => void };
120
+
116
121
  /**
117
122
  * 视频可播放时执行钩子
118
123
  */
@@ -129,7 +134,7 @@ export interface ISinglePlayerProps {
129
134
  playerEvents?: CustomEvent[];
130
135
  }
131
136
 
132
- export interface IFrontendPlayerProps extends Omit<ISinglePlayerProps, 'isLive' | 'reload' | 'type'> {
137
+ export interface IFrontendPlayerProps extends Omit<ISinglePlayerProps, 'isLive' | 'reload'> {
133
138
  /**
134
139
  * 前端录像开始时间
135
140
  */
@@ -146,16 +151,9 @@ export interface IFrontendPlayerProps extends Omit<ISinglePlayerProps, 'isLive'
146
151
  onSeek?: (time: number) => void;
147
152
 
148
153
  forwordRef?: React.MutableRefObject<ExportPlayerType>;
149
-
150
- /**
151
- * 视频可播放时执行钩子
152
- */
153
- onCanPlayerInit?: (data: any) => void;
154
154
  }
155
155
 
156
- export interface ISegmentPlayerProps extends Omit<ISinglePlayerProps, 'url' | 'onCanPlayerInit'> {
157
- onCanPlayerInit?: (ext: { [key: string]: any }) => void;
158
-
156
+ export interface ISegmentPlayerProps extends Omit<ISinglePlayerProps, 'url'> {
159
157
  /**
160
158
  * 云录像片段信息
161
159
  */
@@ -5,5 +5,5 @@ import type { ISegmentPlayerProps } from './player';
5
5
  * @param param0
6
6
  * @returns
7
7
  */
8
- declare function SegmentPlayer({ segments, begin, forwordRef, onCanPlayerInit, defaultIndex, customTimeLine, ...props }: ISegmentPlayerProps): JSX.Element;
8
+ declare function SegmentPlayer({ segments, begin, forwordRef, defaultIndex, onCanPlayerInit, customTimeLine, ...props }: ISegmentPlayerProps): JSX.Element;
9
9
  export default SegmentPlayer;
@@ -1,3 +1,6 @@
1
+ import _useUpdate from "ahooks/es/useUpdate";
2
+ import _useLatest from "ahooks/es/useLatest";
3
+
1
4
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
2
5
 
3
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."); }
@@ -19,17 +22,17 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
19
22
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
20
23
 
21
24
  import { __rest } from "tslib";
22
- import React, { useEffect, useMemo, useRef, useState } from 'react';
25
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
23
26
  import SinglePlayer from './single_player';
24
27
  import SegmentTimeLine from './segment_timeline';
25
28
  import Events from './event/eventName';
29
+
26
30
  /**
27
31
  * @desc 计算第一个url
28
32
  * @param segments
29
33
  * @param defaultIndex
30
34
  * @returns
31
35
  */
32
-
33
36
  function getFirstUrlIndex(segments) {
34
37
  var defaultIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
35
38
 
@@ -60,7 +63,7 @@ function getFirstUrlIndex(segments) {
60
63
 
61
64
  function usePlayIndex(event, segments) {
62
65
  var defaultIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
63
- var deps = arguments.length > 3 ? arguments[3] : undefined;
66
+ var deps = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
64
67
 
65
68
  var _useState = useState({
66
69
  index: getFirstUrlIndex(segments, defaultIndex)
@@ -89,7 +92,7 @@ function usePlayIndex(event, segments) {
89
92
  });
90
93
  });
91
94
  }
92
- }, [state.index]); // 监听片段播放状态,自动跳转下一个片段
95
+ }, [segments, state.index]); // 监听片段播放状态,自动跳转下一个片段
93
96
 
94
97
  useEffect(function () {
95
98
  if (!event) {
@@ -98,7 +101,7 @@ function usePlayIndex(event, segments) {
98
101
 
99
102
  var fn = function fn() {
100
103
  return setState(function (old) {
101
- return Object.assign(Object.assign({}, onload), {
104
+ return Object.assign(Object.assign({}, old), {
102
105
  index: old.index + 1 < segments.length ? old.index + 1 : old.index
103
106
  });
104
107
  });
@@ -107,7 +110,7 @@ function usePlayIndex(event, segments) {
107
110
  event.addEventListener('ended', fn);
108
111
  return function () {
109
112
  return event.removeEventListener('ended', fn);
110
- };
113
+ }; // eslint-disable-next-line react-hooks/exhaustive-deps
111
114
  }, [event, segments].concat(_toConsumableArray(deps)));
112
115
  return {
113
116
  index: state.index,
@@ -131,10 +134,21 @@ function SegmentPlayer(_a) {
131
134
  var segments = _a.segments,
132
135
  begin = _a.begin,
133
136
  forwordRef = _a.forwordRef,
134
- _onCanPlayerInit = _a.onCanPlayerInit,
135
137
  defaultIndex = _a.defaultIndex,
138
+ onCanPlayerInit = _a.onCanPlayerInit,
136
139
  customTimeLine = _a.customTimeLine,
137
- props = __rest(_a, ["segments", "begin", "forwordRef", "onCanPlayerInit", "defaultIndex", "customTimeLine"]);
140
+ props = __rest(_a, ["segments", "begin", "forwordRef", "defaultIndex", "onCanPlayerInit", "customTimeLine"]);
141
+
142
+ var _useState3 = useState({
143
+ seekTime: 0
144
+ }),
145
+ _useState4 = _slicedToArray(_useState3, 2),
146
+ state = _useState4[0],
147
+ setState = _useState4[1];
148
+
149
+ var latestSegmentsRef = _useLatest(segments);
150
+
151
+ var update = _useUpdate();
138
152
 
139
153
  var ref = useRef(null);
140
154
  var playRef = forwordRef ? forwordRef : ref;
@@ -143,13 +157,6 @@ function SegmentPlayer(_a) {
143
157
  api = _ref.api,
144
158
  event = _ref.event;
145
159
 
146
- var _useState3 = useState({
147
- forceKey: Date.now()
148
- }),
149
- _useState4 = _slicedToArray(_useState3, 2),
150
- state = _useState4[0],
151
- setState = _useState4[1];
152
-
153
160
  var duration = useMemo(function () {
154
161
  return segments === null || segments === void 0 ? void 0 : segments.map(function (v) {
155
162
  return (v.endTime - v.beginTime) / 1000;
@@ -158,45 +165,76 @@ function SegmentPlayer(_a) {
158
165
  }, 0);
159
166
  }, [segments]);
160
167
 
161
- var _usePlayIndex = usePlayIndex(event, segments, defaultIndex, [state.forceKey]),
168
+ var _usePlayIndex = usePlayIndex(event, segments, defaultIndex, [segments, defaultIndex]),
162
169
  index = _usePlayIndex.index,
163
170
  setIndex = _usePlayIndex.setIndex;
164
171
 
165
172
  var url = useMemo(function () {
166
- return segments && segments[index] ? segments[index].url : undefined;
173
+ return segments[index] ? segments[index].url : undefined;
167
174
  }, [segments, index]); // 重置reload
168
175
 
169
176
  var reload = function reload() {
170
177
  playRef.current.event.emit(Events.RELOAD);
171
178
  setIndex(0);
172
179
  playRef.current.api.reload();
173
- }; // 秒级别转换
180
+ }; // time 毫秒的时间戳
174
181
 
175
182
 
176
- var beginTemp = useMemo(function () {
177
- return begin ? String(begin).length === 10 ? Math.floor(begin * 1000) : begin : begin;
183
+ var seekTo = function seekTo(time) {
184
+ var index = latestSegmentsRef.current.findIndex(function (v) {
185
+ return time >= v.beginTime && time < v.endTime;
186
+ });
187
+
188
+ if (index === -1) {
189
+ return;
190
+ }
191
+
192
+ var currentTime = time - latestSegmentsRef.current[index].beginTime;
193
+ setIndex(index);
194
+ setState(function (old) {
195
+ return Object.assign(Object.assign({}, old), {
196
+ seekTime: currentTime / 1000
197
+ });
198
+ });
199
+ }; // 处理seek 后index变化后 cuurenttime变化的过程
200
+
201
+
202
+ useEffect(function () {
203
+ if (state.seekTime === 0) {
204
+ return;
205
+ }
206
+
207
+ setState(function (old) {
208
+ return Object.assign(Object.assign({}, old), {
209
+ seekTime: 0
210
+ });
211
+ });
212
+ playRef.current.video.currentTime = state.seekTime; // eslint-disable-next-line react-hooks/exhaustive-deps
213
+ }, [state.seekTime]);
214
+ var hasReady = api && event;
215
+ var timeline = customTimeLine !== null && customTimeLine !== void 0 ? customTimeLine : /*#__PURE__*/React.createElement(SegmentTimeLine, {
216
+ begin: begin,
217
+ api: api,
218
+ event: event,
219
+ index: index,
220
+ segments: segments,
221
+ duration: duration,
222
+ setIndex: setIndex
223
+ });
224
+ var onInit = useCallback(function () {
225
+ update();
226
+ onCanPlayerInit && onCanPlayerInit(); // eslint-disable-next-line react-hooks/exhaustive-deps
178
227
  }, []);
179
228
  return /*#__PURE__*/React.createElement(SinglePlayer, Object.assign({
180
229
  ref: playRef,
181
230
  url: url,
231
+ onCanPlayerInit: onInit,
182
232
  reload: reload,
183
- onCanPlayerInit: function onCanPlayerInit() {
184
- setState({
185
- forceKey: Date.now()
186
- });
187
- _onCanPlayerInit && _onCanPlayerInit({
188
- setIndex: setIndex
189
- });
233
+ extActions: {
234
+ setIndex: setIndex,
235
+ seekTo: seekTo
190
236
  },
191
- customTimeLine: api && event && (customTimeLine || /*#__PURE__*/React.createElement(SegmentTimeLine, {
192
- begin: beginTemp,
193
- api: api,
194
- event: event,
195
- index: index,
196
- segments: segments,
197
- duration: duration,
198
- setIndex: setIndex
199
- }))
237
+ customTimeLine: hasReady ? timeline : /*#__PURE__*/React.createElement(React.Fragment, null)
200
238
  }, props));
201
239
  }
202
240
 
@@ -16,7 +16,8 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
16
16
  import React, { useCallback, useMemo } from 'react';
17
17
  import { useTimes } from './timeline';
18
18
  import useBarStatus from './contraller_bar/useBarStatus';
19
- import { dateFormat } from './util';
19
+ import moment from 'moment';
20
+ import { FMT } from './util';
20
21
  import "./style/timeline.css";
21
22
 
22
23
  function SegmentTimeLine(_ref) {
@@ -40,7 +41,7 @@ function SegmentTimeLine(_ref) {
40
41
  }).reduce(function (a, b, i) {
41
42
  return i >= index ? a : a + b;
42
43
  }, 0);
43
- }, [index]);
44
+ }, [index, segments]);
44
45
  var playPercent = useMemo(function () {
45
46
  return (currentTime + indexDuration) / duration * 100;
46
47
  }, [currentTime, duration, indexDuration]);
@@ -66,7 +67,7 @@ function SegmentTimeLine(_ref) {
66
67
  } else {
67
68
  api.seekTo(currentTime);
68
69
  }
69
- }, [api, segments, index]);
70
+ }, [segments, api, index, setIndex]);
70
71
  return /*#__PURE__*/React.createElement("div", {
71
72
  className: "player-timeline-layout player-segment-timeline-layout ".concat(status === 0 ? 'hide-time-line' : '')
72
73
  }, /*#__PURE__*/React.createElement("div", {
@@ -113,8 +114,8 @@ function TipTitle(_ref2) {
113
114
  var _end = begin + (segments[0].endTime - segments[0].beginTime);
114
115
 
115
116
  return {
116
- start: dateFormat(_start),
117
- end: dateFormat(_end)
117
+ start: moment(_start).format(FMT),
118
+ end: moment(_end).format(FMT)
118
119
  };
119
120
  }
120
121
 
@@ -126,8 +127,8 @@ function TipTitle(_ref2) {
126
127
  var start = begin + indexDuration;
127
128
  var end = start + (segments[index].endTime - segments[index].beginTime);
128
129
  return {
129
- start: dateFormat(start),
130
- end: dateFormat(end)
130
+ start: moment(start).format(FMT),
131
+ end: moment(end).format(FMT)
131
132
  };
132
133
  }, [index, segments, begin]),
133
134
  start = _useMemo.start,
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
2
  import type { ISinglePlayerProps, ExportPlayerType } from './player';
3
3
  import './style/index.less';
4
- declare const _default: React.MemoExoticComponent<React.ForwardRefExoticComponent<ISinglePlayerProps & React.RefAttributes<ExportPlayerType>>>;
5
- export default _default;
4
+ declare const SinglePlayer: React.ForwardRefExoticComponent<ISinglePlayerProps & React.RefAttributes<ExportPlayerType>>;
5
+ export default SinglePlayer;
@@ -34,7 +34,9 @@ var SinglePlayer = /*#__PURE__*/React.forwardRef(function (_a, ref) {
34
34
  isLive = _a.isLive,
35
35
  errorReloadTimer = _a.errorReloadTimer,
36
36
  children = _a.children,
37
- props = __rest(_a, ["className", "url", "type", "hideContrallerBar", "isLive", "errorReloadTimer", "children"]);
37
+ onCanPlayerInit = _a.onCanPlayerInit,
38
+ extActions = _a.extActions,
39
+ props = __rest(_a, ["className", "url", "type", "hideContrallerBar", "isLive", "errorReloadTimer", "children", "onCanPlayerInit", "extActions"]);
38
40
 
39
41
  var autoPlay = props.autoPlay,
40
42
  preload = props.preload,
@@ -113,11 +115,11 @@ var SinglePlayer = /*#__PURE__*/React.forwardRef(function (_a, ref) {
113
115
  return undefined;
114
116
  }
115
117
 
116
- var map = {
118
+ var map = Object.assign({
117
119
  reload: reload,
118
120
  unload: unload,
119
121
  toggleFit: toggle
120
- };
122
+ }, extActions);
121
123
  return new Proxy(api, {
122
124
  get: function get(target, key) {
123
125
  var _a;
@@ -127,7 +129,7 @@ var SinglePlayer = /*#__PURE__*/React.forwardRef(function (_a, ref) {
127
129
  set: function set() {
128
130
  return true;
129
131
  }
130
- });
132
+ }); // eslint-disable-next-line react-hooks/exhaustive-deps
131
133
  }, [api]); // 代理Event
132
134
 
133
135
  var playEvent = useMemo(function () {
@@ -154,11 +156,12 @@ var SinglePlayer = /*#__PURE__*/React.forwardRef(function (_a, ref) {
154
156
  plugins: [flv, hls],
155
157
  fit: fit
156
158
  };
157
- }, [api, event, video, fit]);
159
+ }, [video, state.container, playApi, playEvent, flv, hls, fit]);
158
160
  useEffect(function () {
159
161
  if (api && event && video) {
160
- props.onCanPlayerInit && props.onCanPlayerInit();
161
- }
162
+ onCanPlayerInit && onCanPlayerInit();
163
+ } // eslint-disable-next-line react-hooks/exhaustive-deps
164
+
162
165
  }, [api, event, video]);
163
166
  return /*#__PURE__*/React.createElement("div", {
164
167
  className: "lm-player-container ".concat(className),
@@ -193,7 +196,7 @@ var SinglePlayer = /*#__PURE__*/React.forwardRef(function (_a, ref) {
193
196
  leftMidExtContents: leftMidExtContents,
194
197
  reload: (_b = props.reload) !== null && _b !== void 0 ? _b : reload,
195
198
  hideTimeProgress: !!customTimeLine
196
- })), !isLive ? customTimeLine ? customTimeLine : /*#__PURE__*/React.createElement(Timeline, {
199
+ })), customTimeLine ? customTimeLine : !hideContrallerBar ? /*#__PURE__*/React.createElement(Timeline, {
197
200
  api: playApi,
198
201
  event: event
199
202
  }) : null, /*#__PURE__*/React.createElement(ErrorEvent, {
@@ -222,6 +225,7 @@ SinglePlayer.defaultProps = {
222
225
  mediaDataSource: {},
223
226
  config: {}
224
227
  },
225
- hlsConfig: {}
228
+ hlsConfig: {},
229
+ extActions: {}
226
230
  };
227
- export default /*#__PURE__*/React.memo(SinglePlayer);
231
+ export default SinglePlayer;
@@ -22,28 +22,6 @@ export declare const playUnload: (video: HTMLVideoElement, flv?: Flvjs.Player, h
22
22
  */
23
23
  export declare function getVideoType(url: string): "flv" | "native" | "m3u8";
24
24
  export declare function timeStamp(second: number): string;
25
- /**
26
- * 日期格式化
27
- * @param {*} timetemp
28
- */
29
- export declare function dateFormat(timetemp: number): string;
30
- /**
31
- * 全屏
32
- * @param {*} element
33
- */
34
- export declare function fullscreen(element: HTMLElement): void;
35
- /**
36
- * exitFullscreen 退出全屏
37
- * @param {Objct} element 选择器
38
- */
39
- export declare function exitFullscreen(): void;
40
- /**
41
- * 判读是否支持全屏
42
- */
43
- export declare function fullscreenEnabled(): boolean;
44
- /**
45
- * [isFullscreen 判断浏览器是否全屏]
46
- * @return [全屏则返回当前调用全屏的元素,不全屏返回false]
47
- */
48
- export declare function isFullscreen(ele: HTMLElement): boolean;
49
25
  export declare function getRandom(): string;
26
+ export declare function tryCatch(fn: () => void | Promise<any>): Promise<void>;
27
+ export declare const FMT = "YYYY-MM-DD HH:mm:ss";
package/es/Player/util.js CHANGED
@@ -1,3 +1,8 @@
1
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
2
+
3
+ function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return generator._invoke = function (innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; }(innerFn, self, context), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; this._invoke = function (method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (undefined === method) { if (context.delegate = null, "throw" === context.method) { if (delegate.iterator.return && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method)) return ContinueSentinel; context.method = "throw", context.arg = new TypeError("The iterator does not provide a 'throw' method"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, define(Gp, "constructor", GeneratorFunctionPrototype), define(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (object) { var keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, catch: function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
4
+
5
+ import { __awaiter } from "tslib";
1
6
  import Flvjs from 'flv.zv.js';
2
7
  import Hls from 'hls.js';
3
8
  import Events from './event/eventName';
@@ -62,7 +67,9 @@ export var playReload = function playReload(video, event, flv, hls, url) {
62
67
  if (flv) {
63
68
  flv.unload();
64
69
  flv.load();
65
- flv.play();
70
+ tryCatch(function () {
71
+ return flv.play();
72
+ });
66
73
  }
67
74
 
68
75
  if (hls) {
@@ -71,12 +78,16 @@ export var playReload = function playReload(video, event, flv, hls, url) {
71
78
  hls.stopLoad();
72
79
  hls.startLoad();
73
80
  hls.loadSource(url);
74
- video.play();
81
+ tryCatch(function () {
82
+ return video.play();
83
+ });
75
84
  }
76
85
 
77
86
  if (!flv && !hls) {
78
87
  video.setAttribute('src', url);
79
- video.play();
88
+ tryCatch(function () {
89
+ return video.play();
90
+ });
80
91
  }
81
92
 
82
93
  event.emit(Events.RELOAD);
@@ -120,56 +131,34 @@ export function timeStamp(second) {
120
131
 
121
132
  return "".concat(h < 10 ? '0' + h : h, ":").concat(m < 10 ? '0' + m : m, ":").concat(s < 10 ? '0' + s : s);
122
133
  }
123
- /**
124
- * 日期格式化
125
- * @param {*} timetemp
126
- */
127
-
128
- export function dateFormat(timetemp) {
129
- var date = new Date(timetemp);
130
- var YYYY = date.getFullYear();
131
- var DD = date.getDate();
132
- var MM = date.getMonth() + 1;
133
- var hh = date.getHours();
134
- var mm = date.getMinutes();
135
- var ss = date.getSeconds();
136
- return "".concat(YYYY, ".").concat(MM > 9 ? MM : '0' + MM, ".").concat(DD > 9 ? DD : '0' + DD, " ").concat(hh > 9 ? hh : '0' + hh, ".").concat(mm > 9 ? mm : '0' + mm, ".").concat(ss > 9 ? ss : '0' + ss);
137
- }
138
- /**
139
- * 全屏
140
- * @param {*} element
141
- */
142
-
143
- export function fullscreen(element) {
144
- element.requestFullscreen();
145
- }
146
- /**
147
- * exitFullscreen 退出全屏
148
- * @param {Objct} element 选择器
149
- */
150
-
151
- export function exitFullscreen() {
152
- document.exitFullscreen();
153
- }
154
- /**
155
- * 判读是否支持全屏
156
- */
157
-
158
- export function fullscreenEnabled() {
159
- return document.fullscreenEnabled;
160
- }
161
- /**
162
- * [isFullscreen 判断浏览器是否全屏]
163
- * @return [全屏则返回当前调用全屏的元素,不全屏返回false]
164
- */
165
-
166
- export function isFullscreen(ele) {
167
- if (!ele) {
168
- return false;
169
- }
170
-
171
- return document.fullscreenElement === ele;
172
- }
173
134
  export function getRandom() {
174
135
  return Math.random().toString(36).substr(2);
175
- }
136
+ }
137
+ export function tryCatch(fn) {
138
+ return __awaiter(this, void 0, void 0, /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
139
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
140
+ while (1) {
141
+ switch (_context.prev = _context.next) {
142
+ case 0:
143
+ _context.prev = 0;
144
+ _context.next = 3;
145
+ return fn();
146
+
147
+ case 3:
148
+ _context.next = 8;
149
+ break;
150
+
151
+ case 5:
152
+ _context.prev = 5;
153
+ _context.t0 = _context["catch"](0);
154
+ console.debug(_context.t0);
155
+
156
+ case 8:
157
+ case "end":
158
+ return _context.stop();
159
+ }
160
+ }
161
+ }, _callee, null, [[0, 5]]);
162
+ }));
163
+ }
164
+ export var FMT = 'YYYY-MM-DD HH:mm:ss';
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import { ISegmentType } from 'src/Player/player';
2
+ import { ISegmentType } from '../Player/player';
3
3
  import './index.less';
4
4
  export declare type PlayModeType = 1 | 2;
5
5
  export interface IPluginProps {
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
- import type { ExportPlayerType, ISegmentType, ISinglePlayerProps } from 'src/Player/player';
3
- import type { PlayModeType } from 'src/PlayerExt';
2
+ import type { ExportPlayerType, ISegmentType, ISinglePlayerProps } from '../Player/player';
3
+ import type { PlayModeType } from '../PlayerExt';
4
4
  interface ILivePlayerWithExtProps extends ISinglePlayerProps {
5
5
  mode?: PlayModeType;
6
6
  style: React.CSSProperties;
@@ -16,6 +16,7 @@ import LivePlayer from '../Player/single_player';
16
16
  import SegmentPlayer from '../Player/segment_player';
17
17
  import FrontendPlayer from '../Player/frontend_player';
18
18
  import ExtModel from '../PlayerExt';
19
+ import moment from 'moment';
19
20
  export function LivePlayerWithExt(_a) {
20
21
  var mode = _a.mode,
21
22
  isLive = _a.isLive,
@@ -31,7 +32,7 @@ export function LivePlayerWithExt(_a) {
31
32
  var ref = useRef();
32
33
  var update = useCallback(function () {
33
34
  return updatePlayer(ref);
34
- }, []);
35
+ }, [updatePlayer]);
35
36
  return /*#__PURE__*/React.createElement("div", {
36
37
  className: "player-with-ext-layout ".concat(className),
37
38
  style: style,
@@ -59,17 +60,9 @@ export function SegmentPlayerWithExt(_a) {
59
60
  props = __rest(_a, ["begin", "style", "className", "segments", "updatePlayer", "onClick"]);
60
61
 
61
62
  var ref = useRef();
62
-
63
- var update = function update() {
64
- var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
65
-
66
- for (var k in obj) {
67
- ref.current[k] = obj[k];
68
- }
69
-
70
- updatePlayer(ref);
71
- };
72
-
63
+ var update = useCallback(function () {
64
+ return updatePlayer(ref);
65
+ }, [updatePlayer]);
73
66
  return /*#__PURE__*/React.createElement("div", {
74
67
  className: "player-with-ext-layout ".concat(className),
75
68
  style: style,
@@ -115,7 +108,8 @@ export function FrontendPlayerWithExt(_ref) {
115
108
  begin = _ref2[0],
116
109
  end = _ref2[1];
117
110
  var videoUrl = new URL(segments[0].url);
118
- videoUrl.searchParams.set('begin', "".concat(begin));
111
+ videoUrl.searchParams.set('begin', "".concat(moment(begin).unix()));
112
+ videoUrl.searchParams.set('end', "".concat(moment(end).unix()));
119
113
  setState({
120
114
  begin: begin,
121
115
  end: end,
@@ -127,27 +121,22 @@ export function FrontendPlayerWithExt(_ref) {
127
121
  return;
128
122
  }
129
123
 
124
+ var endTime = moment(segments[segments.length - 1].endTime).unix();
125
+ var beginTime = moment(time).unix();
130
126
  var videoUrl = new URL(state.url);
131
- videoUrl.searchParams.set('begin', "".concat(time));
127
+ videoUrl.searchParams.set('begin', "".concat(beginTime));
128
+ videoUrl.searchParams.set('end', "".concat(endTime));
132
129
  setState(function (old) {
133
130
  return Object.assign(Object.assign({}, old), {
134
131
  url: videoUrl.toString()
135
132
  });
136
133
  });
137
- }, [state.url]);
134
+ }, [segments, state.url]);
138
135
  var ref = useRef();
139
-
140
- var update = function update() {
141
- var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
142
-
143
- for (var k in obj) {
144
- ref.current[k] = obj[k];
145
- }
146
-
147
- ref.current['seekTo'] = seekTo;
148
- updatePlayer(ref);
149
- };
150
-
136
+ var update = useCallback(function () {
137
+ return updatePlayer(ref);
138
+ }, [updatePlayer]);
139
+ console.log(state.url);
151
140
  return /*#__PURE__*/React.createElement("div", {
152
141
  className: "player-with-ext-layout ".concat(className),
153
142
  style: style,
@@ -161,9 +150,13 @@ export function FrontendPlayerWithExt(_ref) {
161
150
  url: state.url,
162
151
  hideContrallerBar: true,
163
152
  forwordRef: ref,
153
+ extActions: {
154
+ seekTo: seekTo
155
+ },
164
156
  begin: state.begin,
165
157
  end: state.end,
166
158
  onCanPlayerInit: update,
167
- customTimeLine: /*#__PURE__*/React.createElement(React.Fragment, null)
159
+ customTimeLine: /*#__PURE__*/React.createElement(React.Fragment, null),
160
+ type: "flv"
168
161
  })));
169
162
  }