@yimou6/common-ui 1.12.4 → 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.
@@ -11,6 +11,12 @@ var __defProp = Object.defineProperty;
11
11
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
12
12
  const _hoisted_1 = { class: "replay-page" };
13
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;
14
20
  var _sfc_main = /* @__PURE__ */ vue.defineComponent({
15
21
  ...{
16
22
  name: "IMonitorPlayback"
@@ -19,15 +25,19 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
19
25
  props: monitorPlayback.MonitorPlaybackProps,
20
26
  setup(__props) {
21
27
  const props = __props;
22
- const videoRef = vue.ref(null);
28
+ const playerContainerRef = vue.ref(null);
23
29
  const timelineRef = vue.ref(null);
24
30
  const kbpsInfo = vue.ref("-- KB/s");
25
31
  const overlayTimeText = vue.ref("2026-05-02 15:02:17");
26
- let mpegts = null;
27
- let player = null;
32
+ const errorMsg = vue.ref("");
33
+ let jessibuca = null;
34
+ let isDestroying = false;
35
+ let retryCount = 0;
28
36
  const currentUrl = vue.ref(
29
37
  props.url || "ws://cms.abaixun.com/websocket/0402b0580060f0df/0000000001.flv?starttime=20260502T150217&duration=3600&uuid=s1vwaoh0rse31rpgars33u1d68384buc"
30
38
  );
39
+ let playStartTimeMs = 0;
40
+ let lastPtsMs = 0;
31
41
  let playTimerId = null;
32
42
  function pad(n) {
33
43
  return String(n).padStart(2, "0");
@@ -71,89 +81,134 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
71
81
  return null;
72
82
  }
73
83
  __name(parseStartTime, "parseStartTime");
74
- function playStream(url) {
84
+ async function playStream(url) {
75
85
  if (!url) return;
76
- if (!mpegts || !mpegts.isSupported()) return;
77
- destroyPlayer();
86
+ if (isDestroying) {
87
+ await new Promise((r) => setTimeout(r, 600));
88
+ return playStream(url);
89
+ }
90
+ await destroyPlayer();
91
+ errorMsg.value = "";
78
92
  const st = parseStartTime(url);
79
93
  let dur = 3600;
80
94
  const dm = url.match(/duration=(\d+)/i);
81
95
  if (dm) dur = parseInt(dm[1]);
96
+ if (st instanceof Date) {
97
+ playStartTimeMs = st.getTime();
98
+ }
82
99
  if (st && timelineRef.value) {
83
100
  timelineRef.value.initRuler(st, dur);
84
101
  }
85
- player = mpegts.createPlayer(
86
- { type: "flv", isLive: false, hasAudio: false, url },
87
- {
88
- enableStashBuffer: false,
89
- stashInitialSize: 128,
90
- lazyLoadMaxDuration: 1800,
91
- seekType: "range"
92
- }
93
- );
94
- player.attachMediaElement(videoRef.value);
95
- player.on(mpegts.Events.ERROR, () => {
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
96
140
  });
97
- player.on(mpegts.Events.LOADING_COMPLETE, () => {
141
+ jessibuca.on("play", () => {
142
+ retryCount = 0;
98
143
  });
99
- player.on(mpegts.Events.MEDIA_INFO, (_e) => {
144
+ jessibuca.on("timeUpdate", (ts) => {
145
+ lastPtsMs = ts;
100
146
  });
101
- player.on(mpegts.Events.STATISTICS_INFO, (s) => {
102
- kbpsInfo.value = `${Math.round(s.speed / 1024)}KB/s`;
147
+ jessibuca.on("kBps", (kbps) => {
148
+ kbpsInfo.value = `${Math.round(kbps)}KB/s`;
103
149
  });
104
- player.load();
105
- videoRef.value.play().catch(() => {
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
+ }
106
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);
107
176
  }
108
- __name(playStream, "playStream");
109
- function destroyPlayer() {
110
- if (!player) return;
177
+ __name(createJessibuca, "createJessibuca");
178
+ async function destroyPlayer() {
179
+ if (!jessibuca) return;
180
+ isDestroying = true;
111
181
  try {
112
- player.pause();
113
- player.unload();
114
- player.detachMediaElement();
115
- player.destroy();
182
+ await jessibuca.destroy();
116
183
  } catch (_e) {
117
184
  }
118
- player = null;
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;
119
192
  }
120
193
  __name(destroyPlayer, "destroyPlayer");
121
194
  function onTimelineSeek(sec) {
122
195
  commitWithTime(sec);
123
196
  }
124
197
  __name(onTimelineSeek, "onTimelineSeek");
125
- const win = window;
126
- vue.onMounted(async () => {
127
- if (typeof window !== "undefined" && !win.mpegts) {
128
- const script = document.createElement("script");
129
- script.src = "https://cdn.jsdelivr.net/npm/mpegts.js@1.7.3/dist/mpegts.min.js";
130
- script.onload = () => {
131
- mpegts = win.mpegts;
132
- playStream(currentUrl.value);
133
- startPlayTimer();
134
- };
135
- script.onerror = () => {
136
- };
137
- document.head.appendChild(script);
138
- } else {
139
- mpegts = win.mpegts;
140
- playStream(currentUrl.value);
141
- startPlayTimer();
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;
142
203
  }
204
+ playStream(currentUrl.value);
205
+ startPlayTimer();
143
206
  });
144
207
  function startPlayTimer() {
145
208
  playTimerId = setInterval(() => {
146
- if (!player || !videoRef.value || videoRef.value.paused || !timelineRef.value)
147
- return;
148
- const baseMatch = currentUrl.value.match(/starttime=(\d{8}T\d{6})/i);
149
- if (baseMatch && baseMatch[1]) {
150
- const base = new Date(
151
- baseMatch[1].replace(
152
- /^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})/,
153
- "$1-$2-$3T$4:$5:$6"
154
- )
155
- );
156
- const timeMs = base.getTime() + videoRef.value.currentTime * (videoRef.value.playbackRate || 1) * 1e3;
209
+ if (!jessibuca || !timelineRef.value) return;
210
+ if (playStartTimeMs > 0 && lastPtsMs >= 0) {
211
+ const timeMs = playStartTimeMs + lastPtsMs;
157
212
  timelineRef.value.updateRulerTime(timeMs);
158
213
  timelineRef.value.autoFollow();
159
214
  overlayTimeText.value = `${fmtD(timeMs / 1e3)} ${fmtTF(timeMs / 1e3)}`;
@@ -169,21 +224,35 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
169
224
  return vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
170
225
  vue.createCommentVNode(" \u64AD\u653E\u5668 "),
171
226
  vue.createElementVNode("div", _hoisted_2, [
172
- vue.createElementVNode(
173
- "video",
227
+ vue.withDirectives(vue.createElementVNode(
228
+ "div",
174
229
  {
175
- id: "player",
176
- ref_key: "videoRef",
177
- ref: videoRef,
178
- muted: "",
179
- controls: "",
180
- onClick: _cache[0] || (_cache[0] = vue.withModifiers(() => {
181
- }, ["prevent"]))
230
+ ref_key: "playerContainerRef",
231
+ ref: playerContainerRef,
232
+ class: "jessibuca-container"
182
233
  },
183
234
  null,
184
235
  512
185
236
  /* NEED_PATCH */
186
- )
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)
187
256
  ]),
188
257
  vue.createCommentVNode(" \u523B\u5EA6\u5C3A\u65F6\u95F4\u8F74 "),
189
258
  vue.createVNode(
@@ -1 +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 videoRef = ref<HTMLVideoElement | 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\");\n\n// ==================== Player State ====================\nlet mpegts: any = null;\nlet player: any = null;\nconst currentUrl = ref(\n props.url ||\n \"ws://cms.abaixun.com/websocket/0402b0580060f0df/0000000001.flv?starttime=20260502T150217&duration=3600&uuid=s1vwaoh0rse31rpgars33u1d68384buc\",\n);\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\nfunction playStream(url: string) {\n if (!url) return;\n if (!mpegts || !mpegts.isSupported()) return;\n\n destroyPlayer();\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 if (st && timelineRef.value) {\n timelineRef.value.initRuler(st as Date, dur);\n }\n\n player = mpegts.createPlayer(\n { type: \"flv\", isLive: false, hasAudio: false, url },\n {\n enableStashBuffer: false,\n stashInitialSize: 128,\n lazyLoadMaxDuration: 1800,\n seekType: \"range\",\n },\n );\n player.attachMediaElement(videoRef.value!);\n\n player.on(mpegts.Events.ERROR, () => {});\n player.on(mpegts.Events.LOADING_COMPLETE, () => {});\n player.on(mpegts.Events.MEDIA_INFO, (_e: unknown) => {});\n player.on(mpegts.Events.STATISTICS_INFO, (s: any) => {\n kbpsInfo.value = `${Math.round(s.speed / 1024)}KB/s`;\n });\n\n player.load();\n videoRef.value!.play().catch(() => {});\n}\n\nfunction destroyPlayer() {\n if (!player) return;\n try {\n player.pause();\n player.unload();\n player.detachMediaElement();\n player.destroy();\n } catch (_e) {}\n player = null;\n}\n\n/** 时间轴 seek 跳转 */\nfunction onTimelineSeek(sec: number) {\n commitWithTime(sec);\n}\n\n// ==================== Lifecycle ====================\n// mpegts is loaded dynamically via script tag\nconst win = window as any;\nonMounted(async () => {\n // 加载 mpegts.js\n if (typeof window !== \"undefined\" && !win.mpegts) {\n const script = document.createElement(\"script\");\n script.src =\n \"https://cdn.jsdelivr.net/npm/mpegts.js@1.7.3/dist/mpegts.min.js\";\n script.onload = () => {\n mpegts = win.mpegts;\n playStream(currentUrl.value);\n startPlayTimer();\n };\n script.onerror = () => {};\n document.head.appendChild(script);\n } else {\n mpegts = win.mpegts;\n playStream(currentUrl.value);\n startPlayTimer();\n }\n});\n\n/** 定时同步播放进度到时间轴 */\nfunction startPlayTimer() {\n playTimerId = setInterval(() => {\n if (\n !player ||\n !videoRef.value ||\n videoRef.value.paused ||\n !timelineRef.value\n )\n return;\n const baseMatch = currentUrl.value.match(/starttime=(\\d{8}T\\d{6})/i);\n if (baseMatch && baseMatch[1]) {\n const base = new Date(\n baseMatch[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 timeMs =\n base.getTime() +\n videoRef.value!.currentTime *\n (videoRef.value!.playbackRate || 1) *\n 1000;\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 <video id=\"player\" ref=\"videoRef\" muted controls @click.prevent />\n </div>\n\n <!-- 刻度尺时间轴 -->\n <ITimelineRuler ref=\"timelineRef\" @seek=\"onTimelineSeek\" />\n </div>\n</template>\n"],"names":["ref","onMounted","onBeforeUnmount","_openBlock","_createElementBlock","_createCommentVNode","_createElementVNode","_createVNode","ITimelineRuler"],"mappings":"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"}
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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"}
@@ -705,7 +705,7 @@ export declare const ISelect: import("../../types").SFCWithInstall<import("vue")
705
705
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
706
706
  visibleChange: (visible: boolean) => boolean;
707
707
  removeTag: (tagValue: any) => any;
708
- 'update:modelValue': (value: any) => any;
708
+ "update:modelValue": (value: any) => any;
709
709
  clear: () => true;
710
710
  blur: (evt: MouseEvent) => MouseEvent;
711
711
  focus: (evt: MouseEvent) => MouseEvent;
@@ -705,7 +705,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
705
705
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
706
706
  visibleChange: (visible: boolean) => boolean;
707
707
  removeTag: (tagValue: any) => any;
708
- 'update:modelValue': (value: any) => any;
708
+ "update:modelValue": (value: any) => any;
709
709
  clear: () => true;
710
710
  blur: (evt: MouseEvent) => MouseEvent;
711
711
  focus: (evt: MouseEvent) => MouseEvent;
@@ -31,7 +31,14 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
31
31
  const emits = __emit;
32
32
  const dictStore = vue.inject(provide.DICT_STORE);
33
33
  const bindAttrs = vue.computed(() => {
34
- return util.excludeObjectKeys(props, ["data", "dataCallback", "optLabel", "optValue", "modelValue", "action"]);
34
+ return util.excludeObjectKeys(props, [
35
+ "data",
36
+ "dataCallback",
37
+ "optLabel",
38
+ "optValue",
39
+ "modelValue",
40
+ "action"
41
+ ]);
35
42
  });
36
43
  const _loading = vue.ref(false);
37
44
  const optionList = vue.ref([]);
@@ -1 +1 @@
1
- {"version":3,"file":"select.vue2.js","sources":["../../../../../../../packages/components/select/src/select.vue"],"sourcesContent":["<script lang=\"ts\" setup>\n import { ElOption, ElSelect } from 'element-plus';\n import { computed, inject, nextTick, ref, watch, watchEffect } from 'vue';\n import { DICT_STORE, excludeObjectKeys } from '../../../utils';\n import { SelectProps } from './select';\n\n defineOptions({\n name: 'ISelect',\n });\n const props = defineProps(SelectProps);\n const emits = defineEmits({\n visibleChange: (visible: boolean) => visible,\n removeTag: (tagValue: any) => tagValue,\n 'update:modelValue': (value: any) => value,\n clear: () => true,\n blur: (evt: MouseEvent) => evt,\n focus: (evt: MouseEvent) => evt,\n change: (value: any) => value,\n });\n const dictStore = inject(DICT_STORE);\n\n const bindAttrs = computed(() => {\n return excludeObjectKeys(props, ['data', 'dataCallback', 'optLabel', 'optValue', 'modelValue', 'action']);\n });\n\n const _loading = ref(false);\n const optionList = ref<any[]>([]);\n const selectRef = ref();\n const selectValue = ref(props.modelValue);\n\n watchEffect(() => {\n _loading.value = props.loading;\n });\n watch(\n () => props.data,\n () => setOptions(),\n { deep: true, immediate: true },\n );\n watch(\n () => props.modelValue,\n (val: any) => (selectValue.value = val),\n { deep: true, immediate: true },\n );\n\n defineExpose({\n getRef() {\n return selectRef.value;\n },\n focus() {\n selectRef.value?.focus();\n },\n blur() {\n selectRef.value?.blur();\n },\n });\n\n const handleChange = (value: any) => {\n emits('update:modelValue', value);\n emits('change', value);\n };\n\n async function setOptions() {\n _loading.value = true;\n const list = await getList();\n optionList.value = props.dataCallback ? props.dataCallback(list) : list;\n await nextTick();\n _loading.value = false;\n }\n\n async function getList() {\n if (Array.isArray(props.data)) {\n return props.data;\n } else {\n if (props?.action) return await props.action?.getDict(props.data);\n if (dictStore) return await dictStore.getDict(props.data);\n return [];\n }\n }\n function handleVisibleChange(visible: boolean) {\n emits('visibleChange', visible);\n }\n function handleRemoveTag(tagValue: any) {\n emits('removeTag', tagValue);\n }\n</script>\n\n<template>\n <ElSelect\n ref=\"selectRef\"\n v-model=\"selectValue\"\n class=\"i-select\"\n v-bind=\"bindAttrs\"\n :loading=\"_loading\"\n @change=\"handleChange\"\n @visible-change=\"handleVisibleChange\"\n @remove-tag=\"handleRemoveTag\"\n @clear=\"emits('clear')\"\n @blur=\"event => emits('blur', event)\"\n @focus=\"event => emits('focus', event)\"\n >\n <ElOption\n v-for=\"(option, index) of optionList\"\n :key=\"option[optValue]\"\n :label=\"option[optLabel]\"\n :value=\"option[optValue]\"\n :disabled=\"option?.disabled\"\n >\n <template #default>\n <slot name=\"default\" :data=\"option\" :index=\"index\" />\n </template>\n </ElOption>\n </ElSelect>\n</template>\n"],"names":["inject","DICT_STORE","computed","excludeObjectKeys","ref","watchEffect","watch","nextTick","_openBlock","_createBlock","_unref","_mergeProps","_createElementBlock","_Fragment","_renderList","ElOption","optValue","optLabel","_renderSlot"],"mappings":"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"}
1
+ {"version":3,"file":"select.vue2.js","sources":["../../../../../../../packages/components/select/src/select.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { ElOption, ElSelect } from \"element-plus\";\nimport { computed, inject, nextTick, ref, watch, watchEffect } from \"vue\";\nimport { DICT_STORE, excludeObjectKeys } from \"../../../utils\";\nimport { SelectProps } from \"./select\";\n\ndefineOptions({\n name: \"ISelect\",\n});\nconst props = defineProps(SelectProps);\nconst emits = defineEmits({\n visibleChange: (visible: boolean) => visible,\n removeTag: (tagValue: any) => tagValue,\n \"update:modelValue\": (value: any) => value,\n clear: () => true,\n blur: (evt: MouseEvent) => evt,\n focus: (evt: MouseEvent) => evt,\n change: (value: any) => value,\n});\nconst dictStore = inject(DICT_STORE);\n\nconst bindAttrs = computed(() => {\n return excludeObjectKeys(props, [\n \"data\",\n \"dataCallback\",\n \"optLabel\",\n \"optValue\",\n \"modelValue\",\n \"action\",\n ]);\n});\n\nconst _loading = ref(false);\nconst optionList = ref<any[]>([]);\nconst selectRef = ref();\nconst selectValue = ref(props.modelValue);\n\nwatchEffect(() => {\n _loading.value = props.loading;\n});\nwatch(\n () => props.data,\n () => setOptions(),\n { deep: true, immediate: true },\n);\nwatch(\n () => props.modelValue,\n (val: any) => (selectValue.value = val),\n { deep: true, immediate: true },\n);\n\ndefineExpose({\n getRef() {\n return selectRef.value;\n },\n focus() {\n selectRef.value?.focus();\n },\n blur() {\n selectRef.value?.blur();\n },\n});\n\nconst handleChange = (value: any) => {\n emits(\"update:modelValue\", value);\n emits(\"change\", value);\n};\n\nasync function setOptions() {\n _loading.value = true;\n const list = await getList();\n optionList.value = props.dataCallback ? props.dataCallback(list) : list;\n await nextTick();\n _loading.value = false;\n}\n\nasync function getList() {\n if (Array.isArray(props.data)) {\n return props.data;\n } else {\n if (props?.action) return await props.action?.getDict(props.data);\n if (dictStore) return await dictStore.getDict(props.data);\n return [];\n }\n}\nfunction handleVisibleChange(visible: boolean) {\n emits(\"visibleChange\", visible);\n}\nfunction handleRemoveTag(tagValue: any) {\n emits(\"removeTag\", tagValue);\n}\n</script>\n\n<template>\n <ElSelect\n ref=\"selectRef\"\n v-model=\"selectValue\"\n class=\"i-select\"\n v-bind=\"bindAttrs\"\n :loading=\"_loading\"\n @change=\"handleChange\"\n @visible-change=\"handleVisibleChange\"\n @remove-tag=\"handleRemoveTag\"\n @clear=\"emits('clear')\"\n @blur=\"(event) => emits('blur', event)\"\n @focus=\"(event) => emits('focus', event)\"\n >\n <ElOption\n v-for=\"(option, index) of optionList\"\n :key=\"option[optValue]\"\n :label=\"option[optLabel]\"\n :value=\"option[optValue]\"\n :disabled=\"option?.disabled\"\n >\n <template #default>\n <slot name=\"default\" :data=\"option\" :index=\"index\" />\n </template>\n </ElOption>\n </ElSelect>\n</template>\n"],"names":["inject","DICT_STORE","computed","excludeObjectKeys","ref","watchEffect","watch","nextTick","_openBlock","_createBlock","_unref","_mergeProps","_createElementBlock","_Fragment","_renderList","ElOption","optValue","optLabel","_renderSlot"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yimou6/common-ui",
3
- "version": "1.12.4",
3
+ "version": "1.12.6",
4
4
  "description": "Vue3 Component Library",
5
5
  "author": "yimou6",
6
6
  "license": "MIT",
@@ -1 +1 @@
1
- .i-monitor-playback,.replay-page{display:flex;flex-direction:column;width:100%;height:100%;background:#151c28;overflow:hidden;border-radius:8px;font-family:"Space Mono",-apple-system,"Microsoft YaHei",monospace;color:#ddd;-webkit-user-select:none;user-select:none}.i-monitor-playback .player-wrap,.replay-page .player-wrap{position:relative;flex:1;height:0;width:100%;overflow:hidden;background:#000;border-radius:6px 6px 4px 4px}.i-monitor-playback .player-wrap #player,.replay-page .player-wrap #player{width:100%;height:100%;display:block;object-fit:fill;background:#000}.i-monitor-playback .player-wrap #player::-webkit-media-controls-current-time-display,.i-monitor-playback .player-wrap #player::-webkit-media-controls-time-remaining-display,.i-monitor-playback .player-wrap #player::-webkit-media-controls-time-remaining-divider,.i-monitor-playback .player-wrap #player::-webkit-media-controls-timeline,.replay-page .player-wrap #player::-webkit-media-controls-current-time-display,.replay-page .player-wrap #player::-webkit-media-controls-time-remaining-display,.replay-page .player-wrap #player::-webkit-media-controls-time-remaining-divider,.replay-page .player-wrap #player::-webkit-media-controls-timeline{display:none!important}.i-monitor-playback .player-wrap #player::-moz-range-track,.replay-page .player-wrap #player::-moz-range-track{display:none!important}.i-monitor-playback .player-wrap .video-overlay,.replay-page .player-wrap .video-overlay{position:absolute;top:8px;left:10px;z-index:5;pointer-events:none}.i-monitor-playback .player-wrap .video-overlay .timestamp,.replay-page .player-wrap .video-overlay .timestamp{font-size:16px;font-weight:700;color:#fff;text-shadow:1px 1px 2px rgba(0,0,0,.8);letter-spacing:1px}.i-monitor-playback .player-wrap .video-overlay .location,.replay-page .player-wrap .video-overlay .location{position:absolute;bottom:34px;left:0;font-size:18px;color:#fff;font-weight:700;text-shadow:1px 1px 3px rgba(0,0,0,.9)}.i-monitor-playback .player-wrap .status-bar,.replay-page .player-wrap .status-bar{display:flex;justify-content:space-between;align-items:center;padding:2px 10px;background:linear-gradient(#222,#1a1d28);font-size:11px;color:#888}.i-monitor-playback .player-wrap .status-bar-right,.replay-page .player-wrap .status-bar-right{display:flex;gap:12px;align-items:center}.i-monitor-playback .player-wrap .status-bar-right span,.replay-page .player-wrap .status-bar-right span{cursor:pointer;opacity:.7;transition:opacity .15s}.i-monitor-playback .player-wrap .status-bar-right span:hover,.replay-page .player-wrap .status-bar-right span:hover{opacity:1}.i-monitor-playback .player-wrap .toolbar,.replay-page .player-wrap .toolbar{position:absolute;right:10px;bottom:10px;display:flex;gap:8px;z-index:10}.i-monitor-playback .player-wrap .toolbar .btn-fullscreen,.replay-page .player-wrap .toolbar .btn-fullscreen{width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:4px;background:rgba(0,0,0,.55);color:#fff;font-size:16px;cursor:pointer;transition:background .2s;-webkit-user-select:none;user-select:none}.i-monitor-playback .player-wrap .toolbar .btn-fullscreen:hover,.replay-page .player-wrap .toolbar .btn-fullscreen:hover{background:rgba(255,45,45,.7)}.i-monitor-playback .ruler-panel,.replay-page .ruler-panel{position:relative;width:100%;background:#111827;border-top:1px solid #252f42;border-radius:0 0 4px 4px;padding:4px 12px 8px;flex-shrink:0;overflow:hidden}.i-monitor-playback .ruler-panel .time-display,.replay-page .ruler-panel .time-display{display:flex;align-items:baseline;gap:10px;padding:2px 20px 4px 4px;text-align:center;border-bottom:1px solid #252f42;background:rgba(0,0,0,.15)}.i-monitor-playback .ruler-panel .time-display .time-big,.replay-page .ruler-panel .time-display .time-big{font-size:18px;font-weight:700;color:#e8ecf1;font-variant-numeric:tabular-nums;letter-spacing:.5px;line-height:1}.i-monitor-playback .ruler-panel .time-display .time-big .sep,.replay-page .ruler-panel .time-display .time-big .sep{color:#ff2d2d;margin:0 1px;font-weight:400;animation:blink-sep 1s step-end infinite}.i-monitor-playback .ruler-panel .time-display .time-date,.replay-page .ruler-panel .time-display .time-date{font-size:11px;color:#5a6a82;font-variant-numeric:tabular-nums;letter-spacing:.5px}.i-monitor-playback .ruler-panel .rec-track,.replay-page .ruler-panel .rec-track{position:relative;height:4px;margin:2px 0;background:rgba(46,125,255,.04)}.i-monitor-playback .ruler-panel .rec-track .rec-seg,.replay-page .ruler-panel .rec-track .rec-seg{position:absolute;top:0;height:100%;background:#3b82f6;border-radius:2px;border:1px solid #3b82f6}.i-monitor-playback .ruler-panel .ruler-area,.replay-page .ruler-panel .ruler-area{position:relative;background:#1a2030;border-bottom:1px solid #252f42;overflow:hidden;touch-action:none;-webkit-user-select:none;user-select:none}.i-monitor-playback .ruler-panel .ruler-area .ruler-canvas,.replay-page .ruler-panel .ruler-area .ruler-canvas{display:block;width:100%;cursor:grab}.i-monitor-playback .ruler-panel .ruler-area .ruler-canvas:active,.replay-page .ruler-panel .ruler-area .ruler-canvas:active{cursor:grabbing}.i-monitor-playback .ruler-panel .ruler-area .tip,.replay-page .ruler-panel .ruler-area .tip{position:absolute;top:4px;pointer-events:none;background:rgba(15,23,36,.92);border:1px solid #252f42;border-radius:4px;padding:3px 8px;font-size:11px;color:#8899b4;white-space:nowrap;opacity:0;transition:opacity .1s;z-index:10}.i-monitor-playback .ruler-panel .ruler-area .tip.show,.replay-page .ruler-panel .ruler-area .tip.show{opacity:1}.i-monitor-playback .ruler-panel .ruler-area .zoom-tag,.replay-page .ruler-panel .ruler-area .zoom-tag{position:absolute;right:8px;bottom:4px;font-size:9px;color:#5a6a82;opacity:.5;font-variant-numeric:tabular-nums;letter-spacing:.5px;z-index:5}.i-monitor-playback .speed-bar,.replay-page .speed-bar{display:flex;align-items:center;gap:4px;padding:4px 10px 4px 0}.i-monitor-playback .speed-bar .label,.replay-page .speed-bar .label{font-size:11px;color:#666;margin-right:2px}.i-monitor-playback .speed-bar button,.replay-page .speed-bar button{padding:2px 8px;font-size:11px;border-radius:3px;background:0 0;color:#888;border:none;cursor:pointer;font-family:"Space Mono",monospace;transition:all .15s}.i-monitor-playback .speed-bar button:hover,.replay-page .speed-bar button:hover{color:#ccc;background:rgba(255,255,255,.06)}.i-monitor-playback .speed-bar button.active,.replay-page .speed-bar button.active{background:#00c07f;color:#000;font-weight:600}@keyframes blink-sep{0%,100%{opacity:1}}
1
+ .i-monitor-playback,.replay-page{display:flex;flex-direction:column;width:100%;height:100%;background:#151c28;overflow:hidden;border-radius:8px;font-family:"Space Mono",-apple-system,"Microsoft YaHei",monospace;color:#ddd;-webkit-user-select:none;user-select:none}.i-monitor-playback .player-wrap,.replay-page .player-wrap{position:relative;flex:1;height:0;width:100%;overflow:hidden;background:#000;border-radius:6px 6px 4px 4px}.i-monitor-playback .player-wrap #player,.i-monitor-playback .player-wrap .jessibuca-container,.replay-page .player-wrap #player,.replay-page .player-wrap .jessibuca-container{width:100%;height:100%;display:block;object-fit:fill;background:#000}.i-monitor-playback .player-wrap .jessibuca-container :deep(canvas),.replay-page .player-wrap .jessibuca-container :deep(canvas){width:100%!important;height:100%!important}.i-monitor-playback .player-wrap .player-error,.replay-page .player-wrap .player-error{display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;height:100%;background:#000;color:#8899b4;gap:12px}.i-monitor-playback .player-wrap .player-error__icon,.replay-page .player-wrap .player-error__icon{font-size:48px;opacity:.6}.i-monitor-playback .player-wrap .player-error__text,.replay-page .player-wrap .player-error__text{font-size:14px;text-align:center;line-height:1.6;padding:0 24px;max-width:480px}.i-monitor-playback .player-wrap .video-overlay,.replay-page .player-wrap .video-overlay{position:absolute;top:8px;left:10px;z-index:5;pointer-events:none}.i-monitor-playback .player-wrap .video-overlay .timestamp,.replay-page .player-wrap .video-overlay .timestamp{font-size:16px;font-weight:700;color:#fff;text-shadow:1px 1px 2px rgba(0,0,0,.8);letter-spacing:1px}.i-monitor-playback .player-wrap .video-overlay .location,.replay-page .player-wrap .video-overlay .location{position:absolute;bottom:34px;left:0;font-size:18px;color:#fff;font-weight:700;text-shadow:1px 1px 3px rgba(0,0,0,.9)}.i-monitor-playback .player-wrap .status-bar,.replay-page .player-wrap .status-bar{display:flex;justify-content:space-between;align-items:center;padding:2px 10px;background:linear-gradient(#222,#1a1d28);font-size:11px;color:#888}.i-monitor-playback .player-wrap .status-bar-right,.replay-page .player-wrap .status-bar-right{display:flex;gap:12px;align-items:center}.i-monitor-playback .player-wrap .status-bar-right span,.replay-page .player-wrap .status-bar-right span{cursor:pointer;opacity:.7;transition:opacity .15s}.i-monitor-playback .player-wrap .status-bar-right span:hover,.replay-page .player-wrap .status-bar-right span:hover{opacity:1}.i-monitor-playback .player-wrap .toolbar,.replay-page .player-wrap .toolbar{position:absolute;right:10px;bottom:10px;display:flex;gap:8px;z-index:10}.i-monitor-playback .player-wrap .toolbar .btn-fullscreen,.replay-page .player-wrap .toolbar .btn-fullscreen{width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:4px;background:rgba(0,0,0,.55);color:#fff;font-size:16px;cursor:pointer;transition:background .2s;-webkit-user-select:none;user-select:none}.i-monitor-playback .player-wrap .toolbar .btn-fullscreen:hover,.replay-page .player-wrap .toolbar .btn-fullscreen:hover{background:rgba(255,45,45,.7)}.i-monitor-playback .ruler-panel,.replay-page .ruler-panel{position:relative;width:100%;background:#111827;border-top:1px solid #252f42;border-radius:0 0 4px 4px;padding:4px 12px 8px;flex-shrink:0;overflow:hidden}.i-monitor-playback .ruler-panel .time-display,.replay-page .ruler-panel .time-display{display:flex;align-items:baseline;gap:10px;padding:2px 20px 4px 4px;text-align:center;border-bottom:1px solid #252f42;background:rgba(0,0,0,.15)}.i-monitor-playback .ruler-panel .time-display .time-big,.replay-page .ruler-panel .time-display .time-big{font-size:18px;font-weight:700;color:#e8ecf1;font-variant-numeric:tabular-nums;letter-spacing:.5px;line-height:1}.i-monitor-playback .ruler-panel .time-display .time-big .sep,.replay-page .ruler-panel .time-display .time-big .sep{color:#ff2d2d;margin:0 1px;font-weight:400;animation:blink-sep 1s step-end infinite}.i-monitor-playback .ruler-panel .time-display .time-date,.replay-page .ruler-panel .time-display .time-date{font-size:11px;color:#5a6a82;font-variant-numeric:tabular-nums;letter-spacing:.5px}.i-monitor-playback .ruler-panel .rec-track,.replay-page .ruler-panel .rec-track{position:relative;height:4px;margin:2px 0;background:rgba(46,125,255,.04)}.i-monitor-playback .ruler-panel .rec-track .rec-seg,.replay-page .ruler-panel .rec-track .rec-seg{position:absolute;top:0;height:100%;background:#3b82f6;border-radius:2px;border:1px solid #3b82f6}.i-monitor-playback .ruler-panel .ruler-area,.replay-page .ruler-panel .ruler-area{position:relative;background:#1a2030;border-bottom:1px solid #252f42;overflow:hidden;touch-action:none;-webkit-user-select:none;user-select:none}.i-monitor-playback .ruler-panel .ruler-area .ruler-canvas,.replay-page .ruler-panel .ruler-area .ruler-canvas{display:block;width:100%;cursor:grab}.i-monitor-playback .ruler-panel .ruler-area .ruler-canvas:active,.replay-page .ruler-panel .ruler-area .ruler-canvas:active{cursor:grabbing}.i-monitor-playback .ruler-panel .ruler-area .tip,.replay-page .ruler-panel .ruler-area .tip{position:absolute;top:4px;pointer-events:none;background:rgba(15,23,36,.92);border:1px solid #252f42;border-radius:4px;padding:3px 8px;font-size:11px;color:#8899b4;white-space:nowrap;opacity:0;transition:opacity .1s;z-index:10}.i-monitor-playback .ruler-panel .ruler-area .tip.show,.replay-page .ruler-panel .ruler-area .tip.show{opacity:1}.i-monitor-playback .ruler-panel .ruler-area .zoom-tag,.replay-page .ruler-panel .ruler-area .zoom-tag{position:absolute;right:8px;bottom:4px;font-size:9px;color:#5a6a82;opacity:.5;font-variant-numeric:tabular-nums;letter-spacing:.5px;z-index:5}.i-monitor-playback .speed-bar,.replay-page .speed-bar{display:flex;align-items:center;gap:4px;padding:4px 10px 4px 0}.i-monitor-playback .speed-bar .label,.replay-page .speed-bar .label{font-size:11px;color:#666;margin-right:2px}.i-monitor-playback .speed-bar button,.replay-page .speed-bar button{padding:2px 8px;font-size:11px;border-radius:3px;background:0 0;color:#888;border:none;cursor:pointer;font-family:"Space Mono",monospace;transition:all .15s}.i-monitor-playback .speed-bar button:hover,.replay-page .speed-bar button:hover{color:#ccc;background:rgba(255,255,255,.06)}.i-monitor-playback .speed-bar button.active,.replay-page .speed-bar button.active{background:#00c07f;color:#000;font-weight:600}@keyframes blink-sep{0%,100%{opacity:1}}