@yimou6/common-ui 1.13.27 → 1.13.29

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 (65) hide show
  1. package/cdn/index.cdn.js +27 -27
  2. package/cdn/index.cdn.js.map +1 -1
  3. package/cdn/index.cdn.mjs +30 -30
  4. package/cdn/index.cdn.mjs.map +1 -1
  5. package/es/components/index.mjs +1 -1
  6. package/es/components/tenant-enterprise/index.d.ts +1 -1
  7. package/es/components/tenant-enterprise/src/tenant-enterprise.vue.d.ts +1 -1
  8. package/es/components/tzj-player/index.d.ts +107 -5546
  9. package/es/components/tzj-player/index.mjs +1 -1
  10. package/es/components/tzj-player/src/ctyun-player.vue.d.ts +0 -1287
  11. package/es/components/tzj-player/src/ctyun-player.vue2.mjs +6 -347
  12. package/es/components/tzj-player/src/ctyun-player.vue2.mjs.map +1 -1
  13. package/es/components/tzj-player/src/tzj-player.vue.d.ts +107 -5546
  14. package/es/components/tzj-player/src/yunzhiyan.d.ts +2 -4
  15. package/es/components/tzj-player/src/yunzhiyan.mjs +33 -201
  16. package/es/components/tzj-player/src/yunzhiyan.mjs.map +1 -1
  17. package/es/components/tzj-player/src/yunzhiyanPlayer.vue.d.ts +0 -1287
  18. package/es/components/tzj-player/src/yunzhiyanPlayer.vue2.mjs +9 -405
  19. package/es/components/tzj-player/src/yunzhiyanPlayer.vue2.mjs.map +1 -1
  20. package/es/index.mjs +2 -2
  21. package/es/utils/index.mjs +1 -1
  22. package/es/utils/util.d.ts +0 -1
  23. package/es/utils/util.mjs +1 -17
  24. package/es/utils/util.mjs.map +1 -1
  25. package/lib/components/index.js +2 -4
  26. package/lib/components/index.js.map +1 -1
  27. package/lib/components/tenant-enterprise/index.d.ts +1 -1
  28. package/lib/components/tenant-enterprise/src/tenant-enterprise.vue.d.ts +1 -1
  29. package/lib/components/tzj-player/index.d.ts +107 -5546
  30. package/lib/components/tzj-player/index.js +2 -4
  31. package/lib/components/tzj-player/index.js.map +1 -1
  32. package/lib/components/tzj-player/src/ctyun-player.vue.d.ts +0 -1287
  33. package/lib/components/tzj-player/src/ctyun-player.vue2.js +5 -346
  34. package/lib/components/tzj-player/src/ctyun-player.vue2.js.map +1 -1
  35. package/lib/components/tzj-player/src/tzj-player.vue.d.ts +107 -5546
  36. package/lib/components/tzj-player/src/yunzhiyan.d.ts +2 -4
  37. package/lib/components/tzj-player/src/yunzhiyan.js +34 -204
  38. package/lib/components/tzj-player/src/yunzhiyan.js.map +1 -1
  39. package/lib/components/tzj-player/src/yunzhiyanPlayer.vue.d.ts +0 -1287
  40. package/lib/components/tzj-player/src/yunzhiyanPlayer.vue2.js +7 -403
  41. package/lib/components/tzj-player/src/yunzhiyanPlayer.vue2.js.map +1 -1
  42. package/lib/index.js +2 -5
  43. package/lib/index.js.map +1 -1
  44. package/lib/utils/index.js +0 -1
  45. package/lib/utils/index.js.map +1 -1
  46. package/lib/utils/util.d.ts +0 -1
  47. package/lib/utils/util.js +0 -17
  48. package/lib/utils/util.js.map +1 -1
  49. package/package.json +1 -1
  50. package/es/_virtual/_commonjsHelpers.mjs +0 -41
  51. package/es/_virtual/_commonjsHelpers.mjs.map +0 -1
  52. package/es/_virtual/dayjs.min.mjs +0 -8
  53. package/es/_virtual/dayjs.min.mjs.map +0 -1
  54. package/es/_virtual/dayjs.min2.mjs +0 -4
  55. package/es/_virtual/dayjs.min2.mjs.map +0 -1
  56. package/es/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.mjs +0 -18
  57. package/es/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.mjs.map +0 -1
  58. package/lib/_virtual/_commonjsHelpers.js +0 -47
  59. package/lib/_virtual/_commonjsHelpers.js.map +0 -1
  60. package/lib/_virtual/dayjs.min.js +0 -12
  61. package/lib/_virtual/dayjs.min.js.map +0 -1
  62. package/lib/_virtual/dayjs.min2.js +0 -6
  63. package/lib/_virtual/dayjs.min2.js.map +0 -1
  64. package/lib/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.js +0 -20
  65. package/lib/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { defineComponent, ref, shallowRef, onMounted, openBlock, createElementBlock, Fragment, createVNode, withCtx, createCommentVNode, createElementVNode, normalizeClass, toDisplayString } from 'vue';
2
- import { GetCtyunDeviceVideoUrl, ctyunRequest } from './ctyun-player.mjs';
2
+ import { GetCtyunDeviceVideoUrl } from './ctyun-player.mjs';
3
3
  import './easyPlayer.vue.mjs';
4
4
  import { TzjPlayerProps } from './tzj-player.mjs';
5
5
  import _sfc_main$1 from './easyPlayer.vue2.mjs';
@@ -33,25 +33,12 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
33
33
  const errorMsg = ref("");
34
34
  const playerRef = shallowRef();
35
35
  const isPlaying = ref(false);
36
- const isVoice = ref(false);
37
36
  const isFullscreen = ref(false);
38
37
  const isVolumeMuted = ref(true);
39
- const isIntercomActive = ref(false);
40
- const audioContext = ref(null);
41
- const mediaStream = ref(null);
42
- const websocket = ref(null);
43
- const audioWorkletNode = ref(null);
44
- const intercomTimer = ref(null);
45
38
  const audioMsg = ref({
46
39
  type: "",
47
40
  msg: ""
48
41
  });
49
- const taskId = ref("");
50
- const AUDIO_CONFIG = {
51
- sampleRate: 48e3,
52
- channelCount: 1,
53
- sampleSize: 16
54
- };
55
42
  const initPlayer = /* @__PURE__ */ __name(async () => {
56
43
  try {
57
44
  if (!props.deviceSerial) {
@@ -100,306 +87,6 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
100
87
  var _a;
101
88
  (_a = playerRef.value) == null ? void 0 : _a.setMute(volume);
102
89
  }, "handleSetMute");
103
- const audioErrorMsg = /* @__PURE__ */ __name((msg) => {
104
- audioMsg.value = {
105
- type: "error",
106
- msg
107
- };
108
- setTimeout(() => {
109
- audioMsg.value = {
110
- type: "",
111
- msg: ""
112
- };
113
- }, 3e3);
114
- }, "audioErrorMsg");
115
- const initAudioContext = /* @__PURE__ */ __name(async () => {
116
- try {
117
- if (typeof window === "undefined") {
118
- throw new Error("\u975E\u6D4F\u89C8\u5668\u73AF\u5883\uFF0C\u65E0\u6CD5\u4F7F\u7528AudioContext");
119
- }
120
- const AudioContext = window.AudioContext || window.webkitAudioContext;
121
- if (!AudioContext) {
122
- throw new Error("\u5F53\u524D\u6D4F\u89C8\u5668\u4E0D\u652F\u6301AudioContext");
123
- }
124
- audioContext.value = new AudioContext({
125
- sampleRate: AUDIO_CONFIG.sampleRate
126
- });
127
- if (audioContext.value.state === "suspended") {
128
- await audioContext.value.resume();
129
- }
130
- if (props.debug) {
131
- console.log(
132
- "\u97F3\u9891\u4E0A\u4E0B\u6587\u521D\u59CB\u5316\u6210\u529F\uFF0C\u91C7\u6837\u7387:",
133
- audioContext.value.sampleRate
134
- );
135
- }
136
- } catch (error) {
137
- throw new Error(`\u97F3\u9891\u4E0A\u4E0B\u6587\u521D\u59CB\u5316\u5931\u8D25: ${error}`);
138
- }
139
- }, "initAudioContext");
140
- const initMicrophone = /* @__PURE__ */ __name(async () => {
141
- try {
142
- if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {
143
- throw new Error("\u5F53\u524D\u6D4F\u89C8\u5668\u4E0D\u652F\u6301\u9EA6\u514B\u98CE\u8BBF\u95EE");
144
- }
145
- const constraints = {
146
- audio: {
147
- channelCount: AUDIO_CONFIG.channelCount,
148
- sampleRate: AUDIO_CONFIG.sampleRate,
149
- echoCancellation: true,
150
- noiseSuppression: true,
151
- autoGainControl: true
152
- },
153
- video: false
154
- };
155
- mediaStream.value = await navigator.mediaDevices.getUserMedia(constraints);
156
- if (props.debug) {
157
- console.log("\u9EA6\u514B\u98CE\u521D\u59CB\u5316\u6210\u529F");
158
- }
159
- } catch (error) {
160
- if (error instanceof Error) {
161
- switch (error.name) {
162
- case "NotAllowedError":
163
- throw new Error("\u9EA6\u514B\u98CE\u6743\u9650\u88AB\u62D2\u7EDD\uFF0C\u8BF7\u5141\u8BB8\u8BBF\u95EE\u9EA6\u514B\u98CE");
164
- case "NotFoundError":
165
- throw new Error("\u672A\u627E\u5230\u53EF\u7528\u7684\u9EA6\u514B\u98CE\u8BBE\u5907");
166
- case "NotReadableError":
167
- throw new Error("\u9EA6\u514B\u98CE\u8BBE\u5907\u88AB\u5176\u4ED6\u5E94\u7528\u5360\u7528");
168
- case "OverconstrainedError":
169
- throw new Error("\u9EA6\u514B\u98CE\u8BBE\u5907\u4E0D\u652F\u6301\u6307\u5B9A\u7684\u97F3\u9891\u53C2\u6570");
170
- default:
171
- throw new Error(`\u9EA6\u514B\u98CE\u521D\u59CB\u5316\u5931\u8D25: ${error.message}`);
172
- }
173
- }
174
- throw new Error(`\u9EA6\u514B\u98CE\u521D\u59CB\u5316\u5931\u8D25: ${error}`);
175
- }
176
- }, "initMicrophone");
177
- const connectWebSocket = /* @__PURE__ */ __name(async (url) => {
178
- return new Promise((resolve, reject) => {
179
- try {
180
- websocket.value = new WebSocket(url);
181
- websocket.value.binaryType = "arraybuffer";
182
- let isResolved = false;
183
- websocket.value.onopen = () => {
184
- if (props.debug) {
185
- console.log("WebSocket\u8FDE\u63A5\u6210\u529F");
186
- }
187
- if (!isResolved) {
188
- isResolved = true;
189
- resolve();
190
- }
191
- };
192
- websocket.value.onerror = (error) => {
193
- if (props.debug) {
194
- console.error("WebSocket\u8FDE\u63A5\u9519\u8BEF:", error);
195
- }
196
- if (!isResolved) {
197
- isResolved = true;
198
- reject(new Error("WebSocket\u8FDE\u63A5\u5931\u8D25"));
199
- }
200
- };
201
- websocket.value.onclose = (event) => {
202
- if (props.debug) {
203
- console.log("WebSocket\u8FDE\u63A5\u5173\u95ED:", event.code, event.reason);
204
- }
205
- if (isIntercomActive.value) {
206
- isIntercomActive.value = false;
207
- isVoice.value = false;
208
- }
209
- };
210
- websocket.value.onmessage = (event) => {
211
- if (props.debug) {
212
- console.log("\u6536\u5230\u670D\u52A1\u7AEF\u6D88\u606F:", event.data);
213
- }
214
- };
215
- const timeoutId = setTimeout(() => {
216
- var _a, _b;
217
- if (!isResolved && ((_a = websocket.value) == null ? void 0 : _a.readyState) !== WebSocket.OPEN) {
218
- isResolved = true;
219
- (_b = websocket.value) == null ? void 0 : _b.close();
220
- reject(new Error("WebSocket\u8FDE\u63A5\u8D85\u65F6"));
221
- }
222
- }, 1e4);
223
- if (websocket.value) {
224
- const originalOnOpen = websocket.value.onopen;
225
- const originalOnError = websocket.value.onerror;
226
- websocket.value.onopen = function(event) {
227
- clearTimeout(timeoutId);
228
- originalOnOpen == null ? void 0 : originalOnOpen.call(this, event);
229
- };
230
- websocket.value.onerror = function(event) {
231
- clearTimeout(timeoutId);
232
- originalOnError == null ? void 0 : originalOnError.call(this, event);
233
- };
234
- }
235
- } catch (error) {
236
- reject(new Error(`WebSocket\u521B\u5EFA\u5931\u8D25: ${error}`));
237
- }
238
- });
239
- }, "connectWebSocket");
240
- const convertToPCM16 = /* @__PURE__ */ __name((float32Array) => {
241
- const buffer = new ArrayBuffer(float32Array.length * 2);
242
- const view = new DataView(buffer);
243
- for (let i = 0; i < float32Array.length; i++) {
244
- const sample = Math.max(-1, Math.min(1, float32Array[i]));
245
- const intSample = sample < 0 ? sample * 32768 : sample * 32767;
246
- view.setInt16(i * 2, intSample, true);
247
- }
248
- return buffer;
249
- }, "convertToPCM16");
250
- const startAudioProcessing = /* @__PURE__ */ __name(async () => {
251
- try {
252
- if (!audioContext.value || !mediaStream.value) {
253
- throw new Error("\u97F3\u9891\u4E0A\u4E0B\u6587\u6216\u5A92\u4F53\u6D41\u672A\u521D\u59CB\u5316");
254
- }
255
- const sourceNode = audioContext.value.createMediaStreamSource(
256
- mediaStream.value
257
- );
258
- const bufferSize = 4096;
259
- const processor = audioContext.value.createScriptProcessor(
260
- bufferSize,
261
- 1,
262
- 1
263
- );
264
- processor.onaudioprocess = (event) => {
265
- if (!isIntercomActive.value || !websocket.value || websocket.value.readyState !== WebSocket.OPEN) {
266
- return;
267
- }
268
- try {
269
- const inputBuffer = event.inputBuffer;
270
- const inputData = inputBuffer.getChannelData(0);
271
- if (inputData.length === 0) {
272
- return;
273
- }
274
- const pcmData = convertToPCM16(inputData);
275
- websocket.value.send(pcmData);
276
- } catch (error) {
277
- if (props.debug) {
278
- console.error("\u97F3\u9891\u6570\u636E\u5904\u7406\u9519\u8BEF:", error);
279
- }
280
- }
281
- };
282
- sourceNode.connect(processor);
283
- processor.connect(audioContext.value.destination);
284
- audioWorkletNode.value = processor;
285
- if (props.debug) {
286
- console.log("\u97F3\u9891\u6570\u636E\u5904\u7406\u5F00\u59CB");
287
- }
288
- } catch (error) {
289
- throw new Error(`\u97F3\u9891\u6570\u636E\u5904\u7406\u542F\u52A8\u5931\u8D25: ${error}`);
290
- }
291
- }, "startAudioProcessing");
292
- const stopIntercom = /* @__PURE__ */ __name(async () => {
293
- try {
294
- if (props.debug) {
295
- console.log("\u6B63\u5728\u505C\u6B62\u8BED\u97F3\u5BF9\u8BB2...");
296
- }
297
- isVoice.value = false;
298
- isIntercomActive.value = false;
299
- if (intercomTimer.value) {
300
- clearTimeout(intercomTimer.value);
301
- intercomTimer.value = null;
302
- }
303
- if (props.deviceSerial && taskId.value) {
304
- try {
305
- } catch (error) {
306
- if (props.debug) {
307
- console.error("\u5173\u95ED\u670D\u52A1\u7AEF\u8BED\u97F3\u5BF9\u8BB2\u5931\u8D25:", error);
308
- }
309
- }
310
- }
311
- if (websocket.value) {
312
- if (websocket.value.readyState === WebSocket.OPEN) {
313
- websocket.value.close(1e3, "\u7528\u6237\u4E3B\u52A8\u5173\u95ED");
314
- }
315
- websocket.value = null;
316
- }
317
- if (mediaStream.value) {
318
- mediaStream.value.getTracks().forEach((track) => {
319
- track.stop();
320
- });
321
- mediaStream.value = null;
322
- }
323
- if (audioContext.value && audioContext.value.state !== "closed") {
324
- try {
325
- await audioContext.value.close();
326
- } catch (error) {
327
- if (props.debug) {
328
- console.error("\u5173\u95ED\u97F3\u9891\u4E0A\u4E0B\u6587\u5931\u8D25:", error);
329
- }
330
- }
331
- audioContext.value = null;
332
- }
333
- if (audioWorkletNode.value) {
334
- try {
335
- audioWorkletNode.value.disconnect();
336
- } catch (error) {
337
- if (props.debug) {
338
- console.error("\u65AD\u5F00\u97F3\u9891\u5DE5\u4F5C\u8282\u70B9\u5931\u8D25:", error);
339
- }
340
- }
341
- audioWorkletNode.value = null;
342
- }
343
- taskId.value = "";
344
- audioMsg.value = {
345
- type: "",
346
- msg: ""
347
- };
348
- if (props.debug) {
349
- console.log("\u8BED\u97F3\u5BF9\u8BB2\u5DF2\u505C\u6B62");
350
- }
351
- } catch (error) {
352
- if (props.debug) {
353
- console.error("\u505C\u6B62\u8BED\u97F3\u5BF9\u8BB2\u65F6\u53D1\u751F\u9519\u8BEF:", error);
354
- }
355
- }
356
- }, "stopIntercom");
357
- const intercom = /* @__PURE__ */ __name(async () => {
358
- try {
359
- if (props.debug) {
360
- console.log("\u5F00\u59CB\u8BED\u97F3\u5BF9\u8BB2...");
361
- }
362
- audioMsg.value = {
363
- type: "info",
364
- msg: "\u6B63\u5728\u8FDE\u63A5..."
365
- };
366
- if (isIntercomActive.value) {
367
- if (props.debug) {
368
- console.warn("\u8BED\u97F3\u5BF9\u8BB2\u5DF2\u5728\u8FDB\u884C\u4E2D");
369
- }
370
- return;
371
- }
372
- isVoice.value = true;
373
- if (props.debug) {
374
- console.log("\u6B63\u5728\u83B7\u53D6\u8BED\u97F3\u63A8\u9001\u5730\u5740...");
375
- }
376
- const result = await ctyunRequest(
377
- "POST",
378
- `/devices/${props.deviceSerial}/startTalk`,
379
- {
380
- body: {
381
- // 传输优先级 tcp/udp
382
- TransPriority: "tcp",
383
- // 接入协议
384
- InProtocol: "gb28181"
385
- }
386
- }
387
- );
388
- console.log(result);
389
- if (result.statusCode === 200) {
390
- } else {
391
- audioErrorMsg((result == null ? void 0 : result.message) || "\u5F00\u542F\u8BED\u97F3\u5BF9\u8BB2\u5931\u8D25");
392
- return;
393
- }
394
- console.log(result);
395
- if (props.debug) {
396
- console.log("\u8BED\u97F3\u63A8\u9001\u5730\u5740:", "");
397
- }
398
- } catch (error) {
399
- console.error("\u5F00\u542F\u8BED\u97F3\u5BF9\u8BB2\u5931\u8D25:", error);
400
- audioErrorMsg("\u5F00\u542F\u8BED\u97F3\u5BF9\u8BB2\u5931\u8D25");
401
- }
402
- }, "intercom");
403
90
  onMounted(() => {
404
91
  initPlayer();
405
92
  });
@@ -479,39 +166,11 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
479
166
  ]),
480
167
  createCommentVNode(" \u622A\u56FE,\u5168\u5C4F "),
481
168
  createElementVNode("div", _hoisted_5, [
482
- createCommentVNode(" \u8BED\u97F3\u5BF9\u8BB2:\u5173\u95ED\u72B6\u6001 "),
483
- !isVoice.value ? (openBlock(), createElementBlock("div", {
484
- key: 0,
485
- class: "i-easy-player-bottom-bar",
486
- onClick: intercom
487
- }, _cache[10] || (_cache[10] = [
488
- createElementVNode(
489
- "i",
490
- { class: "iconfont icon-voice" },
491
- null,
492
- -1
493
- /* CACHED */
494
- )
495
- ]))) : createCommentVNode("v-if", true),
496
- createCommentVNode(" \u8BED\u97F3\u5BF9\u8BB2:\u5F00\u542F\u72B6\u6001 "),
497
- isVoice.value ? (openBlock(), createElementBlock("div", {
498
- key: 1,
499
- class: "i-easy-player-bottom-bar",
500
- onClick: stopIntercom
501
- }, _cache[11] || (_cache[11] = [
502
- createElementVNode(
503
- "i",
504
- { class: "iconfont icon-voicefill" },
505
- null,
506
- -1
507
- /* CACHED */
508
- )
509
- ]))) : createCommentVNode("v-if", true),
510
169
  createCommentVNode(" \u622A\u56FE "),
511
170
  createElementVNode("div", {
512
171
  class: "i-easy-player-bottom-bar",
513
172
  onClick: playerScreenShot
514
- }, _cache[12] || (_cache[12] = [
173
+ }, _cache[10] || (_cache[10] = [
515
174
  createElementVNode(
516
175
  "i",
517
176
  { class: "iconfont icon-picfill" },
@@ -522,11 +181,11 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
522
181
  ])),
523
182
  createCommentVNode(" \u5168\u5C4F "),
524
183
  !isFullscreen.value ? (openBlock(), createElementBlock("div", {
525
- key: 2,
184
+ key: 0,
526
185
  title: "\u5168\u5C4F",
527
186
  class: "i-easy-player-bottom-bar",
528
187
  onClick: _cache[2] || (_cache[2] = ($event) => playerFullscreen(true))
529
- }, _cache[13] || (_cache[13] = [
188
+ }, _cache[11] || (_cache[11] = [
530
189
  createElementVNode(
531
190
  "i",
532
191
  { class: "iconfont icon-full" },
@@ -537,10 +196,10 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
537
196
  ]))) : createCommentVNode("v-if", true),
538
197
  createCommentVNode(" \u53D6\u6D88\u5168\u5C4F "),
539
198
  isFullscreen.value ? (openBlock(), createElementBlock("div", {
540
- key: 3,
199
+ key: 1,
541
200
  class: "i-easy-player-bottom-bar",
542
201
  onClick: _cache[3] || (_cache[3] = ($event) => playerFullscreen(false))
543
- }, _cache[14] || (_cache[14] = [
202
+ }, _cache[12] || (_cache[12] = [
544
203
  createElementVNode(
545
204
  "i",
546
205
  { class: "iconfont icon-reduction" },
@@ -1 +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 <EasyPlayer\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 :pause-mode=\"pauseMode\"\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":["_createVNode","EasyPlayer","debug","accessToken","platformTypeName","deviceSerial","areaName","pauseMode","_openBlock","_createElementBlock","_createCommentVNode","_createElementVNode","_Fragment","_normalizeClass","_toDisplayString"],"mappings":"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"}
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 { 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 isFullscreen = ref(false);\nconst isVolumeMuted = ref(true);\n\nconst audioMsg = ref({\n type: \"\",\n msg: \"\",\n}); // 语音对讲提示信息\n\nconst initPlayer = async () => {\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 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\nonMounted(() => {\n initPlayer();\n});\n</script>\n\n<template>\n <EasyPlayer\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 :pause-mode=\"pauseMode\"\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 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":["_createVNode","EasyPlayer","debug","accessToken","platformTypeName","deviceSerial","areaName","pauseMode","_openBlock","_createElementBlock","_createCommentVNode","_createElementVNode","_Fragment","_normalizeClass","_toDisplayString"],"mappings":"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"}