@yimou6/common-ui 1.14.2 → 1.14.3
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.
- package/cdn/index.cdn.js +15 -15
- package/cdn/index.cdn.js.map +1 -1
- package/cdn/index.cdn.mjs +17 -17
- package/cdn/index.cdn.mjs.map +1 -1
- package/cdn/index.css +1 -1
- package/es/components/index.mjs +1 -1
- package/es/components/tzj-player/index.mjs +1 -1
- package/es/components/tzj-player/src/ctyun-player.vue2.mjs +6 -122
- package/es/components/tzj-player/src/ctyun-player.vue2.mjs.map +1 -1
- package/es/components/tzj-player/src/easyPlayer.vue2.mjs +23 -5
- package/es/components/tzj-player/src/easyPlayer.vue2.mjs.map +1 -1
- package/es/components/tzj-player/src/yunzhiyan.d.ts +0 -15
- package/es/components/tzj-player/src/yunzhiyan.mjs +1 -215
- package/es/components/tzj-player/src/yunzhiyan.mjs.map +1 -1
- package/es/index.mjs +1 -1
- package/lib/components/index.js +0 -4
- package/lib/components/index.js.map +1 -1
- package/lib/components/tzj-player/index.js +0 -4
- package/lib/components/tzj-player/index.js.map +1 -1
- package/lib/components/tzj-player/src/ctyun-player.vue2.js +5 -121
- package/lib/components/tzj-player/src/ctyun-player.vue2.js.map +1 -1
- package/lib/components/tzj-player/src/easyPlayer.vue2.js +23 -5
- package/lib/components/tzj-player/src/easyPlayer.vue2.js.map +1 -1
- package/lib/components/tzj-player/src/yunzhiyan.d.ts +0 -15
- package/lib/components/tzj-player/src/yunzhiyan.js +0 -218
- package/lib/components/tzj-player/src/yunzhiyan.js.map +1 -1
- package/lib/index.js +0 -4
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
- package/theme-default/i-tzj-player.css +1 -1
- package/theme-default/index.css +1 -1
|
@@ -10,20 +10,6 @@ var easyPlayer_vue_vue_type_script_setup_true_lang = require('./easyPlayer.vue2.
|
|
|
10
10
|
|
|
11
11
|
var __defProp = Object.defineProperty;
|
|
12
12
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
13
|
-
const _hoisted_1 = {
|
|
14
|
-
key: 0,
|
|
15
|
-
class: "i-easy-player-bar"
|
|
16
|
-
};
|
|
17
|
-
const _hoisted_2 = { class: "i-easy-player-bar-item i-easy-player-bar-left" };
|
|
18
|
-
const _hoisted_3 = {
|
|
19
|
-
key: 2,
|
|
20
|
-
class: "i-easy-player-bottom-bar"
|
|
21
|
-
};
|
|
22
|
-
const _hoisted_4 = {
|
|
23
|
-
key: 3,
|
|
24
|
-
class: "i-easy-player-bottom-bar"
|
|
25
|
-
};
|
|
26
|
-
const _hoisted_5 = { class: "i-easy-player-bar-item i-easy-player-bar-right" };
|
|
27
13
|
var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
28
14
|
...{
|
|
29
15
|
name: "CtyunPlayer"
|
|
@@ -109,115 +95,13 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
109
95
|
"device-serial": _ctx.deviceSerial,
|
|
110
96
|
"area-name": _ctx.areaName,
|
|
111
97
|
"pause-mode": _ctx.pauseMode,
|
|
112
|
-
onMouseenter: _cache[
|
|
113
|
-
onMouseleave: _cache[
|
|
114
|
-
onPause: _cache[
|
|
115
|
-
onPlay: _cache[
|
|
98
|
+
onMouseenter: _cache[0] || (_cache[0] = ($event) => showBottomBar.value = true),
|
|
99
|
+
onMouseleave: _cache[1] || (_cache[1] = ($event) => showBottomBar.value = false),
|
|
100
|
+
onPause: _cache[2] || (_cache[2] = ($event) => isPlaying.value = false),
|
|
101
|
+
onPlay: _cache[3] || (_cache[3] = ($event) => isPlaying.value = true),
|
|
116
102
|
onVideoInfo: handleVideoInfo,
|
|
117
103
|
onMute: handleMute
|
|
118
|
-
},
|
|
119
|
-
customBar: vue.withCtx(() => [
|
|
120
|
-
showBottomBar.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
|
|
121
|
-
vue.createCommentVNode(" \u5DE6\u4FA7\uFF1A\u64AD\u653E/\u6682\u505C "),
|
|
122
|
-
vue.createElementVNode("div", _hoisted_2, [
|
|
123
|
-
vue.createCommentVNode(" \u64AD\u653E "),
|
|
124
|
-
!isPlaying.value ? (vue.openBlock(), vue.createElementBlock("div", {
|
|
125
|
-
key: 0,
|
|
126
|
-
class: "i-easy-player-bottom-bar",
|
|
127
|
-
onClick: playerPlay
|
|
128
|
-
}, _cache[8] || (_cache[8] = [
|
|
129
|
-
vue.createElementVNode(
|
|
130
|
-
"i",
|
|
131
|
-
{ class: "iconfont icon-playfill" },
|
|
132
|
-
null,
|
|
133
|
-
-1
|
|
134
|
-
/* CACHED */
|
|
135
|
-
)
|
|
136
|
-
]))) : (vue.openBlock(), vue.createElementBlock(
|
|
137
|
-
vue.Fragment,
|
|
138
|
-
{ key: 1 },
|
|
139
|
-
[
|
|
140
|
-
vue.createCommentVNode(" \u6682\u505C "),
|
|
141
|
-
vue.createElementVNode("div", {
|
|
142
|
-
class: "i-easy-player-bottom-bar",
|
|
143
|
-
onClick: playerPause
|
|
144
|
-
}, _cache[9] || (_cache[9] = [
|
|
145
|
-
vue.createElementVNode(
|
|
146
|
-
"i",
|
|
147
|
-
{ class: "iconfont icon-stop" },
|
|
148
|
-
null,
|
|
149
|
-
-1
|
|
150
|
-
/* CACHED */
|
|
151
|
-
)
|
|
152
|
-
]))
|
|
153
|
-
],
|
|
154
|
-
2112
|
|
155
|
-
/* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
|
|
156
|
-
)),
|
|
157
|
-
!isVolumeMuted.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3, [
|
|
158
|
-
vue.createCommentVNode(" \u97F3\u91CF\u56FE\u6807 "),
|
|
159
|
-
vue.createElementVNode("i", {
|
|
160
|
-
class: "iconfont icon-notificationfill",
|
|
161
|
-
onClick: _cache[0] || (_cache[0] = ($event) => handleSetMute(1))
|
|
162
|
-
})
|
|
163
|
-
])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_4, [
|
|
164
|
-
vue.createCommentVNode(" \u9759\u97F3\u56FE\u6807 "),
|
|
165
|
-
vue.createElementVNode("i", {
|
|
166
|
-
class: "iconfont icon-notificationforbidfill",
|
|
167
|
-
onClick: _cache[1] || (_cache[1] = ($event) => handleSetMute(0))
|
|
168
|
-
})
|
|
169
|
-
]))
|
|
170
|
-
]),
|
|
171
|
-
vue.createCommentVNode(" \u622A\u56FE,\u5168\u5C4F "),
|
|
172
|
-
vue.createElementVNode("div", _hoisted_5, [
|
|
173
|
-
vue.createCommentVNode(" \u622A\u56FE "),
|
|
174
|
-
vue.createElementVNode("div", {
|
|
175
|
-
class: "i-easy-player-bottom-bar",
|
|
176
|
-
onClick: playerScreenShot
|
|
177
|
-
}, _cache[10] || (_cache[10] = [
|
|
178
|
-
vue.createElementVNode(
|
|
179
|
-
"i",
|
|
180
|
-
{ class: "iconfont icon-picfill" },
|
|
181
|
-
null,
|
|
182
|
-
-1
|
|
183
|
-
/* CACHED */
|
|
184
|
-
)
|
|
185
|
-
])),
|
|
186
|
-
vue.createCommentVNode(" \u5168\u5C4F "),
|
|
187
|
-
!isFullscreen.value ? (vue.openBlock(), vue.createElementBlock("div", {
|
|
188
|
-
key: 0,
|
|
189
|
-
title: "\u5168\u5C4F",
|
|
190
|
-
class: "i-easy-player-bottom-bar",
|
|
191
|
-
onClick: _cache[2] || (_cache[2] = ($event) => playerFullscreen(true))
|
|
192
|
-
}, _cache[11] || (_cache[11] = [
|
|
193
|
-
vue.createElementVNode(
|
|
194
|
-
"i",
|
|
195
|
-
{ class: "iconfont icon-full" },
|
|
196
|
-
null,
|
|
197
|
-
-1
|
|
198
|
-
/* CACHED */
|
|
199
|
-
)
|
|
200
|
-
]))) : vue.createCommentVNode("v-if", true),
|
|
201
|
-
vue.createCommentVNode(" \u53D6\u6D88\u5168\u5C4F "),
|
|
202
|
-
isFullscreen.value ? (vue.openBlock(), vue.createElementBlock("div", {
|
|
203
|
-
key: 1,
|
|
204
|
-
class: "i-easy-player-bottom-bar",
|
|
205
|
-
onClick: _cache[3] || (_cache[3] = ($event) => playerFullscreen(false))
|
|
206
|
-
}, _cache[12] || (_cache[12] = [
|
|
207
|
-
vue.createElementVNode(
|
|
208
|
-
"i",
|
|
209
|
-
{ class: "iconfont icon-reduction" },
|
|
210
|
-
null,
|
|
211
|
-
-1
|
|
212
|
-
/* CACHED */
|
|
213
|
-
)
|
|
214
|
-
]))) : vue.createCommentVNode("v-if", true)
|
|
215
|
-
])
|
|
216
|
-
])) : vue.createCommentVNode("v-if", true)
|
|
217
|
-
]),
|
|
218
|
-
_: 1
|
|
219
|
-
/* STABLE */
|
|
220
|
-
}, 8, ["url", "debug", "access-token", "platform-type-name", "device-serial", "area-name", "pause-mode"]),
|
|
104
|
+
}, null, 8, ["url", "debug", "access-token", "platform-type-name", "device-serial", "area-name", "pause-mode"]),
|
|
221
105
|
vue.createCommentVNode(" \u8BED\u97F3\u5BF9\u8BB2\u9519\u8BEF\u63D0\u793A "),
|
|
222
106
|
audioMsg.value.msg ? (vue.openBlock(), vue.createElementBlock(
|
|
223
107
|
"div",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ctyun-player.vue2.js","sources":["../../../../../../../packages/components/tzj-player/src/ctyun-player.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { onMounted, ref, shallowRef } from \"vue\";\nimport { GetCtyunDeviceVideoUrl } from \"./ctyun-player\";\nimport EasyPlayer from \"./easyPlayer.vue\";\nimport { TzjPlayerProps } from \"./tzj-player\";\n\n// 天翼云播放器\ndefineOptions({\n name: \"CtyunPlayer\",\n});\n\nconst props = defineProps(TzjPlayerProps);\nconst videoUrl = ref(\"\");\nconst showBottomBar = ref(false);\nconst errorMsg = ref(\"\");\n\n// 播放器相关状态\nconst playerRef = shallowRef();\nconst isPlaying = ref(false); // 是否播放,播放true,暂停false\nconst isFullscreen = ref(false);\nconst isVolumeMuted = ref(true);\n\nconst audioMsg = ref({\n type: \"\",\n msg: \"\",\n}); // 语音对讲提示信息\n\nconst initPlayer = async () => {\n try {\n if (!props.deviceSerial) {\n errorMsg.value = \"设备序列号不能为空\";\n return;\n }\n\n const url = await GetCtyunDeviceVideoUrl(props.deviceSerial);\n if (!url) {\n errorMsg.value = \"获取视频播放地址失败\";\n return;\n }\n\n videoUrl.value = url;\n errorMsg.value = \"\";\n } catch (error) {\n if (props.debug) {\n console.error(\"初始化天翼云播放器失败:\", error);\n }\n errorMsg.value = `初始化失败: ${error instanceof Error ? error.message : \"未知错误\"}`;\n }\n};\n\n/**\n * 播放视频\n */\nconst playerPlay = (): void => {\n playerRef.value?.play();\n};\n\n/**\n * 暂停视频\n */\nconst playerPause = (): void => {\n playerRef.value?.pause();\n};\n\n/**\n * 截图\n */\nconst playerScreenShot = (): void => {\n playerRef.value?.screenshot();\n};\n\n/**\n * 切换全屏状态\n * @param fullscreen 是否全屏\n */\nconst playerFullscreen = (fullscreen: boolean): void => {\n isFullscreen.value = fullscreen;\n playerRef.value?.fullscreen(fullscreen);\n};\n\n// 获取视频信息,判断当前是否为静音状态\nconst handleVideoInfo = () => {\n // 判断是否静音\n isVolumeMuted.value = playerRef.value?.isMute();\n};\nconst handleMute = (mute: boolean) => {\n isVolumeMuted.value = mute;\n};\nconst handleSetMute = (volume: number) => {\n playerRef.value?.setMute(volume);\n};\n\nonMounted(() => {\n initPlayer();\n});\n</script>\n\n<template>\n <EasyPlayer\n ref=\"playerRef\"\n :url=\"videoUrl\"\n :debug=\"debug\"\n :access-token=\"accessToken\"\n :platform-type-name=\"platformTypeName\"\n :device-serial=\"deviceSerial\"\n :area-name=\"areaName\"\n :pause-mode=\"pauseMode\"\n @mouseenter=\"showBottomBar = true\"\n @mouseleave=\"showBottomBar = false\"\n @pause=\"isPlaying = false\"\n @play=\"isPlaying = true\"\n @video-info=\"handleVideoInfo\"\n @mute=\"handleMute\"\n >\n <template #customBar>\n <div v-if=\"showBottomBar\" class=\"i-easy-player-bar\">\n <!-- 左侧:播放/暂停 -->\n <div class=\"i-easy-player-bar-item i-easy-player-bar-left\">\n <!-- 播放 -->\n <div\n v-if=\"!isPlaying\"\n class=\"i-easy-player-bottom-bar\"\n @click=\"playerPlay\"\n >\n <i class=\"iconfont icon-playfill\" />\n </div>\n <!-- 暂停 -->\n <div v-else class=\"i-easy-player-bottom-bar\" @click=\"playerPause\">\n <i class=\"iconfont icon-stop\" />\n </div>\n\n <div v-if=\"!isVolumeMuted\" class=\"i-easy-player-bottom-bar\">\n <!-- 音量图标 -->\n <i\n class=\"iconfont icon-notificationfill\"\n @click=\"handleSetMute(1)\"\n />\n </div>\n <div v-else class=\"i-easy-player-bottom-bar\">\n <!-- 静音图标 -->\n <i\n class=\"iconfont icon-notificationforbidfill\"\n @click=\"handleSetMute(0)\"\n />\n </div>\n </div>\n <!-- 截图,全屏 -->\n <div class=\"i-easy-player-bar-item i-easy-player-bar-right\">\n <!-- 截图 -->\n <div class=\"i-easy-player-bottom-bar\" @click=\"playerScreenShot\">\n <i class=\"iconfont icon-picfill\" />\n </div>\n <!-- 全屏 -->\n <div\n v-if=\"!isFullscreen\"\n title=\"全屏\"\n class=\"i-easy-player-bottom-bar\"\n @click=\"playerFullscreen(true)\"\n >\n <i class=\"iconfont icon-full\" />\n </div>\n <!-- 取消全屏 -->\n <div\n v-if=\"isFullscreen\"\n class=\"i-easy-player-bottom-bar\"\n @click=\"playerFullscreen(false)\"\n >\n <i class=\"iconfont icon-reduction\" />\n </div>\n </div>\n </div>\n </template>\n </EasyPlayer>\n <!-- 语音对讲错误提示 -->\n <div\n v-if=\"audioMsg.msg\"\n class=\"i-tzj-player__voice-default\"\n :class=\"`i-tzj-player__voice-${audioMsg.type}`\"\n >\n {{ audioMsg.msg }}\n </div>\n</template>\n"],"names":["ref","shallowRef","GetCtyunDeviceVideoUrl","onMounted","_createVNode","EasyPlayer","debug","accessToken","platformTypeName","deviceSerial","areaName","pauseMode","_openBlock","_createElementBlock","_createCommentVNode","_createElementVNode","_Fragment","_normalizeClass","_toDisplayString"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ctyun-player.vue2.js","sources":["../../../../../../../packages/components/tzj-player/src/ctyun-player.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { onMounted, ref, shallowRef } from \"vue\";\nimport { GetCtyunDeviceVideoUrl } from \"./ctyun-player\";\nimport EasyPlayer from \"./easyPlayer.vue\";\nimport { TzjPlayerProps } from \"./tzj-player\";\n\n// 天翼云播放器\ndefineOptions({\n name: \"CtyunPlayer\",\n});\n\nconst props = defineProps(TzjPlayerProps);\nconst videoUrl = ref(\"\");\nconst showBottomBar = ref(false);\nconst errorMsg = ref(\"\");\n\n// 播放器相关状态\nconst playerRef = shallowRef();\nconst isPlaying = ref(false); // 是否播放,播放true,暂停false\nconst isFullscreen = ref(false);\nconst isVolumeMuted = ref(true);\n\nconst audioMsg = ref({\n type: \"\",\n msg: \"\",\n}); // 语音对讲提示信息\n\nconst initPlayer = async () => {\n try {\n if (!props.deviceSerial) {\n errorMsg.value = \"设备序列号不能为空\";\n return;\n }\n\n const url = await GetCtyunDeviceVideoUrl(props.deviceSerial);\n if (!url) {\n errorMsg.value = \"获取视频播放地址失败\";\n return;\n }\n\n videoUrl.value = url;\n errorMsg.value = \"\";\n } catch (error) {\n if (props.debug) {\n console.error(\"初始化天翼云播放器失败:\", error);\n }\n errorMsg.value = `初始化失败: ${error instanceof Error ? error.message : \"未知错误\"}`;\n }\n};\n\n/**\n * 播放视频\n */\nconst playerPlay = (): void => {\n playerRef.value?.play();\n};\n\n/**\n * 暂停视频\n */\nconst playerPause = (): void => {\n playerRef.value?.pause();\n};\n\n/**\n * 截图\n */\nconst playerScreenShot = (): void => {\n playerRef.value?.screenshot();\n};\n\n/**\n * 切换全屏状态\n * @param fullscreen 是否全屏\n */\nconst playerFullscreen = (fullscreen: boolean): void => {\n isFullscreen.value = fullscreen;\n playerRef.value?.fullscreen(fullscreen);\n};\n\n// 获取视频信息,判断当前是否为静音状态\nconst handleVideoInfo = () => {\n // 判断是否静音\n isVolumeMuted.value = playerRef.value?.isMute();\n};\nconst handleMute = (mute: boolean) => {\n isVolumeMuted.value = mute;\n};\nconst handleSetMute = (volume: number) => {\n playerRef.value?.setMute(volume);\n};\n\nonMounted(() => {\n initPlayer();\n});\n</script>\n\n<template>\n <EasyPlayer\n ref=\"playerRef\"\n :url=\"videoUrl\"\n :debug=\"debug\"\n :access-token=\"accessToken\"\n :platform-type-name=\"platformTypeName\"\n :device-serial=\"deviceSerial\"\n :area-name=\"areaName\"\n :pause-mode=\"pauseMode\"\n @mouseenter=\"showBottomBar = true\"\n @mouseleave=\"showBottomBar = false\"\n @pause=\"isPlaying = false\"\n @play=\"isPlaying = true\"\n @video-info=\"handleVideoInfo\"\n @mute=\"handleMute\"\n >\n </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":["ref","shallowRef","GetCtyunDeviceVideoUrl","onMounted","_createVNode","EasyPlayer","debug","accessToken","platformTypeName","deviceSerial","areaName","pauseMode","_createCommentVNode","_createElementBlock","_normalizeClass","_toDisplayString"],"mappings":"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"}
|
|
@@ -275,14 +275,32 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
275
275
|
// H.265 走 WebCodecs 硬解(Chrome 的 MSE 不支持 H265,需靠 WCS 兜底)
|
|
276
276
|
WASM: true,
|
|
277
277
|
// 硬解不可用时降级 WASM 软解
|
|
278
|
-
debug:
|
|
278
|
+
debug: false,
|
|
279
279
|
maxDelay: 300,
|
|
280
280
|
// 最大容忍延迟300ms,超时自动丢帧追实时画面
|
|
281
|
-
reconnect: true
|
|
281
|
+
reconnect: true,
|
|
282
282
|
// 断线自动重连,单路故障不影响其他8路
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
283
|
+
hasControl: true,
|
|
284
|
+
operateBtns: {
|
|
285
|
+
fullscreen: true,
|
|
286
|
+
//全屏
|
|
287
|
+
screenshot: true,
|
|
288
|
+
//截图
|
|
289
|
+
stretch: true,
|
|
290
|
+
//拉伸
|
|
291
|
+
play: true,
|
|
292
|
+
//播放
|
|
293
|
+
audio: false,
|
|
294
|
+
//音量
|
|
295
|
+
record: true,
|
|
296
|
+
//录制
|
|
297
|
+
ptz: false,
|
|
298
|
+
//云台
|
|
299
|
+
zoom: false,
|
|
300
|
+
//缩放
|
|
301
|
+
close: false
|
|
302
|
+
//关闭
|
|
303
|
+
}
|
|
286
304
|
});
|
|
287
305
|
createRetryCount = 0;
|
|
288
306
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"easyPlayer.vue2.js","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 { 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 videoInfo = ref<any>(null);\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;\n\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) {\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\ndefineExpose({\n play,\n destroy,\n getPlayer: () => player,\n pause: playerPause,\n screenshot: playerScreenShot,\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 console.log(\"🚀 ~ rectH:\", rectH);\n const w = rectW > 0 ? rectW : playerRef.value?.offsetWidth || 800;\n const h = rectH > 0 ? rectH : playerRef.value?.offsetHeight || 450;\n\n dom.style.width = `${w}px`;\n dom.style.height =\n props.areaName || props.deviceSerial ? `${h - 32}px` : `${h}px`;\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 const isMicro = window.__MICRO_APP_ENVIRONMENT__;\n console.log(\"🚀 ~ isMicro:\", isMicro);\n player = new window.EasyPlayerPro(document.getElementById(id), {\n isLive: true, // 是否直播\n hasAudio: false, // 是否解析音频\n bufferTime: 0.2, // 直播监控缓存时长设为0,减少内存堆积\n stretch: true, // 加视频拉伸\n MSE: true, // H.264 走 MSE 硬解\n WCS: true, // H.265 走 WebCodecs 硬解(Chrome 的 MSE 不支持 H265,需靠 WCS 兜底)\n WASM: true, // 硬解不可用时降级 WASM 软解\n debug: true,\n maxDelay: 300, // 最大容忍延迟300ms,超时自动丢帧追实时画面\n reconnect: true, // 断线自动重连,单路故障不影响其他8路\n // // 使用动态拼接的绝对路径\n // decoderPath: `${window.location.origin}/plugins/easy-player/`,\n // decoder: \"EasyPlayer-decode.js\",\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 = (error?: any) => {\n props.debug && console.log(\"播放异常\", error);\n emits(\"error\", 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 <!-- 播放器底部操作栏 -->\n <slot name=\"customBar\" />\n </div>\n</template>\n"],"names":["useSlots","computed","uuid","shallowRef","ref","onMounted","watch","onBeforeUnmount","_createElementBlock","_normalizeClass","_createCommentVNode","_renderSlot"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"easyPlayer.vue2.js","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 { 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 videoInfo = ref<any>(null);\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;\n\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) {\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\ndefineExpose({\n play,\n destroy,\n getPlayer: () => player,\n pause: playerPause,\n screenshot: playerScreenShot,\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 console.log(\"🚀 ~ rectH:\", rectH);\n const w = rectW > 0 ? rectW : playerRef.value?.offsetWidth || 800;\n const h = rectH > 0 ? rectH : playerRef.value?.offsetHeight || 450;\n\n dom.style.width = `${w}px`;\n dom.style.height =\n props.areaName || props.deviceSerial ? `${h - 32}px` : `${h}px`;\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 const isMicro = window.__MICRO_APP_ENVIRONMENT__;\n console.log(\"🚀 ~ isMicro:\", isMicro);\n player = new window.EasyPlayerPro(document.getElementById(id), {\n isLive: true, // 是否直播\n hasAudio: false, // 是否解析音频\n bufferTime: 0.2, // 直播监控缓存时长设为0,减少内存堆积\n stretch: true, // 加视频拉伸\n MSE: true, // H.264 走 MSE 硬解\n WCS: true, // H.265 走 WebCodecs 硬解(Chrome 的 MSE 不支持 H265,需靠 WCS 兜底)\n WASM: true, // 硬解不可用时降级 WASM 软解\n debug: false,\n maxDelay: 300, // 最大容忍延迟300ms,超时自动丢帧追实时画面\n reconnect: true, // 断线自动重连,单路故障不影响其他8路\n hasControl: true,\n operateBtns: {\n fullscreen: true, //全屏\n screenshot: true, //截图\n stretch: true, //拉伸\n play: true, //播放\n audio: false, //音量\n record: true, //录制\n ptz: false, //云台\n zoom: false, //缩放\n close: false, //关闭\n },\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 = (error?: any) => {\n props.debug && console.log(\"播放异常\", error);\n emits(\"error\", 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 <!-- 播放器底部操作栏 -->\n <slot name=\"customBar\" />\n </div>\n</template>\n"],"names":["useSlots","computed","uuid","shallowRef","ref","onMounted","watch","onBeforeUnmount","_createElementBlock","_normalizeClass","_createCommentVNode","_renderSlot"],"mappings":"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"}
|
|
@@ -1,18 +1,3 @@
|
|
|
1
|
-
export declare function sign(headers: Record<string, string | number>, params: Record<string, any>, sk?: string): string;
|
|
2
|
-
export declare function GetYunZhiYanDeviceChannel(deviceId: string): Promise<string | false>;
|
|
3
|
-
export declare function GetYunZhiYanDeviceVideoUrl(deviceId: string, channelCodeId: string): Promise<string | false>;
|
|
4
|
-
export declare function ApiEnroll(params: {
|
|
5
|
-
projectName: string;
|
|
6
|
-
projectContact: string;
|
|
7
|
-
contactInfo: string;
|
|
8
|
-
remark?: string;
|
|
9
|
-
requestId?: string;
|
|
10
|
-
}): Promise<{
|
|
11
|
-
code: number;
|
|
12
|
-
message?: string;
|
|
13
|
-
requestId?: string;
|
|
14
|
-
errCode?: string | null;
|
|
15
|
-
}>;
|
|
16
1
|
export declare function parseAuthorizedTokenCookie(): string | null;
|
|
17
2
|
export declare function getVideoUrlByCamreaId(deviceId?: string): Promise<{
|
|
18
3
|
code: any;
|
|
@@ -1,221 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var CryptoJS = require('crypto-js');
|
|
4
|
-
|
|
5
3
|
var __defProp = Object.defineProperty;
|
|
6
4
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
7
|
-
function getAccessKey() {
|
|
8
|
-
if (typeof localStorage !== "undefined") {
|
|
9
|
-
return localStorage.getItem("YZYAK") || "";
|
|
10
|
-
}
|
|
11
|
-
return "";
|
|
12
|
-
}
|
|
13
|
-
__name(getAccessKey, "getAccessKey");
|
|
14
|
-
function getSecretKey() {
|
|
15
|
-
if (typeof localStorage !== "undefined") {
|
|
16
|
-
return localStorage.getItem("YZYSK") || "";
|
|
17
|
-
}
|
|
18
|
-
return "";
|
|
19
|
-
}
|
|
20
|
-
__name(getSecretKey, "getSecretKey");
|
|
21
|
-
function sign(headers, params, sk = getSecretKey()) {
|
|
22
|
-
if (!sk) {
|
|
23
|
-
console.warn(
|
|
24
|
-
"[tzj-player] \u7B7E\u540D\u5BC6\u94A5 YZYSK \u4E3A\u7A7A\uFF0C\u7B7E\u540D\u7ED3\u679C\u5C06\u4E0D\u88AB\u670D\u52A1\u7AEF\u8BA4\u53EF\uFF0C\u8BF7\u786E\u8BA4\u5DF2\u5199\u5165 localStorage"
|
|
25
|
-
);
|
|
26
|
-
}
|
|
27
|
-
const obj = Object.assign({}, headers, params);
|
|
28
|
-
const keys = Object.keys(obj).sort();
|
|
29
|
-
let str = "";
|
|
30
|
-
keys.forEach((key, index) => {
|
|
31
|
-
str += `${key}="${obj[key]}"`;
|
|
32
|
-
if (index !== keys.length - 1) {
|
|
33
|
-
str += "&";
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
console.log("\u672A\u52A0\u7B7E\u7684\u5B57\u7B26\u4E32", str);
|
|
37
|
-
const hash = CryptoJS.HmacSHA256(str, sk);
|
|
38
|
-
console.log("\u52A0\u7B7E\u540E\u7684\u5B57\u7B26\u4E32", hash.toString(CryptoJS.enc.Hex));
|
|
39
|
-
return hash.toString(CryptoJS.enc.Hex);
|
|
40
|
-
}
|
|
41
|
-
__name(sign, "sign");
|
|
42
|
-
async function GetYunZhiYanDeviceChannel(deviceId) {
|
|
43
|
-
try {
|
|
44
|
-
const headers = {
|
|
45
|
-
algorithm: "HmacSHA256",
|
|
46
|
-
requestTime: Date.now(),
|
|
47
|
-
accessKey: getAccessKey()
|
|
48
|
-
};
|
|
49
|
-
const params = { deviceId };
|
|
50
|
-
headers.sign = sign(headers, params);
|
|
51
|
-
const controller = new AbortController();
|
|
52
|
-
const timeoutId = setTimeout(() => controller.abort(), 1e4);
|
|
53
|
-
const response = await fetch("/vsuap-platform-api/v1/device/queryChannel", {
|
|
54
|
-
method: "POST",
|
|
55
|
-
headers: {
|
|
56
|
-
"Content-Type": "application/json",
|
|
57
|
-
...headers
|
|
58
|
-
},
|
|
59
|
-
body: JSON.stringify(params),
|
|
60
|
-
signal: controller.signal
|
|
61
|
-
});
|
|
62
|
-
clearTimeout(timeoutId);
|
|
63
|
-
if (!response.ok) {
|
|
64
|
-
console.error(`HTTP\u9519\u8BEF: ${response.status} ${response.statusText}`);
|
|
65
|
-
return false;
|
|
66
|
-
}
|
|
67
|
-
const res = await response.json();
|
|
68
|
-
const { code, data } = res;
|
|
69
|
-
if (code === 200 && Array.isArray(data) && data.length > 0 && data[0].channelCodeId) {
|
|
70
|
-
return data[0].channelCodeId || "";
|
|
71
|
-
} else {
|
|
72
|
-
console.error(
|
|
73
|
-
`\u4E1A\u52A1\u9519\u8BEF: code=${code}, message=${res.message || "\u672A\u77E5\u9519\u8BEF"}`
|
|
74
|
-
);
|
|
75
|
-
return false;
|
|
76
|
-
}
|
|
77
|
-
} catch (error) {
|
|
78
|
-
if (error instanceof Error) {
|
|
79
|
-
if (error.name === "AbortError") {
|
|
80
|
-
console.error("\u8BF7\u6C42\u8D85\u65F6: GetYunZhiYanDeviceChannel");
|
|
81
|
-
} else if (error.name === "TypeError") {
|
|
82
|
-
console.error("\u7F51\u7EDC\u9519\u8BEF: GetYunZhiYanDeviceChannel", error.message);
|
|
83
|
-
} else {
|
|
84
|
-
console.error(
|
|
85
|
-
"JSON\u89E3\u6790\u9519\u8BEF\u6216\u5176\u4ED6\u9519\u8BEF: GetYunZhiYanDeviceChannel",
|
|
86
|
-
error.message
|
|
87
|
-
);
|
|
88
|
-
}
|
|
89
|
-
} else {
|
|
90
|
-
console.error("\u672A\u77E5\u9519\u8BEF: GetYunZhiYanDeviceChannel", error);
|
|
91
|
-
}
|
|
92
|
-
return false;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
__name(GetYunZhiYanDeviceChannel, "GetYunZhiYanDeviceChannel");
|
|
96
|
-
async function GetYunZhiYanDeviceVideoUrl(deviceId, channelCodeId) {
|
|
97
|
-
try {
|
|
98
|
-
const headers = {
|
|
99
|
-
algorithm: "HmacSHA256",
|
|
100
|
-
requestTime: Date.now(),
|
|
101
|
-
accessKey: getAccessKey()
|
|
102
|
-
};
|
|
103
|
-
const params = { deviceId, channelCodeId };
|
|
104
|
-
headers.sign = sign(headers, params);
|
|
105
|
-
const controller = new AbortController();
|
|
106
|
-
const timeoutId = setTimeout(() => controller.abort(), 1e4);
|
|
107
|
-
const response = await fetch("/vsuap-platform-api/v1/device/playOn", {
|
|
108
|
-
method: "POST",
|
|
109
|
-
headers: {
|
|
110
|
-
"Content-Type": "application/json",
|
|
111
|
-
...headers
|
|
112
|
-
},
|
|
113
|
-
body: JSON.stringify(params),
|
|
114
|
-
signal: controller.signal
|
|
115
|
-
});
|
|
116
|
-
clearTimeout(timeoutId);
|
|
117
|
-
if (!response.ok) {
|
|
118
|
-
console.error(`HTTP\u9519\u8BEF: ${response.status} ${response.statusText}`);
|
|
119
|
-
return false;
|
|
120
|
-
}
|
|
121
|
-
const res = await response.json();
|
|
122
|
-
const { code, data } = res;
|
|
123
|
-
if (code === 200) {
|
|
124
|
-
return (data == null ? void 0 : data.flv) || "";
|
|
125
|
-
} else {
|
|
126
|
-
console.error(
|
|
127
|
-
`\u4E1A\u52A1\u9519\u8BEF: code=${code}, message=${res.message || "\u672A\u77E5\u9519\u8BEF"}`
|
|
128
|
-
);
|
|
129
|
-
return false;
|
|
130
|
-
}
|
|
131
|
-
} catch (error) {
|
|
132
|
-
if (error instanceof Error) {
|
|
133
|
-
if (error.name === "AbortError") {
|
|
134
|
-
console.error("\u8BF7\u6C42\u8D85\u65F6: GetYunZhiYanDeviceVideoUrl");
|
|
135
|
-
} else if (error.name === "TypeError") {
|
|
136
|
-
console.error("\u7F51\u7EDC\u9519\u8BEF: GetYunZhiYanDeviceVideoUrl", error.message);
|
|
137
|
-
} else {
|
|
138
|
-
console.error(
|
|
139
|
-
"JSON\u89E3\u6790\u9519\u8BEF\u6216\u5176\u4ED6\u9519\u8BEF: GetYunZhiYanDeviceVideoUrl",
|
|
140
|
-
error.message
|
|
141
|
-
);
|
|
142
|
-
}
|
|
143
|
-
} else {
|
|
144
|
-
console.error("\u672A\u77E5\u9519\u8BEF: GetYunZhiYanDeviceVideoUrl", error);
|
|
145
|
-
}
|
|
146
|
-
return false;
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
__name(GetYunZhiYanDeviceVideoUrl, "GetYunZhiYanDeviceVideoUrl");
|
|
150
|
-
async function ApiEnroll(params) {
|
|
151
|
-
const { projectName, projectContact, contactInfo, remark, requestId } = params;
|
|
152
|
-
if (!projectName || !projectContact || !contactInfo) {
|
|
153
|
-
console.warn(
|
|
154
|
-
"[tzj-player] ApiEnroll: projectName / projectContact / contactInfo \u5747\u4E3A\u5FC5\u586B"
|
|
155
|
-
);
|
|
156
|
-
return {
|
|
157
|
-
code: -1,
|
|
158
|
-
message: "projectName\u3001projectContact\u3001contactInfo \u5747\u4E3A\u5FC5\u586B"
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
if (!/^\d{11}$/.test(contactInfo)) {
|
|
162
|
-
console.warn("[tzj-player] ApiEnroll: contactInfo \u5FC5\u987B\u662F11\u4F4D\u6570\u5B57");
|
|
163
|
-
return { code: -1, message: "contactInfo \u5FC5\u987B\u662F11\u4F4D\u6570\u5B57\u7684\u7535\u8BDD\u53F7\u7801" };
|
|
164
|
-
}
|
|
165
|
-
const body = {
|
|
166
|
-
projectName,
|
|
167
|
-
projectContact,
|
|
168
|
-
contactInfo
|
|
169
|
-
};
|
|
170
|
-
if (remark) body.remark = remark;
|
|
171
|
-
if (requestId) body.requestId = requestId;
|
|
172
|
-
const headers = {
|
|
173
|
-
algorithm: "HmacSHA256",
|
|
174
|
-
requestTime: Date.now(),
|
|
175
|
-
accessKey: getAccessKey()
|
|
176
|
-
};
|
|
177
|
-
headers.sign = sign(headers, body);
|
|
178
|
-
const controller = new AbortController();
|
|
179
|
-
const timeoutId = setTimeout(() => controller.abort(), 1e4);
|
|
180
|
-
try {
|
|
181
|
-
const response = await fetch("/vsuap-platform-api/v1/user/apiEnroll", {
|
|
182
|
-
method: "POST",
|
|
183
|
-
headers: {
|
|
184
|
-
// POST 必须带 Content-Type,否则网关无法解析入参(GET 则不允许携带)
|
|
185
|
-
"Content-Type": "application/json",
|
|
186
|
-
...headers
|
|
187
|
-
},
|
|
188
|
-
body: JSON.stringify(body),
|
|
189
|
-
signal: controller.signal
|
|
190
|
-
});
|
|
191
|
-
if (!response.ok) {
|
|
192
|
-
console.error(
|
|
193
|
-
`HTTP\u9519\u8BEF: ${response.status} ${response.statusText} - ApiEnroll`
|
|
194
|
-
);
|
|
195
|
-
return { code: response.status, message: response.statusText };
|
|
196
|
-
}
|
|
197
|
-
const res = await response.json();
|
|
198
|
-
if (res.code !== 200) {
|
|
199
|
-
console.error(
|
|
200
|
-
`API\u6743\u9650\u6CE8\u518C\u5931\u8D25: code=${res.code}, message=${res.message || "\u672A\u77E5\u9519\u8BEF"}`
|
|
201
|
-
);
|
|
202
|
-
}
|
|
203
|
-
return res;
|
|
204
|
-
} catch (error) {
|
|
205
|
-
if (error instanceof Error && error.name === "AbortError") {
|
|
206
|
-
console.error("\u8BF7\u6C42\u8D85\u65F6: ApiEnroll");
|
|
207
|
-
return { code: -1, message: "\u8BF7\u6C42\u8D85\u65F6" };
|
|
208
|
-
}
|
|
209
|
-
console.error("\u8BF7\u6C42\u5931\u8D25: ApiEnroll", error);
|
|
210
|
-
return {
|
|
211
|
-
code: -1,
|
|
212
|
-
message: error instanceof Error ? error.message : "\u672A\u77E5\u9519\u8BEF"
|
|
213
|
-
};
|
|
214
|
-
} finally {
|
|
215
|
-
clearTimeout(timeoutId);
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
__name(ApiEnroll, "ApiEnroll");
|
|
219
5
|
function parseAuthorizedTokenCookie() {
|
|
220
6
|
const match = document.cookie.match(/authorized-token=([^;]+)/);
|
|
221
7
|
if (!match) return null;
|
|
@@ -277,10 +63,6 @@ async function getVideoUrlByCamreaId(deviceId) {
|
|
|
277
63
|
}
|
|
278
64
|
__name(getVideoUrlByCamreaId, "getVideoUrlByCamreaId");
|
|
279
65
|
|
|
280
|
-
exports.ApiEnroll = ApiEnroll;
|
|
281
|
-
exports.GetYunZhiYanDeviceChannel = GetYunZhiYanDeviceChannel;
|
|
282
|
-
exports.GetYunZhiYanDeviceVideoUrl = GetYunZhiYanDeviceVideoUrl;
|
|
283
66
|
exports.getVideoUrlByCamreaId = getVideoUrlByCamreaId;
|
|
284
67
|
exports.parseAuthorizedTokenCookie = parseAuthorizedTokenCookie;
|
|
285
|
-
exports.sign = sign;
|
|
286
68
|
//# sourceMappingURL=yunzhiyan.js.map
|