@yimou6/common-ui 1.10.13 → 1.10.15

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 (51) hide show
  1. package/cdn/index.cdn.js +21 -11
  2. package/cdn/index.cdn.js.map +1 -1
  3. package/cdn/index.cdn.mjs +21 -11
  4. package/cdn/index.cdn.mjs.map +1 -1
  5. package/es/components/tenant-enterprise/index.d.ts +13 -0
  6. package/es/components/tenant-enterprise/src/tenant-enterprise.d.ts +4 -0
  7. package/es/components/tenant-enterprise/src/tenant-enterprise.mjs +7 -0
  8. package/es/components/tenant-enterprise/src/tenant-enterprise.mjs.map +1 -1
  9. package/es/components/tenant-enterprise/src/tenant-enterprise.vue.d.ts +13 -0
  10. package/es/components/tenant-enterprise/src/tenant-enterprise.vue2.mjs +3 -0
  11. package/es/components/tenant-enterprise/src/tenant-enterprise.vue2.mjs.map +1 -1
  12. package/es/components/tzj-player/index.d.ts +4764 -212
  13. package/es/components/tzj-player/src/ctyun-player.d.ts +6 -0
  14. package/es/components/tzj-player/src/ctyun-player.mjs +184 -0
  15. package/es/components/tzj-player/src/ctyun-player.mjs.map +1 -0
  16. package/es/components/tzj-player/src/ctyun-player.vue.d.ts +1519 -0
  17. package/es/components/tzj-player/src/ctyun-player.vue.mjs +6 -0
  18. package/es/components/tzj-player/src/ctyun-player.vue.mjs.map +1 -0
  19. package/es/components/tzj-player/src/ctyun-player.vue2.mjs +588 -0
  20. package/es/components/tzj-player/src/ctyun-player.vue2.mjs.map +1 -0
  21. package/es/components/tzj-player/src/easyPlayer.vue2.mjs +0 -5
  22. package/es/components/tzj-player/src/easyPlayer.vue2.mjs.map +1 -1
  23. package/es/components/tzj-player/src/tzj-player.vue.d.ts +4764 -212
  24. package/es/components/tzj-player/src/tzj-player.vue2.mjs +8 -5
  25. package/es/components/tzj-player/src/tzj-player.vue2.mjs.map +1 -1
  26. package/es/components/tzj-player/src/yunzhiyanPlayer.vue2.mjs +3 -3
  27. package/es/components/tzj-player/src/yunzhiyanPlayer.vue2.mjs.map +1 -1
  28. package/lib/components/tenant-enterprise/index.d.ts +13 -0
  29. package/lib/components/tenant-enterprise/src/tenant-enterprise.d.ts +4 -0
  30. package/lib/components/tenant-enterprise/src/tenant-enterprise.js +7 -0
  31. package/lib/components/tenant-enterprise/src/tenant-enterprise.js.map +1 -1
  32. package/lib/components/tenant-enterprise/src/tenant-enterprise.vue.d.ts +13 -0
  33. package/lib/components/tenant-enterprise/src/tenant-enterprise.vue2.js +3 -0
  34. package/lib/components/tenant-enterprise/src/tenant-enterprise.vue2.js.map +1 -1
  35. package/lib/components/tzj-player/index.d.ts +4764 -212
  36. package/lib/components/tzj-player/src/ctyun-player.d.ts +6 -0
  37. package/lib/components/tzj-player/src/ctyun-player.js +188 -0
  38. package/lib/components/tzj-player/src/ctyun-player.js.map +1 -0
  39. package/lib/components/tzj-player/src/ctyun-player.vue.d.ts +1519 -0
  40. package/lib/components/tzj-player/src/ctyun-player.vue.js +10 -0
  41. package/lib/components/tzj-player/src/ctyun-player.vue.js.map +1 -0
  42. package/lib/components/tzj-player/src/ctyun-player.vue2.js +592 -0
  43. package/lib/components/tzj-player/src/ctyun-player.vue2.js.map +1 -0
  44. package/lib/components/tzj-player/src/easyPlayer.vue2.js +0 -5
  45. package/lib/components/tzj-player/src/easyPlayer.vue2.js.map +1 -1
  46. package/lib/components/tzj-player/src/tzj-player.vue.d.ts +4764 -212
  47. package/lib/components/tzj-player/src/tzj-player.vue2.js +5 -2
  48. package/lib/components/tzj-player/src/tzj-player.vue2.js.map +1 -1
  49. package/lib/components/tzj-player/src/yunzhiyanPlayer.vue2.js +3 -3
  50. package/lib/components/tzj-player/src/yunzhiyanPlayer.vue2.js.map +1 -1
  51. package/package.json +1 -1
@@ -0,0 +1,6 @@
1
+ import _sfc_main from './ctyun-player.vue2.mjs';
2
+
3
+
4
+
5
+ export { _sfc_main as default };
6
+ //# sourceMappingURL=ctyun-player.vue.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ctyun-player.vue.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1,588 @@
1
+ import { defineComponent, ref, shallowRef, onMounted, openBlock, createElementBlock, Fragment, toDisplayString, createBlock, withCtx, createCommentVNode, createElementVNode, normalizeClass } from 'vue';
2
+ import { GetCtyunDeviceVideoUrl, ctyunRequest } from './ctyun-player.mjs';
3
+ import './easyPlayer.vue.mjs';
4
+ import { TzjPlayerProps } from './tzj-player.mjs';
5
+ import _sfc_main$1 from './easyPlayer.vue2.mjs';
6
+
7
+ var __defProp = Object.defineProperty;
8
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
9
+ const _hoisted_1 = {
10
+ key: 0,
11
+ class: "i-tzj-player__error"
12
+ };
13
+ const _hoisted_2 = {
14
+ key: 0,
15
+ class: "i-easy-player-bar"
16
+ };
17
+ const _hoisted_3 = { class: "i-easy-player-bar-item i-easy-player-bar-left" };
18
+ const _hoisted_4 = {
19
+ key: 2,
20
+ class: "i-easy-player-bottom-bar"
21
+ };
22
+ const _hoisted_5 = {
23
+ key: 3,
24
+ class: "i-easy-player-bottom-bar"
25
+ };
26
+ const _hoisted_6 = { class: "i-easy-player-bar-item i-easy-player-bar-right" };
27
+ var _sfc_main = /* @__PURE__ */ defineComponent({
28
+ ...{
29
+ name: "CtyunPlayer"
30
+ },
31
+ __name: "ctyun-player",
32
+ props: TzjPlayerProps,
33
+ setup(__props) {
34
+ const props = __props;
35
+ const videoUrl = ref("");
36
+ const showBottomBar = ref(false);
37
+ const errorMsg = ref("");
38
+ const playerRef = shallowRef();
39
+ const isPlaying = ref(false);
40
+ const isVoice = ref(false);
41
+ const isFullscreen = ref(false);
42
+ const isVolumeMuted = ref(true);
43
+ const isIntercomActive = ref(false);
44
+ const audioContext = ref(null);
45
+ const mediaStream = ref(null);
46
+ const websocket = ref(null);
47
+ const audioWorkletNode = ref(null);
48
+ const intercomTimer = ref(null);
49
+ const audioMsg = ref({
50
+ type: "",
51
+ msg: ""
52
+ });
53
+ const taskId = ref("");
54
+ const AUDIO_CONFIG = {
55
+ sampleRate: 48e3,
56
+ channelCount: 1,
57
+ sampleSize: 16
58
+ };
59
+ const initPlayer = /* @__PURE__ */ __name(async () => {
60
+ try {
61
+ if (!props.deviceSerial) {
62
+ errorMsg.value = "\u8BBE\u5907\u5E8F\u5217\u53F7\u4E0D\u80FD\u4E3A\u7A7A";
63
+ return;
64
+ }
65
+ const url = await GetCtyunDeviceVideoUrl(props.deviceSerial);
66
+ if (!url) {
67
+ errorMsg.value = "\u83B7\u53D6\u89C6\u9891\u64AD\u653E\u5730\u5740\u5931\u8D25";
68
+ return;
69
+ }
70
+ videoUrl.value = url;
71
+ errorMsg.value = "";
72
+ } catch (error) {
73
+ if (props.debug) {
74
+ console.error("\u521D\u59CB\u5316\u5929\u7FFC\u4E91\u64AD\u653E\u5668\u5931\u8D25:", error);
75
+ }
76
+ errorMsg.value = `\u521D\u59CB\u5316\u5931\u8D25: ${error instanceof Error ? error.message : "\u672A\u77E5\u9519\u8BEF"}`;
77
+ }
78
+ }, "initPlayer");
79
+ const playerPlay = /* @__PURE__ */ __name(() => {
80
+ var _a;
81
+ (_a = playerRef.value) == null ? void 0 : _a.play();
82
+ }, "playerPlay");
83
+ const playerPause = /* @__PURE__ */ __name(() => {
84
+ var _a;
85
+ (_a = playerRef.value) == null ? void 0 : _a.pause();
86
+ }, "playerPause");
87
+ const playerScreenShot = /* @__PURE__ */ __name(() => {
88
+ var _a;
89
+ (_a = playerRef.value) == null ? void 0 : _a.screenshot();
90
+ }, "playerScreenShot");
91
+ const playerFullscreen = /* @__PURE__ */ __name((fullscreen) => {
92
+ var _a;
93
+ isFullscreen.value = fullscreen;
94
+ (_a = playerRef.value) == null ? void 0 : _a.fullscreen(fullscreen);
95
+ }, "playerFullscreen");
96
+ const handleVideoInfo = /* @__PURE__ */ __name(() => {
97
+ var _a;
98
+ isVolumeMuted.value = (_a = playerRef.value) == null ? void 0 : _a.isMute();
99
+ }, "handleVideoInfo");
100
+ const handleMute = /* @__PURE__ */ __name((mute) => {
101
+ isVolumeMuted.value = mute;
102
+ }, "handleMute");
103
+ const handleSetMute = /* @__PURE__ */ __name((volume) => {
104
+ var _a;
105
+ (_a = playerRef.value) == null ? void 0 : _a.setMute(volume);
106
+ }, "handleSetMute");
107
+ const audioErrorMsg = /* @__PURE__ */ __name((msg) => {
108
+ audioMsg.value = {
109
+ type: "error",
110
+ msg
111
+ };
112
+ setTimeout(() => {
113
+ audioMsg.value = {
114
+ type: "",
115
+ msg: ""
116
+ };
117
+ }, 3e3);
118
+ }, "audioErrorMsg");
119
+ const initAudioContext = /* @__PURE__ */ __name(async () => {
120
+ try {
121
+ if (typeof window === "undefined") {
122
+ throw new Error("\u975E\u6D4F\u89C8\u5668\u73AF\u5883\uFF0C\u65E0\u6CD5\u4F7F\u7528AudioContext");
123
+ }
124
+ const AudioContext = window.AudioContext || window.webkitAudioContext;
125
+ if (!AudioContext) {
126
+ throw new Error("\u5F53\u524D\u6D4F\u89C8\u5668\u4E0D\u652F\u6301AudioContext");
127
+ }
128
+ audioContext.value = new AudioContext({
129
+ sampleRate: AUDIO_CONFIG.sampleRate
130
+ });
131
+ if (audioContext.value.state === "suspended") {
132
+ await audioContext.value.resume();
133
+ }
134
+ if (props.debug) {
135
+ console.log(
136
+ "\u97F3\u9891\u4E0A\u4E0B\u6587\u521D\u59CB\u5316\u6210\u529F\uFF0C\u91C7\u6837\u7387:",
137
+ audioContext.value.sampleRate
138
+ );
139
+ }
140
+ } catch (error) {
141
+ throw new Error(`\u97F3\u9891\u4E0A\u4E0B\u6587\u521D\u59CB\u5316\u5931\u8D25: ${error}`);
142
+ }
143
+ }, "initAudioContext");
144
+ const initMicrophone = /* @__PURE__ */ __name(async () => {
145
+ try {
146
+ if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {
147
+ throw new Error("\u5F53\u524D\u6D4F\u89C8\u5668\u4E0D\u652F\u6301\u9EA6\u514B\u98CE\u8BBF\u95EE");
148
+ }
149
+ const constraints = {
150
+ audio: {
151
+ channelCount: AUDIO_CONFIG.channelCount,
152
+ sampleRate: AUDIO_CONFIG.sampleRate,
153
+ echoCancellation: true,
154
+ noiseSuppression: true,
155
+ autoGainControl: true
156
+ },
157
+ video: false
158
+ };
159
+ mediaStream.value = await navigator.mediaDevices.getUserMedia(constraints);
160
+ if (props.debug) {
161
+ console.log("\u9EA6\u514B\u98CE\u521D\u59CB\u5316\u6210\u529F");
162
+ }
163
+ } catch (error) {
164
+ if (error instanceof Error) {
165
+ switch (error.name) {
166
+ case "NotAllowedError":
167
+ throw new Error("\u9EA6\u514B\u98CE\u6743\u9650\u88AB\u62D2\u7EDD\uFF0C\u8BF7\u5141\u8BB8\u8BBF\u95EE\u9EA6\u514B\u98CE");
168
+ case "NotFoundError":
169
+ throw new Error("\u672A\u627E\u5230\u53EF\u7528\u7684\u9EA6\u514B\u98CE\u8BBE\u5907");
170
+ case "NotReadableError":
171
+ throw new Error("\u9EA6\u514B\u98CE\u8BBE\u5907\u88AB\u5176\u4ED6\u5E94\u7528\u5360\u7528");
172
+ case "OverconstrainedError":
173
+ throw new Error("\u9EA6\u514B\u98CE\u8BBE\u5907\u4E0D\u652F\u6301\u6307\u5B9A\u7684\u97F3\u9891\u53C2\u6570");
174
+ default:
175
+ throw new Error(`\u9EA6\u514B\u98CE\u521D\u59CB\u5316\u5931\u8D25: ${error.message}`);
176
+ }
177
+ }
178
+ throw new Error(`\u9EA6\u514B\u98CE\u521D\u59CB\u5316\u5931\u8D25: ${error}`);
179
+ }
180
+ }, "initMicrophone");
181
+ const connectWebSocket = /* @__PURE__ */ __name(async (url) => {
182
+ return new Promise((resolve, reject) => {
183
+ try {
184
+ websocket.value = new WebSocket(url);
185
+ websocket.value.binaryType = "arraybuffer";
186
+ let isResolved = false;
187
+ websocket.value.onopen = () => {
188
+ if (props.debug) {
189
+ console.log("WebSocket\u8FDE\u63A5\u6210\u529F");
190
+ }
191
+ if (!isResolved) {
192
+ isResolved = true;
193
+ resolve();
194
+ }
195
+ };
196
+ websocket.value.onerror = (error) => {
197
+ if (props.debug) {
198
+ console.error("WebSocket\u8FDE\u63A5\u9519\u8BEF:", error);
199
+ }
200
+ if (!isResolved) {
201
+ isResolved = true;
202
+ reject(new Error("WebSocket\u8FDE\u63A5\u5931\u8D25"));
203
+ }
204
+ };
205
+ websocket.value.onclose = (event) => {
206
+ if (props.debug) {
207
+ console.log("WebSocket\u8FDE\u63A5\u5173\u95ED:", event.code, event.reason);
208
+ }
209
+ if (isIntercomActive.value) {
210
+ isIntercomActive.value = false;
211
+ isVoice.value = false;
212
+ }
213
+ };
214
+ websocket.value.onmessage = (event) => {
215
+ if (props.debug) {
216
+ console.log("\u6536\u5230\u670D\u52A1\u7AEF\u6D88\u606F:", event.data);
217
+ }
218
+ };
219
+ const timeoutId = setTimeout(() => {
220
+ var _a, _b;
221
+ if (!isResolved && ((_a = websocket.value) == null ? void 0 : _a.readyState) !== WebSocket.OPEN) {
222
+ isResolved = true;
223
+ (_b = websocket.value) == null ? void 0 : _b.close();
224
+ reject(new Error("WebSocket\u8FDE\u63A5\u8D85\u65F6"));
225
+ }
226
+ }, 1e4);
227
+ if (websocket.value) {
228
+ const originalOnOpen = websocket.value.onopen;
229
+ const originalOnError = websocket.value.onerror;
230
+ websocket.value.onopen = function(event) {
231
+ clearTimeout(timeoutId);
232
+ originalOnOpen == null ? void 0 : originalOnOpen.call(this, event);
233
+ };
234
+ websocket.value.onerror = function(event) {
235
+ clearTimeout(timeoutId);
236
+ originalOnError == null ? void 0 : originalOnError.call(this, event);
237
+ };
238
+ }
239
+ } catch (error) {
240
+ reject(new Error(`WebSocket\u521B\u5EFA\u5931\u8D25: ${error}`));
241
+ }
242
+ });
243
+ }, "connectWebSocket");
244
+ const convertToPCM16 = /* @__PURE__ */ __name((float32Array) => {
245
+ const buffer = new ArrayBuffer(float32Array.length * 2);
246
+ const view = new DataView(buffer);
247
+ for (let i = 0; i < float32Array.length; i++) {
248
+ const sample = Math.max(-1, Math.min(1, float32Array[i]));
249
+ const intSample = sample < 0 ? sample * 32768 : sample * 32767;
250
+ view.setInt16(i * 2, intSample, true);
251
+ }
252
+ return buffer;
253
+ }, "convertToPCM16");
254
+ const startAudioProcessing = /* @__PURE__ */ __name(async () => {
255
+ try {
256
+ if (!audioContext.value || !mediaStream.value) {
257
+ throw new Error("\u97F3\u9891\u4E0A\u4E0B\u6587\u6216\u5A92\u4F53\u6D41\u672A\u521D\u59CB\u5316");
258
+ }
259
+ const sourceNode = audioContext.value.createMediaStreamSource(
260
+ mediaStream.value
261
+ );
262
+ const bufferSize = 4096;
263
+ const processor = audioContext.value.createScriptProcessor(
264
+ bufferSize,
265
+ 1,
266
+ 1
267
+ );
268
+ processor.onaudioprocess = (event) => {
269
+ if (!isIntercomActive.value || !websocket.value || websocket.value.readyState !== WebSocket.OPEN) {
270
+ return;
271
+ }
272
+ try {
273
+ const inputBuffer = event.inputBuffer;
274
+ const inputData = inputBuffer.getChannelData(0);
275
+ if (inputData.length === 0) {
276
+ return;
277
+ }
278
+ const pcmData = convertToPCM16(inputData);
279
+ websocket.value.send(pcmData);
280
+ } catch (error) {
281
+ if (props.debug) {
282
+ console.error("\u97F3\u9891\u6570\u636E\u5904\u7406\u9519\u8BEF:", error);
283
+ }
284
+ }
285
+ };
286
+ sourceNode.connect(processor);
287
+ processor.connect(audioContext.value.destination);
288
+ audioWorkletNode.value = processor;
289
+ if (props.debug) {
290
+ console.log("\u97F3\u9891\u6570\u636E\u5904\u7406\u5F00\u59CB");
291
+ }
292
+ } catch (error) {
293
+ throw new Error(`\u97F3\u9891\u6570\u636E\u5904\u7406\u542F\u52A8\u5931\u8D25: ${error}`);
294
+ }
295
+ }, "startAudioProcessing");
296
+ const stopIntercom = /* @__PURE__ */ __name(async () => {
297
+ try {
298
+ if (props.debug) {
299
+ console.log("\u6B63\u5728\u505C\u6B62\u8BED\u97F3\u5BF9\u8BB2...");
300
+ }
301
+ isVoice.value = false;
302
+ isIntercomActive.value = false;
303
+ if (intercomTimer.value) {
304
+ clearTimeout(intercomTimer.value);
305
+ intercomTimer.value = null;
306
+ }
307
+ if (props.deviceSerial && taskId.value) {
308
+ try {
309
+ } catch (error) {
310
+ if (props.debug) {
311
+ console.error("\u5173\u95ED\u670D\u52A1\u7AEF\u8BED\u97F3\u5BF9\u8BB2\u5931\u8D25:", error);
312
+ }
313
+ }
314
+ }
315
+ if (websocket.value) {
316
+ if (websocket.value.readyState === WebSocket.OPEN) {
317
+ websocket.value.close(1e3, "\u7528\u6237\u4E3B\u52A8\u5173\u95ED");
318
+ }
319
+ websocket.value = null;
320
+ }
321
+ if (mediaStream.value) {
322
+ mediaStream.value.getTracks().forEach((track) => {
323
+ track.stop();
324
+ });
325
+ mediaStream.value = null;
326
+ }
327
+ if (audioContext.value && audioContext.value.state !== "closed") {
328
+ try {
329
+ await audioContext.value.close();
330
+ } catch (error) {
331
+ if (props.debug) {
332
+ console.error("\u5173\u95ED\u97F3\u9891\u4E0A\u4E0B\u6587\u5931\u8D25:", error);
333
+ }
334
+ }
335
+ audioContext.value = null;
336
+ }
337
+ if (audioWorkletNode.value) {
338
+ try {
339
+ audioWorkletNode.value.disconnect();
340
+ } catch (error) {
341
+ if (props.debug) {
342
+ console.error("\u65AD\u5F00\u97F3\u9891\u5DE5\u4F5C\u8282\u70B9\u5931\u8D25:", error);
343
+ }
344
+ }
345
+ audioWorkletNode.value = null;
346
+ }
347
+ taskId.value = "";
348
+ audioMsg.value = {
349
+ type: "",
350
+ msg: ""
351
+ };
352
+ if (props.debug) {
353
+ console.log("\u8BED\u97F3\u5BF9\u8BB2\u5DF2\u505C\u6B62");
354
+ }
355
+ } catch (error) {
356
+ if (props.debug) {
357
+ console.error("\u505C\u6B62\u8BED\u97F3\u5BF9\u8BB2\u65F6\u53D1\u751F\u9519\u8BEF:", error);
358
+ }
359
+ }
360
+ }, "stopIntercom");
361
+ const intercom = /* @__PURE__ */ __name(async () => {
362
+ try {
363
+ if (props.debug) {
364
+ console.log("\u5F00\u59CB\u8BED\u97F3\u5BF9\u8BB2...");
365
+ }
366
+ audioMsg.value = {
367
+ type: "info",
368
+ msg: "\u6B63\u5728\u8FDE\u63A5..."
369
+ };
370
+ if (isIntercomActive.value) {
371
+ if (props.debug) {
372
+ console.warn("\u8BED\u97F3\u5BF9\u8BB2\u5DF2\u5728\u8FDB\u884C\u4E2D");
373
+ }
374
+ return;
375
+ }
376
+ isVoice.value = true;
377
+ if (props.debug) {
378
+ console.log("\u6B63\u5728\u83B7\u53D6\u8BED\u97F3\u63A8\u9001\u5730\u5740...");
379
+ }
380
+ const result = await ctyunRequest(
381
+ "POST",
382
+ `/devices/${props.deviceSerial}/startTalk`,
383
+ {
384
+ body: {
385
+ // 传输优先级 tcp/udp
386
+ TransPriority: "tcp",
387
+ // 接入协议
388
+ InProtocol: "gb28181"
389
+ }
390
+ }
391
+ );
392
+ console.log(result);
393
+ if (result.statusCode === 200) {
394
+ } else {
395
+ audioErrorMsg((result == null ? void 0 : result.message) || "\u5F00\u542F\u8BED\u97F3\u5BF9\u8BB2\u5931\u8D25");
396
+ return;
397
+ }
398
+ console.log(result);
399
+ if (props.debug) {
400
+ console.log("\u8BED\u97F3\u63A8\u9001\u5730\u5740:", "");
401
+ }
402
+ } catch (error) {
403
+ console.error("\u5F00\u542F\u8BED\u97F3\u5BF9\u8BB2\u5931\u8D25:", error);
404
+ audioErrorMsg("\u5F00\u542F\u8BED\u97F3\u5BF9\u8BB2\u5931\u8D25");
405
+ }
406
+ }, "intercom");
407
+ onMounted(() => {
408
+ initPlayer();
409
+ });
410
+ return (_ctx, _cache) => {
411
+ return openBlock(), createElementBlock(
412
+ Fragment,
413
+ null,
414
+ [
415
+ errorMsg.value ? (openBlock(), createElementBlock(
416
+ "div",
417
+ _hoisted_1,
418
+ toDisplayString(errorMsg.value),
419
+ 1
420
+ /* TEXT */
421
+ )) : videoUrl.value ? (openBlock(), createBlock(_sfc_main$1, {
422
+ key: 1,
423
+ ref_key: "playerRef",
424
+ ref: playerRef,
425
+ url: videoUrl.value,
426
+ debug: _ctx.debug,
427
+ "access-token": _ctx.accessToken,
428
+ "platform-type-name": _ctx.platformTypeName,
429
+ "device-serial": _ctx.deviceSerial,
430
+ "area-name": _ctx.areaName,
431
+ onMouseenter: _cache[4] || (_cache[4] = ($event) => showBottomBar.value = true),
432
+ onMouseleave: _cache[5] || (_cache[5] = ($event) => showBottomBar.value = false),
433
+ onPause: _cache[6] || (_cache[6] = ($event) => isPlaying.value = false),
434
+ onPlay: _cache[7] || (_cache[7] = ($event) => isPlaying.value = true),
435
+ onVideoInfo: handleVideoInfo,
436
+ onMute: handleMute
437
+ }, {
438
+ customBar: withCtx(() => [
439
+ showBottomBar.value ? (openBlock(), createElementBlock("div", _hoisted_2, [
440
+ createCommentVNode(" \u5DE6\u4FA7\uFF1A\u64AD\u653E/\u6682\u505C "),
441
+ createElementVNode("div", _hoisted_3, [
442
+ createCommentVNode(" \u64AD\u653E "),
443
+ !isPlaying.value ? (openBlock(), createElementBlock("div", {
444
+ key: 0,
445
+ class: "i-easy-player-bottom-bar",
446
+ onClick: playerPlay
447
+ }, _cache[8] || (_cache[8] = [
448
+ createElementVNode(
449
+ "i",
450
+ { class: "iconfont icon-playfill" },
451
+ null,
452
+ -1
453
+ /* CACHED */
454
+ )
455
+ ]))) : (openBlock(), createElementBlock(
456
+ Fragment,
457
+ { key: 1 },
458
+ [
459
+ createCommentVNode(" \u6682\u505C "),
460
+ createElementVNode("div", {
461
+ class: "i-easy-player-bottom-bar",
462
+ onClick: playerPause
463
+ }, _cache[9] || (_cache[9] = [
464
+ createElementVNode(
465
+ "i",
466
+ { class: "iconfont icon-stop" },
467
+ null,
468
+ -1
469
+ /* CACHED */
470
+ )
471
+ ]))
472
+ ],
473
+ 2112
474
+ /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
475
+ )),
476
+ !isVolumeMuted.value ? (openBlock(), createElementBlock("div", _hoisted_4, [
477
+ createCommentVNode(" \u97F3\u91CF\u56FE\u6807 "),
478
+ createElementVNode("i", {
479
+ class: "iconfont icon-notificationfill",
480
+ onClick: _cache[0] || (_cache[0] = ($event) => handleSetMute(1))
481
+ })
482
+ ])) : (openBlock(), createElementBlock("div", _hoisted_5, [
483
+ createCommentVNode(" \u9759\u97F3\u56FE\u6807 "),
484
+ createElementVNode("i", {
485
+ class: "iconfont icon-notificationforbidfill",
486
+ onClick: _cache[1] || (_cache[1] = ($event) => handleSetMute(0))
487
+ })
488
+ ]))
489
+ ]),
490
+ createCommentVNode(" \u622A\u56FE,\u5168\u5C4F "),
491
+ createElementVNode("div", _hoisted_6, [
492
+ createCommentVNode(" \u8BED\u97F3\u5BF9\u8BB2:\u5173\u95ED\u72B6\u6001 "),
493
+ !isVoice.value ? (openBlock(), createElementBlock("div", {
494
+ key: 0,
495
+ class: "i-easy-player-bottom-bar",
496
+ onClick: intercom
497
+ }, _cache[10] || (_cache[10] = [
498
+ createElementVNode(
499
+ "i",
500
+ { class: "iconfont icon-voice" },
501
+ null,
502
+ -1
503
+ /* CACHED */
504
+ )
505
+ ]))) : createCommentVNode("v-if", true),
506
+ createCommentVNode(" \u8BED\u97F3\u5BF9\u8BB2:\u5F00\u542F\u72B6\u6001 "),
507
+ isVoice.value ? (openBlock(), createElementBlock("div", {
508
+ key: 1,
509
+ class: "i-easy-player-bottom-bar",
510
+ onClick: stopIntercom
511
+ }, _cache[11] || (_cache[11] = [
512
+ createElementVNode(
513
+ "i",
514
+ { class: "iconfont icon-voicefill" },
515
+ null,
516
+ -1
517
+ /* CACHED */
518
+ )
519
+ ]))) : createCommentVNode("v-if", true),
520
+ createCommentVNode(" \u622A\u56FE "),
521
+ createElementVNode("div", {
522
+ class: "i-easy-player-bottom-bar",
523
+ onClick: playerScreenShot
524
+ }, _cache[12] || (_cache[12] = [
525
+ createElementVNode(
526
+ "i",
527
+ { class: "iconfont icon-picfill" },
528
+ null,
529
+ -1
530
+ /* CACHED */
531
+ )
532
+ ])),
533
+ createCommentVNode(" \u5168\u5C4F "),
534
+ !isFullscreen.value ? (openBlock(), createElementBlock("div", {
535
+ key: 2,
536
+ title: "\u5168\u5C4F",
537
+ class: "i-easy-player-bottom-bar",
538
+ onClick: _cache[2] || (_cache[2] = ($event) => playerFullscreen(true))
539
+ }, _cache[13] || (_cache[13] = [
540
+ createElementVNode(
541
+ "i",
542
+ { class: "iconfont icon-full" },
543
+ null,
544
+ -1
545
+ /* CACHED */
546
+ )
547
+ ]))) : createCommentVNode("v-if", true),
548
+ createCommentVNode(" \u53D6\u6D88\u5168\u5C4F "),
549
+ isFullscreen.value ? (openBlock(), createElementBlock("div", {
550
+ key: 3,
551
+ class: "i-easy-player-bottom-bar",
552
+ onClick: _cache[3] || (_cache[3] = ($event) => playerFullscreen(false))
553
+ }, _cache[14] || (_cache[14] = [
554
+ createElementVNode(
555
+ "i",
556
+ { class: "iconfont icon-reduction" },
557
+ null,
558
+ -1
559
+ /* CACHED */
560
+ )
561
+ ]))) : createCommentVNode("v-if", true)
562
+ ])
563
+ ])) : createCommentVNode("v-if", true)
564
+ ]),
565
+ _: 1
566
+ /* STABLE */
567
+ }, 8, ["url", "debug", "access-token", "platform-type-name", "device-serial", "area-name"])) : createCommentVNode("v-if", true),
568
+ createCommentVNode(" \u8BED\u97F3\u5BF9\u8BB2\u9519\u8BEF\u63D0\u793A "),
569
+ audioMsg.value.msg ? (openBlock(), createElementBlock(
570
+ "div",
571
+ {
572
+ key: 2,
573
+ class: normalizeClass(["i-tzj-player__voice-default", `i-tzj-player__voice-${audioMsg.value.type}`])
574
+ },
575
+ toDisplayString(audioMsg.value.msg),
576
+ 3
577
+ /* TEXT, CLASS */
578
+ )) : createCommentVNode("v-if", true)
579
+ ],
580
+ 64
581
+ /* STABLE_FRAGMENT */
582
+ );
583
+ };
584
+ }
585
+ });
586
+
587
+ export { _sfc_main as default };
588
+ //# sourceMappingURL=ctyun-player.vue2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ctyun-player.vue2.mjs","sources":["../../../../../../../packages/components/tzj-player/src/ctyun-player.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { onMounted, ref, shallowRef } from \"vue\";\nimport { ctyunRequest, GetCtyunDeviceVideoUrl } from \"./ctyun-player\";\nimport EasyPlayer from \"./easyPlayer.vue\";\nimport { TzjPlayerProps } from \"./tzj-player\";\n\n// 天翼云播放器\ndefineOptions({\n name: \"CtyunPlayer\",\n});\n\nconst props = defineProps(TzjPlayerProps);\nconst videoUrl = ref(\"\");\nconst showBottomBar = ref(false);\nconst errorMsg = ref(\"\");\n\n// 播放器相关状态\nconst playerRef = shallowRef();\nconst isPlaying = ref(false); // 是否播放,播放true,暂停false\nconst isVoice = ref(false); // 是否开启语音对讲\nconst isFullscreen = ref(false);\nconst isVolumeMuted = ref(true);\n\n// 音频对讲相关状态\nconst isIntercomActive = ref<boolean>(false);\nconst audioContext = ref<AudioContext | null>(null);\nconst mediaStream = ref<MediaStream | null>(null);\nconst websocket = ref<WebSocket | null>(null);\nconst audioWorkletNode = ref<AudioWorkletNode | null>(null);\nconst intercomTimer = ref<any>(null); // 语音对讲定时器\nconst audioMsg = ref({\n type: \"\",\n msg: \"\",\n}); // 语音对讲提示信息\nconst taskId = ref(\"\");\n\n// 音频配置常量\nconst AUDIO_CONFIG = {\n sampleRate: 48000,\n channelCount: 1,\n sampleSize: 16,\n} as const;\n\nconst initPlayer = async () => {\n // console.log(\"initPlayer\");\n try {\n if (!props.deviceSerial) {\n errorMsg.value = \"设备序列号不能为空\";\n return;\n }\n\n const url = await GetCtyunDeviceVideoUrl(props.deviceSerial);\n if (!url) {\n errorMsg.value = \"获取视频播放地址失败\";\n return;\n }\n\n // console.log(\"initPlayer\", url);\n videoUrl.value = url;\n errorMsg.value = \"\";\n } catch (error) {\n if (props.debug) {\n console.error(\"初始化天翼云播放器失败:\", error);\n }\n errorMsg.value = `初始化失败: ${error instanceof Error ? error.message : \"未知错误\"}`;\n }\n};\n\n/**\n * 播放视频\n */\nconst playerPlay = (): void => {\n playerRef.value?.play();\n};\n\n/**\n * 暂停视频\n */\nconst playerPause = (): void => {\n playerRef.value?.pause();\n};\n\n/**\n * 截图\n */\nconst playerScreenShot = (): void => {\n playerRef.value?.screenshot();\n};\n\n/**\n * 切换全屏状态\n * @param fullscreen 是否全屏\n */\nconst playerFullscreen = (fullscreen: boolean): void => {\n isFullscreen.value = fullscreen;\n playerRef.value?.fullscreen(fullscreen);\n};\n\n// 获取视频信息,判断当前是否为静音状态\nconst handleVideoInfo = () => {\n // 判断是否静音\n isVolumeMuted.value = playerRef.value?.isMute();\n};\nconst handleMute = (mute: boolean) => {\n isVolumeMuted.value = mute;\n};\nconst handleSetMute = (volume: number) => {\n playerRef.value?.setMute(volume);\n};\n\nconst audioErrorMsg = (msg: string) => {\n audioMsg.value = {\n type: \"error\",\n msg,\n };\n // 3秒后清除错误信息\n setTimeout(() => {\n audioMsg.value = {\n type: \"\",\n msg: \"\",\n };\n }, 3000);\n};\n\n/**\n * 初始化音频上下文\n */\nconst initAudioContext = async (): Promise<void> => {\n try {\n // 检测浏览器是否支持AudioContext\n if (typeof window === \"undefined\") {\n throw new Error(\"非浏览器环境,无法使用AudioContext\");\n }\n\n const AudioContext =\n window.AudioContext || (window as any).webkitAudioContext;\n if (!AudioContext) {\n throw new Error(\"当前浏览器不支持AudioContext\");\n }\n\n // 创建音频上下文,使用指定的采样率\n audioContext.value = new AudioContext({\n sampleRate: AUDIO_CONFIG.sampleRate,\n });\n\n // 确保音频上下文处于运行状态\n if (audioContext.value.state === \"suspended\") {\n await audioContext.value.resume();\n }\n\n if (props.debug) {\n console.log(\n \"音频上下文初始化成功,采样率:\",\n audioContext.value.sampleRate,\n );\n }\n } catch (error) {\n throw new Error(`音频上下文初始化失败: ${error}`);\n }\n};\n\n/**\n * 初始化麦克风\n */\nconst initMicrophone = async (): Promise<void> => {\n try {\n // 检查浏览器是否支持getUserMedia\n if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {\n throw new Error(\"当前浏览器不支持麦克风访问\");\n }\n\n // 请求麦克风权限\n const constraints: MediaStreamConstraints = {\n audio: {\n channelCount: AUDIO_CONFIG.channelCount,\n sampleRate: AUDIO_CONFIG.sampleRate,\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n },\n video: false,\n };\n\n mediaStream.value = await navigator.mediaDevices.getUserMedia(constraints);\n if (props.debug) {\n console.log(\"麦克风初始化成功\");\n }\n } catch (error) {\n if (error instanceof Error) {\n switch (error.name) {\n case \"NotAllowedError\":\n throw new Error(\"麦克风权限被拒绝,请允许访问麦克风\");\n case \"NotFoundError\":\n throw new Error(\"未找到可用的麦克风设备\");\n case \"NotReadableError\":\n throw new Error(\"麦克风设备被其他应用占用\");\n case \"OverconstrainedError\":\n throw new Error(\"麦克风设备不支持指定的音频参数\");\n default:\n throw new Error(`麦克风初始化失败: ${error.message}`);\n }\n }\n throw new Error(`麦克风初始化失败: ${error}`);\n }\n};\n\n/**\n * 建立WebSocket连接\n */\nconst connectWebSocket = async (url: string): Promise<void> => {\n return new Promise((resolve, reject) => {\n try {\n websocket.value = new WebSocket(url);\n websocket.value.binaryType = \"arraybuffer\";\n\n let isResolved = false;\n\n // 连接成功\n websocket.value.onopen = () => {\n if (props.debug) {\n console.log(\"WebSocket连接成功\");\n }\n if (!isResolved) {\n isResolved = true;\n resolve();\n }\n };\n\n // 连接错误\n websocket.value.onerror = (error) => {\n if (props.debug) {\n console.error(\"WebSocket连接错误:\", error);\n }\n if (!isResolved) {\n isResolved = true;\n reject(new Error(\"WebSocket连接失败\"));\n }\n };\n\n // 连接关闭\n websocket.value.onclose = (event) => {\n if (props.debug) {\n console.log(\"WebSocket连接关闭:\", event.code, event.reason);\n }\n if (isIntercomActive.value) {\n isIntercomActive.value = false;\n isVoice.value = false;\n }\n };\n\n // 接收消息(如果服务端有响应)\n websocket.value.onmessage = (event) => {\n if (props.debug) {\n console.log(\"收到服务端消息:\", event.data);\n }\n };\n\n // 设置连接超时\n const timeoutId = setTimeout(() => {\n if (!isResolved && websocket.value?.readyState !== WebSocket.OPEN) {\n isResolved = true;\n websocket.value?.close();\n reject(new Error(\"WebSocket连接超时\"));\n }\n }, 10000); // 10秒超时\n\n // 清理超时定时器\n if (websocket.value) {\n const originalOnOpen = websocket.value.onopen;\n const originalOnError = websocket.value.onerror;\n\n websocket.value.onopen = function (event) {\n clearTimeout(timeoutId);\n originalOnOpen?.call(this, event);\n };\n\n websocket.value.onerror = function (event) {\n clearTimeout(timeoutId);\n originalOnError?.call(this, event);\n };\n }\n } catch (error) {\n reject(new Error(`WebSocket创建失败: ${error}`));\n }\n });\n};\n\n/**\n * 将Float32Array音频数据转换为16位PCM数据\n */\nconst convertToPCM16 = (float32Array: Float32Array): ArrayBuffer => {\n const buffer = new ArrayBuffer(float32Array.length * 2);\n const view = new DataView(buffer);\n\n for (let i = 0; i < float32Array.length; i++) {\n // 将浮点数(-1.0 到 1.0)转换为16位整数(-32768 到 32767)\n const sample = Math.max(-1, Math.min(1, float32Array[i]));\n const intSample = sample < 0 ? sample * 0x8000 : sample * 0x7fff;\n view.setInt16(i * 2, intSample, true); // true表示小端字节序\n }\n\n return buffer;\n};\n/**\n * 开始音频数据处理\n */\nconst startAudioProcessing = async (): Promise<void> => {\n try {\n if (!audioContext.value || !mediaStream.value) {\n throw new Error(\"音频上下文或媒体流未初始化\");\n }\n\n // 创建音频源节点\n const sourceNode = audioContext.value.createMediaStreamSource(\n mediaStream.value,\n );\n\n // 创建ScriptProcessor节点用于音频数据处理\n const bufferSize = 4096;\n const processor = audioContext.value.createScriptProcessor(\n bufferSize,\n 1,\n 1,\n );\n\n // 音频数据处理回调\n processor.onaudioprocess = (event) => {\n if (\n !isIntercomActive.value ||\n !websocket.value ||\n websocket.value.readyState !== WebSocket.OPEN\n ) {\n return;\n }\n\n try {\n // 获取音频数据\n const inputBuffer = event.inputBuffer;\n const inputData = inputBuffer.getChannelData(0); // 获取单声道数据\n\n // 检查音频数据是否有效\n if (inputData.length === 0) {\n return;\n }\n\n // 将Float32Array转换为16位PCM数据\n const pcmData = convertToPCM16(inputData);\n\n // 发送音频数据到WebSocket\n websocket.value.send(pcmData);\n } catch (error) {\n if (props.debug) {\n console.error(\"音频数据处理错误:\", error);\n }\n }\n };\n\n // 连接音频节点\n sourceNode.connect(processor);\n processor.connect(audioContext.value.destination);\n\n // 保存处理器引用以便后续清理\n audioWorkletNode.value = processor as any;\n\n if (props.debug) {\n console.log(\"音频数据处理开始\");\n }\n } catch (error) {\n throw new Error(`音频数据处理启动失败: ${error}`);\n }\n};\n\n/**\n * 停止语音对讲\n */\nconst stopIntercom = async (): Promise<void> => {\n try {\n if (props.debug) {\n console.log(\"正在停止语音对讲...\");\n }\n isVoice.value = false;\n isIntercomActive.value = false;\n\n // 清除定时器\n if (intercomTimer.value) {\n clearTimeout(intercomTimer.value);\n intercomTimer.value = null;\n }\n\n // 关闭服务端语音对讲\n if (props.deviceSerial && taskId.value) {\n try {\n // await GetYunZhiYanCloseVoiceIntercom(props.deviceSerial, taskId.value);\n } catch (error) {\n if (props.debug) {\n console.error(\"关闭服务端语音对讲失败:\", error);\n }\n }\n }\n\n // 关闭WebSocket连接\n if (websocket.value) {\n if (websocket.value.readyState === WebSocket.OPEN) {\n websocket.value.close(1000, \"用户主动关闭\");\n }\n websocket.value = null;\n }\n\n // 停止媒体流\n if (mediaStream.value) {\n mediaStream.value.getTracks().forEach((track) => {\n track.stop();\n });\n mediaStream.value = null;\n }\n\n // 关闭音频上下文\n if (audioContext.value && audioContext.value.state !== \"closed\") {\n try {\n await audioContext.value.close();\n } catch (error) {\n if (props.debug) {\n console.error(\"关闭音频上下文失败:\", error);\n }\n }\n audioContext.value = null;\n }\n\n // 清理音频工作节点\n if (audioWorkletNode.value) {\n try {\n audioWorkletNode.value.disconnect();\n } catch (error) {\n if (props.debug) {\n console.error(\"断开音频工作节点失败:\", error);\n }\n }\n audioWorkletNode.value = null;\n }\n\n // 清理任务ID\n taskId.value = \"\";\n audioMsg.value = {\n type: \"\",\n msg: \"\",\n };\n if (props.debug) {\n console.log(\"语音对讲已停止\");\n }\n } catch (error) {\n if (props.debug) {\n console.error(\"停止语音对讲时发生错误:\", error);\n }\n }\n};\n\n/**\n * 开启语音对讲\n */\nconst intercom = async (): Promise<void> => {\n try {\n if (props.debug) {\n console.log(\"开始语音对讲...\");\n }\n audioMsg.value = {\n type: \"info\",\n msg: \"正在连接...\",\n };\n // 防止重复开启\n if (isIntercomActive.value) {\n if (props.debug) {\n console.warn(\"语音对讲已在进行中\");\n }\n return;\n }\n // 设置加载状态\n isVoice.value = true;\n\n // 1. 获取语音推送地址\n if (props.debug) {\n console.log(\"正在获取语音推送地址...\");\n }\n const result = await ctyunRequest(\n \"POST\",\n `/devices/${props.deviceSerial}/startTalk`,\n {\n body: {\n // 传输优先级 tcp/udp\n TransPriority: \"tcp\",\n // 接入协议\n InProtocol: \"gb28181\",\n },\n },\n );\n console.log(result);\n if (result.statusCode === 200) {\n // ...\n } else {\n audioErrorMsg(result?.message || \"开启语音对讲失败\");\n return;\n }\n console.log(result);\n if (props.debug) {\n console.log(\"语音推送地址:\", \"\");\n }\n } catch (error) {\n console.error(\"开启语音对讲失败:\", error);\n audioErrorMsg(\"开启语音对讲失败\");\n }\n};\n\nonMounted(() => {\n initPlayer();\n});\n</script>\n\n<template>\n <div v-if=\"errorMsg\" class=\"i-tzj-player__error\">{{ errorMsg }}</div>\n <EasyPlayer\n v-else-if=\"videoUrl\"\n ref=\"playerRef\"\n :url=\"videoUrl\"\n :debug=\"debug\"\n :access-token=\"accessToken\"\n :platform-type-name=\"platformTypeName\"\n :device-serial=\"deviceSerial\"\n :area-name=\"areaName\"\n @mouseenter=\"showBottomBar = true\"\n @mouseleave=\"showBottomBar = false\"\n @pause=\"isPlaying = false\"\n @play=\"isPlaying = true\"\n @video-info=\"handleVideoInfo\"\n @mute=\"handleMute\"\n >\n <template #customBar>\n <div v-if=\"showBottomBar\" class=\"i-easy-player-bar\">\n <!-- 左侧:播放/暂停 -->\n <div class=\"i-easy-player-bar-item i-easy-player-bar-left\">\n <!-- 播放 -->\n <div\n v-if=\"!isPlaying\"\n class=\"i-easy-player-bottom-bar\"\n @click=\"playerPlay\"\n >\n <i class=\"iconfont icon-playfill\" />\n </div>\n <!-- 暂停 -->\n <div v-else class=\"i-easy-player-bottom-bar\" @click=\"playerPause\">\n <i class=\"iconfont icon-stop\" />\n </div>\n\n <div v-if=\"!isVolumeMuted\" class=\"i-easy-player-bottom-bar\">\n <!-- 音量图标 -->\n <i\n class=\"iconfont icon-notificationfill\"\n @click=\"handleSetMute(1)\"\n />\n </div>\n <div v-else class=\"i-easy-player-bottom-bar\">\n <!-- 静音图标 -->\n <i\n class=\"iconfont icon-notificationforbidfill\"\n @click=\"handleSetMute(0)\"\n />\n </div>\n </div>\n <!-- 截图,全屏 -->\n <div class=\"i-easy-player-bar-item i-easy-player-bar-right\">\n <!-- 语音对讲:关闭状态 -->\n <div\n v-if=\"!isVoice\"\n class=\"i-easy-player-bottom-bar\"\n @click=\"intercom\"\n >\n <i class=\"iconfont icon-voice\" />\n </div>\n <!-- 语音对讲:开启状态 -->\n <div\n v-if=\"isVoice\"\n class=\"i-easy-player-bottom-bar\"\n @click=\"stopIntercom\"\n >\n <i class=\"iconfont icon-voicefill\" />\n </div>\n <!-- 截图 -->\n <div class=\"i-easy-player-bottom-bar\" @click=\"playerScreenShot\">\n <i class=\"iconfont icon-picfill\" />\n </div>\n <!-- 全屏 -->\n <div\n v-if=\"!isFullscreen\"\n title=\"全屏\"\n class=\"i-easy-player-bottom-bar\"\n @click=\"playerFullscreen(true)\"\n >\n <i class=\"iconfont icon-full\" />\n </div>\n <!-- 取消全屏 -->\n <div\n v-if=\"isFullscreen\"\n class=\"i-easy-player-bottom-bar\"\n @click=\"playerFullscreen(false)\"\n >\n <i class=\"iconfont icon-reduction\" />\n </div>\n </div>\n </div>\n </template>\n </EasyPlayer>\n <!-- 语音对讲错误提示 -->\n <div\n v-if=\"audioMsg.msg\"\n class=\"i-tzj-player__voice-default\"\n :class=\"`i-tzj-player__voice-${audioMsg.type}`\"\n >\n {{ audioMsg.msg }}\n </div>\n</template>\n"],"names":["_createElementBlock","_toDisplayString","_createBlock","EasyPlayer","debug","accessToken","platformTypeName","deviceSerial","areaName","_openBlock","_createCommentVNode","_createElementVNode","_Fragment","_normalizeClass"],"mappings":"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"}