@yimou6/common-ui 1.12.3 → 1.12.6

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 (79) hide show
  1. package/cdn/index.cdn.js +14 -14
  2. package/cdn/index.cdn.js.map +1 -1
  3. package/cdn/index.cdn.mjs +14 -14
  4. package/cdn/index.cdn.mjs.map +1 -1
  5. package/cdn/index.css +1 -1
  6. package/es/components/image-verification/index.mjs.map +1 -1
  7. package/es/components/index.d.ts +22 -21
  8. package/es/components/index.mjs +1 -0
  9. package/es/components/index.mjs.map +1 -1
  10. package/es/components/monitor-playback/index.d.ts +578 -0
  11. package/es/components/monitor-playback/index.mjs +8 -0
  12. package/es/components/monitor-playback/index.mjs.map +1 -0
  13. package/es/components/monitor-playback/src/monitor-playback.d.ts +30 -0
  14. package/es/components/monitor-playback/src/monitor-playback.mjs +44 -0
  15. package/es/components/monitor-playback/src/monitor-playback.mjs.map +1 -0
  16. package/es/components/monitor-playback/src/monitor-playback.vue.d.ts +578 -0
  17. package/es/components/monitor-playback/src/monitor-playback.vue.mjs +6 -0
  18. package/es/components/monitor-playback/src/monitor-playback.vue.mjs.map +1 -0
  19. package/es/components/monitor-playback/src/monitor-playback.vue2.mjs +271 -0
  20. package/es/components/monitor-playback/src/monitor-playback.vue2.mjs.map +1 -0
  21. package/es/components/monitor-playback/timeline-ruler/src/timeline-ruler.d.ts +25 -0
  22. package/es/components/monitor-playback/timeline-ruler/src/timeline-ruler.mjs +26 -0
  23. package/es/components/monitor-playback/timeline-ruler/src/timeline-ruler.mjs.map +1 -0
  24. package/es/components/monitor-playback/timeline-ruler/src/timeline-ruler.vue.d.ts +104 -0
  25. package/es/components/monitor-playback/timeline-ruler/src/timeline-ruler.vue.mjs +6 -0
  26. package/es/components/monitor-playback/timeline-ruler/src/timeline-ruler.vue.mjs.map +1 -0
  27. package/es/components/monitor-playback/timeline-ruler/src/timeline-ruler.vue2.mjs +507 -0
  28. package/es/components/monitor-playback/timeline-ruler/src/timeline-ruler.vue2.mjs.map +1 -0
  29. package/es/components/page-header/src/page-header.d.ts +2 -2
  30. package/es/components/page-header/src/page-header.mjs.map +1 -1
  31. package/es/components/select/index.d.ts +1 -1
  32. package/es/components/select/src/select.vue.d.ts +1 -1
  33. package/es/components/select/src/select.vue2.mjs +8 -1
  34. package/es/components/select/src/select.vue2.mjs.map +1 -1
  35. package/es/components/tzj-player/src/easyPlayer.vue2.mjs +2 -10
  36. package/es/components/tzj-player/src/easyPlayer.vue2.mjs.map +1 -1
  37. package/es/index.mjs +1 -0
  38. package/es/index.mjs.map +1 -1
  39. package/es/installer.mjs +2 -0
  40. package/es/installer.mjs.map +1 -1
  41. package/global.d.ts +2 -0
  42. package/lib/components/image-verification/index.js.map +1 -1
  43. package/lib/components/index.d.ts +22 -21
  44. package/lib/components/index.js +23 -21
  45. package/lib/components/index.js.map +1 -1
  46. package/lib/components/monitor-playback/index.d.ts +578 -0
  47. package/lib/components/monitor-playback/index.js +13 -0
  48. package/lib/components/monitor-playback/index.js.map +1 -0
  49. package/lib/components/monitor-playback/src/monitor-playback.d.ts +30 -0
  50. package/lib/components/monitor-playback/src/monitor-playback.js +46 -0
  51. package/lib/components/monitor-playback/src/monitor-playback.js.map +1 -0
  52. package/lib/components/monitor-playback/src/monitor-playback.vue.d.ts +578 -0
  53. package/lib/components/monitor-playback/src/monitor-playback.vue.js +10 -0
  54. package/lib/components/monitor-playback/src/monitor-playback.vue.js.map +1 -0
  55. package/lib/components/monitor-playback/src/monitor-playback.vue2.js +275 -0
  56. package/lib/components/monitor-playback/src/monitor-playback.vue2.js.map +1 -0
  57. package/lib/components/monitor-playback/timeline-ruler/src/timeline-ruler.d.ts +25 -0
  58. package/lib/components/monitor-playback/timeline-ruler/src/timeline-ruler.js +28 -0
  59. package/lib/components/monitor-playback/timeline-ruler/src/timeline-ruler.js.map +1 -0
  60. package/lib/components/monitor-playback/timeline-ruler/src/timeline-ruler.vue.d.ts +104 -0
  61. package/lib/components/monitor-playback/timeline-ruler/src/timeline-ruler.vue.js +10 -0
  62. package/lib/components/monitor-playback/timeline-ruler/src/timeline-ruler.vue.js.map +1 -0
  63. package/lib/components/monitor-playback/timeline-ruler/src/timeline-ruler.vue2.js +511 -0
  64. package/lib/components/monitor-playback/timeline-ruler/src/timeline-ruler.vue2.js.map +1 -0
  65. package/lib/components/page-header/src/page-header.d.ts +2 -2
  66. package/lib/components/page-header/src/page-header.js.map +1 -1
  67. package/lib/components/select/index.d.ts +1 -1
  68. package/lib/components/select/src/select.vue.d.ts +1 -1
  69. package/lib/components/select/src/select.vue2.js +8 -1
  70. package/lib/components/select/src/select.vue2.js.map +1 -1
  71. package/lib/components/tzj-player/src/easyPlayer.vue2.js +2 -10
  72. package/lib/components/tzj-player/src/easyPlayer.vue2.js.map +1 -1
  73. package/lib/index.js +27 -25
  74. package/lib/index.js.map +1 -1
  75. package/lib/installer.js +6 -4
  76. package/lib/installer.js.map +1 -1
  77. package/package.json +1 -1
  78. package/theme-default/i-monitor-playback.css +1 -0
  79. package/theme-default/index.css +1 -1
@@ -0,0 +1,275 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var vue = require('vue');
6
+ require('../timeline-ruler/src/timeline-ruler.vue.js');
7
+ var monitorPlayback = require('./monitor-playback.js');
8
+ var timelineRuler_vue_vue_type_script_setup_true_lang = require('../timeline-ruler/src/timeline-ruler.vue2.js');
9
+
10
+ var __defProp = Object.defineProperty;
11
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
12
+ const _hoisted_1 = { class: "replay-page" };
13
+ const _hoisted_2 = { class: "player-wrap" };
14
+ const _hoisted_3 = {
15
+ key: 0,
16
+ class: "player-error"
17
+ };
18
+ const _hoisted_4 = { class: "player-error__text" };
19
+ const MAX_RETRY = 3;
20
+ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
21
+ ...{
22
+ name: "IMonitorPlayback"
23
+ },
24
+ __name: "monitor-playback",
25
+ props: monitorPlayback.MonitorPlaybackProps,
26
+ setup(__props) {
27
+ const props = __props;
28
+ const playerContainerRef = vue.ref(null);
29
+ const timelineRef = vue.ref(null);
30
+ const kbpsInfo = vue.ref("-- KB/s");
31
+ const overlayTimeText = vue.ref("2026-05-02 15:02:17");
32
+ const errorMsg = vue.ref("");
33
+ let jessibuca = null;
34
+ let isDestroying = false;
35
+ let retryCount = 0;
36
+ const currentUrl = vue.ref(
37
+ props.url || "ws://cms.abaixun.com/websocket/0402b0580060f0df/0000000001.flv?starttime=20260502T150217&duration=3600&uuid=s1vwaoh0rse31rpgars33u1d68384buc"
38
+ );
39
+ let playStartTimeMs = 0;
40
+ let lastPtsMs = 0;
41
+ let playTimerId = null;
42
+ function pad(n) {
43
+ return String(n).padStart(2, "0");
44
+ }
45
+ __name(pad, "pad");
46
+ function syncStartTimeToUrl(unixSec) {
47
+ const d = new Date(unixSec * 1e3);
48
+ const val = `${pad(d.getFullYear()) + pad(d.getMonth() + 1) + pad(d.getDate())}T${pad(d.getHours())}${pad(d.getMinutes())}${pad(d.getSeconds())}`;
49
+ currentUrl.value = currentUrl.value.replace(
50
+ /starttime=\d{8}T\d{6}/i,
51
+ `starttime=${val}`
52
+ );
53
+ }
54
+ __name(syncStartTimeToUrl, "syncStartTimeToUrl");
55
+ function commitWithTime(sec) {
56
+ syncStartTimeToUrl(sec);
57
+ playStream(currentUrl.value);
58
+ }
59
+ __name(commitWithTime, "commitWithTime");
60
+ function fmtTF(s) {
61
+ const d = new Date(s * 1e3);
62
+ return `${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;
63
+ }
64
+ __name(fmtTF, "fmtTF");
65
+ function fmtD(s) {
66
+ const d = new Date(s * 1e3);
67
+ return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;
68
+ }
69
+ __name(fmtD, "fmtD");
70
+ function parseStartTime(url) {
71
+ const m = url.match(/starttime=(\d{8}T\d{6})/i);
72
+ if (m)
73
+ return new Date(
74
+ m[1].replace(
75
+ /^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})/,
76
+ "$1-$2-$3T$4:$5:$6"
77
+ )
78
+ );
79
+ const dm = url.match(/duration=(\d+)/i);
80
+ if (dm) return parseInt(dm[1]);
81
+ return null;
82
+ }
83
+ __name(parseStartTime, "parseStartTime");
84
+ async function playStream(url) {
85
+ if (!url) return;
86
+ if (isDestroying) {
87
+ await new Promise((r) => setTimeout(r, 600));
88
+ return playStream(url);
89
+ }
90
+ await destroyPlayer();
91
+ errorMsg.value = "";
92
+ const st = parseStartTime(url);
93
+ let dur = 3600;
94
+ const dm = url.match(/duration=(\d+)/i);
95
+ if (dm) dur = parseInt(dm[1]);
96
+ if (st instanceof Date) {
97
+ playStartTimeMs = st.getTime();
98
+ }
99
+ if (st && timelineRef.value) {
100
+ timelineRef.value.initRuler(st, dur);
101
+ }
102
+ createJessibuca(url);
103
+ }
104
+ __name(playStream, "playStream");
105
+ function createJessibuca(url) {
106
+ const win = window;
107
+ if (!win.Jessibuca) {
108
+ errorMsg.value = "Jessibuca \u64AD\u653E\u5668\u672A\u52A0\u8F7D";
109
+ return;
110
+ }
111
+ jessibuca = new win.Jessibuca({
112
+ container: playerContainerRef.value,
113
+ decoder: "./plugins/jessibuca/decoder.js",
114
+ videoBuffer: 0.2,
115
+ isResize: true,
116
+ isFullResize: true,
117
+ hasAudio: false,
118
+ debug: props.debug,
119
+ supportDblclickFullscreen: true,
120
+ showBandwidth: false,
121
+ operateBtns: {
122
+ fullscreen: true,
123
+ screenshot: true,
124
+ play: true,
125
+ audio: true,
126
+ record: true
127
+ },
128
+ // 优先使用 WASM 软解,支持 H.265
129
+ useMSE: false,
130
+ useWCS: false,
131
+ autoWasm: true,
132
+ isNotMute: true,
133
+ timeout: 10,
134
+ heartTimeout: 10,
135
+ loadingTimeout: 10,
136
+ heartTimeoutReplay: true,
137
+ heartTimeoutReplayTimes: MAX_RETRY,
138
+ loadingTimeoutReplay: true,
139
+ loadingTimeoutReplayTimes: MAX_RETRY
140
+ });
141
+ jessibuca.on("play", () => {
142
+ retryCount = 0;
143
+ });
144
+ jessibuca.on("timeUpdate", (ts) => {
145
+ lastPtsMs = ts;
146
+ });
147
+ jessibuca.on("kBps", (kbps) => {
148
+ kbpsInfo.value = `${Math.round(kbps)}KB/s`;
149
+ });
150
+ jessibuca.on("videoInfo", (info) => {
151
+ if (props.debug) {
152
+ console.log("[Jessibuca] videoInfo:", info);
153
+ }
154
+ });
155
+ jessibuca.on("error", (err) => {
156
+ console.error("[Jessibuca] error:", err);
157
+ const errCode = (err == null ? void 0 : err.code) || "";
158
+ const errMsg = String((err == null ? void 0 : err.message) || err || "");
159
+ if (errCode === "mediaSourceH265NotSupport" || errCode === "webcodecsH265NotSupport" || errMsg.includes("H265") || errMsg.includes("h265") || errMsg.includes("HEVC")) {
160
+ errorMsg.value = "\u5F53\u524D\u6D4F\u89C8\u5668\u4E0D\u652F\u6301 H.265/HEVC \u7F16\u7801\u64AD\u653E\uFF0C\u8BF7\u4F7F\u7528\u652F\u6301 HEVC \u786C\u89E3\u7684\u6D4F\u89C8\u5668";
161
+ destroyPlayer();
162
+ }
163
+ });
164
+ jessibuca.on("timeout", () => {
165
+ if (retryCount < MAX_RETRY) {
166
+ retryCount++;
167
+ console.warn(`[Jessibuca] \u8D85\u65F6\uFF0C\u7B2C ${retryCount}/${MAX_RETRY} \u6B21\u91CD\u8BD5...`);
168
+ }
169
+ });
170
+ jessibuca.on("streamEnd", () => {
171
+ if (props.debug) {
172
+ console.log("[Jessibuca] streamEnd: \u6D41\u7ED3\u675F");
173
+ }
174
+ });
175
+ jessibuca.play(url);
176
+ }
177
+ __name(createJessibuca, "createJessibuca");
178
+ async function destroyPlayer() {
179
+ if (!jessibuca) return;
180
+ isDestroying = true;
181
+ try {
182
+ await jessibuca.destroy();
183
+ } catch (_e) {
184
+ }
185
+ jessibuca = null;
186
+ const container = playerContainerRef.value;
187
+ if (container) {
188
+ container.innerHTML = "";
189
+ }
190
+ await new Promise((r) => setTimeout(r, 200));
191
+ isDestroying = false;
192
+ }
193
+ __name(destroyPlayer, "destroyPlayer");
194
+ function onTimelineSeek(sec) {
195
+ commitWithTime(sec);
196
+ }
197
+ __name(onTimelineSeek, "onTimelineSeek");
198
+ vue.onMounted(() => {
199
+ const win = window;
200
+ if (!win.Jessibuca) {
201
+ errorMsg.value = "Jessibuca \u64AD\u653E\u5668\u672A\u52A0\u8F7D\uFF0C\u8BF7\u68C0\u67E5 HTML \u662F\u5426\u5F15\u5165\u4E86 jessibuca.js";
202
+ return;
203
+ }
204
+ playStream(currentUrl.value);
205
+ startPlayTimer();
206
+ });
207
+ function startPlayTimer() {
208
+ playTimerId = setInterval(() => {
209
+ if (!jessibuca || !timelineRef.value) return;
210
+ if (playStartTimeMs > 0 && lastPtsMs >= 0) {
211
+ const timeMs = playStartTimeMs + lastPtsMs;
212
+ timelineRef.value.updateRulerTime(timeMs);
213
+ timelineRef.value.autoFollow();
214
+ overlayTimeText.value = `${fmtD(timeMs / 1e3)} ${fmtTF(timeMs / 1e3)}`;
215
+ }
216
+ }, 250);
217
+ }
218
+ __name(startPlayTimer, "startPlayTimer");
219
+ vue.onBeforeUnmount(() => {
220
+ if (playTimerId) clearInterval(playTimerId);
221
+ destroyPlayer();
222
+ });
223
+ return (_ctx, _cache) => {
224
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
225
+ vue.createCommentVNode(" \u64AD\u653E\u5668 "),
226
+ vue.createElementVNode("div", _hoisted_2, [
227
+ vue.withDirectives(vue.createElementVNode(
228
+ "div",
229
+ {
230
+ ref_key: "playerContainerRef",
231
+ ref: playerContainerRef,
232
+ class: "jessibuca-container"
233
+ },
234
+ null,
235
+ 512
236
+ /* NEED_PATCH */
237
+ ), [
238
+ [vue.vShow, !errorMsg.value]
239
+ ]),
240
+ errorMsg.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3, [
241
+ _cache[0] || (_cache[0] = vue.createElementVNode(
242
+ "div",
243
+ { class: "player-error__icon" },
244
+ "\u26A0",
245
+ -1
246
+ /* CACHED */
247
+ )),
248
+ vue.createElementVNode(
249
+ "div",
250
+ _hoisted_4,
251
+ vue.toDisplayString(errorMsg.value),
252
+ 1
253
+ /* TEXT */
254
+ )
255
+ ])) : vue.createCommentVNode("v-if", true)
256
+ ]),
257
+ vue.createCommentVNode(" \u523B\u5EA6\u5C3A\u65F6\u95F4\u8F74 "),
258
+ vue.createVNode(
259
+ timelineRuler_vue_vue_type_script_setup_true_lang.default,
260
+ {
261
+ ref_key: "timelineRef",
262
+ ref: timelineRef,
263
+ onSeek: onTimelineSeek
264
+ },
265
+ null,
266
+ 512
267
+ /* NEED_PATCH */
268
+ )
269
+ ]);
270
+ };
271
+ }
272
+ });
273
+
274
+ exports.default = _sfc_main;
275
+ //# sourceMappingURL=monitor-playback.vue2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitor-playback.vue2.js","sources":["../../../../../../../packages/components/monitor-playback/src/monitor-playback.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, ref } from \"vue\";\nimport ITimelineRuler from \"../timeline-ruler/src/timeline-ruler.vue\";\nimport { MonitorPlaybackProps } from \"./monitor-playback\";\n\ndefineOptions({\n name: \"IMonitorPlayback\",\n});\n\n// ==================== Props / State ====================\nconst props = defineProps(MonitorPlaybackProps);\n\n// ==================== DOM Refs ====================\nconst playerContainerRef = ref<HTMLDivElement | null>(null);\nconst timelineRef = ref<InstanceType<typeof ITimelineRuler> | null>(null);\n\n// ==================== UI State ====================\nconst kbpsInfo = ref(\"-- KB/s\");\nconst overlayTimeText = ref(\"2026-05-02 15:02:17\");\nconst errorMsg = ref(\"\");\n\n// ==================== Player State ====================\nlet jessibuca: any = null;\nlet isDestroying = false;\nlet retryCount = 0;\nconst MAX_RETRY = 3;\nconst currentUrl = ref(\n props.url ||\n \"ws://cms.abaixun.com/websocket/0402b0580060f0df/0000000001.flv?starttime=20260502T150217&duration=3600&uuid=s1vwaoh0rse31rpgars33u1d68384buc\",\n);\n\n// 记录播放起始时间,用于结合 timeUpdate 计算当前播放进度\nlet playStartTimeMs = 0;\nlet lastPtsMs = 0;\n\n// Timer ref\nlet playTimerId: ReturnType<typeof setInterval> | null = null;\n\n// ==================== Utils ====================\nfunction pad(n: number) {\n return String(n).padStart(2, \"0\");\n}\n\nfunction syncStartTimeToUrl(unixSec: number) {\n const d = new Date(unixSec * 1000);\n const val = `${\n pad(d.getFullYear()) + pad(d.getMonth() + 1) + pad(d.getDate())\n }T${pad(d.getHours())}${pad(d.getMinutes())}${pad(d.getSeconds())}`;\n currentUrl.value = currentUrl.value.replace(\n /starttime=\\d{8}T\\d{6}/i,\n `starttime=${val}`,\n );\n}\n\nfunction commitWithTime(sec: number) {\n syncStartTimeToUrl(sec);\n playStream(currentUrl.value);\n}\n\nfunction fmtTF(s: number) {\n const d = new Date(s * 1000);\n return `${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;\n}\n\nfunction fmtD(s: number) {\n const d = new Date(s * 1000);\n return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;\n}\n\n// ==================== Player Functions ====================\nfunction parseStartTime(url: string): Date | number | null {\n const m = url.match(/starttime=(\\d{8}T\\d{6})/i);\n if (m)\n return new Date(\n m[1].replace(\n /^(\\d{4})(\\d{2})(\\d{2})T(\\d{2})(\\d{2})(\\d{2})/,\n \"$1-$2-$3T$4:$5:$6\",\n ),\n );\n const dm = url.match(/duration=(\\d+)/i);\n if (dm) return parseInt(dm[1]);\n return null;\n}\n\nasync function playStream(url: string) {\n if (!url) return;\n\n // 如果正在销毁,延迟等待后再执行\n if (isDestroying) {\n await new Promise<void>((r) => setTimeout(r, 600));\n return playStream(url);\n }\n\n await destroyPlayer();\n errorMsg.value = \"\";\n\n const st = parseStartTime(url);\n let dur = 3600;\n const dm = url.match(/duration=(\\d+)/i);\n if (dm) dur = parseInt(dm[1]);\n\n // 记录播放起始时间\n if (st instanceof Date) {\n playStartTimeMs = st.getTime();\n }\n\n if (st && timelineRef.value) {\n timelineRef.value.initRuler(st as Date, dur);\n }\n\n // 创建 Jessibuca 实例\n createJessibuca(url);\n}\n\nfunction createJessibuca(url: string) {\n const win = window as any;\n if (!win.Jessibuca) {\n errorMsg.value = \"Jessibuca 播放器未加载\";\n return;\n }\n\n jessibuca = new win.Jessibuca({\n container: playerContainerRef.value!,\n decoder: \"./plugins/jessibuca/decoder.js\",\n videoBuffer: 0.2,\n isResize: true,\n isFullResize: true,\n hasAudio: false,\n debug: props.debug,\n supportDblclickFullscreen: true,\n showBandwidth: false,\n operateBtns: {\n fullscreen: true,\n screenshot: true,\n play: true,\n audio: true,\n record: true,\n },\n // 优先使用 WASM 软解,支持 H.265\n useMSE: false,\n useWCS: false,\n autoWasm: true,\n isNotMute: true,\n timeout: 10,\n heartTimeout: 10,\n loadingTimeout: 10,\n heartTimeoutReplay: true,\n heartTimeoutReplayTimes: MAX_RETRY,\n loadingTimeoutReplay: true,\n loadingTimeoutReplayTimes: MAX_RETRY,\n });\n\n // ---- 事件监听 ----\n jessibuca.on(\"play\", () => {\n retryCount = 0;\n });\n\n jessibuca.on(\"timeUpdate\", (ts: number) => {\n // ts 是当前帧的 pts(毫秒)\n lastPtsMs = ts;\n });\n\n jessibuca.on(\"kBps\", (kbps: number) => {\n kbpsInfo.value = `${Math.round(kbps)}KB/s`;\n });\n\n jessibuca.on(\"videoInfo\", (info: any) => {\n if (props.debug) {\n console.log(\"[Jessibuca] videoInfo:\", info);\n }\n });\n\n jessibuca.on(\"error\", (err: any) => {\n console.error(\"[Jessibuca] error:\", err);\n const errCode = err?.code || \"\";\n const errMsg = String(err?.message || err || \"\");\n if (\n errCode === \"mediaSourceH265NotSupport\" ||\n errCode === \"webcodecsH265NotSupport\" ||\n errMsg.includes(\"H265\") ||\n errMsg.includes(\"h265\") ||\n errMsg.includes(\"HEVC\")\n ) {\n errorMsg.value =\n \"当前浏览器不支持 H.265/HEVC 编码播放,请使用支持 HEVC 硬解的浏览器\";\n destroyPlayer();\n }\n });\n\n jessibuca.on(\"timeout\", () => {\n if (retryCount < MAX_RETRY) {\n retryCount++;\n console.warn(`[Jessibuca] 超时,第 ${retryCount}/${MAX_RETRY} 次重试...`);\n // Jessibuca 内置重连,此处仅记录\n }\n });\n\n jessibuca.on(\"streamEnd\", () => {\n if (props.debug) {\n console.log(\"[Jessibuca] streamEnd: 流结束\");\n }\n });\n\n // 开始播放\n jessibuca.play(url);\n}\n\nasync function destroyPlayer() {\n if (!jessibuca) return;\n isDestroying = true;\n try {\n await jessibuca.destroy();\n } catch (_e) {}\n jessibuca = null;\n\n // destroy 完成后再清理容器内残留 DOM,避免 removeChild 冲突\n const container = playerContainerRef.value;\n if (container) {\n container.innerHTML = \"\";\n }\n\n // 等待 WebGL/Worker 资源释放\n await new Promise<void>((r) => setTimeout(r, 200));\n isDestroying = false;\n}\n\n/** 时间轴 seek 跳转 */\nfunction onTimelineSeek(sec: number) {\n commitWithTime(sec);\n}\n\n// ==================== Lifecycle ====================\nonMounted(() => {\n const win = window as any;\n if (!win.Jessibuca) {\n errorMsg.value =\n \"Jessibuca 播放器未加载,请检查 HTML 是否引入了 jessibuca.js\";\n return;\n }\n playStream(currentUrl.value);\n startPlayTimer();\n});\n\n/** 定时同步播放进度到时间轴 */\nfunction startPlayTimer() {\n playTimerId = setInterval(() => {\n if (!jessibuca || !timelineRef.value) return;\n\n // 使用 playStartTimeMs + lastPtsMs 计算当前播放时间\n // 对于回放流,pts 通常是从0开始的偏移量\n if (playStartTimeMs > 0 && lastPtsMs >= 0) {\n const timeMs = playStartTimeMs + lastPtsMs;\n timelineRef.value.updateRulerTime(timeMs);\n timelineRef.value.autoFollow();\n\n // 更新叠加时间\n overlayTimeText.value = `${fmtD(timeMs / 1000)} ${fmtTF(timeMs / 1000)}`;\n }\n }, 250);\n}\n\nonBeforeUnmount(() => {\n if (playTimerId) clearInterval(playTimerId);\n destroyPlayer();\n});\n</script>\n\n<template>\n <div class=\"replay-page\">\n <!-- 播放器 -->\n <div class=\"player-wrap\">\n <div\n v-show=\"!errorMsg\"\n ref=\"playerContainerRef\"\n class=\"jessibuca-container\"\n />\n <div v-if=\"errorMsg\" class=\"player-error\">\n <div class=\"player-error__icon\">⚠</div>\n <div class=\"player-error__text\">{{ errorMsg }}</div>\n </div>\n </div>\n\n <!-- 刻度尺时间轴 -->\n <ITimelineRuler ref=\"timelineRef\" @seek=\"onTimelineSeek\" />\n </div>\n</template>\n"],"names":["ref","onMounted","onBeforeUnmount","_openBlock","_createElementBlock","_createCommentVNode","_createElementVNode","_toDisplayString","_createVNode","ITimelineRuler"],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { ExtractPropTypes } from "vue";
2
+ import type TimelineRuler from "./timeline-ruler.vue";
3
+ export declare const TimelineRulerProps: {
4
+ startTime: {
5
+ type: DateConstructor;
6
+ default: null;
7
+ };
8
+ duration: {
9
+ type: NumberConstructor;
10
+ default: number;
11
+ };
12
+ currentTimeMs: {
13
+ type: NumberConstructor;
14
+ default: null;
15
+ };
16
+ };
17
+ export type TimelineRulerPropsType = ExtractPropTypes<typeof TimelineRulerProps>;
18
+ export type TimelineRulerInstance = InstanceType<typeof TimelineRuler>;
19
+ export interface TickCfg {
20
+ iv: number;
21
+ h: number;
22
+ w: number;
23
+ c: string;
24
+ lbl?: boolean;
25
+ }
@@ -0,0 +1,28 @@
1
+ 'use strict';
2
+
3
+ const TimelineRulerProps = {
4
+ /**
5
+ * 起始时间(Date 对象)
6
+ */
7
+ startTime: {
8
+ type: Date,
9
+ default: null
10
+ },
11
+ /**
12
+ * 持续时长(秒)
13
+ */
14
+ duration: {
15
+ type: Number,
16
+ default: 3600
17
+ },
18
+ /**
19
+ * 当前播放位置(毫秒时间戳),由外部同步
20
+ */
21
+ currentTimeMs: {
22
+ type: Number,
23
+ default: null
24
+ }
25
+ };
26
+
27
+ exports.TimelineRulerProps = TimelineRulerProps;
28
+ //# sourceMappingURL=timeline-ruler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline-ruler.js","sources":["../../../../../../../../packages/components/monitor-playback/timeline-ruler/src/timeline-ruler.ts"],"sourcesContent":["import type { ExtractPropTypes } from \"vue\";\n\nimport type TimelineRuler from \"./timeline-ruler.vue\";\n\nexport const TimelineRulerProps = {\n /**\n * 起始时间(Date 对象)\n */\n startTime: {\n type: Date,\n default: null,\n },\n /**\n * 持续时长(秒)\n */\n duration: {\n type: Number,\n default: 3600,\n },\n /**\n * 当前播放位置(毫秒时间戳),由外部同步\n */\n currentTimeMs: {\n type: Number,\n default: null,\n },\n};\n\nexport type TimelineRulerPropsType = ExtractPropTypes<\n typeof TimelineRulerProps\n>;\nexport type TimelineRulerInstance = InstanceType<typeof TimelineRuler>;\n\n/** 刻度配置项 */\nexport interface TickCfg {\n iv: number;\n h: number;\n w: number;\n c: string;\n lbl?: boolean;\n}\n"],"names":[],"mappings":";;AAIO,MAAM,kBAAqB,GAAA;AAAA;AAAA;AAAA;AAAA,EAIhC,SAAW,EAAA;AAAA,IACT,IAAM,EAAA,IAAA;AAAA,IACN,OAAS,EAAA;AAAA,GACX;AAAA;AAAA;AAAA;AAAA,EAIA,QAAU,EAAA;AAAA,IACR,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA;AAAA,GACX;AAAA;AAAA;AAAA;AAAA,EAIA,aAAe,EAAA;AAAA,IACb,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA;AAAA;AAEb;;;;"}
@@ -0,0 +1,104 @@
1
+ import type { TickCfg } from "./timeline-ruler";
2
+ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
3
+ startTime: {
4
+ type: DateConstructor;
5
+ default: null;
6
+ };
7
+ duration: {
8
+ type: NumberConstructor;
9
+ default: number;
10
+ };
11
+ currentTimeMs: {
12
+ type: NumberConstructor;
13
+ default: null;
14
+ };
15
+ }>, {
16
+ props: import("@vue/shared").LooseRequired<Readonly<import("vue").ExtractPropTypes<{
17
+ startTime: {
18
+ type: DateConstructor;
19
+ default: null;
20
+ };
21
+ duration: {
22
+ type: NumberConstructor;
23
+ default: number;
24
+ };
25
+ currentTimeMs: {
26
+ type: NumberConstructor;
27
+ default: null;
28
+ };
29
+ }>> & Readonly<{
30
+ onSeek?: ((...args: any[]) => any) | undefined;
31
+ }> & {}>;
32
+ emit: (event: "seek", ...args: any[]) => void;
33
+ canvasRef: import("vue").Ref<HTMLCanvasElement | null, HTMLCanvasElement | null>;
34
+ rulerAreaRef: import("vue").Ref<HTMLElement | null, HTMLElement | null>;
35
+ recTrackRef: import("vue").Ref<HTMLElement | null, HTMLElement | null>;
36
+ timeBigHtml: import("vue").Ref<string, string>;
37
+ timeDateText: import("vue").Ref<string, string>;
38
+ tipShow: import("vue").Ref<boolean, boolean>;
39
+ tipText: import("vue").Ref<string, string>;
40
+ tipElProxy: Element | null;
41
+ tipStyle: import("vue").Ref<Record<string, string>, Record<string, string>>;
42
+ zoomTagText: import("vue").Ref<string, string>;
43
+ RH: number;
44
+ BASE_Y: number;
45
+ FRIC: number;
46
+ BASE_TIME: number | null;
47
+ pph: number;
48
+ tPph: number;
49
+ offX: number;
50
+ dragging: boolean;
51
+ dragSX: number;
52
+ dragSO: number;
53
+ vel: number;
54
+ lpX: number;
55
+ lpT: number;
56
+ mX: number;
57
+ mIn: boolean;
58
+ _startTime: Date | null;
59
+ _durationSec: number;
60
+ _currentPlayMs: number | null;
61
+ cvs: HTMLCanvasElement | null;
62
+ cx: CanvasRenderingContext2D | null;
63
+ dpr: number;
64
+ rafId: number | null;
65
+ pad: (n: number) => string;
66
+ fmtT: (s: number) => string;
67
+ fmtTF: (s: number) => string;
68
+ fmtD: (s: number) => string;
69
+ dateToSec: (dt: Date) => number;
70
+ t2x: (t: number) => number;
71
+ x2t: (x: number) => number;
72
+ resize: () => void;
73
+ tCfg: () => Record<string, TickCfg>;
74
+ draw: () => void;
75
+ renderRecSegs: (w?: number) => void;
76
+ loop: () => void;
77
+ gx: (e: MouseEvent | TouchEvent) => number;
78
+ onDown: (e: MouseEvent | TouchEvent) => void;
79
+ onMove: (e: MouseEvent | TouchEvent) => void;
80
+ onUp: () => void;
81
+ initRuler: (startTimeDate: Date, durationSeconds?: number) => void;
82
+ updateRulerTime: (timeMs: number) => void;
83
+ autoFollow: () => void;
84
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "seek"[], "seek", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
85
+ startTime: {
86
+ type: DateConstructor;
87
+ default: null;
88
+ };
89
+ duration: {
90
+ type: NumberConstructor;
91
+ default: number;
92
+ };
93
+ currentTimeMs: {
94
+ type: NumberConstructor;
95
+ default: null;
96
+ };
97
+ }>> & Readonly<{
98
+ onSeek?: ((...args: any[]) => any) | undefined;
99
+ }>, {
100
+ duration: number;
101
+ startTime: Date;
102
+ currentTimeMs: number;
103
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
104
+ export default _default;
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var timelineRuler_vue_vue_type_script_setup_true_lang = require('./timeline-ruler.vue2.js');
6
+
7
+
8
+
9
+ exports.default = timelineRuler_vue_vue_type_script_setup_true_lang.default;
10
+ //# sourceMappingURL=timeline-ruler.vue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline-ruler.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}