@yimou6/common-ui 1.12.12 → 1.12.14

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 (46) hide show
  1. package/cdn/index.cdn.js +13 -13
  2. package/cdn/index.cdn.js.map +1 -1
  3. package/cdn/index.cdn.mjs +13 -13
  4. package/cdn/index.cdn.mjs.map +1 -1
  5. package/cdn/index.css +1 -1
  6. package/es/components/radio/index.d.ts +16 -16
  7. package/es/components/radio/src/radio.d.ts +9 -4
  8. package/es/components/radio/src/radio.mjs +13 -2
  9. package/es/components/radio/src/radio.mjs.map +1 -1
  10. package/es/components/radio/src/radio.vue.d.ts +16 -16
  11. package/es/components/radio/src/radio.vue2.mjs +2 -5
  12. package/es/components/radio/src/radio.vue2.mjs.map +1 -1
  13. package/es/components/search/src/search.vue.d.ts +1 -1
  14. package/es/components/search/src/search.vue2.mjs.map +1 -1
  15. package/es/components/tzj-player/src/ctyun-player.vue2.mjs +2 -3
  16. package/es/components/tzj-player/src/ctyun-player.vue2.mjs.map +1 -1
  17. package/es/components/tzj-player/src/easyPlayer.vue2.mjs +2 -4
  18. package/es/components/tzj-player/src/easyPlayer.vue2.mjs.map +1 -1
  19. package/es/components/tzj-player/src/tzj-player.vue2.mjs +9 -16
  20. package/es/components/tzj-player/src/tzj-player.vue2.mjs.map +1 -1
  21. package/es/components/tzj-player/src/ysPlayer.vue2.mjs +1 -2
  22. package/es/components/tzj-player/src/ysPlayer.vue2.mjs.map +1 -1
  23. package/es/components/tzj-player/src/yunzhiyanPlayer.vue2.mjs +1 -2
  24. package/es/components/tzj-player/src/yunzhiyanPlayer.vue2.mjs.map +1 -1
  25. package/lib/components/radio/index.d.ts +16 -16
  26. package/lib/components/radio/src/radio.d.ts +9 -4
  27. package/lib/components/radio/src/radio.js +13 -1
  28. package/lib/components/radio/src/radio.js.map +1 -1
  29. package/lib/components/radio/src/radio.vue.d.ts +16 -16
  30. package/lib/components/radio/src/radio.vue2.js +1 -4
  31. package/lib/components/radio/src/radio.vue2.js.map +1 -1
  32. package/lib/components/search/src/search.vue.d.ts +1 -1
  33. package/lib/components/search/src/search.vue2.js.map +1 -1
  34. package/lib/components/tzj-player/src/ctyun-player.vue2.js +2 -3
  35. package/lib/components/tzj-player/src/ctyun-player.vue2.js.map +1 -1
  36. package/lib/components/tzj-player/src/easyPlayer.vue2.js +2 -4
  37. package/lib/components/tzj-player/src/easyPlayer.vue2.js.map +1 -1
  38. package/lib/components/tzj-player/src/tzj-player.vue2.js +9 -16
  39. package/lib/components/tzj-player/src/tzj-player.vue2.js.map +1 -1
  40. package/lib/components/tzj-player/src/ysPlayer.vue2.js +1 -2
  41. package/lib/components/tzj-player/src/ysPlayer.vue2.js.map +1 -1
  42. package/lib/components/tzj-player/src/yunzhiyanPlayer.vue2.js +1 -2
  43. package/lib/components/tzj-player/src/yunzhiyanPlayer.vue2.js.map +1 -1
  44. package/package.json +1 -1
  45. package/theme-default/i-tzj-player.css +1 -1
  46. package/theme-default/index.css +1 -1
@@ -1,4 +1,4 @@
1
- import { excludeObjectKeys } from '../../../utils';
1
+ import { excludeObjectKeys } from "../../../utils";
2
2
  declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
3
3
  inline: {
4
4
  type: BooleanConstructor;
@@ -1 +1 @@
1
- {"version":3,"file":"search.vue2.mjs","sources":["../../../../../../../packages/components/search/src/search.vue"],"sourcesContent":["<script lang=\"ts\" setup>\n import { ElButton } from 'element-plus';\n import { ref, watchEffect } from 'vue';\n import { excludeObjectKeys } from '../../../utils';\n import IForm from '../../form/src/form.vue';\n import { excludeSearchPropsKeys, SearchEmits, SearchProps } from './search';\n\n defineOptions({\n name: 'ISearch',\n });\n const props = defineProps(SearchProps);\n const emit = defineEmits(SearchEmits);\n\n const bindAttrs = ref<any>();\n watchEffect(() => {\n const attrs = excludeObjectKeys(props, excludeSearchPropsKeys);\n if (!attrs.fileds) {\n attrs.fileds = [];\n }\n if (!attrs.fields.some((item: any) => item.prop === 'searchBtn')) {\n attrs.fields.push({\n prop: 'searchBtn',\n comp: 'slot',\n });\n }\n bindAttrs.value = attrs;\n });\n\n const formRef = ref();\n defineExpose({\n getRef() {\n return formRef.value?.getRef();\n },\n });\n\n const handleChange = (key: string, value: any, ref: any, comp: string) => {\n emit('change', key, value, ref, comp);\n if (comp === 'el-input') {\n // el-input change 调用查询事件\n // 即在输入框值变化和按下回车时,触发查询事件。\n // emit('search', props.model);\n }\n };\n</script>\n\n<template>\n <div class=\"i-search\">\n <IForm ref=\"formRef\" v-bind=\"bindAttrs\" @change=\"handleChange\">\n <template v-for=\"(item, key) in $slots\" :key=\"key\" #[key]>\n <slot v-if=\"key !== 'searchBtn' && key !== 'btn'\" :name=\"key\" v-bind=\"item\" />\n </template>\n <template #searchBtn>\n <div class=\"i-search__opera\">\n <template v-if=\"showDefaultBtn\">\n <ElButton type=\"primary\" :loading=\"loading\" @click=\"emit('search', model)\">{{ searchBtnText }}</ElButton>\n <ElButton :loading=\"loading\" @click=\"emit('reset')\">{{ resetBtnText }}</ElButton>\n </template>\n <template v-if=\"$slots.btn\">\n <slot name=\"btn\" />\n </template>\n </div>\n </template>\n </IForm>\n </div>\n</template>\n"],"names":["ref","_openBlock","_createElementBlock","_createVNode","IForm","_mergeProps","_createSlots","_createElementVNode","showDefaultBtn","_Fragment","_unref","loading","model","searchBtnText","resetBtnText","$slots","_renderSlot","_normalizeProps"],"mappings":"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"}
1
+ {"version":3,"file":"search.vue2.mjs","sources":["../../../../../../../packages/components/search/src/search.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { ElButton } from \"element-plus\";\nimport { ref, watchEffect } from \"vue\";\nimport { excludeObjectKeys } from \"../../../utils\";\nimport IForm from \"../../form/src/form.vue\";\nimport { excludeSearchPropsKeys, SearchEmits, SearchProps } from \"./search\";\n\ndefineOptions({\n name: \"ISearch\",\n});\nconst props = defineProps(SearchProps);\nconst emit = defineEmits(SearchEmits);\n\nconst bindAttrs = ref<any>();\nwatchEffect(() => {\n const attrs = excludeObjectKeys(props, excludeSearchPropsKeys);\n if (!attrs.fileds) {\n attrs.fileds = [];\n }\n if (!attrs.fields.some((item: any) => item.prop === \"searchBtn\")) {\n attrs.fields.push({\n prop: \"searchBtn\",\n comp: \"slot\",\n });\n }\n bindAttrs.value = attrs;\n});\n\nconst formRef = ref();\ndefineExpose({\n getRef() {\n return formRef.value?.getRef();\n },\n});\n\nconst handleChange = (key: string, value: any, ref: any, comp: string) => {\n emit(\"change\", key, value, ref, comp);\n if (comp === \"el-input\") {\n // el-input change 调用查询事件\n // 即在输入框值变化和按下回车时,触发查询事件。\n // emit('search', props.model);\n }\n};\n</script>\n\n<template>\n <div class=\"i-search\">\n <IForm ref=\"formRef\" v-bind=\"bindAttrs\" @change=\"handleChange\">\n <template v-for=\"(item, key) in $slots\" :key=\"key\" #[key]>\n <slot\n v-if=\"key !== 'searchBtn' && key !== 'btn'\"\n :name=\"key\"\n v-bind=\"item\"\n />\n </template>\n <template #searchBtn>\n <div class=\"i-search__opera\">\n <template v-if=\"showDefaultBtn\">\n <ElButton\n type=\"primary\"\n :loading=\"loading\"\n @click=\"emit('search', model)\"\n >\n {{ searchBtnText }}\n </ElButton>\n <ElButton :loading=\"loading\" @click=\"emit('reset')\">\n {{ resetBtnText }}\n </ElButton>\n </template>\n <template v-if=\"$slots.btn\">\n <slot name=\"btn\" />\n </template>\n </div>\n </template>\n </IForm>\n </div>\n</template>\n"],"names":["ref","_openBlock","_createElementBlock","_createVNode","IForm","_mergeProps","_createSlots","_createElementVNode","showDefaultBtn","_Fragment","_unref","loading","model","searchBtnText","resetBtnText","$slots","_renderSlot","_normalizeProps"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { defineComponent, ref, shallowRef, onMounted, openBlock, createElementBlock, Fragment, createBlock, withCtx, createCommentVNode, createElementVNode, normalizeClass, toDisplayString } from 'vue';
2
2
  import { GetCtyunDeviceVideoUrl, ctyunRequest } from './ctyun-player.mjs';
3
3
  import './easyPlayer.vue.mjs';
4
- import { TzjPlayerProps } from './tzj-player.mjs';
5
4
  import './errorPage.vue.mjs';
5
+ import { TzjPlayerProps } from './tzj-player.mjs';
6
6
  import _sfc_main$1 from './errorPage.vue2.mjs';
7
7
  import _sfc_main$2 from './easyPlayer.vue2.mjs';
8
8
 
@@ -412,9 +412,8 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
412
412
  [
413
413
  errorMsg.value ? (openBlock(), createBlock(_sfc_main$1, {
414
414
  key: 0,
415
- videoName: _ctx.areaName || _ctx.deviceSerial,
416
415
  message: errorMsg.value
417
- }, null, 8, ["videoName", "message"])) : videoUrl.value ? (openBlock(), createBlock(_sfc_main$2, {
416
+ }, null, 8, ["message"])) : videoUrl.value ? (openBlock(), createBlock(_sfc_main$2, {
418
417
  key: 1,
419
418
  ref_key: "playerRef",
420
419
  ref: playerRef,
@@ -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\";\nimport ErrorPage from \"./errorPage.vue\";\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 <ErrorPage\n v-if=\"errorMsg\"\n :videoName=\"areaName || deviceSerial\"\n :message=\"errorMsg\"\n />\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 :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":["_createBlock","ErrorPage","areaName","deviceSerial","EasyPlayer","debug","accessToken","platformTypeName","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 { ctyunRequest, GetCtyunDeviceVideoUrl } from \"./ctyun-player\";\nimport EasyPlayer from \"./easyPlayer.vue\";\nimport ErrorPage from \"./errorPage.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 <ErrorPage v-if=\"errorMsg\" :message=\"errorMsg\" />\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 :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":["_createBlock","ErrorPage","EasyPlayer","debug","accessToken","platformTypeName","deviceSerial","areaName","pauseMode","_openBlock","_createElementBlock","_createCommentVNode","_createElementVNode","_Fragment","_normalizeClass","_toDisplayString"],"mappings":"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"}
@@ -438,14 +438,12 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
438
438
  [
439
439
  !playSuccess.value ? (openBlock(), createBlock(_sfc_main$1, {
440
440
  key: 0,
441
- "video-name": _ctx.areaName || _ctx.deviceSerial,
442
441
  message: "\u65E0\u4FE1\u53F7"
443
- }, null, 8, ["video-name"])) : createCommentVNode("v-if", true),
442
+ })) : createCommentVNode("v-if", true),
444
443
  !playUrl.value ? (openBlock(), createBlock(_sfc_main$1, {
445
444
  key: 1,
446
- "video-name": _ctx.areaName || _ctx.deviceSerial,
447
445
  message: "\u65E0\u64AD\u653E\u5730\u5740"
448
- }, null, 8, ["video-name"])) : createCommentVNode("v-if", true),
446
+ })) : createCommentVNode("v-if", true),
449
447
  createCommentVNode(" \u64AD\u653E\u5668\u5E95\u90E8\u64CD\u4F5C\u680F "),
450
448
  renderSlot(_ctx.$slots, "customBar")
451
449
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"easyPlayer.vue2.mjs","sources":["../../../../../../../packages/components/tzj-player/src/easyPlayer.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n computed,\n onBeforeUnmount,\n onMounted,\n ref,\n shallowRef,\n useSlots,\n watch,\n} from \"vue\";\nimport ErrorPage from \"./errorPage.vue\";\nimport { TzjPlayerProps, uuid } from \"./tzj-player\";\n\ndefineOptions({\n name: \"EasyPlayer\",\n});\n\nconst props = defineProps(TzjPlayerProps);\nconst emits = defineEmits([\n \"timeout\",\n \"error\",\n \"play\",\n \"pause\",\n \"mute\",\n \"videoInfo\",\n]);\nconst slots = useSlots();\nconst customBar = computed(() => slots.customBar);\n\nlet player: any = null;\nconst id = uuid();\nconst playerRef = shallowRef<HTMLDivElement>();\nconst playSuccess = ref(true);\nconst playUrl = ref(\"\");\nconst isFullscreen = ref(false);\nconst videoInfo = ref<any>(null);\nconst realFullscreen = ref(false);\nconst eventHandlers = ref<Map<string, Function>>(new Map());\n// 用于追踪等待 EasyPlayerPro 加载的轮询定时器,防止组件卸载后泄漏\nlet waitTimer: ReturnType<typeof setInterval> | null = null;\n// 用于定时重启播放器的定时器,防止播放器卡死\nconst restartTimer = ref<ReturnType<typeof setInterval> | null>(null);\n// 用于定时暂停播放器的定时器(pauseMode=3时,每60分钟触发一次暂停)\nconst pauseCycleTimer = ref<ReturnType<typeof setInterval> | null>(null);\n// ResizeObserver:监听容器尺寸变化,同步更新播放器 DOM 尺寸\nlet resizeObserver: ResizeObserver | null = null;\n// startPlayer 重试计数,处理 worklet/AbortError 偶发失败\nlet createRetryCount = 0;\nconst MAX_CREATE_RETRY = 3;\n// 标记组件是否已卸载,防止卸载后的异步操作继续执行\nlet isUnmounted = false;\nonMounted(() => {\n // 监听容器尺寸变化,同步播放器 DOM 尺寸(防止控件丢失)\n if (typeof ResizeObserver !== \"undefined\" && playerRef.value) {\n resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect;\n const dom = document.getElementById(id);\n if (dom && width > 0 && height > 0 && !realFullscreen.value) {\n dom.style.width = `${width}px`;\n dom.style.height = `${height}px`;\n }\n }\n });\n resizeObserver.observe(playerRef.value);\n }\n initPlayer(props.url || \"\");\n});\n\nwatch(\n () => props.url,\n (newUrl: string) => {\n initPlayer(newUrl || \"\");\n },\n);\n\nonBeforeUnmount(() => {\n isUnmounted = true;\n // 清除 ResizeObserver\n if (resizeObserver) {\n resizeObserver.disconnect();\n resizeObserver = null;\n }\n // 清除等待 EasyPlayerPro 加载的轮询定时器,防止卸载后继续创建播放器\n if (waitTimer !== null) {\n clearInterval(waitTimer);\n waitTimer = null;\n }\n // 清除定时暂停的定时器\n if (pauseCycleTimer.value !== null) {\n clearInterval(pauseCycleTimer.value);\n pauseCycleTimer.value = null;\n }\n if (props.debug) {\n console.log(\"组件卸载\");\n }\n playUrl.value = \"\";\n destroy();\n});\n\nconst play = (url?: string) => {\n if (url) {\n initPlayer(url);\n } else {\n if (player) {\n player.play(playUrl.value);\n // pauseMode=3 时,继续播放后重新开始60分钟计时\n if (props.pauseMode === 3) {\n if (pauseCycleTimer.value !== null) {\n clearInterval(pauseCycleTimer.value);\n }\n pauseCycleTimer.value = setInterval(\n () => {\n if (!isUnmounted && player) {\n player.pause?.();\n if (props.debug) {\n console.log(\"pauseMode: 每60分钟定时暂停\");\n }\n }\n },\n 1000 * 60 * 10,\n );\n }\n } else {\n destroy();\n }\n }\n};\n\nconst playerPause = () => {\n if (props.debug) {\n console.log(\"暂停\");\n }\n player?.pause?.();\n};\n\nconst playerScreenShot = () => {\n if (props.debug) {\n console.log(\"截图\");\n }\n player?.screenshot?.(\n `${props.areaName}_${new Date().getTime()}`,\n \"png\",\n 0.5,\n \"download\",\n );\n};\n\nconst playerFullscreen = (fullscreen: boolean) => {\n realFullscreen.value = fullscreen;\n if (props.debug) {\n console.log(\"全屏\");\n }\n // 自定义全屏逻辑\n if (typeof document !== \"undefined\") {\n if (!fullscreen) {\n document.exitFullscreen?.();\n } else {\n playerRef.value?.requestFullscreen?.();\n }\n // 先同步销毁,再延迟重建,避免异步销毁时组件已卸载导致实例泄漏\n destroy();\n setTimeout(() => {\n if (!isUnmounted) {\n initPlayer(playUrl.value);\n }\n }, 200);\n }\n isFullscreen.value = !fullscreen;\n};\ndefineExpose({\n play,\n destroy,\n getPlayer: () => player,\n pause: playerPause,\n screenshot: playerScreenShot,\n fullscreen: playerFullscreen,\n isMute: () => {\n return player?.isMute?.();\n },\n setMute: (mute: number) => {\n player?.setMute?.(mute);\n },\n});\n\n/**\n * 格式化URL,确保使用完整的URL\n * @param url - 原始URL\n * @returns 格式化后的URL\n */\nconst formatUrl = (url: string): string => {\n if (!url) return \"\";\n\n // 如果已经是完整URL,直接返回\n if (\n url.startsWith(\"http://\") ||\n url.startsWith(\"https://\") ||\n url.startsWith(\"ws://\")\n ) {\n return url;\n }\n\n // 如果URL以//开头,自动补全协议(根据当前页面协议)\n if (url.startsWith(\"//\")) {\n if (typeof window !== \"undefined\" && window.location) {\n return `${window.location.protocol}${url}`;\n }\n // SSR环境下默认使用https\n return `https:${url}`;\n }\n\n // 检查是否在浏览器环境中,避免SSR环境下的location访问错误\n if (typeof window !== \"undefined\" && window.location) {\n // 如果是相对路径,添加当前域名\n return `${window.location.origin}${url.startsWith(\"/\") ? \"\" : \"/\"}${url}`;\n }\n\n // SSR 环境下返回相对路径\n return url;\n};\n\nasync function initPlayer(url: string) {\n if (props.debug) {\n console.log(\"初始化播放器\", url);\n }\n // 清除上一次可能残留的轮询定时器\n if (waitTimer !== null) {\n clearInterval(waitTimer);\n waitTimer = null;\n }\n removePlayerDom();\n if (url) {\n playUrl.value = formatUrl(url);\n if (props.debug) {\n console.log(\"格式化后的url\", playUrl.value);\n }\n if (typeof window !== \"undefined\" && window?.EasyPlayerPro) {\n createPlayer();\n } else if (typeof window !== \"undefined\") {\n waitTimer = setInterval(() => {\n if (window?.EasyPlayerPro) {\n clearInterval(waitTimer!);\n waitTimer = null;\n // 组件已卸载则不再创建播放器\n if (!isUnmounted) {\n createPlayer();\n }\n }\n }, 100);\n }\n }\n}\n\n/**\n * 移除播放器DOM\n */\nfunction removePlayerDom() {\n if (typeof document !== \"undefined\") {\n const dom = document.getElementById(id);\n dom && dom.remove();\n }\n}\n\n/**\n * 创建播放器DOM\n */\nfunction createPlayerDom(): Promise<HTMLDivElement> {\n removePlayerDom();\n return new Promise((resolve) => {\n if (typeof document === \"undefined\") {\n resolve(null!);\n return;\n }\n // 最大重试帧数,防止无限等待\n let retryCount = 0;\n const MAX_RETRY = 60; // 约 1 秒 (60 * 16ms)\n\n const tryCreate = () => {\n const rect = playerRef.value?.getBoundingClientRect();\n if (!rect || rect.width <= 0 || rect.height <= 0) {\n if (++retryCount < MAX_RETRY) {\n requestAnimationFrame(tryCreate);\n return;\n }\n // 超过最大重试次数,使用 100% 尺寸兜底\n console.warn(\"[EasyPlayer] 容器尺寸获取超时,使用默认尺寸\");\n }\n\n const dom = document.createElement(\"div\");\n dom.id = id;\n // 使用实际尺寸,若获取失败则用 100%\n const rectW = rect?.width ?? 0;\n const rectH = rect?.height ?? 0;\n const w = rectW > 0 ? rectW : playerRef.value?.offsetWidth || 800;\n const h = rectH > 0 ? rectH : playerRef.value?.offsetHeight || 450;\n\n if (realFullscreen.value) {\n dom.style.width = `100vw`;\n dom.style.height =\n props.areaName || props.deviceSerial ? `calc(100vh - 32px)` : `100vh`;\n } else {\n dom.style.width = `${w}px`;\n dom.style.height =\n props.areaName || props.deviceSerial ? `${h - 32}px` : `${h}px`;\n }\n playerRef.value?.appendChild(dom);\n resolve(dom);\n };\n\n requestAnimationFrame(tryCreate);\n });\n}\n\nasync function createPlayer() {\n if (props.debug) {\n console.log(\"创建播放器\");\n }\n videoInfo.value = null;\n await createPlayerDom();\n // 每30秒重启一次播放器,防止播放器卡死\n if (restartTimer.value !== null) {\n clearInterval(restartTimer.value);\n restartTimer.value = null;\n }\n restartTimer.value = setInterval(\n () => {\n destroy(false);\n setTimeout(() => {\n startPlayer();\n }, 1000 * 20);\n },\n 1000 * 60 * 60,\n );\n startPlayer();\n}\n\nasync function startPlayer() {\n try {\n if (typeof window !== \"undefined\" && typeof document !== \"undefined\") {\n player = new window.EasyPlayerPro(document.getElementById(id), {\n isLive: true, // 是否直播\n hasAudio: true, // 是否解析音频\n bufferTime: 0, // 直播监控缓存时长设为0,减少内存堆积\n stretch: true, // 加视频拉伸\n MSE: false,\n WCS: false,\n WASM: true,\n debug: false,\n // operateBtns: {\n // performance: false,\n // },\n autoCleanupSourceBuffer: true, //(对 SourceBuffer 进行自动清理)\n // H.265 直播监控场景:后向缓冲区保留时长设为0,避免长时间占用大量内存\n // 原值60秒会导致H.265高码率视频内存持续增长\n autoCleanupMinBackwardDuration: 0,\n });\n // 创建成功,重置重试计数\n createRetryCount = 0;\n }\n if (player) {\n player.play(playUrl.value);\n\n // 根据 pauseMode 处理暂停逻辑\n // pauseMode=2 或 3 时,初始默认暂停\n if (props.pauseMode === 2 || props.pauseMode === 3) {\n // 短暂延迟后暂停,确保播放器已开始播放再暂停\n setTimeout(() => {\n if (!isUnmounted && player) {\n player.pause?.();\n if (props.debug) {\n console.log(\"pauseMode: 初始默认暂停\");\n }\n }\n }, 500);\n }\n\n // pauseMode=3 时,每60分钟触发一次暂停\n if (props.pauseMode === 3) {\n if (pauseCycleTimer.value !== null) {\n clearInterval(pauseCycleTimer.value);\n }\n pauseCycleTimer.value = setInterval(\n () => {\n if (!isUnmounted && player) {\n player.pause?.();\n if (props.debug) {\n console.log(\"pauseMode: 每60分钟定时暂停\");\n }\n }\n },\n 1000 * 60 * 60,\n );\n }\n\n const timeoutHandler = () => {\n props.debug && console.log(\"加载超时\");\n emits(\"timeout\");\n playSuccess.value = false;\n destroy();\n initPlayer(playUrl.value);\n };\n\n const errorHandler = () => {\n props.debug && console.log(\"播放异常\");\n emits(\"error\");\n playSuccess.value = false;\n destroy();\n };\n\n const playHandler = () => {\n playSuccess.value = true;\n props.debug && console.log(\"播放\");\n emits(\"play\");\n };\n\n const pauseHandler = () => {\n props.debug && console.log(\"暂停\");\n emits(\"pause\");\n };\n\n const videoInfoHandler = (info: any) => {\n props.debug && console.log(\"视频信息\", info);\n videoInfo.value = info;\n emits(\"videoInfo\", info);\n };\n\n const muteHandler = (mute: false) => {\n props.debug && console.log(\"静音\");\n emits(\"mute\", mute);\n };\n\n player.on(\"timeout\", timeoutHandler);\n player.on(\"error\", errorHandler);\n player.on(\"play\", playHandler);\n player.on(\"pause\", pauseHandler);\n player.on(\"videoInfo\", videoInfoHandler);\n player.on(\"mute\", muteHandler);\n\n eventHandlers.value.set(\"timeout\", timeoutHandler);\n eventHandlers.value.set(\"error\", errorHandler);\n eventHandlers.value.set(\"play\", playHandler);\n eventHandlers.value.set(\"pause\", pauseHandler);\n eventHandlers.value.set(\"videoInfo\", videoInfoHandler);\n eventHandlers.value.set(\"mute\", muteHandler);\n }\n } catch (error) {\n const isWorkletError =\n error instanceof DOMException &&\n (error.name === \"AbortError\" ||\n String(error.message).includes(\"worklet\"));\n // worklet 加载偶发失败,自动重试\n if (isWorkletError && createRetryCount < MAX_CREATE_RETRY) {\n createRetryCount++;\n if (props.debug) {\n console.warn(\n `[EasyPlayer] AudioWorklet 加载失败(第 ${createRetryCount}/${MAX_CREATE_RETRY} 次),1秒后重试...`,\n error,\n );\n }\n destroy(false);\n setTimeout(() => {\n if (!isUnmounted) startPlayer();\n }, 1000);\n return;\n }\n console.error(\"创建播放器失败:\", error);\n setTimeout(() => {\n if (!isUnmounted) startPlayer();\n }, 2000);\n }\n}\n\nfunction destroy(flag = true) {\n if (player) {\n eventHandlers.value.forEach((handler, eventName) => {\n player.off(eventName, handler);\n });\n eventHandlers.value.clear();\n player.destroy();\n player = null;\n }\n\n if (flag) {\n // 清除定时重启播放器的定时器\n if (restartTimer.value !== null) {\n clearInterval(restartTimer.value);\n restartTimer.value = null;\n }\n // 清除定时暂停的定时器\n if (pauseCycleTimer.value !== null) {\n clearInterval(pauseCycleTimer.value);\n pauseCycleTimer.value = null;\n }\n removePlayerDom();\n }\n}\n</script>\n\n<template>\n <div\n ref=\"playerRef\"\n class=\"i-tzj-easyPlayer\"\n :class=\"customBar ? 'i-tzj-easyPlayer--custom' : ''\"\n >\n <ErrorPage\n v-if=\"!playSuccess\"\n :video-name=\"areaName || deviceSerial\"\n message=\"无信号\"\n />\n <ErrorPage\n v-if=\"!playUrl\"\n :video-name=\"areaName || deviceSerial\"\n message=\"无播放地址\"\n />\n\n <!-- 播放器底部操作栏 -->\n <slot name=\"customBar\" />\n </div>\n</template>\n"],"names":["_createElementBlock","_normalizeClass","_createBlock","ErrorPage","areaName","deviceSerial","_createCommentVNode","_renderSlot"],"mappings":"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"}
1
+ {"version":3,"file":"easyPlayer.vue2.mjs","sources":["../../../../../../../packages/components/tzj-player/src/easyPlayer.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n computed,\n onBeforeUnmount,\n onMounted,\n ref,\n shallowRef,\n useSlots,\n watch,\n} from \"vue\";\nimport ErrorPage from \"./errorPage.vue\";\nimport { TzjPlayerProps, uuid } from \"./tzj-player\";\n\ndefineOptions({\n name: \"EasyPlayer\",\n});\n\nconst props = defineProps(TzjPlayerProps);\nconst emits = defineEmits([\n \"timeout\",\n \"error\",\n \"play\",\n \"pause\",\n \"mute\",\n \"videoInfo\",\n]);\nconst slots = useSlots();\nconst customBar = computed(() => slots.customBar);\n\nlet player: any = null;\nconst id = uuid();\nconst playerRef = shallowRef<HTMLDivElement>();\nconst playSuccess = ref(true);\nconst playUrl = ref(\"\");\nconst isFullscreen = ref(false);\nconst videoInfo = ref<any>(null);\nconst realFullscreen = ref(false);\nconst eventHandlers = ref<Map<string, Function>>(new Map());\n// 用于追踪等待 EasyPlayerPro 加载的轮询定时器,防止组件卸载后泄漏\nlet waitTimer: ReturnType<typeof setInterval> | null = null;\n// 用于定时重启播放器的定时器,防止播放器卡死\nconst restartTimer = ref<ReturnType<typeof setInterval> | null>(null);\n// 用于定时暂停播放器的定时器(pauseMode=3时,每60分钟触发一次暂停)\nconst pauseCycleTimer = ref<ReturnType<typeof setInterval> | null>(null);\n// ResizeObserver:监听容器尺寸变化,同步更新播放器 DOM 尺寸\nlet resizeObserver: ResizeObserver | null = null;\n// startPlayer 重试计数,处理 worklet/AbortError 偶发失败\nlet createRetryCount = 0;\nconst MAX_CREATE_RETRY = 3;\n// 标记组件是否已卸载,防止卸载后的异步操作继续执行\nlet isUnmounted = false;\nonMounted(() => {\n // 监听容器尺寸变化,同步播放器 DOM 尺寸(防止控件丢失)\n if (typeof ResizeObserver !== \"undefined\" && playerRef.value) {\n resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect;\n const dom = document.getElementById(id);\n if (dom && width > 0 && height > 0 && !realFullscreen.value) {\n dom.style.width = `${width}px`;\n dom.style.height = `${height}px`;\n }\n }\n });\n resizeObserver.observe(playerRef.value);\n }\n initPlayer(props.url || \"\");\n});\n\nwatch(\n () => props.url,\n (newUrl: string) => {\n initPlayer(newUrl || \"\");\n },\n);\n\nonBeforeUnmount(() => {\n isUnmounted = true;\n // 清除 ResizeObserver\n if (resizeObserver) {\n resizeObserver.disconnect();\n resizeObserver = null;\n }\n // 清除等待 EasyPlayerPro 加载的轮询定时器,防止卸载后继续创建播放器\n if (waitTimer !== null) {\n clearInterval(waitTimer);\n waitTimer = null;\n }\n // 清除定时暂停的定时器\n if (pauseCycleTimer.value !== null) {\n clearInterval(pauseCycleTimer.value);\n pauseCycleTimer.value = null;\n }\n if (props.debug) {\n console.log(\"组件卸载\");\n }\n playUrl.value = \"\";\n destroy();\n});\n\nconst play = (url?: string) => {\n if (url) {\n initPlayer(url);\n } else {\n if (player) {\n player.play(playUrl.value);\n // pauseMode=3 时,继续播放后重新开始60分钟计时\n if (props.pauseMode === 3) {\n if (pauseCycleTimer.value !== null) {\n clearInterval(pauseCycleTimer.value);\n }\n pauseCycleTimer.value = setInterval(\n () => {\n if (!isUnmounted && player) {\n player.pause?.();\n if (props.debug) {\n console.log(\"pauseMode: 每60分钟定时暂停\");\n }\n }\n },\n 1000 * 60 * 10,\n );\n }\n } else {\n destroy();\n }\n }\n};\n\nconst playerPause = () => {\n if (props.debug) {\n console.log(\"暂停\");\n }\n player?.pause?.();\n};\n\nconst playerScreenShot = () => {\n if (props.debug) {\n console.log(\"截图\");\n }\n player?.screenshot?.(\n `${props.areaName}_${new Date().getTime()}`,\n \"png\",\n 0.5,\n \"download\",\n );\n};\n\nconst playerFullscreen = (fullscreen: boolean) => {\n realFullscreen.value = fullscreen;\n if (props.debug) {\n console.log(\"全屏\");\n }\n // 自定义全屏逻辑\n if (typeof document !== \"undefined\") {\n if (!fullscreen) {\n document.exitFullscreen?.();\n } else {\n playerRef.value?.requestFullscreen?.();\n }\n // 先同步销毁,再延迟重建,避免异步销毁时组件已卸载导致实例泄漏\n destroy();\n setTimeout(() => {\n if (!isUnmounted) {\n initPlayer(playUrl.value);\n }\n }, 200);\n }\n isFullscreen.value = !fullscreen;\n};\ndefineExpose({\n play,\n destroy,\n getPlayer: () => player,\n pause: playerPause,\n screenshot: playerScreenShot,\n fullscreen: playerFullscreen,\n isMute: () => {\n return player?.isMute?.();\n },\n setMute: (mute: number) => {\n player?.setMute?.(mute);\n },\n});\n\n/**\n * 格式化URL,确保使用完整的URL\n * @param url - 原始URL\n * @returns 格式化后的URL\n */\nconst formatUrl = (url: string): string => {\n if (!url) return \"\";\n\n // 如果已经是完整URL,直接返回\n if (\n url.startsWith(\"http://\") ||\n url.startsWith(\"https://\") ||\n url.startsWith(\"ws://\")\n ) {\n return url;\n }\n\n // 如果URL以//开头,自动补全协议(根据当前页面协议)\n if (url.startsWith(\"//\")) {\n if (typeof window !== \"undefined\" && window.location) {\n return `${window.location.protocol}${url}`;\n }\n // SSR环境下默认使用https\n return `https:${url}`;\n }\n\n // 检查是否在浏览器环境中,避免SSR环境下的location访问错误\n if (typeof window !== \"undefined\" && window.location) {\n // 如果是相对路径,添加当前域名\n return `${window.location.origin}${url.startsWith(\"/\") ? \"\" : \"/\"}${url}`;\n }\n\n // SSR 环境下返回相对路径\n return url;\n};\n\nasync function initPlayer(url: string) {\n if (props.debug) {\n console.log(\"初始化播放器\", url);\n }\n // 清除上一次可能残留的轮询定时器\n if (waitTimer !== null) {\n clearInterval(waitTimer);\n waitTimer = null;\n }\n removePlayerDom();\n if (url) {\n playUrl.value = formatUrl(url);\n if (props.debug) {\n console.log(\"格式化后的url\", playUrl.value);\n }\n if (typeof window !== \"undefined\" && window?.EasyPlayerPro) {\n createPlayer();\n } else if (typeof window !== \"undefined\") {\n waitTimer = setInterval(() => {\n if (window?.EasyPlayerPro) {\n clearInterval(waitTimer!);\n waitTimer = null;\n // 组件已卸载则不再创建播放器\n if (!isUnmounted) {\n createPlayer();\n }\n }\n }, 100);\n }\n }\n}\n\n/**\n * 移除播放器DOM\n */\nfunction removePlayerDom() {\n if (typeof document !== \"undefined\") {\n const dom = document.getElementById(id);\n dom && dom.remove();\n }\n}\n\n/**\n * 创建播放器DOM\n */\nfunction createPlayerDom(): Promise<HTMLDivElement> {\n removePlayerDom();\n return new Promise((resolve) => {\n if (typeof document === \"undefined\") {\n resolve(null!);\n return;\n }\n // 最大重试帧数,防止无限等待\n let retryCount = 0;\n const MAX_RETRY = 60; // 约 1 秒 (60 * 16ms)\n\n const tryCreate = () => {\n const rect = playerRef.value?.getBoundingClientRect();\n if (!rect || rect.width <= 0 || rect.height <= 0) {\n if (++retryCount < MAX_RETRY) {\n requestAnimationFrame(tryCreate);\n return;\n }\n // 超过最大重试次数,使用 100% 尺寸兜底\n console.warn(\"[EasyPlayer] 容器尺寸获取超时,使用默认尺寸\");\n }\n\n const dom = document.createElement(\"div\");\n dom.id = id;\n // 使用实际尺寸,若获取失败则用 100%\n const rectW = rect?.width ?? 0;\n const rectH = rect?.height ?? 0;\n const w = rectW > 0 ? rectW : playerRef.value?.offsetWidth || 800;\n const h = rectH > 0 ? rectH : playerRef.value?.offsetHeight || 450;\n\n if (realFullscreen.value) {\n dom.style.width = `100vw`;\n dom.style.height =\n props.areaName || props.deviceSerial ? `calc(100vh - 32px)` : `100vh`;\n } else {\n dom.style.width = `${w}px`;\n dom.style.height =\n props.areaName || props.deviceSerial ? `${h - 32}px` : `${h}px`;\n }\n playerRef.value?.appendChild(dom);\n resolve(dom);\n };\n\n requestAnimationFrame(tryCreate);\n });\n}\n\nasync function createPlayer() {\n if (props.debug) {\n console.log(\"创建播放器\");\n }\n videoInfo.value = null;\n await createPlayerDom();\n // 每30秒重启一次播放器,防止播放器卡死\n if (restartTimer.value !== null) {\n clearInterval(restartTimer.value);\n restartTimer.value = null;\n }\n restartTimer.value = setInterval(\n () => {\n destroy(false);\n setTimeout(() => {\n startPlayer();\n }, 1000 * 20);\n },\n 1000 * 60 * 60,\n );\n startPlayer();\n}\n\nasync function startPlayer() {\n try {\n if (typeof window !== \"undefined\" && typeof document !== \"undefined\") {\n player = new window.EasyPlayerPro(document.getElementById(id), {\n isLive: true, // 是否直播\n hasAudio: true, // 是否解析音频\n bufferTime: 0, // 直播监控缓存时长设为0,减少内存堆积\n stretch: true, // 加视频拉伸\n MSE: false,\n WCS: false,\n WASM: true,\n debug: false,\n // operateBtns: {\n // performance: false,\n // },\n autoCleanupSourceBuffer: true, //(对 SourceBuffer 进行自动清理)\n // H.265 直播监控场景:后向缓冲区保留时长设为0,避免长时间占用大量内存\n // 原值60秒会导致H.265高码率视频内存持续增长\n autoCleanupMinBackwardDuration: 0,\n });\n // 创建成功,重置重试计数\n createRetryCount = 0;\n }\n if (player) {\n player.play(playUrl.value);\n\n // 根据 pauseMode 处理暂停逻辑\n // pauseMode=2 或 3 时,初始默认暂停\n if (props.pauseMode === 2 || props.pauseMode === 3) {\n // 短暂延迟后暂停,确保播放器已开始播放再暂停\n setTimeout(() => {\n if (!isUnmounted && player) {\n player.pause?.();\n if (props.debug) {\n console.log(\"pauseMode: 初始默认暂停\");\n }\n }\n }, 500);\n }\n\n // pauseMode=3 时,每60分钟触发一次暂停\n if (props.pauseMode === 3) {\n if (pauseCycleTimer.value !== null) {\n clearInterval(pauseCycleTimer.value);\n }\n pauseCycleTimer.value = setInterval(\n () => {\n if (!isUnmounted && player) {\n player.pause?.();\n if (props.debug) {\n console.log(\"pauseMode: 每60分钟定时暂停\");\n }\n }\n },\n 1000 * 60 * 60,\n );\n }\n\n const timeoutHandler = () => {\n props.debug && console.log(\"加载超时\");\n emits(\"timeout\");\n playSuccess.value = false;\n destroy();\n initPlayer(playUrl.value);\n };\n\n const errorHandler = () => {\n props.debug && console.log(\"播放异常\");\n emits(\"error\");\n playSuccess.value = false;\n destroy();\n };\n\n const playHandler = () => {\n playSuccess.value = true;\n props.debug && console.log(\"播放\");\n emits(\"play\");\n };\n\n const pauseHandler = () => {\n props.debug && console.log(\"暂停\");\n emits(\"pause\");\n };\n\n const videoInfoHandler = (info: any) => {\n props.debug && console.log(\"视频信息\", info);\n videoInfo.value = info;\n emits(\"videoInfo\", info);\n };\n\n const muteHandler = (mute: false) => {\n props.debug && console.log(\"静音\");\n emits(\"mute\", mute);\n };\n\n player.on(\"timeout\", timeoutHandler);\n player.on(\"error\", errorHandler);\n player.on(\"play\", playHandler);\n player.on(\"pause\", pauseHandler);\n player.on(\"videoInfo\", videoInfoHandler);\n player.on(\"mute\", muteHandler);\n\n eventHandlers.value.set(\"timeout\", timeoutHandler);\n eventHandlers.value.set(\"error\", errorHandler);\n eventHandlers.value.set(\"play\", playHandler);\n eventHandlers.value.set(\"pause\", pauseHandler);\n eventHandlers.value.set(\"videoInfo\", videoInfoHandler);\n eventHandlers.value.set(\"mute\", muteHandler);\n }\n } catch (error) {\n const isWorkletError =\n error instanceof DOMException &&\n (error.name === \"AbortError\" ||\n String(error.message).includes(\"worklet\"));\n // worklet 加载偶发失败,自动重试\n if (isWorkletError && createRetryCount < MAX_CREATE_RETRY) {\n createRetryCount++;\n if (props.debug) {\n console.warn(\n `[EasyPlayer] AudioWorklet 加载失败(第 ${createRetryCount}/${MAX_CREATE_RETRY} 次),1秒后重试...`,\n error,\n );\n }\n destroy(false);\n setTimeout(() => {\n if (!isUnmounted) startPlayer();\n }, 1000);\n return;\n }\n console.error(\"创建播放器失败:\", error);\n setTimeout(() => {\n if (!isUnmounted) startPlayer();\n }, 2000);\n }\n}\n\nfunction destroy(flag = true) {\n if (player) {\n eventHandlers.value.forEach((handler, eventName) => {\n player.off(eventName, handler);\n });\n eventHandlers.value.clear();\n player.destroy();\n player = null;\n }\n\n if (flag) {\n // 清除定时重启播放器的定时器\n if (restartTimer.value !== null) {\n clearInterval(restartTimer.value);\n restartTimer.value = null;\n }\n // 清除定时暂停的定时器\n if (pauseCycleTimer.value !== null) {\n clearInterval(pauseCycleTimer.value);\n pauseCycleTimer.value = null;\n }\n removePlayerDom();\n }\n}\n</script>\n\n<template>\n <div\n ref=\"playerRef\"\n class=\"i-tzj-easyPlayer\"\n :class=\"customBar ? 'i-tzj-easyPlayer--custom' : ''\"\n >\n <ErrorPage v-if=\"!playSuccess\" message=\"无信号\" />\n <ErrorPage v-if=\"!playUrl\" message=\"无播放地址\" />\n\n <!-- 播放器底部操作栏 -->\n <slot name=\"customBar\" />\n </div>\n</template>\n"],"names":["_createElementBlock","_normalizeClass","_createBlock","ErrorPage","_createCommentVNode","_renderSlot"],"mappings":"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"}
@@ -13,10 +13,7 @@ import _sfc_main$4 from './easyPlayer.vue2.mjs';
13
13
  import _sfc_main$5 from './errorPage.vue2.mjs';
14
14
 
15
15
  const _hoisted_1 = { class: "i-tzj-player" };
16
- const _hoisted_2 = {
17
- key: 0,
18
- class: "i-tzj-player__header"
19
- };
16
+ const _hoisted_2 = { class: "i-tzj-player__header" };
20
17
  var _sfc_main = /* @__PURE__ */ defineComponent({
21
18
  ...{
22
19
  name: "ITzjPlayer"
@@ -142,7 +139,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
142
139
  return (_ctx, _cache) => {
143
140
  return openBlock(), createElementBlock("div", _hoisted_1, [
144
141
  createCommentVNode(" \u5934\u90E8\u6807\u9898\u680F "),
145
- _ctx.areaName || _ctx.deviceSerial ? (openBlock(), createElementBlock("div", _hoisted_2, [
142
+ createElementVNode("div", _hoisted_2, [
146
143
  _cache[0] || (_cache[0] = createElementVNode(
147
144
  "i",
148
145
  { class: "iconfont icon-shexiangtou4" },
@@ -153,19 +150,18 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
153
150
  createElementVNode(
154
151
  "span",
155
152
  null,
156
- toDisplayString(_ctx.areaName || _ctx.deviceSerial),
153
+ toDisplayString(_ctx.areaName || _ctx.deviceSerial || "\u6444\u50CF\u5934"),
157
154
  1
158
155
  /* TEXT */
159
156
  )
160
- ])) : createCommentVNode("v-if", true),
157
+ ]),
161
158
  createCommentVNode(" \u9519\u8BEF\u72B6\u6001\u663E\u793A "),
162
159
  errorState.value ? (openBlock(), createBlock(_sfc_main$5, {
163
- key: 1,
164
- "video-name": _ctx.areaName || _ctx.deviceSerial,
160
+ key: 0,
165
161
  message: errorState.value.message
166
- }, null, 8, ["video-name", "message"])) : shouldShowPlayer.value ? (openBlock(), createElementBlock(
162
+ }, null, 8, ["message"])) : shouldShowPlayer.value ? (openBlock(), createElementBlock(
167
163
  Fragment,
168
- { key: 2 },
164
+ { key: 1 },
169
165
  [
170
166
  createCommentVNode(" \u64AD\u653E\u5668\u7EC4\u4EF6 "),
171
167
  (openBlock(), createBlock(
@@ -183,13 +179,10 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
183
179
  /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
184
180
  )) : (openBlock(), createElementBlock(
185
181
  Fragment,
186
- { key: 3 },
182
+ { key: 2 },
187
183
  [
188
184
  createCommentVNode(" \u65E0\u53EF\u7528\u64AD\u653E\u5668 "),
189
- createVNode(_sfc_main$5, {
190
- "video-name": _ctx.areaName || _ctx.deviceSerial,
191
- message: "\u65E0\u4FE1\u53F7"
192
- }, null, 8, ["video-name"])
185
+ createVNode(_sfc_main$5, { message: "\u65E0\u4FE1\u53F7" })
193
186
  ],
194
187
  2112
195
188
  /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
@@ -1 +1 @@
1
- {"version":3,"file":"tzj-player.vue2.mjs","sources":["../../../../../../../packages/components/tzj-player/src/tzj-player.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { debounce } from \"lodash-es\";\nimport { computed, shallowRef, toRefs, watch } from \"vue\";\nimport CtyunPlayer from \"./ctyun-player.vue\";\nimport EasyPlayer from \"./easyPlayer.vue\";\nimport ErrorPage from \"./errorPage.vue\";\nimport {\n getVideoType,\n isSupportedProtocol,\n TzjPlayerProps,\n} from \"./tzj-player\";\nimport YsPlayer from \"./ysPlayer.vue\";\nimport YunzhiyanPlayer from \"./yunzhiyanPlayer.vue\";\n\ndefineOptions({\n name: \"ITzjPlayer\",\n});\n\nconst props = defineProps(TzjPlayerProps);\nconst { url, platformTypeName, accessToken } = toRefs(props);\n\nconst compRef = shallowRef();\n\n// 防抖处理组件渲染更新,避免频繁切换播放器类型\nconst updatePlayerComponent = debounce(() => {\n // 强制更新组件,销毁旧实例\n if (compRef.value) {\n compRef.value.destroy?.();\n }\n}, 300);\n\n// 监听URL变化,使用防抖处理\nwatch(\n () => [url.value, platformTypeName.value, accessToken.value],\n ([newUrl, newPlatform, newToken], [oldUrl, oldPlatform, oldToken]) => {\n // 只有当值真正发生变化时才更新\n if (\n newUrl !== oldUrl ||\n newPlatform !== oldPlatform ||\n newToken !== oldToken\n ) {\n // 更新播放器组件\n updatePlayerComponent();\n }\n },\n);\n\n/**\n * 平台类型映射表,提升可维护性\n */\nconst PLATFORM_COMPONENTS = {\n 云智眼: YunzhiyanPlayer,\n 萤石云: YsPlayer,\n 天翼云: CtyunPlayer,\n // hls: XgPlayer,\n} as const;\n\n/**\n * 计算当前播放器组件类型\n * 使用计算属性避免重复计算,提升性能\n */\nconst playerComponent = computed(() => {\n // 优先使用指定的平台类型\n if (platformTypeName.value) {\n return (\n PLATFORM_COMPONENTS[\n platformTypeName.value as keyof typeof PLATFORM_COMPONENTS\n ] || EasyPlayer\n );\n }\n\n // 未指定平台类型时,根据URL自动判断\n if (!url.value) {\n return null;\n }\n\n // 检查协议支持性\n if (!isSupportedProtocol(url.value)) {\n return null;\n }\n\n // ezopen协议使用萤石云播放器\n if (url.value.includes(\"ezopen\")) {\n return YsPlayer;\n }\n\n // 根据视频类型选择播放器\n const videoType = getVideoType(url.value);\n return videoType ? EasyPlayer : null;\n});\n\n/**\n * 计算错误状态信息\n * 统一错误状态管理,提升用户体验\n */\nconst errorState = computed(() => {\n // 云智眼平台不需要URL\n if (\n platformTypeName.value === \"云智眼\" ||\n platformTypeName.value === \"天翼云\"\n ) {\n return null;\n }\n\n // 检查URL是否存在\n if (!url.value) {\n return {\n type: \"no-url\",\n message: \"无视频地址\",\n };\n }\n // 检查协议支持性\n if (!isSupportedProtocol(url.value)) {\n return {\n type: \"unsupported-protocol\",\n message: \"不支持该视频协议\",\n };\n }\n\n // 萤石云平台需要accessToken\n if (\n (platformTypeName.value === \"萤石云\" || url.value.includes(\"ezopen\")) &&\n !accessToken.value\n ) {\n return {\n type: \"no-token\",\n message: \"缺少访问令牌\",\n };\n }\n\n return null;\n});\n\n/**\n * 计算是否显示播放器组件\n */\nconst shouldShowPlayer = computed(() => {\n return !errorState.value && playerComponent.value;\n});\n\n/**\n * 暴露的方法,增加错误处理\n */\ndefineExpose({\n /**\n * 播放视频\n * @param options 播放选项\n */\n play(options?: any) {\n if (!compRef.value) {\n props.debug && console.warn(\"[TzjPlayer] 播放器组件未初始化\");\n return;\n }\n compRef.value?.play(options);\n },\n\n /**\n * 销毁播放器\n */\n destroy() {\n if (!compRef.value) {\n props.debug && console.warn(\"[TzjPlayer] 播放器组件未初始化\");\n return;\n }\n compRef.value?.destroy();\n },\n\n /**\n * 调整播放器尺寸\n */\n resize() {\n if (!compRef.value) {\n props.debug && console.warn(\"[TzjPlayer] 播放器组件未初始化\");\n return;\n }\n compRef.value?.resize();\n },\n\n /**\n * 获取当前播放器类型\n */\n getPlayerType() {\n return playerComponent.value?.name || null;\n },\n\n /**\n * 获取错误状态\n */\n getErrorState() {\n return errorState.value;\n },\n});\n</script>\n\n<template>\n <div class=\"i-tzj-player\">\n <!-- 头部标题栏 -->\n <div v-if=\"areaName || deviceSerial\" class=\"i-tzj-player__header\">\n <i class=\"iconfont icon-shexiangtou4\" />\n <span>{{ areaName || deviceSerial }}</span>\n </div>\n\n <!-- 错误状态显示 -->\n <ErrorPage\n v-if=\"errorState\"\n :video-name=\"areaName || deviceSerial\"\n :message=\"errorState.message\"\n />\n\n <!-- 播放器组件 -->\n <component\n :is=\"playerComponent\"\n v-else-if=\"shouldShowPlayer\"\n ref=\"compRef\"\n v-bind=\"props\"\n />\n\n <!-- 无可用播放器 -->\n <ErrorPage v-else :video-name=\"areaName || deviceSerial\" message=\"无信号\" />\n </div>\n</template>\n"],"names":["YunzhiyanPlayer","YsPlayer","CtyunPlayer","EasyPlayer","_openBlock","_createElementBlock","_createCommentVNode","areaName","deviceSerial","_createElementVNode","_toDisplayString","_createBlock","ErrorPage","_Fragment","_resolveDynamicComponent","_mergeProps","_createVNode"],"mappings":"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"}
1
+ {"version":3,"file":"tzj-player.vue2.mjs","sources":["../../../../../../../packages/components/tzj-player/src/tzj-player.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { debounce } from \"lodash-es\";\nimport { computed, shallowRef, toRefs, watch } from \"vue\";\nimport CtyunPlayer from \"./ctyun-player.vue\";\nimport EasyPlayer from \"./easyPlayer.vue\";\nimport ErrorPage from \"./errorPage.vue\";\nimport {\n getVideoType,\n isSupportedProtocol,\n TzjPlayerProps,\n} from \"./tzj-player\";\nimport YsPlayer from \"./ysPlayer.vue\";\nimport YunzhiyanPlayer from \"./yunzhiyanPlayer.vue\";\n\ndefineOptions({\n name: \"ITzjPlayer\",\n});\n\nconst props = defineProps(TzjPlayerProps);\nconst { url, platformTypeName, accessToken } = toRefs(props);\n\nconst compRef = shallowRef();\n\n// 防抖处理组件渲染更新,避免频繁切换播放器类型\nconst updatePlayerComponent = debounce(() => {\n // 强制更新组件,销毁旧实例\n if (compRef.value) {\n compRef.value.destroy?.();\n }\n}, 300);\n\n// 监听URL变化,使用防抖处理\nwatch(\n () => [url.value, platformTypeName.value, accessToken.value],\n ([newUrl, newPlatform, newToken], [oldUrl, oldPlatform, oldToken]) => {\n // 只有当值真正发生变化时才更新\n if (\n newUrl !== oldUrl ||\n newPlatform !== oldPlatform ||\n newToken !== oldToken\n ) {\n // 更新播放器组件\n updatePlayerComponent();\n }\n },\n);\n\n/**\n * 平台类型映射表,提升可维护性\n */\nconst PLATFORM_COMPONENTS = {\n 云智眼: YunzhiyanPlayer,\n 萤石云: YsPlayer,\n 天翼云: CtyunPlayer,\n // hls: XgPlayer,\n} as const;\n\n/**\n * 计算当前播放器组件类型\n * 使用计算属性避免重复计算,提升性能\n */\nconst playerComponent = computed(() => {\n // 优先使用指定的平台类型\n if (platformTypeName.value) {\n return (\n PLATFORM_COMPONENTS[\n platformTypeName.value as keyof typeof PLATFORM_COMPONENTS\n ] || EasyPlayer\n );\n }\n\n // 未指定平台类型时,根据URL自动判断\n if (!url.value) {\n return null;\n }\n\n // 检查协议支持性\n if (!isSupportedProtocol(url.value)) {\n return null;\n }\n\n // ezopen协议使用萤石云播放器\n if (url.value.includes(\"ezopen\")) {\n return YsPlayer;\n }\n\n // 根据视频类型选择播放器\n const videoType = getVideoType(url.value);\n return videoType ? EasyPlayer : null;\n});\n\n/**\n * 计算错误状态信息\n * 统一错误状态管理,提升用户体验\n */\nconst errorState = computed(() => {\n // 云智眼平台不需要URL\n if (\n platformTypeName.value === \"云智眼\" ||\n platformTypeName.value === \"天翼云\"\n ) {\n return null;\n }\n\n // 检查URL是否存在\n if (!url.value) {\n return {\n type: \"no-url\",\n message: \"无视频地址\",\n };\n }\n // 检查协议支持性\n if (!isSupportedProtocol(url.value)) {\n return {\n type: \"unsupported-protocol\",\n message: \"不支持该视频协议\",\n };\n }\n\n // 萤石云平台需要accessToken\n if (\n (platformTypeName.value === \"萤石云\" || url.value.includes(\"ezopen\")) &&\n !accessToken.value\n ) {\n return {\n type: \"no-token\",\n message: \"缺少访问令牌\",\n };\n }\n\n return null;\n});\n\n/**\n * 计算是否显示播放器组件\n */\nconst shouldShowPlayer = computed(() => {\n return !errorState.value && playerComponent.value;\n});\n\n/**\n * 暴露的方法,增加错误处理\n */\ndefineExpose({\n /**\n * 播放视频\n * @param options 播放选项\n */\n play(options?: any) {\n if (!compRef.value) {\n props.debug && console.warn(\"[TzjPlayer] 播放器组件未初始化\");\n return;\n }\n compRef.value?.play(options);\n },\n\n /**\n * 销毁播放器\n */\n destroy() {\n if (!compRef.value) {\n props.debug && console.warn(\"[TzjPlayer] 播放器组件未初始化\");\n return;\n }\n compRef.value?.destroy();\n },\n\n /**\n * 调整播放器尺寸\n */\n resize() {\n if (!compRef.value) {\n props.debug && console.warn(\"[TzjPlayer] 播放器组件未初始化\");\n return;\n }\n compRef.value?.resize();\n },\n\n /**\n * 获取当前播放器类型\n */\n getPlayerType() {\n return playerComponent.value?.name || null;\n },\n\n /**\n * 获取错误状态\n */\n getErrorState() {\n return errorState.value;\n },\n});\n</script>\n\n<template>\n <div class=\"i-tzj-player\">\n <!-- 头部标题栏 -->\n <div class=\"i-tzj-player__header\">\n <i class=\"iconfont icon-shexiangtou4\" />\n <span>{{ areaName || deviceSerial || \"摄像头\" }}</span>\n </div>\n\n <!-- 错误状态显示 -->\n <ErrorPage v-if=\"errorState\" :message=\"errorState.message\" />\n\n <!-- 播放器组件 -->\n <component\n :is=\"playerComponent\"\n v-else-if=\"shouldShowPlayer\"\n ref=\"compRef\"\n v-bind=\"props\"\n />\n\n <!-- 无可用播放器 -->\n <ErrorPage v-else message=\"无信号\" />\n </div>\n</template>\n"],"names":["YunzhiyanPlayer","YsPlayer","CtyunPlayer","EasyPlayer","_openBlock","_createElementBlock","_createCommentVNode","_createElementVNode","_toDisplayString","areaName","deviceSerial","_createBlock","ErrorPage","_Fragment","_resolveDynamicComponent","_mergeProps","_createVNode"],"mappings":"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"}
@@ -221,9 +221,8 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
221
221
  ),
222
222
  unref(errorMsg) ? (openBlock(), createBlock(_sfc_main$1, {
223
223
  key: 0,
224
- "video-name": _ctx.areaName || _ctx.deviceSerial,
225
224
  message: unref(errorMsg)
226
- }, null, 8, ["video-name", "message"])) : createCommentVNode("v-if", true)
225
+ }, null, 8, ["message"])) : createCommentVNode("v-if", true)
227
226
  ],
228
227
  512
229
228
  /* NEED_PATCH */
@@ -1 +1 @@
1
- {"version":3,"file":"ysPlayer.vue2.mjs","sources":["../../../../../../../packages/components/tzj-player/src/ysPlayer.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useElementSize } from \"@vueuse/core\";\nimport {\n nextTick,\n onBeforeUnmount,\n onMounted,\n ref,\n shallowRef,\n watch,\n} from \"vue\";\nimport ErrorPage from \"./errorPage.vue\";\nimport { uuid } from \"./tzj-player\";\n// 萤石云播放器\ndefineOptions({\n name: \"YsPlayer\",\n});\n\n// 传值方式\n// 1、传url、accessToken\n// 2、传deviceSerial、channel、accessToken\nconst props = defineProps<{\n // 播放地址\n // 高清:ezopen://open.ys7.com/${设备序列号}/${通道号}.hd.live\n // 流畅:ezopen://open.ys7.com/${设备序列号}/${通道号}.live\n url?: string;\n // 设备序列号\n deviceSerial?: string;\n // 通道号\n channel?: number;\n // 清晰度,默认为空,也表示高清\n // hd:高清;sd:流畅\n quality?: \"hd\" | \"sd\" | \"\";\n accessToken: string;\n // 播放器模板ID\n playerTemplate?: string;\n // 设备名称\n areaName?: string;\n}>();\n\n// 播放器模板ID\n// 可在萤石云控制台查看、修改、获取\n// 位置:云直播-轻应用-特致珈默认模板\nconst PLAYER_TEMPLATE = \"5f295a9341a74d439b5d69374c90d501\";\nconst id = uuid();\nlet playerInstance: any = null;\nlet errorMsg = \"\";\nconst ysRef = shallowRef();\nconst containerRef = shallowRef();\nconst { width, height } = useElementSize(ysRef);\nconst { width: childWidth, height: childHeight } = useElementSize(containerRef);\nlet ratio = 16 / 9;\nlet isCurrentFullscreen = false;\n\n// 添加重连次数控制,防止无限重连\nconst reconnectAttempts = ref(0);\nconst maxReconnectAttempts = 3;\n\n// 添加防抖处理URL变化\nconst debouncedPlay = debounce(() => {\n play();\n}, 500);\n\n// 监听URL变化,使用防抖处理\nwatch(\n () => props.url,\n () => {\n debouncedPlay();\n },\n);\n\nonMounted(() => play());\n\nonBeforeUnmount(() => destroy());\n\ndefineExpose({ play, destroy, resize });\n\n// 防抖函数\nfunction debounce(func: Function, wait: number) {\n let timeout: ReturnType<typeof setTimeout> | null = null;\n return function (this: any, ...args: any[]) {\n if (timeout) clearTimeout(timeout);\n timeout = setTimeout(() => func.apply(this, args), wait);\n };\n}\n\n// 加上防抖的 resize 函数\nconst debouncedResize = debounce(resize, 300);\n\nwatch(\n () => [width.value, height.value, ratio],\n () => {\n if (!isCurrentFullscreen) {\n debouncedResize();\n }\n },\n);\n\nasync function play(options?: Record<string, any>) {\n if (!props.accessToken) {\n errorMsg = `params 'accessToken' is not found`;\n } else {\n const url = formatterUrl();\n if (url) {\n createPlayerDom();\n await nextTick();\n await createPlayer(options);\n }\n }\n}\n\nfunction destroy() {\n if (playerInstance) {\n try {\n // 确保播放器实例完全销毁\n playerInstance.destroy?.();\n } catch (e) {\n console.warn(\"播放器销毁过程中出现错误:\", e);\n }\n playerInstance = null;\n removePlayerDom();\n }\n}\n\nfunction resize() {\n const containerWidth = childWidth.value;\n const containerHeight = childHeight.value;\n // 如果容器尺寸无效,直接返回\n if (containerWidth <= 0 || containerHeight <= 0) return;\n\n // 计算播放器尺寸,保持宽高比\n\n const aspectRatio = ratio;\n\n let playerWidth = containerWidth;\n let playerHeight = playerWidth / aspectRatio;\n\n // 如果计算出的高度超过容器高度,以高度为准重新计算\n if (playerHeight > containerHeight) {\n playerHeight = containerHeight;\n playerWidth = playerHeight * aspectRatio;\n }\n\n // 尝试使用播放器实例的resize方法\n if (playerInstance?.resize) {\n playerInstance.resize(playerWidth, playerHeight);\n return;\n }\n\n // 如果没有播放器实例,直接操作DOM\n if (typeof document !== \"undefined\") {\n const playerElement = document.getElementById(id);\n if (playerElement) {\n playerElement.style.width = `${playerWidth}px`;\n playerElement.style.height = `${playerHeight}px`;\n }\n }\n}\n\n/**\n * 创建萤石云播放器实例,播放萤石云直播流\n */\nasync function createPlayer(options?: Record<string, any>) {\n try {\n // 动态导入 EZUIKit,避免 SSR 环境下的 window 访问错误\n const EZUIKit = await import(\"ezuikit-js\");\n\n playerInstance = new EZUIKit.default.EZUIKitPlayer({\n id,\n url: formatterUrl(),\n accessToken: props.accessToken,\n template: props.playerTemplate || PLAYER_TEMPLATE,\n width: width.value,\n height: height.value,\n audio: 1,\n // @ts-ignore\n loggerOptions: {\n name: \"YSPLAYER\",\n level: \"ERROR\",\n showTime: true,\n },\n staticPath: \"/plugins/ezuikit/ezuikit_static\",\n ...options,\n });\n\n // 监听播放错误事件,限制重连次数\n playerInstance.on(\"error\", (err: any) => {\n console.error(\"萤石云播放器错误:\", err);\n // 控制重连次数\n if (reconnectAttempts.value < maxReconnectAttempts) {\n reconnectAttempts.value++;\n setTimeout(() => {\n destroy();\n play();\n }, 3000 * reconnectAttempts.value);\n }\n });\n } catch (error) {\n console.error(\"Failed to load EZUIKit:\", error);\n errorMsg = \"播放器加载失败\";\n return;\n }\n\n playerInstance.eventEmitter.on(\"fullscreen\", () => {\n isCurrentFullscreen = true;\n });\n playerInstance.eventEmitter.on(\"exitFullscreen\", () => {\n isCurrentFullscreen = false;\n });\n playerInstance.eventEmitter.on(\"videoInfo\", (args: any) => {\n const { width: w, height: h } = args;\n // 计算播放器宽高比\n if (w && h) {\n ratio = w / h;\n }\n debouncedResize();\n });\n}\n\nfunction formatterUrl(): string {\n if (props.url) {\n return props.url;\n } else {\n if (props.deviceSerial && props.channel) {\n const quality =\n props.quality === \"\" || props.quality === \"hd\" ? \"hd.\" : \"\";\n return `ezopen://open.ys7.com/${props.deviceSerial}/${props.channel}.${quality}live`;\n } else {\n errorMsg = `params 'deviceSerial' or 'channel' is not found`;\n return \"\";\n }\n }\n}\n\n// 移除播放器DOM\nfunction removePlayerDom() {\n if (typeof document !== \"undefined\") {\n const dom = document.getElementById(id);\n dom && dom.remove();\n }\n}\n// 创建播放器DOM\nfunction createPlayerDom() {\n if (!errorMsg) {\n removePlayerDom();\n if (typeof document !== \"undefined\") {\n const dom = document.createElement(\"div\");\n dom.id = id;\n dom.style.width = \"100%\";\n dom.style.height = \"100%\";\n containerRef.value?.appendChild(dom);\n }\n }\n}\n</script>\n\n<template>\n <div ref=\"ysRef\" class=\"i-tzj-ysplayer\">\n <div\n ref=\"containerRef\"\n class=\"i-tzj-ysplayer\"\n style=\"width: 100%; height: 100%; position: relative\"\n />\n <ErrorPage\n v-if=\"errorMsg\"\n :video-name=\"areaName || deviceSerial\"\n :message=\"errorMsg\"\n />\n </div>\n</template>\n"],"names":["_createElementBlock","_createElementVNode","_unref","_createBlock","ErrorPage","areaName","deviceSerial"],"mappings":";;;;;;;;AA0CA,MAAM,eAAkB,GAAA,kCAAA;AAaxB,MAAM,oBAAuB,GAAA,CAAA;;;;;;;;;;;;;;;;AAnC7B,IAAA,MAAM,KAAQ,GAAA,OAAA;AAuBd,IAAA,MAAM,KAAK,IAAK,EAAA;AAChB,IAAA,IAAI,cAAsB,GAAA,IAAA;AAC1B,IAAA,IAAI,QAAW,GAAA,EAAA;AACf,IAAA,MAAM,QAAQ,UAAW,EAAA;AACzB,IAAA,MAAM,eAAe,UAAW,EAAA;AAChC,IAAA,MAAM,EAAE,KAAA,EAAO,MAAO,EAAA,GAAI,eAAe,KAAK,CAAA;AAC9C,IAAA,MAAM,EAAE,KAAO,EAAA,UAAA,EAAY,QAAQ,WAAY,EAAA,GAAI,eAAe,YAAY,CAAA;AAC9E,IAAA,IAAI,QAAQ,EAAK,GAAA,CAAA;AACjB,IAAA,IAAI,mBAAsB,GAAA,KAAA;AAG1B,IAAM,MAAA,iBAAA,GAAoB,IAAI,CAAC,CAAA;AAI/B,IAAM,MAAA,aAAA,GAAgB,SAAS,MAAM;AACnC,MAAK,IAAA,EAAA;AAAA,OACJ,GAAG,CAAA;AAGN,IAAA,KAAA;AAAA,MACE,MAAM,KAAM,CAAA,GAAA;AAAA,MACZ,MAAM;AACJ,QAAc,aAAA,EAAA;AAAA;AAChB,KACF;AAEA,IAAU,SAAA,CAAA,MAAM,MAAM,CAAA;AAEtB,IAAgB,eAAA,CAAA,MAAM,SAAS,CAAA;AAE/B,IAAA,QAAA,CAAa,EAAE,IAAA,EAAM,OAAS,EAAA,MAAA,EAAQ,CAAA;AAGtC,IAAS,SAAA,QAAA,CAAS,MAAgB,IAAc,EAAA;AAC9C,MAAA,IAAI,OAAgD,GAAA,IAAA;AACpD,MAAA,OAAO,YAAwB,IAAa,EAAA;AAC1C,QAAI,IAAA,OAAA,eAAsB,OAAO,CAAA;AACjC,QAAA,OAAA,GAAU,WAAW,MAAM,IAAA,CAAK,MAAM,IAAM,EAAA,IAAI,GAAG,IAAI,CAAA;AAAA,OACzD;AAAA;AALO,IAAA,MAAA,CAAA,QAAA,EAAA,UAAA,CAAA;AAST,IAAM,MAAA,eAAA,GAAkB,QAAS,CAAA,MAAA,EAAQ,GAAG,CAAA;AAE5C,IAAA,KAAA;AAAA,MACE,MAAM,CAAC,KAAA,CAAM,KAAO,EAAA,MAAA,CAAO,OAAO,KAAK,CAAA;AAAA,MACvC,MAAM;AACJ,QAAA,IAAI,CAAC,mBAAqB,EAAA;AACxB,UAAgB,eAAA,EAAA;AAAA;AAClB;AACF,KACF;AAEA,IAAA,eAAe,KAAK,OAA+B,EAAA;AACjD,MAAI,IAAA,CAAC,MAAM,WAAa,EAAA;AACtB,QAAW,QAAA,GAAA,CAAA,iCAAA,CAAA;AAAA,OACN,MAAA;AACL,QAAA,MAAM,MAAM,YAAa,EAAA;AACzB,QAAA,IAAI,GAAK,EAAA;AACP,UAAgB,eAAA,EAAA;AAChB,UAAA,MAAM,QAAS,EAAA;AACf,UAAA,MAAM,aAAa,OAAO,CAAA;AAAA;AAC5B;AACF;AAVa,IAAA,MAAA,CAAA,IAAA,EAAA,MAAA,CAAA;AAaf,IAAA,SAAS,OAAU,GAAA;;AACjB,MAAA,IAAI,cAAgB,EAAA;AAClB,QAAI,IAAA;AAEF,UAAA,CAAA,EAAA,GAAA,cAAA,CAAe,OAAf,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,cAAA,CAAA;AAAA,iBACO,CAAG,EAAA;AACV,UAAQ,OAAA,CAAA,IAAA,CAAK,6EAAiB,CAAC,CAAA;AAAA;AAEjC,QAAiB,cAAA,GAAA,IAAA;AACjB,QAAgB,eAAA,EAAA;AAAA;AAClB;AAVO,IAAA,MAAA,CAAA,OAAA,EAAA,SAAA,CAAA;AAaT,IAAA,SAAS,MAAS,GAAA;AAChB,MAAA,MAAM,iBAAiB,UAAW,CAAA,KAAA;AAClC,MAAA,MAAM,kBAAkB,WAAY,CAAA,KAAA;AAEpC,MAAI,IAAA,cAAA,IAAkB,CAAK,IAAA,eAAA,IAAmB,CAAG,EAAA;AAIjD,MAAA,MAAM,WAAc,GAAA,KAAA;AAEpB,MAAA,IAAI,WAAc,GAAA,cAAA;AAClB,MAAA,IAAI,eAAe,WAAc,GAAA,WAAA;AAGjC,MAAA,IAAI,eAAe,eAAiB,EAAA;AAClC,QAAe,YAAA,GAAA,eAAA;AACf,QAAA,WAAA,GAAc,YAAe,GAAA,WAAA;AAAA;AAI/B,MAAA,IAAI,iDAAgB,MAAQ,EAAA;AAC1B,QAAe,cAAA,CAAA,MAAA,CAAO,aAAa,YAAY,CAAA;AAC/C,QAAA;AAAA;AAIF,MAAI,IAAA,OAAO,aAAa,WAAa,EAAA;AACnC,QAAM,MAAA,aAAA,GAAgB,QAAS,CAAA,cAAA,CAAe,EAAE,CAAA;AAChD,QAAA,IAAI,aAAe,EAAA;AACjB,UAAc,aAAA,CAAA,KAAA,CAAM,KAAQ,GAAA,CAAA,EAAG,WAAW,CAAA,EAAA,CAAA;AAC1C,UAAc,aAAA,CAAA,KAAA,CAAM,MAAS,GAAA,CAAA,EAAG,YAAY,CAAA,EAAA,CAAA;AAAA;AAC9C;AACF;AAhCO,IAAA,MAAA,CAAA,MAAA,EAAA,QAAA,CAAA;AAsCT,IAAA,eAAe,aAAa,OAA+B,EAAA;AACzD,MAAI,IAAA;AAEF,QAAM,MAAA,OAAA,GAAU,MAAM,OAAO,YAAY,CAAA;AAEzC,QAAiB,cAAA,GAAA,IAAI,OAAQ,CAAA,OAAA,CAAQ,aAAc,CAAA;AAAA,UACjD,EAAA;AAAA,UACA,KAAK,YAAa,EAAA;AAAA,UAClB,aAAa,KAAM,CAAA,WAAA;AAAA,UACnB,QAAA,EAAU,MAAM,cAAkB,IAAA,eAAA;AAAA,UAClC,OAAO,KAAM,CAAA,KAAA;AAAA,UACb,QAAQ,MAAO,CAAA,KAAA;AAAA,UACf,KAAO,EAAA,CAAA;AAAA;AAAA,UAEP,aAAe,EAAA;AAAA,YACb,IAAM,EAAA,UAAA;AAAA,YACN,KAAO,EAAA,OAAA;AAAA,YACP,QAAU,EAAA;AAAA,WACZ;AAAA,UACA,UAAY,EAAA,iCAAA;AAAA,UACZ,GAAG;AAAA,SACJ,CAAA;AAGD,QAAe,cAAA,CAAA,EAAA,CAAG,OAAS,EAAA,CAAC,GAAa,KAAA;AACvC,UAAQ,OAAA,CAAA,KAAA,CAAM,qDAAa,GAAG,CAAA;AAE9B,UAAI,IAAA,iBAAA,CAAkB,QAAQ,oBAAsB,EAAA;AAClD,YAAkB,iBAAA,CAAA,KAAA,EAAA;AAClB,YAAA,UAAA,CAAW,MAAM;AACf,cAAQ,OAAA,EAAA;AACR,cAAK,IAAA,EAAA;AAAA,aACP,EAAG,GAAO,GAAA,iBAAA,CAAkB,KAAK,CAAA;AAAA;AACnC,SACD,CAAA;AAAA,eACM,KAAO,EAAA;AACd,QAAQ,OAAA,CAAA,KAAA,CAAM,2BAA2B,KAAK,CAAA;AAC9C,QAAW,QAAA,GAAA,4CAAA;AACX,QAAA;AAAA;AAGF,MAAe,cAAA,CAAA,YAAA,CAAa,EAAG,CAAA,YAAA,EAAc,MAAM;AACjD,QAAsB,mBAAA,GAAA,IAAA;AAAA,OACvB,CAAA;AACD,MAAe,cAAA,CAAA,YAAA,CAAa,EAAG,CAAA,gBAAA,EAAkB,MAAM;AACrD,QAAsB,mBAAA,GAAA,KAAA;AAAA,OACvB,CAAA;AACD,MAAA,cAAA,CAAe,YAAa,CAAA,EAAA,CAAG,WAAa,EAAA,CAAC,IAAc,KAAA;AACzD,QAAA,MAAM,EAAE,KAAA,EAAO,CAAG,EAAA,MAAA,EAAQ,GAAM,GAAA,IAAA;AAEhC,QAAA,IAAI,KAAK,CAAG,EAAA;AACV,UAAA,KAAA,GAAQ,CAAI,GAAA,CAAA;AAAA;AAEd,QAAgB,eAAA,EAAA;AAAA,OACjB,CAAA;AAAA;AAtDY,IAAA,MAAA,CAAA,YAAA,EAAA,cAAA,CAAA;AAyDf,IAAA,SAAS,YAAuB,GAAA;AAC9B,MAAA,IAAI,MAAM,GAAK,EAAA;AACb,QAAA,OAAO,KAAM,CAAA,GAAA;AAAA,OACR,MAAA;AACL,QAAI,IAAA,KAAA,CAAM,YAAgB,IAAA,KAAA,CAAM,OAAS,EAAA;AACvC,UAAA,MAAM,UACJ,KAAM,CAAA,OAAA,KAAY,MAAM,KAAM,CAAA,OAAA,KAAY,OAAO,KAAQ,GAAA,EAAA;AAC3D,UAAA,OAAO,yBAAyB,KAAM,CAAA,YAAY,IAAI,KAAM,CAAA,OAAO,IAAI,OAAO,CAAA,IAAA,CAAA;AAAA,SACzE,MAAA;AACL,UAAW,QAAA,GAAA,CAAA,+CAAA,CAAA;AACX,UAAO,OAAA,EAAA;AAAA;AACT;AACF;AAZO,IAAA,MAAA,CAAA,YAAA,EAAA,cAAA,CAAA;AAgBT,IAAA,SAAS,eAAkB,GAAA;AACzB,MAAI,IAAA,OAAO,aAAa,WAAa,EAAA;AACnC,QAAM,MAAA,GAAA,GAAM,QAAS,CAAA,cAAA,CAAe,EAAE,CAAA;AACtC,QAAA,GAAA,IAAO,IAAI,MAAO,EAAA;AAAA;AACpB;AAJO,IAAA,MAAA,CAAA,eAAA,EAAA,iBAAA,CAAA;AAOT,IAAA,SAAS,eAAkB,GAAA;;AACzB,MAAA,IAAI,CAAC,QAAU,EAAA;AACb,QAAgB,eAAA,EAAA;AAChB,QAAI,IAAA,OAAO,aAAa,WAAa,EAAA;AACnC,UAAM,MAAA,GAAA,GAAM,QAAS,CAAA,aAAA,CAAc,KAAK,CAAA;AACxC,UAAA,GAAA,CAAI,EAAK,GAAA,EAAA;AACT,UAAA,GAAA,CAAI,MAAM,KAAQ,GAAA,MAAA;AAClB,UAAA,GAAA,CAAI,MAAM,MAAS,GAAA,MAAA;AACnB,UAAa,CAAA,EAAA,GAAA,YAAA,CAAA,KAAA,KAAb,mBAAoB,WAAY,CAAA,GAAA,CAAA;AAAA;AAClC;AACF;AAVO,IAAA,MAAA,CAAA,eAAA,EAAA,iBAAA,CAAA;;wBAeP,EAAAA,kBAAA;AAAA,QAWM,KAAA;AAAA,QAAA;AAAA,iBAXG,EAAA,OAAA;AAAA,UAAJ,GAAI,EAAA,KAAA;AAAA,UAAQ,KAAM,EAAA;AAAA;;UACrBC,kBAAA;AAAA,YAIE,KAAA;AAAA,YAAA;AAAA,qBAHI,EAAA,cAAA;AAAA,cAAJ,GAAI,EAAA,YAAA;AAAA,cACJ,KAAM,EAAA,gBAAA;AAAA,cACN,OAAA,EAAqD,OAAA,EAAA,QAAA,QAAA,EAAA,MAAA,EAAA,YAAA,UAAA;AAAA;;;;;UAG/CC,MAAQ,QAAA,CAAA,iBADhBC,YAIEC,WAAA,EAAA;AAAA;YAFC,YAAA,EAAYC,IAAQ,CAAA,QAAA,IAAIC,IAAY,CAAA,YAAA;AAAA,YACpC,OAAA,EAASJ,MAAQ,QAAA;AAAA;;;;;;;;;;;"}
1
+ {"version":3,"file":"ysPlayer.vue2.mjs","sources":["../../../../../../../packages/components/tzj-player/src/ysPlayer.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useElementSize } from \"@vueuse/core\";\nimport {\n nextTick,\n onBeforeUnmount,\n onMounted,\n ref,\n shallowRef,\n watch,\n} from \"vue\";\nimport ErrorPage from \"./errorPage.vue\";\nimport { uuid } from \"./tzj-player\";\n// 萤石云播放器\ndefineOptions({\n name: \"YsPlayer\",\n});\n\n// 传值方式\n// 1、传url、accessToken\n// 2、传deviceSerial、channel、accessToken\nconst props = defineProps<{\n // 播放地址\n // 高清:ezopen://open.ys7.com/${设备序列号}/${通道号}.hd.live\n // 流畅:ezopen://open.ys7.com/${设备序列号}/${通道号}.live\n url?: string;\n // 设备序列号\n deviceSerial?: string;\n // 通道号\n channel?: number;\n // 清晰度,默认为空,也表示高清\n // hd:高清;sd:流畅\n quality?: \"hd\" | \"sd\" | \"\";\n accessToken: string;\n // 播放器模板ID\n playerTemplate?: string;\n // 设备名称\n areaName?: string;\n}>();\n\n// 播放器模板ID\n// 可在萤石云控制台查看、修改、获取\n// 位置:云直播-轻应用-特致珈默认模板\nconst PLAYER_TEMPLATE = \"5f295a9341a74d439b5d69374c90d501\";\nconst id = uuid();\nlet playerInstance: any = null;\nlet errorMsg = \"\";\nconst ysRef = shallowRef();\nconst containerRef = shallowRef();\nconst { width, height } = useElementSize(ysRef);\nconst { width: childWidth, height: childHeight } = useElementSize(containerRef);\nlet ratio = 16 / 9;\nlet isCurrentFullscreen = false;\n\n// 添加重连次数控制,防止无限重连\nconst reconnectAttempts = ref(0);\nconst maxReconnectAttempts = 3;\n\n// 添加防抖处理URL变化\nconst debouncedPlay = debounce(() => {\n play();\n}, 500);\n\n// 监听URL变化,使用防抖处理\nwatch(\n () => props.url,\n () => {\n debouncedPlay();\n },\n);\n\nonMounted(() => play());\n\nonBeforeUnmount(() => destroy());\n\ndefineExpose({ play, destroy, resize });\n\n// 防抖函数\nfunction debounce(func: Function, wait: number) {\n let timeout: ReturnType<typeof setTimeout> | null = null;\n return function (this: any, ...args: any[]) {\n if (timeout) clearTimeout(timeout);\n timeout = setTimeout(() => func.apply(this, args), wait);\n };\n}\n\n// 加上防抖的 resize 函数\nconst debouncedResize = debounce(resize, 300);\n\nwatch(\n () => [width.value, height.value, ratio],\n () => {\n if (!isCurrentFullscreen) {\n debouncedResize();\n }\n },\n);\n\nasync function play(options?: Record<string, any>) {\n if (!props.accessToken) {\n errorMsg = `params 'accessToken' is not found`;\n } else {\n const url = formatterUrl();\n if (url) {\n createPlayerDom();\n await nextTick();\n await createPlayer(options);\n }\n }\n}\n\nfunction destroy() {\n if (playerInstance) {\n try {\n // 确保播放器实例完全销毁\n playerInstance.destroy?.();\n } catch (e) {\n console.warn(\"播放器销毁过程中出现错误:\", e);\n }\n playerInstance = null;\n removePlayerDom();\n }\n}\n\nfunction resize() {\n const containerWidth = childWidth.value;\n const containerHeight = childHeight.value;\n // 如果容器尺寸无效,直接返回\n if (containerWidth <= 0 || containerHeight <= 0) return;\n\n // 计算播放器尺寸,保持宽高比\n\n const aspectRatio = ratio;\n\n let playerWidth = containerWidth;\n let playerHeight = playerWidth / aspectRatio;\n\n // 如果计算出的高度超过容器高度,以高度为准重新计算\n if (playerHeight > containerHeight) {\n playerHeight = containerHeight;\n playerWidth = playerHeight * aspectRatio;\n }\n\n // 尝试使用播放器实例的resize方法\n if (playerInstance?.resize) {\n playerInstance.resize(playerWidth, playerHeight);\n return;\n }\n\n // 如果没有播放器实例,直接操作DOM\n if (typeof document !== \"undefined\") {\n const playerElement = document.getElementById(id);\n if (playerElement) {\n playerElement.style.width = `${playerWidth}px`;\n playerElement.style.height = `${playerHeight}px`;\n }\n }\n}\n\n/**\n * 创建萤石云播放器实例,播放萤石云直播流\n */\nasync function createPlayer(options?: Record<string, any>) {\n try {\n // 动态导入 EZUIKit,避免 SSR 环境下的 window 访问错误\n const EZUIKit = await import(\"ezuikit-js\");\n\n playerInstance = new EZUIKit.default.EZUIKitPlayer({\n id,\n url: formatterUrl(),\n accessToken: props.accessToken,\n template: props.playerTemplate || PLAYER_TEMPLATE,\n width: width.value,\n height: height.value,\n audio: 1,\n // @ts-ignore\n loggerOptions: {\n name: \"YSPLAYER\",\n level: \"ERROR\",\n showTime: true,\n },\n staticPath: \"/plugins/ezuikit/ezuikit_static\",\n ...options,\n });\n\n // 监听播放错误事件,限制重连次数\n playerInstance.on(\"error\", (err: any) => {\n console.error(\"萤石云播放器错误:\", err);\n // 控制重连次数\n if (reconnectAttempts.value < maxReconnectAttempts) {\n reconnectAttempts.value++;\n setTimeout(() => {\n destroy();\n play();\n }, 3000 * reconnectAttempts.value);\n }\n });\n } catch (error) {\n console.error(\"Failed to load EZUIKit:\", error);\n errorMsg = \"播放器加载失败\";\n return;\n }\n\n playerInstance.eventEmitter.on(\"fullscreen\", () => {\n isCurrentFullscreen = true;\n });\n playerInstance.eventEmitter.on(\"exitFullscreen\", () => {\n isCurrentFullscreen = false;\n });\n playerInstance.eventEmitter.on(\"videoInfo\", (args: any) => {\n const { width: w, height: h } = args;\n // 计算播放器宽高比\n if (w && h) {\n ratio = w / h;\n }\n debouncedResize();\n });\n}\n\nfunction formatterUrl(): string {\n if (props.url) {\n return props.url;\n } else {\n if (props.deviceSerial && props.channel) {\n const quality =\n props.quality === \"\" || props.quality === \"hd\" ? \"hd.\" : \"\";\n return `ezopen://open.ys7.com/${props.deviceSerial}/${props.channel}.${quality}live`;\n } else {\n errorMsg = `params 'deviceSerial' or 'channel' is not found`;\n return \"\";\n }\n }\n}\n\n// 移除播放器DOM\nfunction removePlayerDom() {\n if (typeof document !== \"undefined\") {\n const dom = document.getElementById(id);\n dom && dom.remove();\n }\n}\n// 创建播放器DOM\nfunction createPlayerDom() {\n if (!errorMsg) {\n removePlayerDom();\n if (typeof document !== \"undefined\") {\n const dom = document.createElement(\"div\");\n dom.id = id;\n dom.style.width = \"100%\";\n dom.style.height = \"100%\";\n containerRef.value?.appendChild(dom);\n }\n }\n}\n</script>\n\n<template>\n <div ref=\"ysRef\" class=\"i-tzj-ysplayer\">\n <div\n ref=\"containerRef\"\n class=\"i-tzj-ysplayer\"\n style=\"width: 100%; height: 100%; position: relative\"\n />\n <ErrorPage v-if=\"errorMsg\" :message=\"errorMsg\" />\n </div>\n</template>\n"],"names":["_createElementBlock","_createElementVNode","_unref","_createBlock","ErrorPage"],"mappings":"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"}
@@ -463,9 +463,8 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
463
463
  [
464
464
  errorMsg.value ? (openBlock(), createBlock(_sfc_main$1, {
465
465
  key: 0,
466
- "video-name": _ctx.areaName || _ctx.deviceSerial,
467
466
  message: errorMsg.value
468
- }, null, 8, ["video-name", "message"])) : videoUrl.value ? (openBlock(), createBlock(_sfc_main$2, {
467
+ }, null, 8, ["message"])) : videoUrl.value ? (openBlock(), createBlock(_sfc_main$2, {
469
468
  key: 1,
470
469
  ref_key: "playerRef",
471
470
  ref: playerRef,