sldz-easyplayer 1.0.0
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/README.md +260 -0
- package/dist/sldz-easyplayer.js +1463 -0
- package/dist/sldz-easyplayer.umd.cjs +2 -0
- package/dist/style.css +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,1463 @@
|
|
|
1
|
+
import { openBlock as k, createElementBlock as D, createElementVNode as h, normalizeStyle as me, createTextVNode as Xe, toDisplayString as W, renderSlot as Re, createCommentVNode as T, computed as U, normalizeClass as qe, nextTick as _e, ref as B, reactive as Z, onBeforeUnmount as Pe, watch as ue, unref as X, shallowRef as ie, onMounted as Ue, createBlock as $, resolveDynamicComponent as ee, withCtx as ke, Fragment as re, renderList as Qe, inject as $e, useTemplateRef as Se, onUnmounted as et, withModifiers as te, createVNode as ne } from "vue";
|
|
2
|
+
class tt {
|
|
3
|
+
constructor(e, t = {}) {
|
|
4
|
+
return this.container = e, this.options = t, this.instance = null, this.init(), new Proxy(this, {
|
|
5
|
+
get(n, o) {
|
|
6
|
+
if (o in n)
|
|
7
|
+
return n[o];
|
|
8
|
+
if (n.instance && o in n.instance) {
|
|
9
|
+
const a = n.instance[o];
|
|
10
|
+
return typeof a == "function" ? a.bind(n.instance) : a;
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
set(n, o, a) {
|
|
14
|
+
return o === "instance" || o === "container" ? (n[o] = a, !0) : n.instance ? (n.instance[o] = a, !0) : !1;
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
init() {
|
|
19
|
+
if (!this.container) return null;
|
|
20
|
+
if (typeof window.EasyPlayerPro > "u")
|
|
21
|
+
return console.error(
|
|
22
|
+
"[EasyPlayer] EasyPlayerPro SDK 未加载!请先在页面中引入 EasyPlayerPro SDK,确保 window.EasyPlayerPro 可用。"
|
|
23
|
+
), null;
|
|
24
|
+
const t = {
|
|
25
|
+
...{
|
|
26
|
+
audio: !0,
|
|
27
|
+
record: !0,
|
|
28
|
+
quality: !0,
|
|
29
|
+
screenshot: !0
|
|
30
|
+
},
|
|
31
|
+
...this.options.btns,
|
|
32
|
+
fullscreen: !1,
|
|
33
|
+
zoom: !1,
|
|
34
|
+
ptz: !1,
|
|
35
|
+
stretch: !1,
|
|
36
|
+
play: !1
|
|
37
|
+
}, n = {
|
|
38
|
+
isLive: !0,
|
|
39
|
+
bufferTime: 0.2,
|
|
40
|
+
stretch: !1,
|
|
41
|
+
MSE: !0,
|
|
42
|
+
WCS: !0,
|
|
43
|
+
isBand: !0,
|
|
44
|
+
quality: ["超清", "高清", "标清"],
|
|
45
|
+
ptzConfig: { ptz: !1, ptzMore: !1 },
|
|
46
|
+
btns: t
|
|
47
|
+
};
|
|
48
|
+
this.instance = new window.EasyPlayerPro(this.container, n);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const nt = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAADwklEQVR4AexYzWsTWxT/nfCaBrpx8YQ+ePAe6EIRxKIuFIUimqR+btypqKigbqyfIH5sRMQv1J2gYAX/AaGLtFVw4UJQqagLFy5cCBZ04XKS2hx/Z2JCMncmualpEDGcM+fec8/Hb869c+dOUvjFf38A/uwE/b4V1MHBeZrN7tB87p7mspOUn8n6g9nOPtdc7o7ms7vNdraVbLuCOrRugRIUMr2fkZIHTLwHIsso/yZXiW1ZAcF+QEbQm/5EnzsEvARt/rwBsgoZzWevQnveMcce8l9kPxLJ0JBg9YXmsjcsFvte5AVQh4YWsGKTgJwA4A+Mxg1kQEWGWdFJ3bjuv4axhE4qQV9Tc50th5afUrGI3BkSWYRyz7MwdouITQGGd5mSUcboJ3ea+rmGR8PZaRI5EWC4Tso9BfrOBTiGDakf5ZnRMFfYdS+JALlOLtHcf1qPDAOXr1T42HG6epJNdyZ9Ick6FqDmcrYdHExycvR9fUA+DyxdWuENGwDTOYYJCsWw5gYXxo3GAuT+NQx74uI85kInwp2h90xcaAcg18M8qO6MM55bne4Mc0eSOACRSW/ravWqgKyK6fSmarcqXYCQNdXBrsuUrI/mjAGo9l6N2nWnr27uGIDyf3fQxGQR+TeqjQEInkSiZl3rO7njAHYNjU+iOIBffBwbbGZmAON6ZalU3/NtO7ldgKoffaPV7IIAOHsWuH69wqdOAdPTtWH/hn6I2roARV5Fjbz6r3hcfDQBGL957eXiGKmb2wWI8mPH0Udx6DBw7nyF9/Hw7OMTtRG1c2eD1gUYTNv571uDVatOHw8LW7cCq1dXePv29g4LFl81QFB6aM16dgDKkydfaWAfQxTdJHnwI3dDUgdgOKq4SOlfRXuCjelUo3aeYque6q2ab10jFqCMjb0H9GadXfNm9Ck+fbrNp1huy/j427gksQBDw6B0jtI+MSk8qP4ptraHS2iieIdikXcU9pxLIkCuhwCKLfSYIs8VTfFoNxTmSsiQCNDsw6ku62a2p8idpikwthQKzuZcn6gpQDPk2ngJyCqAU8FLR8imVbG2Ert5xJYAzT28y6A4wCm/yc8BvtdMOyvmzqDXuOYGwtnxCOEF0OLYOmHQowS5kv27bQIlMIzQd7EUxk9aLHj+vAFW43Fa3kph7ACKpX+4FdmfSHcpX3C8/iTyhTdg7/QRzJR3ISjOp89e3iC3L1q2QW0DrMZmFb6yGveZ+ADlSkoDIZTG82VsfIDtvTIxEfuGqMZpJWcNsFXgTo3/AfizlfwOAAD//5WbvAQAAAAGSURBVAMAXZoxYPRu590AAAAASUVORK5CYII=", ot = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAADOklEQVR4AezbjXETMRAF4JhGSAkpgXSQDkgJdBCnAzoAKmCoIHTAUAFQiXjvxvKMPB5bd2+l3UyW0fruTCQ9fVZ+5jx+d5P/JIEElPhubhIwAUUBsXvuwAQUBcTuuQMTUBQQu+cOTEBRQOyeOzABRQGx+1vcgSJZ2z0BW4/VVwm4mqztkICtx+orE8BSylMp5U8p5Usp5XZ1ikkdmA31HfUL9WQxrQx4CLJHGMI94viC53iO0zjtkOkFiR5Qd6g9nmNunG5vMiCmZiAcjo14oRABtWRCQh5xOLaPx7ONJxaA/87MzaAhEC/gMfZPPihlAfgJAf6iTps74hU8Zn4+Db32Wgbc7XYMco+JecShaW6IHXj3h+xN4LUXMiAnPAQJgzgLj2s3AeRAURBn4nHdZoAczBtxNh7XbArIAccgcuTL5YHHROaAHHQ2ohce1zoEkAPPQvTE4zqHAXLw0YjeeFzjUEBOMAoxAh7XNxyQk1gjRsHj2qYAciIrxEh4XNc0QE6mIkbD45qmAnLCrYgR8bie6YCcdC1iVDyuxQWQE/ciRsbjOtwAOXkPIr6Ot+F5WwynTePtM5NbUs2oKy9cAZm1AzEsHvOPA+TonXUF8XSUEDuvhgoByDCdiKHwmDsMIMO8xgoDeOW3bbXlz8MQ7/bVQCEAO/Fq5lCI7oBX8Pgzj1Xx6jEMoitgBx7f6WOFRXQD7MHjb2YWtl1YRBfAXjzALS0y4nTAtXiLIB6iIk4F3IoHv6VFRJwGqOItgniIhjgF0AoPfkuLhNgALumMH6zxarwoiEMBR+FFQhwGOBovCuIQwFl4ERDNAWfjeSOaAnrheSKaAXrjeSGaAEbB80CUAaPhzUaUARGYH5fiDU6cNo338Fzft+34Y/tzk3jDhQXghzPzuuPVTFcQ39ev23q0APx6MnkYvJrrAuKP+jVbjzIgwvFbmB+Z+o0QDOT6bYsMZxtyLi8s/vMbip/ve8Zze5xLTQbk7AyCukM9oBiUT4crZkM9om5RfOHljCaAcopXPEACii9eAiagKCB2zx2YgKKA2D13YAKKAmL33IEJKAqI3XMHvkFAccm23XMHip4JmICigNj9PwAAAP//PLIdGAAAAAZJREFUAwAArQK/DippwgAAAABJRU5ErkJggg==", de = (i, e) => {
|
|
52
|
+
const t = i.__vccOpts || i;
|
|
53
|
+
for (const [n, o] of e)
|
|
54
|
+
t[n] = o;
|
|
55
|
+
return t;
|
|
56
|
+
}, st = {
|
|
57
|
+
key: 0,
|
|
58
|
+
class: "player-header"
|
|
59
|
+
}, at = { class: "player-header-title" }, lt = { class: "player-header-content" }, it = { class: "player-header-right" }, rt = {
|
|
60
|
+
__name: "Header",
|
|
61
|
+
props: {
|
|
62
|
+
visible: {
|
|
63
|
+
type: Boolean,
|
|
64
|
+
default: !1
|
|
65
|
+
},
|
|
66
|
+
warning: {
|
|
67
|
+
type: Boolean,
|
|
68
|
+
default: !1
|
|
69
|
+
},
|
|
70
|
+
closeHeader: {
|
|
71
|
+
type: Boolean,
|
|
72
|
+
default: !0
|
|
73
|
+
},
|
|
74
|
+
dataInfo: {
|
|
75
|
+
type: Object,
|
|
76
|
+
default: () => ({})
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
emits: ["handle"],
|
|
80
|
+
setup(i, { emit: e }) {
|
|
81
|
+
const t = e, n = (o) => {
|
|
82
|
+
t("handle", o);
|
|
83
|
+
};
|
|
84
|
+
return (o, a) => i.visible ? (k(), D("div", st, [
|
|
85
|
+
h("div", at, [
|
|
86
|
+
h("span", {
|
|
87
|
+
style: me({ background: i.dataInfo.channelStatus == "Y" ? "#14CC70" : "#FF4847" })
|
|
88
|
+
}, null, 4),
|
|
89
|
+
Xe(W(i.dataInfo.channelName || i.dataInfo.deviceName), 1)
|
|
90
|
+
]),
|
|
91
|
+
h("div", lt, [
|
|
92
|
+
Re(o.$slots, "default", {}, void 0, !0)
|
|
93
|
+
]),
|
|
94
|
+
h("div", it, [
|
|
95
|
+
i.warning ? (k(), D("img", {
|
|
96
|
+
key: 0,
|
|
97
|
+
class: "close",
|
|
98
|
+
src: nt,
|
|
99
|
+
alt: "",
|
|
100
|
+
onClick: a[0] || (a[0] = (l) => n("warn"))
|
|
101
|
+
})) : T("", !0),
|
|
102
|
+
i.closeHeader ? (k(), D("img", {
|
|
103
|
+
key: 1,
|
|
104
|
+
class: "close",
|
|
105
|
+
src: ot,
|
|
106
|
+
alt: "",
|
|
107
|
+
onClick: a[1] || (a[1] = (l) => n("close"))
|
|
108
|
+
})) : T("", !0)
|
|
109
|
+
])
|
|
110
|
+
])) : T("", !0);
|
|
111
|
+
}
|
|
112
|
+
}, ct = /* @__PURE__ */ de(rt, [["__scopeId", "data-v-ec1dbde0"]]), ce = "data:image/png;base64,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", At = {
|
|
113
|
+
key: 0,
|
|
114
|
+
class: "loading-status-wrapper"
|
|
115
|
+
}, ut = { class: "loading-content" }, dt = { class: "status-icon" }, gt = ["src", "alt"], ft = { class: "status-title" }, pt = { class: "status-description" }, vt = {
|
|
116
|
+
__name: "LoadingStatus",
|
|
117
|
+
props: {
|
|
118
|
+
visible: {
|
|
119
|
+
type: Boolean,
|
|
120
|
+
default: !1
|
|
121
|
+
},
|
|
122
|
+
status: {
|
|
123
|
+
type: String,
|
|
124
|
+
default: "loading",
|
|
125
|
+
validator: (i) => ["loading", "offline", "error", "failed", "empty"].includes(i)
|
|
126
|
+
},
|
|
127
|
+
customConfig: {
|
|
128
|
+
type: Object,
|
|
129
|
+
default: () => ({})
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
setup(i) {
|
|
133
|
+
const e = i, t = U(() => ({
|
|
134
|
+
...{
|
|
135
|
+
loading: {
|
|
136
|
+
title: "正在加载...",
|
|
137
|
+
description: "视频加载中,请稍候",
|
|
138
|
+
iconClass: "loading-icon"
|
|
139
|
+
},
|
|
140
|
+
offline: {
|
|
141
|
+
title: "设备已离线",
|
|
142
|
+
description: "设备处于离线状态,无法播放视频",
|
|
143
|
+
iconClass: "offline-icon",
|
|
144
|
+
icon: ce
|
|
145
|
+
},
|
|
146
|
+
error: {
|
|
147
|
+
title: "播放异常",
|
|
148
|
+
description: "视频播放出现异常,请稍后重试",
|
|
149
|
+
iconClass: "error-icon",
|
|
150
|
+
icon: ce
|
|
151
|
+
},
|
|
152
|
+
failed: {
|
|
153
|
+
title: "拉流失败",
|
|
154
|
+
description: "无法拉取视频流,请联系管理员",
|
|
155
|
+
iconClass: "failed-icon",
|
|
156
|
+
icon: ce
|
|
157
|
+
},
|
|
158
|
+
empty: {
|
|
159
|
+
title: "暂无视频",
|
|
160
|
+
description: "暂时没有可以播放的视频",
|
|
161
|
+
iconClass: "offline-icon",
|
|
162
|
+
icon: ce
|
|
163
|
+
}
|
|
164
|
+
}[e.status],
|
|
165
|
+
...e.customConfig
|
|
166
|
+
}));
|
|
167
|
+
return (n, o) => i.visible ? (k(), D("div", At, [
|
|
168
|
+
h("div", ut, [
|
|
169
|
+
h("div", dt, [
|
|
170
|
+
t.value.icon ? (k(), D("img", {
|
|
171
|
+
key: 0,
|
|
172
|
+
src: t.value.icon,
|
|
173
|
+
alt: t.value.title
|
|
174
|
+
}, null, 8, gt)) : (k(), D("div", {
|
|
175
|
+
key: 1,
|
|
176
|
+
class: qe(["default-icon", t.value.iconClass])
|
|
177
|
+
}, null, 2))
|
|
178
|
+
]),
|
|
179
|
+
h("h4", ft, W(t.value.title), 1),
|
|
180
|
+
h("p", pt, W(t.value.description), 1)
|
|
181
|
+
])
|
|
182
|
+
])) : T("", !0);
|
|
183
|
+
}
|
|
184
|
+
}, yt = /* @__PURE__ */ de(vt, [["__scopeId", "data-v-e1a38b30"]]);
|
|
185
|
+
class mt {
|
|
186
|
+
constructor(e = {}) {
|
|
187
|
+
this.options = {
|
|
188
|
+
icons: {
|
|
189
|
+
play: new URL("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAyklEQVR4AeyUsQrCMBCGG0Fw0M1NwcXFTVAfSxBcuzgIDoKLj+QoiJvg6qiTgotwfi027YW4hI4p9/Vyvf/+wA1tJDU/ylBEBiJyEpE37P7dRW8CV3jCsqpThjRSGEMLFoinZF9s+DiENmzR9cl5uIbd/Gv56pVHdXJ1tnYN1VRIEQ1DtqZn4g71PkKquMOQrekZd4d33U4eTl2Ut+Lwy3bONVwhOMIH9saYA9kX2X/zQuMFKTp7gTLMGjCDJswRe4PeGUbQgXVV9AUAAP//GmIRPQAAAAZJREFUAwCf2jQpKsdB4QAAAABJRU5ErkJggg==", import.meta.url),
|
|
190
|
+
pause: new URL("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABGUlEQVR4AayQsa4BQRiFd29uce8bKBRKiSg8gGglNDqNhE6joyNaCaVESSHxAiR0SgmJkkLpARQSCsn4RuzEbpad3bU5Z87sJP83J/NjfPmzAYUQbSHEBU9wJMhdNiCAJv7DRbwGmiN9yQn8fZmOsp8CHWJ5Cb/ecgLdJsoc7oBmSE/pACUkxrIEOsAf2+oC4T1UZf3Y1i8QnmG17bq1DQI0nl+d3AJNkEphgBISZ5ljpbBABbI2YYF7QAWsFBR4g9DDKdM0N6RSEOCB6TSgBr6yt8kvsM+0bLUiXaULPDKdpVENn9m/lQ5wxHQS0IL0lBMoH9sakq3ygCr4ZB16pRPYYUA+9JiUrWakL9mANGnhf1zC2q1eb7wDAAD//+lfkkQAAAAGSURBVAMALFpMKSPTSOsAAAAASUVORK5CYII=", import.meta.url),
|
|
191
|
+
fullscreen: new URL("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABRUlEQVR4AdSUMUpEMRCG3xMEi20FD6Dn0CPYLSJiKSIi3mSLLbYVVrD0CHoOPYCF5YKN8Pz+YSYkGxfzxMZl/kwy+f9/Ex6Zre6Pf2Y4DMMEXICbDKeb/gvOFOTcK9YT8c2QyTlYgFmGJaR91kV47YFizp2ztgOE4TYFxSPDreOk7/tX5kV47Yxi8KRh2e1oCEPNhScEM4dOoVoF9pfAeGw+gxTrhmnjt5MwfHODd89jUqE1Q46v6x2Q78c4iYum0Jqhb1QfQPUWYJq0ybBF2ML5R4b+AlpuVXFyrV2Zgp7NC3lasX8ooCm0ZohmFyj2NIxEoQ3DkR6b6euGR1wh2pKu8q0STmpfEA5BijD88MoxOdpSa/uSBln3qSEM9eSuKURLUm5tX+Jeor0DnRnydFZgDqwledYbFacC+6l9MZdmQV6J+AUAAP//g2nLXAAAAAZJREFUAwAzko4pTdl9FgAAAABJRU5ErkJggg==", import.meta.url),
|
|
192
|
+
exitFullscreen: new URL("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABdklEQVR4AdSTsUoDQRRFs2JhaWFhEVAJQgQFLYSAP6GgRBE/w9LO0s+IKCjoTwhpRMGAggFTWFhYWFoI47mzs+tsZjZBkibhHd7MfXfeZnZnpipj/kUbGmMWjDGHZc+i1oRarB5tiPEMWiyqkwuBtopwCacQRFnDaeeccdlPg2qVsoZ+g3+NbUO2UYMLuBF0aMCwaMjruCIvaoFtyGAT9mHbMU/+gS/oj08E1eTJ/LtoW5BuOUkSveQ1hA2PJfQe80KgvSMsg+9dQT9HSxtqgNCBRw8tVCkATw9870tmyraczUfOE9SQz16HdQ97DGLvAE8VfK9uj7XaLVPUvX1GefB4Ra8yLwSaHvSG6Huf0Jto+Ve+Y3INt44Psq7YHLk/ZhFUkyfz69jdo6cNOQI6BnvkHUGhDcOiLa/jgNzVArtlDcZFWcNv9wBdMTfM06BauuXc+jc4YahtdMiFYGu6FUeIxxBE9B+yqAt60cECCdRaENxz1X4BAAD//6yu9O4AAAAGSURBVAMAiPuSKSbbGX8AAAAASUVORK5CYII=", import.meta.url),
|
|
193
|
+
voiceIdle: new URL("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAwNJREFUaEPtmM+rTVEUxz/fKZIJGZBXjBSSkR/JhPT8Cr0nSUQUIvwD+Ac8hBCRgeRJBmRopCcDoSgDP5IBxcCPgaSWs7Wvzrvv3Hv2Ofvc7nl1d93JPWvvtT5rrb322luM86Fxbj89gG5HsBeBXgQiPdCRFDKz48B0YBbwFfgAnJT0JdLeMdMrBzCzh8CKDEO/A/2SHlUJEQRgZgPAgKTBdsq954/lGDhF0reqIHIBvPG3vMLhVhBmtga4F2DYkKSjAXJBIiEAzngXgcbIhDCzvcDFAK0jkpYEyAWJ5AK4VcwsFyIwff4ZJSlIbwhB8EKBEM2gmTZ0BaBAJHIhugZQFURXAaqA6DpALEQtAGIgagNQFqJWAGUgagdQFKKuAK6Fbm7kxrQd7kDMawpDTuCGTPBJ7L28HbjuJ1+QtK+xkJkdBM5kKG/ZAPo1FwJP/xtUsM0oCrAAeOaVPZa0OAWwEbjTwnvtutjdwGU/74Gk/k5GYBLwwyv4BfQlUfjsPTkBeAHMLgJhZmeBA37OqeSucKRjAN7Ql8Bcr8Rdcm6nojAqHULSyczc/M1edp2kkDvF/6ULpZAHOAfs9yv8BJZJep6CmAacB1Ym9+DJgRBPgE+S1hfxvpMtAzAReAdM9co+SpqZpdjMFgFvgMNNFSqrOq0t6v1SAD4KO5MXh6spo0eA5ZL+tPJgxoWnbXUKjUThCKRS5b57ZUgp+p1s4k2S3P+ZoxMQpQF8JA4Bp5usdZvwPfAWeA24lJuRlNj5/rmlr0k+KhJRAB5iNXAJyNwHgalQGiIawEPMA7b5cjgnx+gh90qXAF8BVqVkS0FUApA22MyWJk+Ju/yv8cmdHa7euz7oVWof3QU2xEBUDpAyzlKGnUhaHNfsjRlmdhPYUhai6wA+BV1JdqW5MYLTqRYAHsIVgj1FIWoD4CGuJaf8jhTEoKThdkWhVgAe4kZyfmwFco138p0EGLVpW23iFhvbdbltPd+Y1zGAwAMsWqwHEO3CyAV6EYh0YPT0XgSiXRi5wF8g6llAV+Km2QAAAABJRU5ErkJggg==", import.meta.url),
|
|
194
|
+
voicePending: new URL("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAwRJREFUaEPtWE2ITlEYfp6yshIbikJszEbYKGQsSKEoU8Ks/GxNUbORZKMos/WzMiZFUSixYELZGNmwMTFFsSErK/W479e5debM99177v3Olal76muae973Pc/z/pz7vpeY54vzHD8aISDpBIAtALY6B70E8IrktdQOS05A0hsAG3sAnSK5KSWJpAQk3QFwsATgXZJDqUgkIyDpKICbkcCGSY5HyhaKpSQQev88AHtmyzx+zkOSLAopCXwBsNwDOUhy0v6XtB3Ac2/vK8kV/1sE5AMiOcs5kgr365JJGYGWQJ0otBHIvVaW42X7dbxvOm0E2gjUzR2n16ZQm0JtCkV6ILjHx0iO+KqSPgNY6T0byPr+D66ZW5fNCe+9vRmSqwL9KwBO5c/CXqoXzOgilvQRwBpn6D7JAwEAmwVsJsiXtdOdbjT7a92o306PkxwO9O8B2O+eTZNcG+PbKgSsHTYgtt6SnDU2ujn4asyhAE6G87GkKQAbnP4kycEYW1UIHANw3TO6jOT3wItF83AuOmculrQ0I/XNs3Wc5I3UBCxnP3lGR0iOhYeUzMVdJzFJlvtWA/laTdJqqnRFR8AsSfLz/BcAm7redSFhtbAXwGa39zr7UvGw2xwsab2b1hY52Tn1UcSiKoGdGagnnkG7WYby26bUXYFAFi27nWxuHvC2dpF8GmurEgEXhVsADgckRrPvPY9iD3V29gC4GICfIHmkip3KBNzhPwAsDg4yMGdJ/ikCIGkBgAsARgO5nySXVAFvsrUIOBL+tZqf+wLABIBnmSenfTCS7B2yw0VvWwA0+toMCdYm0KWoQ9tW5DPuob2h8yIN5SoVbVICjsRpAJeqht7JnyF5uaZuR62vCOQHu/TYDSD/FWF6DKDzC9OsDpEkBIJcX5i1GvsA3A4AHcpahQckf9cB2ksnOQEvKo18iUteA70809RnlJZAbP62EYj0VFvEkY5qTKyxCDSGODDcEvhXnk7+Ji67Jvvdj3VM7RTqF2CZfkugzANlHux3v+z8fP8v3tB2QCJXKRMAAAAASUVORK5CYII=", import.meta.url),
|
|
195
|
+
voiceRecording: new URL("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAA0xJREFUaEPtmUuoTVEYgL+1pXtLKPdsj4GRgUfk0cVNklIKUQwMGGFArvKqO/C4e+1zRkIoxMCQkhJRBhQmuB5RiGRGuPZmSHKdn7P3uadz7sN+x6l96tSp9b++///3WvtfR9HkH9Xk8ZMD/OsKZlcBy2lH1EIPUEkPtvk4C9j0ASxnF7AVmDYg4NeIcYZi24k0QdID0O4ChHMgM/8eoHqBYgu68DANkPQALPd5cPD9If+BsAuz/h+A7i87UeXjEQPajW1G1RnkIp0KWM6rIXo+iOc1tjk9SChoPTlAZbeBR0GOhlmfn3R3Sg7Q7Xai5GQsAFE7KBZOxdKtKqUA0KtRhhUrCCnbFCfoWLo5QH/auvMK5C2U5BmCvIXyXShZBzVXC2l3O2UZRdE8XMNO8yS2nCMITyma58OmNfxJfKB3CiOMt57h+hM0rXeh+s1AMRVtvgkDER5gnzOJkXzwR0TVgy501Byk8Taq3QeI+CMoxmTstvfpAlSsWe59ED/w8q8OShN7vN/+GHksjMOajBi7auPlwU8LMUY8qK49wzbnhrUVvgIVi9o9gEhpUBv5cPEnssb2OYw2uzIC+LwEUXd945XZduRa9Fj/uYg7E5d6p9CnroDyZ2kxllNsu5kNgN8ut4BlvgO5h2pZjR77tebQHy+3DXkrAWcbxkj9bhzSehVYXNW/hm2uCRu8l8Yowp5syZnKTx6hGF3VvYFtrhxkJ8y9kHauI6zycyEOLWo2+82PUWKKDuC1i7MGoZK56kfdA45iFy6Hcm6564C9IItq8mXaKZlPQunXCcUD8CB6uxDj0ACHF1DGKcZ8e8qeyd8b1rS0wud5iNEJbGhYU6oTXTgdNfh4LVTvxWsT7qAY1eBc5AeGeuGdqqg+YA7IHKC1MXB+IOUN2BPCVW4IwvgV6Dd2yBnNN3UcZHPEDF5HtWxCj3Ej6g3IQRLtet1uZyOKFeB9xw1j9gOKi5TlPsXxl9JwnbwCQ0Whv8yg3Le+dlshVG4uzoV9PYgClg1AJYL60zWF65PhoHKAYcudVyDck5BOC1nObWBpOJf9h7d6iS4E/BkSbDE5QNNfq1SS1NQVCK5yphLJWyjT8IKN5wDBOcpWIq9AtvkNtv4bNaFMQA7/a3wAAAAASUVORK5CYII=", import.meta.url),
|
|
196
|
+
ptzControl: new URL("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAB7UlEQVR4AYyUsS5EQRSGZzdbKBQKhUKCN1Dq8AYKCQkJD0BCwlOQkPAACgUh4Q0old5gJbZQKBQKiU3W901m7t7dvVdWzn/PnHP++e9xZu42Q8Vfr9drgS1wB97Bb0Ib/wB2wETF1jAiCHEDYhtcg3UwC1oJ8/g1cAUUl8uyb4UgQnZ1QekGKIKL9sZzFehxhc2wumHfGfCFhGGgwxMye6Bsiqw2Go1nklWipMNBCOEMRIsd8gZbtxCT6ZHF9AFRfZ3oXtIITRYO9zyJlN0kwRN1ZxVhDKZAlZ3Cbdmh3TmPTLKTL4Jp4CEMQ8FPavJwhTn3DQU9tZyV5L+lYM5V+W+S8uSzLGxNwcUUWvQA9ClV72pmuqSgrbpzN5Fcj4XE3y2RZxTM8RVDncvBOD7xveQFXcGPFDn850RKqXqXeN5P92ViR8GXHOEtSvLKENaaJy1Pfpn0quBjOcNaklfGk/aAhuGVUVAe9AF7VPCWVAcMm4IrDH4hA8IK8MrgRszR3TYhdykdgWGzg2KmNTMr7zlA68cO/U7t8rJcTessukxcNTPS0c4RU2Pg1+aQUtU3HUWp6XEjZiPHORs7NOANXaDoJrHzwP1rzn2TPfvAsUVyIRgjHhRtfYGlX4A3wFN2g1Dknto28LDksuzbHwAAAP//IxdcMgAAAAZJREFUAwA7Yrnj1h+tswAAAABJRU5ErkJggg==", import.meta.url),
|
|
197
|
+
customAction: new URL("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAB8klEQVR4AbyUMSiEYRjHvxNFGQwM6gbiBmW4kUxC6JSBsiinrpCFUm4wKGQ53Q033EAMlIFMiqJuUDJZDAblBmUxUAaDOr//1/e97nPfdwvR8//+z/s8z/v/nu993lNl/fHf/wgWi8UoSPs1T7wanICwXz6ow3eKZ9k0D/+0TQJdQDWQ13wFQ6HQA2UrIINoH2wb/gzOEohT8wqXma+gqtiwBZ+BI4TagIQzrHPkzmFfCxR0qufgTyDhPbgAFkGgVRSkkyd2JkA70BAmiX3gB1pFQWeXBB3XGnedIK4oyLmtsXEE5ME9SBKbggMtUJCNY+zSpDXNafw40HnmyPXg+1qZIMVhoC72nR0Jzq0AbljrBbXwITWjoAHfYx5BCpbJPoIkUDe6j6f4rmnSGko9gRR4Zk8MNmYESUSJroIhuumAW8EL0Esg23QPL/CaqYnAGpjuqenUCJIcBHkKL2ELlpgENBSFhH4eKXLqUjUHrHU3delxLatUUL/NRjv6/dDd01DciGr0ufaar9J5qrs3O8CjVFBva6EoDTrBBHkdQQ52LYuTJRcDOqJd1nrJFWybEeQz1EkvUf0nuYXXwQLxY9g2fP2+t1loONewuhsgbh8Ba88n60zuSHaDGhABOyoqBbEN0ATqwDDQGZoS06GJ/NL5AgAA//8K+p9iAAAABklEQVQDAD0UoClDuWQ7AAAAAElFTkSuQmCC", import.meta.url),
|
|
198
|
+
mediaInfo: new URL("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABl0lEQVR4AaSUPUvDUBSGk5DBwcGxg4PdHBwcOzj4B4QKQoUWdFRowW5uDi5uCgp2dFCwKNh/4ODSsYN7BTs4ODgKFuLzXmI0NrnppeU8uffmvOfN6elH4GW8oigKoQ538ApfMUPWB9iBuYxSb8IQYR3hEK5hCxYhjFlircIVyLzGmorEECN1dU5WRjJha40S2VvqLkEP5OilOpRZ09x1u+whPwUTpkOeoNaVMDf/Xd45n8V8sGZFEw+NygvYaLgqyBLq3rPv+20fOAwgL07wCtWhutM88oTT3tfcazLUpzZtUZGuKsPVIpVDviJDtepQY5WWZGhVuCZl+FZQtMyndwTH6FbAFiMZ9m0KcgugOYt59rYYyLBnU5Dr8x3chA3twRY9GXZRjGDW0Oi6AU8e43QIeVFhfo/whGAN8uIAr0916LG5QXUBWaGf5joJmSX/Kpz/RgcPvdPUv00bRQdcQ420fopMhzrwhDHss98GzYPFGpp7g5oWaGxGnBiaExeSar3Mdhf0DXhhVYGQyT3nBpTRalRsf+MbAAD//21UP8kAAAAGSURBVAMAqHSD40To4kIAAAAASUVORK5CYII=", import.meta.url)
|
|
199
|
+
},
|
|
200
|
+
...e
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
getButtonConfigs() {
|
|
204
|
+
return [
|
|
205
|
+
{
|
|
206
|
+
type: "dynamic",
|
|
207
|
+
feature: "voiceIntercom",
|
|
208
|
+
getConfig: (e) => {
|
|
209
|
+
const t = {
|
|
210
|
+
idle: {
|
|
211
|
+
icon: this.options.icons.voiceIdle,
|
|
212
|
+
title: "开始语音对讲",
|
|
213
|
+
extraClass: "voice-idle"
|
|
214
|
+
},
|
|
215
|
+
pending: {
|
|
216
|
+
icon: this.options.icons.voicePending,
|
|
217
|
+
title: "语音对讲连接中",
|
|
218
|
+
extraClass: "voice-pending"
|
|
219
|
+
},
|
|
220
|
+
recording: {
|
|
221
|
+
icon: this.options.icons.voiceRecording,
|
|
222
|
+
title: "停止语音对讲",
|
|
223
|
+
extraClass: "voice-recording"
|
|
224
|
+
}
|
|
225
|
+
};
|
|
226
|
+
return {
|
|
227
|
+
...t[e.voiceState] || t.idle,
|
|
228
|
+
clickEvent: "voiceStateChange",
|
|
229
|
+
disabled: e.voiceDisabled || !1
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
type: "simple",
|
|
235
|
+
feature: "ptzControl",
|
|
236
|
+
config: {
|
|
237
|
+
icon: this.options.icons.ptzControl,
|
|
238
|
+
title: "云台控制",
|
|
239
|
+
clickEvent: "ptzControlToggle"
|
|
240
|
+
}
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
type: "simple",
|
|
244
|
+
feature: "mediaInfo",
|
|
245
|
+
config: {
|
|
246
|
+
icon: this.options.icons.mediaInfo,
|
|
247
|
+
title: "信息面板",
|
|
248
|
+
clickEvent: "mediaInfoToggle"
|
|
249
|
+
}
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
type: "dynamic",
|
|
253
|
+
feature: "fullscreen",
|
|
254
|
+
getConfig: (e) => ({
|
|
255
|
+
icon: e.fullscreen ? this.options.icons.exitFullscreen : this.options.icons.fullscreen,
|
|
256
|
+
title: e.fullscreen ? "退出全屏" : "全屏",
|
|
257
|
+
clickEvent: "fullscreenToggle"
|
|
258
|
+
})
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
type: "dynamic",
|
|
262
|
+
feature: "playPause",
|
|
263
|
+
getConfig: (e) => ({
|
|
264
|
+
icon: e.playing ? this.options.icons.play : this.options.icons.pause,
|
|
265
|
+
title: e.playing ? "暂停" : "播放",
|
|
266
|
+
clickEvent: "playToggle"
|
|
267
|
+
})
|
|
268
|
+
}
|
|
269
|
+
];
|
|
270
|
+
}
|
|
271
|
+
getButtonsToRender(e, t) {
|
|
272
|
+
const n = this.getButtonConfigs(), o = [];
|
|
273
|
+
return n.forEach((a) => {
|
|
274
|
+
e.includes(a.feature) && o.push({
|
|
275
|
+
...a,
|
|
276
|
+
...this.processButtonConfig(a, t)
|
|
277
|
+
});
|
|
278
|
+
}), o;
|
|
279
|
+
}
|
|
280
|
+
processButtonConfig(e, t) {
|
|
281
|
+
let n = {};
|
|
282
|
+
switch (e.type) {
|
|
283
|
+
case "simple":
|
|
284
|
+
n = { ...e.config };
|
|
285
|
+
break;
|
|
286
|
+
case "dynamic":
|
|
287
|
+
n = e.getConfig(t);
|
|
288
|
+
break;
|
|
289
|
+
}
|
|
290
|
+
return {
|
|
291
|
+
renderConfig: n,
|
|
292
|
+
buttonClass: `control-button ${e.feature}-btn ${n.extraClass || ""}`.trim()
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
class ht {
|
|
297
|
+
constructor(e, t = {}) {
|
|
298
|
+
this.container = e, this.options = t, this.buttons = /* @__PURE__ */ new Map(), this.eventHandlers = /* @__PURE__ */ new Map(), this.configManager = new mt(), this.states = {}, this.eventCallbacks = t.eventCallbacks || {};
|
|
299
|
+
}
|
|
300
|
+
async init(e = [], t = {}) {
|
|
301
|
+
this.states = { ...t }, await _e(), this.insertButtons(e);
|
|
302
|
+
}
|
|
303
|
+
insertButtons(e) {
|
|
304
|
+
var a;
|
|
305
|
+
const t = (a = this.container) == null ? void 0 : a.querySelector(".easyplayer-controls-right .easyplayer-controls-item-wrap");
|
|
306
|
+
if (!t) return;
|
|
307
|
+
const n = this.configManager.getButtonsToRender(e, this.states);
|
|
308
|
+
let o = t;
|
|
309
|
+
n.forEach((l) => {
|
|
310
|
+
var d, f;
|
|
311
|
+
const c = this.createButtonElement(l);
|
|
312
|
+
if (c) {
|
|
313
|
+
if (this.buttons.set(l.feature, {
|
|
314
|
+
element: c,
|
|
315
|
+
config: l,
|
|
316
|
+
state: this.getFeatureState(l.feature)
|
|
317
|
+
}), l.feature == "fullscreen") {
|
|
318
|
+
((d = this.container) == null ? void 0 : d.querySelector(".easyplayer-controls-right")).appendChild(c);
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
if (l.feature == "playPause") {
|
|
322
|
+
const r = (f = this.container) == null ? void 0 : f.querySelector(".easyplayer-controls-left");
|
|
323
|
+
r.insertBefore(c, r.firstChild);
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
o.after(c), o = c;
|
|
327
|
+
}
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
createButtonElement(e) {
|
|
331
|
+
var f;
|
|
332
|
+
const { feature: t, renderConfig: n, buttonClass: o } = e, a = (f = this.container) == null ? void 0 : f.querySelector(`[data-feature="${t}"]`);
|
|
333
|
+
if (a) {
|
|
334
|
+
const r = this.eventHandlers.get(t);
|
|
335
|
+
if (r) {
|
|
336
|
+
const p = a.querySelector(".easyplayer-controls-item");
|
|
337
|
+
p == null || p.removeEventListener("click", r), this.eventHandlers.delete(t);
|
|
338
|
+
}
|
|
339
|
+
a.remove(), this.buttons.delete(t);
|
|
340
|
+
}
|
|
341
|
+
const l = document.createElement("div");
|
|
342
|
+
l.className = "easyplayer-controls-item-wrap", l.dataset.feature = t;
|
|
343
|
+
const c = document.createElement("div");
|
|
344
|
+
if (c.className = `easyplayer-controls-item ${o}`, c.title = n.title || "", n.disabled && c.classList.add("disabled"), n.icon) {
|
|
345
|
+
const r = document.createElement("img");
|
|
346
|
+
r.src = n.icon, r.alt = n.title || t, c.appendChild(r);
|
|
347
|
+
}
|
|
348
|
+
if (n.text) {
|
|
349
|
+
const r = document.createElement("span");
|
|
350
|
+
r.textContent = n.text, c.appendChild(r);
|
|
351
|
+
}
|
|
352
|
+
const d = (r) => {
|
|
353
|
+
if (r.stopPropagation(), n.disabled) return;
|
|
354
|
+
const p = n.clickEvent;
|
|
355
|
+
p && this.eventCallbacks[p] && this.eventCallbacks[p]({
|
|
356
|
+
feature: t,
|
|
357
|
+
event: r,
|
|
358
|
+
element: c,
|
|
359
|
+
states: this.states
|
|
360
|
+
});
|
|
361
|
+
};
|
|
362
|
+
return c.addEventListener("click", d), c.addEventListener("dblclick", (r) => {
|
|
363
|
+
r.stopPropagation();
|
|
364
|
+
}), this.eventHandlers.set(t, d), n.dropdownItems && this.createDropdown(l, n.dropdownItems, t), l.appendChild(c), l;
|
|
365
|
+
}
|
|
366
|
+
createDropdown(e, t, n) {
|
|
367
|
+
const o = document.createElement("div");
|
|
368
|
+
o.className = "easyplayer-dropdown", t.forEach((l) => {
|
|
369
|
+
const c = document.createElement("div");
|
|
370
|
+
if (c.className = `dropdown-item ${l.isActive ? "active" : ""}`, c.dataset.value = l.value, l.icon) {
|
|
371
|
+
const f = document.createElement("img");
|
|
372
|
+
f.src = l.icon, f.alt = l.label, c.appendChild(f);
|
|
373
|
+
}
|
|
374
|
+
const d = document.createElement("span");
|
|
375
|
+
d.textContent = l.label, c.appendChild(d), c.addEventListener("click", (f) => {
|
|
376
|
+
f.stopPropagation(), this.eventCallbacks.qualityChange && this.eventCallbacks.qualityChange({
|
|
377
|
+
feature: n,
|
|
378
|
+
value: l.value,
|
|
379
|
+
label: l.label
|
|
380
|
+
});
|
|
381
|
+
}), o.appendChild(c);
|
|
382
|
+
}), e.appendChild(o), e.querySelector(".easyplayer-controls-item").addEventListener("mouseenter", () => {
|
|
383
|
+
o.style.display = "block";
|
|
384
|
+
}), e.addEventListener("mouseleave", () => {
|
|
385
|
+
o.style.display = "none";
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
updateStates(e) {
|
|
389
|
+
this.states = { ...this.states, ...e }, this.refreshButtons();
|
|
390
|
+
}
|
|
391
|
+
refreshButtons() {
|
|
392
|
+
this.buttons.forEach((e, t) => {
|
|
393
|
+
e.config.type === "dynamic" && this.updateButton(t);
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
updateButton(e) {
|
|
397
|
+
const t = this.buttons.get(e);
|
|
398
|
+
if (!t) return;
|
|
399
|
+
const n = this.configManager.processButtonConfig(t.config, this.states), { renderConfig: o } = n, a = t.element.querySelector(".easyplayer-controls-item");
|
|
400
|
+
if (o.title && (a.title = o.title), o.icon) {
|
|
401
|
+
const l = a.querySelector("img");
|
|
402
|
+
l && (l.src = o.icon);
|
|
403
|
+
}
|
|
404
|
+
if (o.text) {
|
|
405
|
+
const l = a.querySelector("span");
|
|
406
|
+
l && (l.textContent = o.text);
|
|
407
|
+
}
|
|
408
|
+
a.className = `easyplayer-controls-item ${n.buttonClass}`, o.disabled ? a.classList.add("disabled") : a.classList.remove("disabled");
|
|
409
|
+
}
|
|
410
|
+
getFeatureState(e) {
|
|
411
|
+
return {
|
|
412
|
+
voiceIntercom: this.states.voiceState || "idle",
|
|
413
|
+
ptzControl: !1
|
|
414
|
+
}[e];
|
|
415
|
+
}
|
|
416
|
+
setButtonVisible(e, t) {
|
|
417
|
+
const n = this.buttons.get(e);
|
|
418
|
+
n && (n.element.style.display = t ? "" : "none");
|
|
419
|
+
}
|
|
420
|
+
removeButton(e) {
|
|
421
|
+
const t = this.buttons.get(e);
|
|
422
|
+
if (!t) return;
|
|
423
|
+
const n = this.eventHandlers.get(e);
|
|
424
|
+
n && (t.element.querySelector(".easyplayer-controls-item").removeEventListener("click", n), this.eventHandlers.delete(e)), t.element.remove(), this.buttons.delete(e);
|
|
425
|
+
}
|
|
426
|
+
removeAll() {
|
|
427
|
+
this.buttons.forEach((e, t) => {
|
|
428
|
+
this.removeButton(t);
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
destroy() {
|
|
432
|
+
this.removeAll(), this.buttons.clear(), this.eventHandlers.clear(), this.states = {};
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
const Ct = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAJCAYAAAA7KqwyAAAAtElEQVR4AZTQOwrCUBSEYRHEBxZWNm5AEKwtBF2Alb2lrb1YCW5AXIJiYSsIdta6GJcQvwgJxDwwYf7cm3NnJiHVSsEVBMEGb7TybLkFQjOhHTp4es4sySxgHgldEWlgczevWxNKFTD1OR741djg4LxmjZUocNhz8kLqTWahlm5bxIoLhLumN7RRpDXvKjJ8CwzCH3QxHOIf7WXmobFq07A5YoIyOslOwy9YSH3brGXUZD5/AAAA///42XjDAAAABklEQVQDAD9wPyApa+E9AAAAAElFTkSuQmCC", wt = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAQCAYAAADESFVDAAAAw0lEQVR4AXyRMQoCMRBFkyAItoKNHsAjiGBnq4g3sBYrGwsvYG8n2FtqayUIdqLnsFYRi/gm7gZCNrv8x4Q/b9PEqJLPWluBSVJiWeP/HWwLJYQGyyOMQUUSQpPFCbrgEkgIbdo7yGT84yWEDtUN6hDESQgD2gtUIYpBmNMeIBm5aZncZguRWpyvkIzRWj/Z9uAMhZGbFOKLbR82EMVJ0iJ+mFNYQRAvSYv4hQXnGfgEUt4irjmP4A3x20kpIO6ZQ3j8AAAA//+0XKl6AAAABklEQVQDAANlMEk6jQKMAAAAAElFTkSuQmCC", Et = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAQCAYAAADESFVDAAAAvUlEQVR4AYTOsQ7BUBTG8d4uRMyWvoDJKDaLSUw8g8liMPEAZiuz1SKxWCVWi8QbeAMihuv/3ahoe9vKOeeLfr80Da21Y7YaFPxCujW7BdZI7wipGHIOwAaZmRip6HKOwIhMzD9S0eLcgE3yN2mkos65ADukGx9SUeGcgQMyyEPqtHvgogwJzsrQFRUVoROgbYx55KENoCdAej98STEBvEg36TdNKefs27XfE6Mn/0eUKzIzQnee9gE70jsfAAAA//908sGmAAAABklEQVQDANhfMEHs/9RgAAAAAElFTkSuQmCC", bt = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAJCAYAAAA7KqwyAAAAtUlEQVR4AZyQPQrCQBCFd/dcIhaCndgqWHgAO1sPYG9naS+IraWglbUXsAkIVooY2HwvkIX8EJLA+5iX2ZnHZp33fgFdFTljzB4O0FZfFmbOWhtj5nCFNpqye9YNDObD5gQe0ERLdo4aTANkaETUIbygThtmt9lACFCDgye1Bz+o0o7mGoJyAeoSot8YyBe48K2r/6lBpQCdEHKjjiHTHTOiX7pZZQDDetgTdQVv6LOsh8bmlQAAAP//85JLtAAAAAZJREFUAwBQC1h3zTm47gAAAABJRU5ErkJggg==", Bt = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAQAElEQVR4AeyZe7BfVXXH1z6/333kcckTwiO22EbF6GglGYegTqNFHR+I6NxEwyMkaMCxhEFpC0I7UzHQDj4qReqUSlEBrdHY/lGn7VSJfWnBRCjMZaihCXCTEJL7+r1f5+x+vvv8zr2/e3NvchNCOx37m732Xnvttdde67vX3ueceyP7Jf/9PwC/5Alg/5sZ4ABfRDNepvbHB14u5oQA8N6fjINu1aotXVdcccPqjZuuv/WKjdd///Irtg5suOyTQx/56CeS9R+51vev2zLSv/6ap9atu+Y7/eu33NTfv+WtBJytlbWITn05IQCcc/4YLkx11F199Q0rNm2+4c7XvX7OM624/kipWPns2MjYJUNDw+cdPjy0EPKHDx/xR44MLxw6PHTe0PDwhwujhdvLlfI/XfLBjc9eeulVd3zoQ5efyZpTbSM6NeWEADjGknJQ4Kh1mzZdd/qmTZ/680YzHiiVKp8eHh59BUE60dDwiBsZGbOxsYIrFIpQyYqFoh8TIRseGTEAckcODy0fHR27qVJtPvP+92+4673v7c+ACGscw5cTGjoVAMghLRrazZs/tTFOoqfLlcrVBJ4nGE8gViiUfKVS8fV63ZrNhrVaLR+3WhbHscjFcctazZZvNpquXqtbuVK1sULRhodG54yOFT7ZaPon3ve+dZdpoVNJLwUABSwK/vT39/du3nzDvfVG4z52duHw8EjY5VKpbDUCImACTSxJEq4SkiUtzPUmFiFt4A3eJ0kcQKrVa1Yqlh0gLikUq9985zs/fM+aNf29TNTaGdE9uXIyAGjRztXcxRdvmTN//jnfr9bqm8dGC6YUV+D1esMTbwjICK9jEpcJYYeR0FpqFAAUvXS9OVjz4NWKW15ZoaNSKJau7elp7FizZo1AyExqekaZbFbtyQDgsazFaIzgL+5dunTuDoJ/1yjBK22r1Rq7F2u3zfsQFK1i9GlQyAQIY/Qx4wmWoNVHLtsZQJIiko0Emy2rlCu+VCq9O59fvGPVqlVzmC19mpMrJwqAFhNptdAuXfqqL9ZqjXeNjRWtWCw5zrhLkiQbR8fDByI+RQ6fcowxFEKUTACBUxijn7LUxI8aEkcyWJzErlarcUdU3j1nzrK7GFJp2xJ7YjQJANY+niH8CAsEvY2br7+80WxcQ1paqVR2jUZIecx4HFewOJ/NsBCgI950dxluKwYlZmhOsCuGYRrjJwPKnAQVeGoBXOdeqVQrmy+88KKNKKkwl3EL69hsf5MAmMVznkVS0/1XXnuWj90XeMyRkmV2vkHK4508NznR4TR9glWg6aj6ITx0DDGoMB68pzcOEDyj1JiFCXL0mOnTTKjWrV6Pv/iGCy9cyjhl3D0xImTHLpMAOIZqZkxtoHlR7821WnUJO48TdYJX2qdvijhJISoMyvfQoYJ3ucj51772Vf7tay+0t73tAr9ixbnIIgUvu0RLASZ0Q6DeY5c+HaypSBWAvfccB629IN/ouYMRzRfBhhIUA3eMajYAdBqVKdfff+2ZrTi+ulyu8oirWRwn+IdH8jqNGz12V47DMWhLly6yGz/9CXv44R3uoQf/zH3pS7e5P73rdve9795nP/zhDvfpT33CL1zQx6WfpChip2NhLkvZ1wIddrHd5F2i1Wxc8YbVb19BV1OmEuKJMpWbDQCa0zbaT7vWzZ3fu5Uz2FOtVHmpaWn3hTZjOCgO5+WuJhK8e/Ob32Q7vnefu+yyD1tf3/wg7qwWLVpgGzeud9/Z/jV3wQWrNFsBq2U6NuFSfYzTVYFjLEEvsUaj2eXi5haztfhAdtikn2STBJ2d4wGQTdZ68IehnZbEyYYqNzEvPQpe9nBEIUtt3D3k3tZcuNq+/OXPTRs4CpPKmcvOsK/c/cdu9erf4BxQJjIIDts+fVwSuQbTuYwkcezjZmudLa93dYDAnRFUfKhnqI4HgKYRtFDtF2+XX/7bb221WstrtQbP5ViB4w9emFJTfmm9wLvFixfZZ//wd31PT3eYO5uqp6fH/uiOP0gBwyywGpDKsFqMYztwYsOI1rdWHC9/bV/yRrMi/gZfHYyWVCMSfxTNBgBNwsB2qOici95CypF2DTIhlhfIcUSe4hie0tcUb5s2rXdLlixq9yWboH/513+33T//jwlBB3fmmWfYlVeuC9aCvQAECp7gE89ihk0arUkXHYtbsY8iexdaFPlKY9ILZDP9jgUAi2TThOhaOlVk/vxGo+HjOHbBl+AEQ6HgIH2VXBT5D1z87iCdrrrvaw/Z3/z13wHgdKNml1zyXqeXBtkKMQIHfFCmTUX0gIEsBAKeFvi0ykw+rsLP8cBRR3GGMhMAMqApaqHt8EVas8Qnr2s2W8ZiGE79xwnGqSkwISVf/Zpfd9NdeBoXoQqIrWBT/al0zjln2Vlnn9mOAm0AkI44CVkcCQ8MGMloAMK/xqzRaVO8c6o1eRqaCYCpqs5WCtkGi9iyOG453sYwG3YcXVwAC5xQ8MjNLTtjKfLJ5cc//je7/vpbbOvWz9ieX/yX/eQnP7Prtt5s1113kz3++JOTlemdc/ZZrMcaFgK1sArrsIi1SUuKl57Hp2V2rkDF11UhC7AyXoJf4702MxsAnMnYAMhiPI7jBZAWY/GQiVoccziJi2LwCC6M0Z0o3VyG8/vmezLDR7wRdXd3Bb7vtPnWw9iEZsYRsiJV0BIFk8hCyxMhyEOlUTSTBbbP0t+u0ChoMVk7oSwpNB0AmbJaiLO/C0T1mtFq74gPwTpWpCTBqNDAnmQAYvbcc/vpTi5rLlht2z53s9u27TPula/8Ff+m899gt2+7xd2+7VY777xXT1amNzh4kGgtgIn98FgLAiMrELRHWE8dZMwxIwNWsFnhLsB304Gx7Ec8GZu2nQBkgyGgdFh1evatheEEw96PslxaLFWlgy/wHpKMC2nv3ufC3wVkYVpqq047hnD//gMmymx7oGYRlRCwmDCGLmN0Wdz7MbPE2R58tQFG5LsucNgZSicAcklqAkIEH96saCnt1GKxF51jONWWMwwiNaWk94nnZ+xDq2Xf/vYOuOnL1q0fd1deqTfL6ce/8Y1vY0iLyDYtBWy1MJEacEgQWhTG+Rdt2VJn55rZihXo6hxMeiQyMCkjZvy/gCxiQPoidn75Wc7iJjL/dBTRUDSCJypGpTkSOfjQfvOB7f6FQy+KP4rOP/+N06a9FAfZ/Yce+i4ssRE1TAA69LxnZVG2ZLosaBlboG0346jaHuPHU5GawpzUEPyk0pkBnQNMUOrsRCYUaQafpzI+Q+2xXC5nIQnY7yA0nb/gnrwyXMKfxPO3Qbvpptt8vd5I1WZZ/+Bv/0Ffeak2xmQQwxTMUugjFQgiwvZqvfG3kp/boUPpvPE63APqOVUQc6nbZSYAGNazX5NXMlFnClHScqVG8x/z+ZxFIQ3wCW+yHVfrVZkcQt97e/TR3faxj13vX3hh+kxAa7w8++zzdu+9X/dbtlzFx9FHufSwZilJSbHTptmAbXhWUzxpJ3b+p7ZsmZnuKg2Gi1CbGDrTVtG00ky4SpeIOnlvZy9zFuX9wDP/+WQulz+Qz+W0ssM/HDXDE1iJDJlaOY7czO3e/bh7z3vW+Xvu+Zrfv/+gTf3tJ+Xvvvte//6L19udd95ln9v2ebvllhvtqo0bUlUipwQeqxinaMUglERkB54fm/dTY5OCorU3zbSJNvXHpqaiqQCMD4ThdvYbz387gOMYHzx4uEXS7ejq7lIWEHQiV2jZhVDwioLABVDgcZdjULe77/4Lu+iiS/1vXfRB3vWv9Rs2fNy/4x0fMMjfdddXrV6ry4J9/f4H/bZtX/CA4DZdtQEzWAgOkVkegA0PPDyLeAs/xyHcbl5fq6GfVivN0o+jtNtRt6fZUZfg+ECq3DfRP/usVGRLbLRYvr+3tzvO5YQfceIIgw5lOuwGnXbc4owI0EDO45Ha9g8e8I88stvt2v2Ysfs+zDOCQgtdZ/z+8v4HbNu2OwHhd/jfIp/HjGGTYT1n9O6BJSYiQNtqFdf11UWLFolPSU+CwO2SVuCmqxTBdPIOGRerHoHKgLb0n3f9Yq+Lom/p7S3iT1xyQs7RKpgQsFS1suQixlQkBig5j6pn3yRBAQnzQkGPmYzdd98Dbt36jfbEEwPpuWdE6iLPBKaJFT1wJPYTl0zmK64zGAClnbYcBwDugJUr2xPD3+3gh8xczj87NHRbb2/PmC5Ec1oDj9glQqAT+OC08VOPRvKQIagFXkEQUwCEVlFrnBYrITrvf/bobo5PrT0c5IH3ZFNY1txQyeW/YFHOj4xyV3FP2XJ8zcOzKCXYo522TAUAxzr1SJ+BORhoG5NxFpLGU/sPDHlzt/b29lqOT1+Ckjh46BWZKuOcwmtAXd85Ck8RSAwBUXsw6GoexIC6Clij8DTIYcA8uOoSF/3+UCt50UYt/E7nnrJB2BaXYLZ3dDtKmJj1pwKgFbKxiVbfARO9wJ1G/aOnnv9WT3f3gzoKjpcjORzIMEPg8NQoUosnYEY0ZtrpdmAWNpIqOObZWV4vvH7MlE6Yg4nAI8uGzDv7+vONHj2vEVOiUX9Ym7Qcfh+blh4BOqGw8KQ2dKYCEIRUUobaj5A93fAYZCAUV/AF7boV7OnnRm7undP7MED4iChQDCoEGwLCawpS9Twue4NTDD7oBc4rAwIXZMw1jSJRH7DUpCSZ42fOPVxqdt1qruytSMovDo/lVCm/wttK+TwgM6ksraf2bSYAUnXbyYRdZkol3aqHhhPj/Js73VuBBeH3V4q1JwdfuKp3bu/D3d3dFgUUCEgWFJjpoqMvXt4LDvgwbJgPZJIikp4BEOQBC4lGIDjseG+On5n70YuN6Kqm76qZW+RtEb6MmBn+WK7L2759Fr6FLPw8dViZVrZpJspxAEBx7VofjCmllr/CTClGqoXFQL6PRYfLrdreobFN3b0931QmuAizLEk41o5MLcbUBH8kZmelAREY6pIBR8qlmmHMhYkI1HpzDx5q2qZq0lUrOnbfCmZjBW+5UqJxi7Tz49nqg4zKpVbG+4hCwdPQdladSt527mSsnUr6PhfCBG0G5LTBiXLZF4bIhIPDv+dy+et6e3pGcnm+F9gvE3l2D4bQghvpAvSMXfbt57954yc/U2DU9Zbqe29wBYvyNwxV7MZanK9ZpODNQvo7MhLWuuYk1v5mMdPl3T7CGpuBpgMgU2XVjFXb7U3HQAgrC3JdiXEXkPO+77SFvuQq3ipV//SRwvdGG/E7urt67udtseb0nmD8FIT2WJdc4AkprEAntAABJj7cgOgHQDTgWo53jmLi3vJcOfmrsuO8A7yplQ9Rd2LKyFxPoll2rnZ/jzfjCWY6wkFKP7RHVdFRkqMFmgyBqI5B/qC3Q0e8ZU5wF4Qs4FJ0UVdiOLb3xeFDjw2WbhmpNdfwZ7B7AOJgLpfDcthQAweKD5FTISRD6FKQo0bwzrmD3rmvVi36zWdLrOcaaQAABg9JREFU/sbhqg3Nm0/wWoO1rMi5Z21zBCxfcpz96JC3PH1b5c3Gdx/e9Mta8eM0EwCdyuIhENXNKhCW/6onHSGc0O0rh3CsRFsmC+YBgrmqH2kkh54Zrty+r9BY3YqiS6N81x25rq4f5PK5Z6IoKuTQjyJnzkVjZMozLsr9vY+iz9ct/74XGrbmSNxzW8l69prjXQmb5YoAiLzuHVsIr8CVjYHawXeTqSG8sPseVkRjjkoEyD609G0mADQmyibDg2h4KWKBfI83IS4HRse8FcuJtS9E5EkZMARCpVpPKrV6YgR6sNR8ZLDc/MrzpeY1g5Vk7Z4R/7o9NXvFgbpbfrA+5/V7x3JrDzWjjx1pdf1JIck/HjXmNDVPNozgDZt9OWVY2RdzVdYrJ4uX5L25EXwhI7Xz2pwB3VdsFh5PKZ6+yJwApaNyPACkI2KiLsO24X2D3pRuh0cTy3EG5SBgFEs45riccNDhsCEXEK5SRZ8dAwhXyyfVGjxjcyEnihrJ3LmRF1+pRr5SrXlHursI8BgPwUeRL5ZqiZUAIaT+6X54rJiYfGDMBICxORwwHPYdBDtzORYAMqKZWZuk54q7QAsN9iamd26ln0CIeAy5ojc56HK+BAghGwjAnZZPHNkQAuRozHP5RCQwQoYQcAVgAk/Q86JcUka/XCXYHEFjy0W0Svtw6bFWjuAjMsCi9NyH1JdvcvkoymI4auBYAEh5ykSdK30iayHQHsSBLl6OIj4LAgj5xJaQEXkcB4hwViuN2Mo5XyYjBIJFeY6IdrbqywGMyDsCngevsfkAJl2B1xdF44CGN08dNceRS9fyprUNH7T74Xj2eZyWzxnRPXY5HgCa3WkMvhOEuTx3caCLgCPa4bmxFdidAo8kV0zPKoGXBAK7WMoDRjjHKSDzGVNWlNnd9MjkyBx2Gl3uFV9ErmMUsqpUjQWKKXg977vmJabADR/2LCA7tTHyjUdIegym+q7+UTQbADSJwIPhNq+FdB8oE3BAx0EOGZdRjuD1XM73xFYCEGUEgQbn9ehSUDnuCoDQMXH53rgvtzgRbwJKuo6ni9oyQUfKKFoFnsO2go+UfQd55WXt8MIjX+TTuI9tP9Ucm2YLQGYlA6LdamGBgEO9hxM799VJSMvu+bHJWZ1TZUREVhS7k4WLyRQdD4K3EiBwTHRx6lZfIJmCRmblXuYTtOMNL08rW11cuPoW6e5LTGtp5wl+rWnng3vySUzWjj/qJJyJTgSAzHBmS31IDgDCnj2J5Xk65DkKB4YSIyOWRfByPuxeKYny7KAAUTorM3JkSI4AyZQxyCKACgHTak4XY9rxnF5yePfQW56eQOHrlDUJfqcBkvXjR3Crs834MDBTdSIAyEZmtKNV6gkEhuXYPqUlgfPdcOhQIQ4Zod07UoyHiwpIQZPW4pUhCjS03OpdGgMkgabAdckp3QXoIBkWbOu8K/hdSb9p7e3ebDt3wKT0x5nZlRMFoNMqC4curRyxxNaegSN6EZGTALFCQPC4PEDABikgMsN6FsQWAuTjRa2e5Wo1llEImvnj6c4xI+WNXec9n3UI244K2uORiGZ25WQA6FxA/ATtbAMRnBxILNzOchww9LjqBQztJNlhCrCboyISOGrzXGwKWDrhjDNPNlZpx7Fnuwg8rDGx5gQIks0u6g6tkwFA0zsXE99J1m86l9odXZJyXAGQFbon9D2xksBEc2mV1uLV7lsSp6BxnxiZFALneO1S4LKnpY9qJdT6ak+YThYALaRFReJT8nzbsSPbTecyiDQO/VrSTltvAwPJ2gGOil5cRErrAYI1AUWwJtDM8+XhLQS+k7khaI/FTqIbimSBOZnqpQDQuV7qhAtPnszhrGVsu+9PteHNpze3djUj7g+AM5tIb748svma6akygp0EiPonTacKADkgB9WKMl5tIP50G1oGaUOG0E4K5Fj9oJjOzVh6p6CcSgDkjoJQK+rks75k09F045KJgj65pVb9U0qnGoCpzsnpjDSW8VmbybJ0lzyTiRep/7LRyw1Ap+PTBTNbWaedU8r/TwJwSh0/Vcb+zwPwUoH4bwAAAP//pvT/0gAAAAZJREFUAwBGzPpED0qPFQAAAABJRU5ErkJggg==", kt = "data:image/png;base64,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";
|
|
436
|
+
function De(i, e = {}) {
|
|
437
|
+
const { initialPosition: t = { right: 2, bottom: 40 }, enabled: n = !0 } = e, o = B(!1), a = Z({ x: 0, y: 0 }), l = Z({
|
|
438
|
+
right: t.right,
|
|
439
|
+
bottom: t.bottom
|
|
440
|
+
}), c = U(() => ({
|
|
441
|
+
position: "absolute",
|
|
442
|
+
right: `${l.right}px`,
|
|
443
|
+
bottom: `${l.bottom}px`,
|
|
444
|
+
cursor: o.value ? "grabbing" : "grab",
|
|
445
|
+
zIndex: 1e3
|
|
446
|
+
})), d = (C) => {
|
|
447
|
+
if (!o.value || !n) return;
|
|
448
|
+
const Q = C.clientX - a.x, J = C.clientY - a.y;
|
|
449
|
+
a.x = C.clientX, a.y = C.clientY;
|
|
450
|
+
let x = l.right - Q, w = l.bottom - J;
|
|
451
|
+
if (i.value && i.value.parentElement) {
|
|
452
|
+
const H = i.value.parentElement.getBoundingClientRect(), m = i.value.getBoundingClientRect(), u = H.width - m.width, E = H.height - m.height;
|
|
453
|
+
x = Math.max(0, Math.min(x, u)), w = Math.max(0, Math.min(w, E));
|
|
454
|
+
}
|
|
455
|
+
l.right = x, l.bottom = w;
|
|
456
|
+
}, f = () => {
|
|
457
|
+
o.value = !1, document.removeEventListener("mousemove", d), document.removeEventListener("mouseup", f);
|
|
458
|
+
}, r = (C) => {
|
|
459
|
+
n && (o.value = !0, a.x = C.clientX, a.y = C.clientY, document.addEventListener("mousemove", d), document.addEventListener("mouseup", f), C.preventDefault());
|
|
460
|
+
}, p = () => {
|
|
461
|
+
l.right = t.right, l.bottom = t.bottom;
|
|
462
|
+
};
|
|
463
|
+
return Pe(() => {
|
|
464
|
+
document.removeEventListener("mousemove", d), document.removeEventListener("mouseup", f);
|
|
465
|
+
}), {
|
|
466
|
+
position: l,
|
|
467
|
+
isDragging: o,
|
|
468
|
+
controlStyle: c,
|
|
469
|
+
startDrag: r,
|
|
470
|
+
resetPosition: p
|
|
471
|
+
};
|
|
472
|
+
}
|
|
473
|
+
const Qt = { class: "box" }, St = { class: "icon-content" }, It = { class: "focal" }, Rt = {
|
|
474
|
+
__name: "PtzControlPanel",
|
|
475
|
+
props: {
|
|
476
|
+
visible: {
|
|
477
|
+
type: Boolean,
|
|
478
|
+
default: !1
|
|
479
|
+
}
|
|
480
|
+
},
|
|
481
|
+
emits: ["ptzControl"],
|
|
482
|
+
setup(i, { emit: e }) {
|
|
483
|
+
const t = i, n = B(null), { controlStyle: o, startDrag: a, resetPosition: l } = De(n, {
|
|
484
|
+
initialPosition: { right: 2, bottom: 40 },
|
|
485
|
+
enabled: !0
|
|
486
|
+
}), c = e, d = (f) => {
|
|
487
|
+
const p = {
|
|
488
|
+
up: 0,
|
|
489
|
+
down: 1,
|
|
490
|
+
left: 2,
|
|
491
|
+
right: 3,
|
|
492
|
+
zoomOut: 4,
|
|
493
|
+
zoomIn: 5
|
|
494
|
+
}[f];
|
|
495
|
+
c("ptzControl", {
|
|
496
|
+
direction: f,
|
|
497
|
+
command: p
|
|
498
|
+
});
|
|
499
|
+
};
|
|
500
|
+
return ue(
|
|
501
|
+
() => t.visible,
|
|
502
|
+
(f) => {
|
|
503
|
+
f && l();
|
|
504
|
+
}
|
|
505
|
+
), (f, r) => i.visible ? (k(), D("div", {
|
|
506
|
+
key: 0,
|
|
507
|
+
ref_key: "refPtzControl",
|
|
508
|
+
ref: n,
|
|
509
|
+
class: "ptz-control",
|
|
510
|
+
style: me(X(o)),
|
|
511
|
+
onMousedown: r[6] || (r[6] = (...p) => X(a) && X(a)(...p))
|
|
512
|
+
}, [
|
|
513
|
+
h("div", Qt, [
|
|
514
|
+
h("div", St, [
|
|
515
|
+
h("img", {
|
|
516
|
+
class: "icon-t",
|
|
517
|
+
src: Ct,
|
|
518
|
+
alt: "上",
|
|
519
|
+
onClick: r[0] || (r[0] = (p) => d("up"))
|
|
520
|
+
}),
|
|
521
|
+
h("img", {
|
|
522
|
+
class: "icon-l",
|
|
523
|
+
src: wt,
|
|
524
|
+
alt: "左",
|
|
525
|
+
onClick: r[1] || (r[1] = (p) => d("left"))
|
|
526
|
+
}),
|
|
527
|
+
h("img", {
|
|
528
|
+
class: "icon-r",
|
|
529
|
+
src: Et,
|
|
530
|
+
alt: "右",
|
|
531
|
+
onClick: r[2] || (r[2] = (p) => d("right"))
|
|
532
|
+
}),
|
|
533
|
+
h("img", {
|
|
534
|
+
class: "icon-b",
|
|
535
|
+
src: bt,
|
|
536
|
+
alt: "下",
|
|
537
|
+
onClick: r[3] || (r[3] = (p) => d("down"))
|
|
538
|
+
})
|
|
539
|
+
]),
|
|
540
|
+
h("div", It, [
|
|
541
|
+
h("img", {
|
|
542
|
+
src: Bt,
|
|
543
|
+
alt: "放大",
|
|
544
|
+
onClick: r[4] || (r[4] = (p) => d("zoomOut"))
|
|
545
|
+
}),
|
|
546
|
+
h("img", {
|
|
547
|
+
src: kt,
|
|
548
|
+
alt: "缩小",
|
|
549
|
+
onClick: r[5] || (r[5] = (p) => d("zoomIn"))
|
|
550
|
+
})
|
|
551
|
+
])
|
|
552
|
+
])
|
|
553
|
+
], 36)) : T("", !0);
|
|
554
|
+
}
|
|
555
|
+
}, Pt = /* @__PURE__ */ de(Rt, [["__scopeId", "data-v-4376ba31"]]), Ut = { class: "media-info-content" }, Dt = { class: "video-info-item" }, xt = { class: "info-value" }, Ot = { class: "video-info-item" }, Mt = { class: "info-value" }, Tt = { class: "video-info-item" }, Ft = { class: "info-value" }, zt = {
|
|
556
|
+
__name: "MediaInfoPanel",
|
|
557
|
+
props: {
|
|
558
|
+
visible: {
|
|
559
|
+
type: Boolean,
|
|
560
|
+
default: !1
|
|
561
|
+
},
|
|
562
|
+
mediaInfo: {
|
|
563
|
+
type: Object,
|
|
564
|
+
default: () => ({})
|
|
565
|
+
}
|
|
566
|
+
},
|
|
567
|
+
setup(i) {
|
|
568
|
+
const e = i, t = B(null), { controlStyle: n, startDrag: o, resetPosition: a } = De(t, {
|
|
569
|
+
initialPosition: { right: 2, bottom: 40 },
|
|
570
|
+
enabled: !0
|
|
571
|
+
});
|
|
572
|
+
return ue(
|
|
573
|
+
() => e.visible,
|
|
574
|
+
(l) => {
|
|
575
|
+
l && a();
|
|
576
|
+
}
|
|
577
|
+
), (l, c) => i.visible ? (k(), D("div", {
|
|
578
|
+
key: 0,
|
|
579
|
+
ref_key: "mediaInfoPanelRef",
|
|
580
|
+
ref: t,
|
|
581
|
+
class: "media-info-wrapper",
|
|
582
|
+
style: me(X(n)),
|
|
583
|
+
onMousedown: c[0] || (c[0] = (...d) => X(o) && X(o)(...d))
|
|
584
|
+
}, [
|
|
585
|
+
h("div", Ut, [
|
|
586
|
+
h("div", Dt, [
|
|
587
|
+
c[1] || (c[1] = h("span", { class: "info-label" }, "分辨率:", -1)),
|
|
588
|
+
h("span", xt, W(i.mediaInfo.width + "x" + i.mediaInfo.height), 1)
|
|
589
|
+
]),
|
|
590
|
+
h("div", Ot, [
|
|
591
|
+
c[2] || (c[2] = h("span", { class: "info-label" }, "视频编码:", -1)),
|
|
592
|
+
h("span", Mt, W(i.mediaInfo.encType || "--"), 1)
|
|
593
|
+
]),
|
|
594
|
+
h("div", Tt, [
|
|
595
|
+
c[3] || (c[3] = h("span", { class: "info-label" }, "码率:", -1)),
|
|
596
|
+
h("span", Ft, W(i.mediaInfo.kbps + " KB/S"), 1)
|
|
597
|
+
])
|
|
598
|
+
])
|
|
599
|
+
], 36)) : T("", !0);
|
|
600
|
+
}
|
|
601
|
+
}, Vt = /* @__PURE__ */ de(zt, [["__scopeId", "data-v-825c2b68"]]), Kt = {
|
|
602
|
+
__name: "ContextMenu",
|
|
603
|
+
props: {
|
|
604
|
+
actualFeatures: {
|
|
605
|
+
type: Array,
|
|
606
|
+
default: () => []
|
|
607
|
+
}
|
|
608
|
+
},
|
|
609
|
+
emits: ["menuAction"],
|
|
610
|
+
setup(i, { expose: e, emit: t }) {
|
|
611
|
+
const n = i, o = t, a = B(!1), l = ie(null), c = ie(null), d = ie(null), f = ie(null);
|
|
612
|
+
Ue(async () => {
|
|
613
|
+
try {
|
|
614
|
+
const m = await Promise.resolve().then(() => Xt);
|
|
615
|
+
l.value = m.default, c.value = m.ContextMenuItem, d.value = m.ContextMenuGroup, f.value = m.ContextMenuSeparator, a.value = !0;
|
|
616
|
+
} catch {
|
|
617
|
+
console.warn("[EasyPlayer] @imengyu/vue3-context-menu 未安装,右键菜单功能不可用。如需使用请安装: npm install @imengyu/vue3-context-menu");
|
|
618
|
+
}
|
|
619
|
+
});
|
|
620
|
+
const r = B(!1), p = B(null), C = B({}), Q = Z({
|
|
621
|
+
zIndex: 9999,
|
|
622
|
+
minWidth: 160,
|
|
623
|
+
x: 500,
|
|
624
|
+
y: 200
|
|
625
|
+
}), J = [
|
|
626
|
+
{
|
|
627
|
+
type: "item",
|
|
628
|
+
label: "暂停播放",
|
|
629
|
+
action: "playPause"
|
|
630
|
+
},
|
|
631
|
+
{
|
|
632
|
+
type: "item",
|
|
633
|
+
label: "画面截图",
|
|
634
|
+
action: "screenshot"
|
|
635
|
+
},
|
|
636
|
+
{
|
|
637
|
+
type: "item",
|
|
638
|
+
label: "画面连续截图",
|
|
639
|
+
action: "continuousScreenshot"
|
|
640
|
+
},
|
|
641
|
+
{
|
|
642
|
+
type: "item",
|
|
643
|
+
label: "云台控制",
|
|
644
|
+
action: "ptzControl"
|
|
645
|
+
},
|
|
646
|
+
{
|
|
647
|
+
type: "group",
|
|
648
|
+
label: "清晰度切换",
|
|
649
|
+
action: "quality",
|
|
650
|
+
children: [
|
|
651
|
+
{
|
|
652
|
+
type: "item",
|
|
653
|
+
action: "quality",
|
|
654
|
+
params: { quality: "标清" }
|
|
655
|
+
},
|
|
656
|
+
{ type: "separator" },
|
|
657
|
+
{
|
|
658
|
+
type: "item",
|
|
659
|
+
action: "quality",
|
|
660
|
+
params: { quality: "高清" }
|
|
661
|
+
},
|
|
662
|
+
{ type: "separator" },
|
|
663
|
+
{
|
|
664
|
+
type: "item",
|
|
665
|
+
action: "quality",
|
|
666
|
+
params: { quality: "超清" }
|
|
667
|
+
}
|
|
668
|
+
]
|
|
669
|
+
},
|
|
670
|
+
{
|
|
671
|
+
type: "item",
|
|
672
|
+
label: "关闭视频",
|
|
673
|
+
action: "stopPlay"
|
|
674
|
+
},
|
|
675
|
+
{
|
|
676
|
+
type: "item",
|
|
677
|
+
action: "fullscreen"
|
|
678
|
+
}
|
|
679
|
+
], x = U(() => J.filter((u) => n.actualFeatures.includes(u.action)).map((u) => {
|
|
680
|
+
const E = { ...u };
|
|
681
|
+
switch (u.action) {
|
|
682
|
+
case "recordScreen":
|
|
683
|
+
E.label = C.value.recording ? "停止录屏" : "画面录屏";
|
|
684
|
+
break;
|
|
685
|
+
case "fullscreen":
|
|
686
|
+
E.label = C.value.fullscreen ? "退出全屏" : "全屏播放";
|
|
687
|
+
break;
|
|
688
|
+
default:
|
|
689
|
+
!E.label && u.action && (E.label = u.label);
|
|
690
|
+
}
|
|
691
|
+
return u.type === "group" && u.children && (E.children = u.children.map((F) => {
|
|
692
|
+
var S;
|
|
693
|
+
const I = { ...F };
|
|
694
|
+
if (F.action === "quality") {
|
|
695
|
+
const g = (S = F.params) == null ? void 0 : S.quality;
|
|
696
|
+
I.label = g + (C.value.currentQuality === g ? " ✓" : "");
|
|
697
|
+
}
|
|
698
|
+
return I;
|
|
699
|
+
})), E;
|
|
700
|
+
})), w = (m) => {
|
|
701
|
+
o("menuAction", {
|
|
702
|
+
action: m.action,
|
|
703
|
+
value: m.params
|
|
704
|
+
}), r.value = !1;
|
|
705
|
+
}, O = () => {
|
|
706
|
+
const m = document.querySelector("#mx-menu-default-container");
|
|
707
|
+
m && p.value && p.value.appendChild(m);
|
|
708
|
+
};
|
|
709
|
+
return e({
|
|
710
|
+
init: (m, u, E) => {
|
|
711
|
+
a.value && (p.value = E, O(), r.value = !0, Q.x = m.x, Q.y = m.y, C.value = {
|
|
712
|
+
...u,
|
|
713
|
+
volume: Math.floor((u.volume || 0) * 100),
|
|
714
|
+
speakerVolume: 20
|
|
715
|
+
});
|
|
716
|
+
}
|
|
717
|
+
}), (m, u) => a.value ? (k(), $(ee(l.value), {
|
|
718
|
+
key: 0,
|
|
719
|
+
show: r.value,
|
|
720
|
+
"onUpdate:show": u[0] || (u[0] = (E) => r.value = E),
|
|
721
|
+
options: Q
|
|
722
|
+
}, {
|
|
723
|
+
default: ke(() => [
|
|
724
|
+
(k(!0), D(re, null, Qe(x.value, (E, F) => (k(), D(re, { key: F }, [
|
|
725
|
+
E.type === "item" ? (k(), $(ee(c.value), {
|
|
726
|
+
key: 0,
|
|
727
|
+
label: E.label,
|
|
728
|
+
onClick: (I) => w(E)
|
|
729
|
+
}, null, 8, ["label", "onClick"])) : E.type === "group" ? (k(), $(ee(d.value), {
|
|
730
|
+
key: 1,
|
|
731
|
+
label: E.label
|
|
732
|
+
}, {
|
|
733
|
+
default: ke(() => [
|
|
734
|
+
(k(!0), D(re, null, Qe(E.children, (I, S) => (k(), D(re, { key: S }, [
|
|
735
|
+
I.type === "separator" ? (k(), $(ee(f.value), { key: 0 })) : I.type === "item" ? (k(), $(ee(c.value), {
|
|
736
|
+
key: 1,
|
|
737
|
+
label: I.label,
|
|
738
|
+
onClick: (g) => w(I)
|
|
739
|
+
}, null, 8, ["label", "onClick"])) : T("", !0)
|
|
740
|
+
], 64))), 128))
|
|
741
|
+
]),
|
|
742
|
+
_: 2
|
|
743
|
+
}, 1032, ["label"])) : T("", !0)
|
|
744
|
+
], 64))), 128))
|
|
745
|
+
]),
|
|
746
|
+
_: 1
|
|
747
|
+
}, 40, ["show", "options"])) : T("", !0);
|
|
748
|
+
}
|
|
749
|
+
};
|
|
750
|
+
class Jt {
|
|
751
|
+
constructor(e) {
|
|
752
|
+
if (!e.url)
|
|
753
|
+
throw new Error("url不能为空");
|
|
754
|
+
if (e.max && typeof e.max != "number")
|
|
755
|
+
throw new Error("max必须是数字");
|
|
756
|
+
if (e.interval && typeof e.interval != "number")
|
|
757
|
+
throw new Error("interval必须是数字");
|
|
758
|
+
this.url = e.url, this.socket = null, this.reconnectAttempts = 0, this.maxReconnectAttempts = e.max || 3, this.reconnectInterval = e.interval || 5 * 1e3, this.reconnectTimeout = null, this.config = e;
|
|
759
|
+
}
|
|
760
|
+
connect() {
|
|
761
|
+
return new Promise((e, t) => {
|
|
762
|
+
this.reconnectTimeout && (clearTimeout(this.reconnectTimeout), this.reconnectTimeout = null), this.socket = new WebSocket(this.url), this.socket.onopen = () => {
|
|
763
|
+
console.log("[EasyPlayer] WebSocket 连接成功"), this.reconnectAttempts = 0, e();
|
|
764
|
+
}, this.socket.onerror = (n) => {
|
|
765
|
+
console.error("[EasyPlayer] WebSocket 连接失败:", n), t(n);
|
|
766
|
+
}, this.socket.onmessage = () => {
|
|
767
|
+
}, this.socket.onclose = () => {
|
|
768
|
+
this.config.onclosed && this.config.onclosed instanceof Function && this.config.onclosed(), console.log("[EasyPlayer] WebSocket 连接关闭");
|
|
769
|
+
};
|
|
770
|
+
});
|
|
771
|
+
}
|
|
772
|
+
reconnect(e) {
|
|
773
|
+
return new Promise((t, n) => {
|
|
774
|
+
this.reconnectAttempts < this.maxReconnectAttempts ? this.reconnectTimeout = setTimeout(() => {
|
|
775
|
+
this.reconnectAttempts++, console.log(`[EasyPlayer] 尝试第 ${this.reconnectAttempts} 次重新连接...`), t(this.connect());
|
|
776
|
+
}, this.reconnectInterval) : (console.log("[EasyPlayer] 达到最大重试次数,停止重新连接"), n(e), this.reconnectAttempts = 0);
|
|
777
|
+
});
|
|
778
|
+
}
|
|
779
|
+
sendMessage(e) {
|
|
780
|
+
var t;
|
|
781
|
+
this.socket && this.socket.readyState === WebSocket.OPEN ? this.socket.send(e) : console.error("[EasyPlayer] WebSocket 未连接,无法发送消息", (t = this.socket) == null ? void 0 : t.readyState);
|
|
782
|
+
}
|
|
783
|
+
close() {
|
|
784
|
+
this.socket && (this.reconnectTimeout && (clearTimeout(this.reconnectTimeout), this.reconnectTimeout = null), this.socket.close(), this.socket = null);
|
|
785
|
+
}
|
|
786
|
+
isConnected() {
|
|
787
|
+
return this.socket && this.socket.readyState === WebSocket.OPEN;
|
|
788
|
+
}
|
|
789
|
+
}
|
|
790
|
+
class oe {
|
|
791
|
+
constructor() {
|
|
792
|
+
if (oe.instance)
|
|
793
|
+
return oe.instance;
|
|
794
|
+
this.instances = /* @__PURE__ */ new Map(), this.mode = "single", oe.instance = this;
|
|
795
|
+
}
|
|
796
|
+
register(e, t, n) {
|
|
797
|
+
this.instances.set(e, {
|
|
798
|
+
voiceState: "idle",
|
|
799
|
+
deviceInfo: n,
|
|
800
|
+
updateStateFn: t
|
|
801
|
+
});
|
|
802
|
+
}
|
|
803
|
+
unregister(e) {
|
|
804
|
+
this.instances.delete(e);
|
|
805
|
+
}
|
|
806
|
+
updateInstanceState(e, t) {
|
|
807
|
+
const n = this.instances.get(e);
|
|
808
|
+
n && (n.voiceState = t);
|
|
809
|
+
}
|
|
810
|
+
checkConflict(e) {
|
|
811
|
+
if (this.mode === "multiple")
|
|
812
|
+
return { allowed: !0 };
|
|
813
|
+
const t = this.getActiveInstances(e);
|
|
814
|
+
return t.length === 0 ? { allowed: !0 } : {
|
|
815
|
+
allowed: !1,
|
|
816
|
+
conflictInstances: t[0]
|
|
817
|
+
};
|
|
818
|
+
}
|
|
819
|
+
getActiveInstances(e) {
|
|
820
|
+
const t = [];
|
|
821
|
+
return this.instances.forEach((n, o) => {
|
|
822
|
+
o !== e && (n.voiceState === "recording" || n.voiceState === "pending") && t.push({
|
|
823
|
+
instanceId: o,
|
|
824
|
+
deviceName: n.deviceInfo.deviceName,
|
|
825
|
+
deviceInfo: n.deviceInfo
|
|
826
|
+
});
|
|
827
|
+
}), t;
|
|
828
|
+
}
|
|
829
|
+
async stopConflictInstances(e) {
|
|
830
|
+
const t = this.instances.get(e.instanceId);
|
|
831
|
+
return t && t.updateStateFn ? Promise.resolve(t.updateStateFn("idle")) : Promise.resolve();
|
|
832
|
+
}
|
|
833
|
+
}
|
|
834
|
+
const L = new oe();
|
|
835
|
+
function Ht(i, e, t) {
|
|
836
|
+
const n = new Uint8Array([
|
|
837
|
+
89,
|
|
838
|
+
86,
|
|
839
|
+
238,
|
|
840
|
+
1,
|
|
841
|
+
102,
|
|
842
|
+
0,
|
|
843
|
+
0,
|
|
844
|
+
0,
|
|
845
|
+
0,
|
|
846
|
+
0,
|
|
847
|
+
0,
|
|
848
|
+
0,
|
|
849
|
+
0,
|
|
850
|
+
0,
|
|
851
|
+
66,
|
|
852
|
+
89,
|
|
853
|
+
0,
|
|
854
|
+
0,
|
|
855
|
+
0,
|
|
856
|
+
0,
|
|
857
|
+
0,
|
|
858
|
+
0
|
|
859
|
+
]);
|
|
860
|
+
if (!i || i.length !== 36)
|
|
861
|
+
throw new Error("任务GUID必须是36字符长度的字符串");
|
|
862
|
+
if (e.length !== t)
|
|
863
|
+
throw new Error(`PCM数据必须是 ${t} 字节`);
|
|
864
|
+
const o = new Uint8Array(36);
|
|
865
|
+
for (let d = 0; d < i.length; d++)
|
|
866
|
+
o[d] = i.charCodeAt(d);
|
|
867
|
+
const a = n.length + o.length + e.length, l = new Uint8Array(a);
|
|
868
|
+
let c = 0;
|
|
869
|
+
return l.set(n, c), c += n.length, l.set(o, c), c += o.length, l.set(e, c), l.buffer;
|
|
870
|
+
}
|
|
871
|
+
let Ae = null;
|
|
872
|
+
const Yt = async () => {
|
|
873
|
+
if (Ae) return Ae;
|
|
874
|
+
try {
|
|
875
|
+
const i = await Promise.resolve().then(() => _t);
|
|
876
|
+
return await Promise.resolve().then(() => en), Ae = i.default || i, Ae;
|
|
877
|
+
} catch {
|
|
878
|
+
return console.warn("[EasyPlayer] recorder-core 未安装,语音对讲功能不可用。如需使用请安装: npm install recorder-core"), null;
|
|
879
|
+
}
|
|
880
|
+
}, Gt = (i) => {
|
|
881
|
+
const e = Date.now(), t = Math.random().toString(36).substr(2, 6);
|
|
882
|
+
return `voice_${i == null ? void 0 : i.deviceCode}_${i == null ? void 0 : i.channelCode}_${e}_${t}`;
|
|
883
|
+
}, Nt = (i, e, t, n, o) => {
|
|
884
|
+
const a = B(null), l = B(!1), c = B(!1), d = B(0), f = B(null), r = B(null), p = 440;
|
|
885
|
+
let C = new Uint8Array(0);
|
|
886
|
+
const Q = Gt(i.value), J = B(""), x = (v) => {
|
|
887
|
+
e.voiceState = v, L.updateInstanceState(Q, v);
|
|
888
|
+
};
|
|
889
|
+
L.register(Q, x, i.value);
|
|
890
|
+
const w = async () => {
|
|
891
|
+
const { allowed: v, conflictInstances: y } = L.checkConflict(Q);
|
|
892
|
+
return v ? Promise.resolve() : new Promise((b, P) => {
|
|
893
|
+
const z = o.value || o;
|
|
894
|
+
z && z.confirm ? z.confirm({
|
|
895
|
+
title: "语音对讲冲突",
|
|
896
|
+
content: `当前 ${y.deviceName} 正在进行语音对讲,是否停止并切换?`,
|
|
897
|
+
okText: "确认停止",
|
|
898
|
+
cancelText: "取消",
|
|
899
|
+
onOk: async () => {
|
|
900
|
+
await L.stopConflictInstances(y), b();
|
|
901
|
+
},
|
|
902
|
+
onCancel: () => {
|
|
903
|
+
P();
|
|
904
|
+
}
|
|
905
|
+
}) : L.stopConflictInstances(y).then(() => {
|
|
906
|
+
b();
|
|
907
|
+
});
|
|
908
|
+
});
|
|
909
|
+
}, O = async () => {
|
|
910
|
+
const v = await Yt();
|
|
911
|
+
if (!v)
|
|
912
|
+
throw new Error("recorder-core 未安装");
|
|
913
|
+
return new Promise((y, b) => {
|
|
914
|
+
a.value = v({
|
|
915
|
+
type: "pcm",
|
|
916
|
+
sampleRate: 22050,
|
|
917
|
+
bitRate: 16,
|
|
918
|
+
onProcess: function(P, z, G) {
|
|
919
|
+
const N = P[P.length - 1];
|
|
920
|
+
E(N), d.value = Date.now(), f.value && f.value.input(P[P.length - 1], z, G);
|
|
921
|
+
}
|
|
922
|
+
}), a.value.open(
|
|
923
|
+
function() {
|
|
924
|
+
l.value = !0, v.WaveView && (f.value = v.WaveView({ elem: ".recwave" })), y(!0);
|
|
925
|
+
},
|
|
926
|
+
function(P, z) {
|
|
927
|
+
l.value = !1;
|
|
928
|
+
const G = n.value || n, N = o.value || o;
|
|
929
|
+
z ? G && G.error && G.error("已拒绝麦克风权限,无法正常使用录音功能") : P.includes("https") ? N && N.confirm && N.confirm({
|
|
930
|
+
title: "麦克风权限受限",
|
|
931
|
+
content: "为保护您的隐私安全,浏览器出于安全限制无法访问麦克风。请使用HTTPS协议访问页面。",
|
|
932
|
+
okText: "知道了",
|
|
933
|
+
showCancel: !1
|
|
934
|
+
}) : console.error("[EasyPlayer] 录音初始化出错:", P), b(P);
|
|
935
|
+
}
|
|
936
|
+
);
|
|
937
|
+
});
|
|
938
|
+
}, H = () => {
|
|
939
|
+
c.value = !0, a.value.start();
|
|
940
|
+
const v = a.value.watchDogTimer = setInterval(function() {
|
|
941
|
+
if (!a.value || v != a.value.watchDogTimer) {
|
|
942
|
+
clearInterval(v);
|
|
943
|
+
return;
|
|
944
|
+
}
|
|
945
|
+
Date.now() < a.value.wdtPauseT || Date.now() - (d.value || y) > 1500 && (clearInterval(v), console.error(d.value ? "[EasyPlayer] 录音被中断" : "[EasyPlayer] 录音未能正常开始"), c.value = !1);
|
|
946
|
+
}, 1e3), y = Date.now();
|
|
947
|
+
a.value.wdtPauseT = 0, d.value = 0;
|
|
948
|
+
}, m = () => new Promise((v, y) => {
|
|
949
|
+
a.value.watchDogTimer = 0, a.value.stop(
|
|
950
|
+
function(b) {
|
|
951
|
+
c.value = !1;
|
|
952
|
+
const P = window.URL.createObjectURL(b);
|
|
953
|
+
a.value.close(), a.value = null, v({ blob: b, localUrl: P });
|
|
954
|
+
},
|
|
955
|
+
function(b) {
|
|
956
|
+
y(b), I(), a.value.close(), a.value = null;
|
|
957
|
+
}
|
|
958
|
+
);
|
|
959
|
+
}), u = (v) => {
|
|
960
|
+
const y = new Uint8Array(v.buffer, v.byteOffset, v.byteLength), b = new Uint8Array(C.length + y.length);
|
|
961
|
+
b.set(C, 0), b.set(y, C.length), C = b;
|
|
962
|
+
}, E = (v) => {
|
|
963
|
+
for (u(v); C.length >= p; ) {
|
|
964
|
+
const y = C.slice(0, p), b = Ht(J.value, y, p);
|
|
965
|
+
r.value.sendMessage(b), C = C.slice(p);
|
|
966
|
+
}
|
|
967
|
+
}, F = async () => {
|
|
968
|
+
const v = t.value || t;
|
|
969
|
+
if (!v || !v.start)
|
|
970
|
+
throw new Error("[EasyPlayer] 未配置语音对讲API (voiceIntercomApi.start)");
|
|
971
|
+
const { data: y } = await v.start({
|
|
972
|
+
channelCode: i.value.channelCode,
|
|
973
|
+
terminalType: "pc"
|
|
974
|
+
});
|
|
975
|
+
J.value = y.taskId;
|
|
976
|
+
let b;
|
|
977
|
+
if (v.wsUrlBuilder)
|
|
978
|
+
b = v.wsUrlBuilder(y);
|
|
979
|
+
else if (y.testDomain)
|
|
980
|
+
b = `wss://${y.testDomain}`;
|
|
981
|
+
else if (y.ip && y.port)
|
|
982
|
+
b = `wss://${y.ip}:${y.port}`;
|
|
983
|
+
else
|
|
984
|
+
throw new Error("[EasyPlayer] 无法构建WebSocket连接地址");
|
|
985
|
+
r.value = new Jt({
|
|
986
|
+
url: b,
|
|
987
|
+
onclosed: g
|
|
988
|
+
}), await r.value.connect(), H();
|
|
989
|
+
}, I = async () => {
|
|
990
|
+
C = new Uint8Array(0), r.value && r.value.close(), r.value = null;
|
|
991
|
+
const v = t.value || t;
|
|
992
|
+
if (v && v.stop)
|
|
993
|
+
try {
|
|
994
|
+
await v.stop({
|
|
995
|
+
channelCode: i.value.channelCode,
|
|
996
|
+
terminalType: "pc"
|
|
997
|
+
});
|
|
998
|
+
} catch (y) {
|
|
999
|
+
console.warn("[EasyPlayer] 停止语音对讲服务失败:", y);
|
|
1000
|
+
}
|
|
1001
|
+
}, S = async () => {
|
|
1002
|
+
if (e.voiceState === "idle")
|
|
1003
|
+
try {
|
|
1004
|
+
await w(), x("pending"), await O(), await F(), x("recording");
|
|
1005
|
+
} catch {
|
|
1006
|
+
g();
|
|
1007
|
+
}
|
|
1008
|
+
}, g = async () => {
|
|
1009
|
+
if (e.voiceState !== "idle")
|
|
1010
|
+
try {
|
|
1011
|
+
await m(), await I(), x("idle");
|
|
1012
|
+
} catch {
|
|
1013
|
+
x("idle");
|
|
1014
|
+
}
|
|
1015
|
+
}, ge = async () => {
|
|
1016
|
+
e.voiceState === "idle" ? S() : g();
|
|
1017
|
+
};
|
|
1018
|
+
return Pe(() => {
|
|
1019
|
+
L.unregister(Q), e.voiceState !== "idle" && g();
|
|
1020
|
+
}), {
|
|
1021
|
+
instanceId: Q,
|
|
1022
|
+
startIntercom: S,
|
|
1023
|
+
stopIntercom: g,
|
|
1024
|
+
toggleIntercom: ge
|
|
1025
|
+
};
|
|
1026
|
+
}, jt = {
|
|
1027
|
+
ref: "PlayerContainer",
|
|
1028
|
+
class: "player-box"
|
|
1029
|
+
}, Lt = { class: "loading" }, Ie = 3, Wt = {
|
|
1030
|
+
__name: "EasyPlayer",
|
|
1031
|
+
props: {
|
|
1032
|
+
// 设备参数
|
|
1033
|
+
data: {
|
|
1034
|
+
type: Object,
|
|
1035
|
+
required: !0,
|
|
1036
|
+
default: () => ({
|
|
1037
|
+
deviceCode: "",
|
|
1038
|
+
channelCode: "",
|
|
1039
|
+
channelStatus: "N"
|
|
1040
|
+
})
|
|
1041
|
+
},
|
|
1042
|
+
// 加载状态配置
|
|
1043
|
+
loadingConfig: {
|
|
1044
|
+
type: Object,
|
|
1045
|
+
default: () => ({})
|
|
1046
|
+
},
|
|
1047
|
+
// 需要隐藏的按钮
|
|
1048
|
+
excludeFeatures: {
|
|
1049
|
+
type: Array,
|
|
1050
|
+
default: () => []
|
|
1051
|
+
},
|
|
1052
|
+
// 是否显示头部标题
|
|
1053
|
+
visibleHeader: {
|
|
1054
|
+
type: Boolean,
|
|
1055
|
+
default: !0
|
|
1056
|
+
},
|
|
1057
|
+
// 是否显示预警按钮
|
|
1058
|
+
warning: {
|
|
1059
|
+
type: Boolean,
|
|
1060
|
+
default: !1
|
|
1061
|
+
},
|
|
1062
|
+
// 是否显示关闭按钮
|
|
1063
|
+
closeHeader: {
|
|
1064
|
+
type: Boolean,
|
|
1065
|
+
default: !0
|
|
1066
|
+
},
|
|
1067
|
+
// 自定义获取视频流地址,需返回 Promise<{ url: string }>
|
|
1068
|
+
// 优先级:customerGetVideoUrl > plugin配置 > 直接使用videoUrl
|
|
1069
|
+
customerGetVideoUrl: {
|
|
1070
|
+
type: Function,
|
|
1071
|
+
default: null
|
|
1072
|
+
},
|
|
1073
|
+
// 是否启用右键菜单
|
|
1074
|
+
visibleContextMenu: {
|
|
1075
|
+
type: Boolean,
|
|
1076
|
+
default: !1
|
|
1077
|
+
},
|
|
1078
|
+
// 云台控制回调 (command, data) => void
|
|
1079
|
+
onPtzControl: {
|
|
1080
|
+
type: Function,
|
|
1081
|
+
default: null
|
|
1082
|
+
},
|
|
1083
|
+
// 语音对讲API配置
|
|
1084
|
+
voiceIntercomApi: {
|
|
1085
|
+
type: Object,
|
|
1086
|
+
default: null
|
|
1087
|
+
// { start: (data) => Promise<{taskId, ip, port, testDomain}>,
|
|
1088
|
+
// stop: (data) => Promise<any>,
|
|
1089
|
+
// wsUrlBuilder: (data) => string }
|
|
1090
|
+
},
|
|
1091
|
+
// 消息提示服务,默认使用 console
|
|
1092
|
+
messageService: {
|
|
1093
|
+
type: Object,
|
|
1094
|
+
default: null
|
|
1095
|
+
// { error: (msg) => void, success: (msg) => void, warning: (msg) => void, info: (msg) => void }
|
|
1096
|
+
},
|
|
1097
|
+
// 模态框服务,用于确认对话框
|
|
1098
|
+
modalService: {
|
|
1099
|
+
type: Object,
|
|
1100
|
+
default: null
|
|
1101
|
+
// { confirm: (options) => void }
|
|
1102
|
+
}
|
|
1103
|
+
},
|
|
1104
|
+
emits: ["close", "play", "clickHandle", "warn"],
|
|
1105
|
+
setup(i, { expose: e, emit: t }) {
|
|
1106
|
+
const n = t, o = i, a = $e("sldzEasyPlayerConfig", {}), l = (s, A) => s || (a[A] ? a[A] : null), c = U(() => l(o.messageService, "messageService") || {
|
|
1107
|
+
error: (s) => console.error("[EasyPlayer]", s),
|
|
1108
|
+
success: (s) => console.log("[EasyPlayer]", s),
|
|
1109
|
+
warning: (s) => console.warn("[EasyPlayer]", s),
|
|
1110
|
+
info: (s) => console.info("[EasyPlayer]", s)
|
|
1111
|
+
}), d = U(() => l(o.modalService, "modalService") || {
|
|
1112
|
+
confirm: ({ title: s, content: A, onOk: R, onCancel: K }) => {
|
|
1113
|
+
confirm(`${s}
|
|
1114
|
+
${typeof A == "string" ? A : "请确认"}`) ? R && R() : K && K();
|
|
1115
|
+
}
|
|
1116
|
+
}), f = U(() => l(o.voiceIntercomApi, "voiceIntercomApi")), r = U(() => o.customerGetVideoUrl ? o.customerGetVideoUrl : a.getVideoUrl ? a.getVideoUrl : null), p = U(() => o.onPtzControl ? o.onPtzControl : a.onPtzControl ? a.onPtzControl : null), C = [
|
|
1117
|
+
"audio",
|
|
1118
|
+
"record",
|
|
1119
|
+
"quality",
|
|
1120
|
+
"screenshot",
|
|
1121
|
+
"mediaInfo",
|
|
1122
|
+
"fullscreen",
|
|
1123
|
+
"continuousScreenshot",
|
|
1124
|
+
"playPause",
|
|
1125
|
+
"stopPlay"
|
|
1126
|
+
], Q = U(() => {
|
|
1127
|
+
const { ptzFlag: s = 0, voiceFlag: A = 0 } = o.data || {}, R = [...C];
|
|
1128
|
+
s == 1 && R.push("ptzControl"), A == 1 && f.value && R.push("voiceIntercom");
|
|
1129
|
+
const K = new Set(o.excludeFeatures);
|
|
1130
|
+
return R.filter((ye) => !K.has(ye));
|
|
1131
|
+
}), J = ["audio", "record", "quality", "screenshot"], x = U(
|
|
1132
|
+
() => Object.fromEntries(J.filter((s) => !Q.value.includes(s)).map((s) => [s, !1]))
|
|
1133
|
+
);
|
|
1134
|
+
ue(
|
|
1135
|
+
() => o.data,
|
|
1136
|
+
() => {
|
|
1137
|
+
Ke(), j();
|
|
1138
|
+
}
|
|
1139
|
+
);
|
|
1140
|
+
const w = B(null), O = Se("PlayerContainer"), H = Se("easyPlayerProRef"), m = B(null), u = Z({
|
|
1141
|
+
quieting: !0,
|
|
1142
|
+
recording: !1,
|
|
1143
|
+
kbps: 0,
|
|
1144
|
+
width: 0,
|
|
1145
|
+
height: 0,
|
|
1146
|
+
encType: "",
|
|
1147
|
+
encTypeAudio: "",
|
|
1148
|
+
sampleRate: "",
|
|
1149
|
+
channels: "",
|
|
1150
|
+
currentQuality: "超清",
|
|
1151
|
+
userPaused: !1
|
|
1152
|
+
}), E = U(() => o.visibleHeader && !u.recording), F = U(() => o.warning && g.playing), I = B(""), S = Z({
|
|
1153
|
+
visible: !1,
|
|
1154
|
+
status: "loading",
|
|
1155
|
+
config: {}
|
|
1156
|
+
}), g = Z({
|
|
1157
|
+
voiceState: "idle",
|
|
1158
|
+
voiceDisabled: !1,
|
|
1159
|
+
ptzControl: !1,
|
|
1160
|
+
mediaInfo: !1,
|
|
1161
|
+
fullscreen: !1,
|
|
1162
|
+
playing: !1
|
|
1163
|
+
}), { toggleIntercom: ge, stopIntercom: v } = Nt(
|
|
1164
|
+
U(() => o.data),
|
|
1165
|
+
g,
|
|
1166
|
+
U(() => f.value),
|
|
1167
|
+
c,
|
|
1168
|
+
d
|
|
1169
|
+
), y = (s, A = {}) => {
|
|
1170
|
+
S.visible = !0, S.status = s, S.config = {
|
|
1171
|
+
...o.loadingConfig[s],
|
|
1172
|
+
...A
|
|
1173
|
+
};
|
|
1174
|
+
}, b = () => {
|
|
1175
|
+
S.visible = !1;
|
|
1176
|
+
}, P = async (s) => {
|
|
1177
|
+
switch (s) {
|
|
1178
|
+
case "close":
|
|
1179
|
+
se(), n("close");
|
|
1180
|
+
break;
|
|
1181
|
+
case "warn":
|
|
1182
|
+
if (!w.value) return;
|
|
1183
|
+
{
|
|
1184
|
+
const A = w.value.screenshot("warn", "png", 0.5, "blob");
|
|
1185
|
+
n("warn", { file: new File([A], "warn.png", { type: A.type }) });
|
|
1186
|
+
}
|
|
1187
|
+
break;
|
|
1188
|
+
}
|
|
1189
|
+
}, z = async () => {
|
|
1190
|
+
w.value = new tt(O.value, {
|
|
1191
|
+
btns: x.value
|
|
1192
|
+
}), Ne(), await j();
|
|
1193
|
+
}, G = async () => {
|
|
1194
|
+
Ce(), m.value = new ht(O.value, {
|
|
1195
|
+
eventCallbacks: {
|
|
1196
|
+
voiceStateChange: N,
|
|
1197
|
+
ptzControlToggle: he,
|
|
1198
|
+
mediaInfoToggle: xe,
|
|
1199
|
+
fullscreenToggle: fe,
|
|
1200
|
+
playToggle: we
|
|
1201
|
+
}
|
|
1202
|
+
}), await m.value.init(Q.value, g), ae();
|
|
1203
|
+
}, N = ({ states: s }) => {
|
|
1204
|
+
s.voiceState === "idle" ? ge() : s.voiceState === "recording" && v();
|
|
1205
|
+
};
|
|
1206
|
+
ue(
|
|
1207
|
+
() => g.voiceState,
|
|
1208
|
+
() => {
|
|
1209
|
+
m.value && m.value.updateStates(g);
|
|
1210
|
+
}
|
|
1211
|
+
);
|
|
1212
|
+
const he = () => {
|
|
1213
|
+
g.ptzControl = !g.ptzControl;
|
|
1214
|
+
}, xe = () => {
|
|
1215
|
+
g.mediaInfo = !g.mediaInfo;
|
|
1216
|
+
}, Oe = ({ command: s }) => {
|
|
1217
|
+
p.value ? p.value(s, o.data) : console.warn("[EasyPlayer] 未配置 onPtzControl 回调,无法执行云台控制");
|
|
1218
|
+
}, Y = B(null), Me = () => {
|
|
1219
|
+
Y.value && clearTimeout(Y.value), Y.value = setTimeout(() => {
|
|
1220
|
+
n("clickHandle", { ...o.data });
|
|
1221
|
+
}, 300);
|
|
1222
|
+
}, fe = () => {
|
|
1223
|
+
var s;
|
|
1224
|
+
Y.value && (clearTimeout(Y.value), Y.value = null), g.fullscreen = !g.fullscreen, (s = m.value) == null || s.updateStates(g), Te();
|
|
1225
|
+
}, j = async () => {
|
|
1226
|
+
if (o.data.channelStatus != "Y") {
|
|
1227
|
+
y("offline");
|
|
1228
|
+
return;
|
|
1229
|
+
}
|
|
1230
|
+
try {
|
|
1231
|
+
g.playing = !1, y("loading");
|
|
1232
|
+
const s = {
|
|
1233
|
+
超清: "orig",
|
|
1234
|
+
高清: "hd",
|
|
1235
|
+
标清: "sd"
|
|
1236
|
+
}, A = { ...o.data, quality: s[u.currentQuality] }, R = r.value;
|
|
1237
|
+
if (!R)
|
|
1238
|
+
return console.error("[EasyPlayer] 未配置获取视频流地址的方法,请通过 customerGetVideoUrl prop 或插件配置 getVideoUrl 提供"), y("failed"), g.playing = !1, Promise.reject(new Error("未配置视频流获取方法"));
|
|
1239
|
+
const { url: K } = await R(A);
|
|
1240
|
+
return I.value = K, pe(K), Promise.resolve();
|
|
1241
|
+
} catch (s) {
|
|
1242
|
+
return y("failed"), g.playing = !1, Promise.reject(s);
|
|
1243
|
+
}
|
|
1244
|
+
}, pe = (s) => {
|
|
1245
|
+
w.value && w.value.play(s);
|
|
1246
|
+
}, q = B(0), ve = (s) => {
|
|
1247
|
+
g.playing = !1, q.value < Ie ? (q.value++, console.log(`[EasyPlayer] ${s},当前重试次数: ${q.value}/${Ie}`), j()) : se();
|
|
1248
|
+
}, se = () => {
|
|
1249
|
+
y("failed"), w.value && (w.value.destroy(), w.value = null), clearInterval(_.value), Ce(), b(), n("close");
|
|
1250
|
+
}, Ce = () => {
|
|
1251
|
+
g.voiceState = "idle", g.ptzControl = !1, g.mediaInfo = !1, g.fullscreen = !1, m.value && (m.value.destroy(), m.value = null);
|
|
1252
|
+
}, Te = async () => {
|
|
1253
|
+
const s = H.value;
|
|
1254
|
+
s && (document.fullscreenElement === s ? await document.exitFullscreen() : (document.fullscreenElement && await document.exitFullscreen(), await s.requestFullscreen()), ae());
|
|
1255
|
+
}, ae = () => {
|
|
1256
|
+
if (!O.value) return;
|
|
1257
|
+
const s = O.value.querySelector(".easyplayer-controls"), A = O.value.querySelector(".easyplayer-controls-right");
|
|
1258
|
+
if (!s || !A) return;
|
|
1259
|
+
const R = s.getBoundingClientRect().left, K = s.offsetWidth, ye = R + K, le = Array.from(A.children);
|
|
1260
|
+
le.forEach((M) => {
|
|
1261
|
+
M.style.display = "";
|
|
1262
|
+
});
|
|
1263
|
+
const je = () => {
|
|
1264
|
+
const M = le.filter((Ze) => Ze.style.display !== "none"), be = M[0], Be = M[M.length - 1];
|
|
1265
|
+
if (!be || !Be) return !1;
|
|
1266
|
+
const Le = be.getBoundingClientRect(), We = Be.getBoundingClientRect();
|
|
1267
|
+
return Le.left < R || We.right > ye;
|
|
1268
|
+
};
|
|
1269
|
+
for (let M = le.length - 1; M >= 0 && je(); M--) {
|
|
1270
|
+
if (M === 0) return;
|
|
1271
|
+
le[M].style.display = "none";
|
|
1272
|
+
}
|
|
1273
|
+
}, Fe = () => {
|
|
1274
|
+
y("loading"), pe(I.value);
|
|
1275
|
+
}, V = B(null), ze = () => {
|
|
1276
|
+
V.value && (clearTimeout(V.value), V.value = null);
|
|
1277
|
+
const s = O.value.querySelector(".easyplayer-controls");
|
|
1278
|
+
s && (s.style.opacity = "1");
|
|
1279
|
+
}, Ve = () => {
|
|
1280
|
+
V.value && clearTimeout(V.value), V.value = setTimeout(() => {
|
|
1281
|
+
var A;
|
|
1282
|
+
const s = (A = O.value) == null ? void 0 : A.querySelector(".easyplayer-controls");
|
|
1283
|
+
s && (s.style.opacity = "0", V.value = null);
|
|
1284
|
+
}, 5e3);
|
|
1285
|
+
}, we = () => {
|
|
1286
|
+
g.playing = !g.playing, m.value.updateStates(g), g.playing ? (y("loading"), pe(I.value)) : (w.value.pause(), u.userPaused = !0);
|
|
1287
|
+
}, Ke = () => {
|
|
1288
|
+
q.value = 0, u.currentQuality = "超清";
|
|
1289
|
+
}, Ee = B(null), Je = (s) => {
|
|
1290
|
+
s.preventDefault(), w.value && o.visibleContextMenu && g.playing && Ee.value.init(s, { ...u, ...g }, H.value);
|
|
1291
|
+
}, _ = B(null), He = (s = 5, A = 2e3) => {
|
|
1292
|
+
let R = 0;
|
|
1293
|
+
_.value = setInterval(() => {
|
|
1294
|
+
w.value.screenshot(), R++, R >= s && (clearInterval(_.value), console.log(`[EasyPlayer] 截图完成,共截取了${s}张图片`));
|
|
1295
|
+
}, A);
|
|
1296
|
+
}, Ye = (s) => {
|
|
1297
|
+
w.value && w.value.setMute(s);
|
|
1298
|
+
}, Ge = ({ action: s, value: A }) => {
|
|
1299
|
+
switch (s) {
|
|
1300
|
+
case "playPause":
|
|
1301
|
+
we();
|
|
1302
|
+
break;
|
|
1303
|
+
case "screenshot":
|
|
1304
|
+
w.value.screenshot();
|
|
1305
|
+
break;
|
|
1306
|
+
case "continuousScreenshot":
|
|
1307
|
+
He(5, 2e3);
|
|
1308
|
+
break;
|
|
1309
|
+
case "quality":
|
|
1310
|
+
u.currentQuality = A.quality, w.value.setQuality(A.quality), j();
|
|
1311
|
+
break;
|
|
1312
|
+
case "setVideoVolume":
|
|
1313
|
+
break;
|
|
1314
|
+
case "recordScreen":
|
|
1315
|
+
break;
|
|
1316
|
+
case "ptzControl":
|
|
1317
|
+
he();
|
|
1318
|
+
break;
|
|
1319
|
+
case "stopPlay":
|
|
1320
|
+
se();
|
|
1321
|
+
break;
|
|
1322
|
+
case "fullscreen":
|
|
1323
|
+
fe();
|
|
1324
|
+
break;
|
|
1325
|
+
}
|
|
1326
|
+
}, Ne = () => {
|
|
1327
|
+
if (!w.value) return;
|
|
1328
|
+
const s = w.value;
|
|
1329
|
+
s.on("videoInfo", (A) => {
|
|
1330
|
+
u.width = A.width, u.height = A.height, u.encType = A.encType;
|
|
1331
|
+
}), s.on("audioInfo", (A) => {
|
|
1332
|
+
u.encTypeAudio = A.encType === "ALAW" ? "ALAW(g711a)" : A.encType, u.sampleRate = A.sampleRate, u.channels = A.channels;
|
|
1333
|
+
}), s.on("error", () => {
|
|
1334
|
+
ve("出错了");
|
|
1335
|
+
}), s.on("timeout", () => {
|
|
1336
|
+
ve("加载超时");
|
|
1337
|
+
}), s.on("qualityChange", (A) => {
|
|
1338
|
+
u.currentQuality != A && (u.currentQuality = A, j());
|
|
1339
|
+
}), s.on("kBps", (A) => {
|
|
1340
|
+
u.kbps = A;
|
|
1341
|
+
}), s.on("play", () => {
|
|
1342
|
+
s.setQuality(u.currentQuality), u.userPaused = !1, G(), q.value = 0, g.playing = !0, b(), n("play");
|
|
1343
|
+
}), s.on("liveEnd", () => {
|
|
1344
|
+
u.userPaused || ve("实时流中断");
|
|
1345
|
+
}), s.on("mute", (A) => {
|
|
1346
|
+
u.quieting = A;
|
|
1347
|
+
}), s.on("pause", () => {
|
|
1348
|
+
g.playing = !1;
|
|
1349
|
+
}), s.on("recordStart", () => {
|
|
1350
|
+
u.recording = !0;
|
|
1351
|
+
}), s.on("recordEnd", () => {
|
|
1352
|
+
u.recording = !1;
|
|
1353
|
+
});
|
|
1354
|
+
};
|
|
1355
|
+
return Ue(() => {
|
|
1356
|
+
z(), window.addEventListener("resize", ae);
|
|
1357
|
+
}), et(() => {
|
|
1358
|
+
se(), window.removeEventListener("resize", ae), Y.value && clearTimeout(Y.value), V.value && clearTimeout(V.value), _.value && clearInterval(_.value);
|
|
1359
|
+
}), e({
|
|
1360
|
+
getPlayUrl: j,
|
|
1361
|
+
handleSetMute: Ye,
|
|
1362
|
+
state: u,
|
|
1363
|
+
buttonStates: g,
|
|
1364
|
+
easyPlayer: w
|
|
1365
|
+
}), (s, A) => (k(), D("div", {
|
|
1366
|
+
ref: "easyPlayerProRef",
|
|
1367
|
+
class: "easy-player-pro",
|
|
1368
|
+
onClick: te(Me, ["stop"]),
|
|
1369
|
+
onDblclick: te(fe, ["stop"]),
|
|
1370
|
+
onContextmenu: Je
|
|
1371
|
+
}, [
|
|
1372
|
+
h("div", jt, null, 512),
|
|
1373
|
+
u.userPaused ? (k(), D("div", {
|
|
1374
|
+
key: 0,
|
|
1375
|
+
class: "player-pause-box",
|
|
1376
|
+
onClick: te(Fe, ["stop"]),
|
|
1377
|
+
onMousemove: ze,
|
|
1378
|
+
onMouseleave: Ve
|
|
1379
|
+
}, null, 32)) : T("", !0),
|
|
1380
|
+
ne(ct, {
|
|
1381
|
+
visible: E.value,
|
|
1382
|
+
warning: F.value,
|
|
1383
|
+
closeHeader: i.closeHeader,
|
|
1384
|
+
"data-info": i.data,
|
|
1385
|
+
onHandle: P
|
|
1386
|
+
}, null, 8, ["visible", "warning", "closeHeader", "data-info"]),
|
|
1387
|
+
h("div", Lt, [
|
|
1388
|
+
Re(s.$slots, "loading", { loadingState: S }, () => [
|
|
1389
|
+
ne(yt, {
|
|
1390
|
+
visible: S.visible,
|
|
1391
|
+
status: S.status,
|
|
1392
|
+
"custom-config": S.config
|
|
1393
|
+
}, null, 8, ["visible", "status", "custom-config"])
|
|
1394
|
+
])
|
|
1395
|
+
]),
|
|
1396
|
+
ne(Pt, {
|
|
1397
|
+
visible: g.ptzControl,
|
|
1398
|
+
onPtzControl: Oe,
|
|
1399
|
+
onDblclick: A[0] || (A[0] = te(() => {
|
|
1400
|
+
}, ["stop"]))
|
|
1401
|
+
}, null, 8, ["visible"]),
|
|
1402
|
+
ne(Vt, {
|
|
1403
|
+
visible: g.mediaInfo,
|
|
1404
|
+
mediaInfo: u,
|
|
1405
|
+
onDblclick: A[1] || (A[1] = te(() => {
|
|
1406
|
+
}, ["stop"]))
|
|
1407
|
+
}, null, 8, ["visible", "mediaInfo"]),
|
|
1408
|
+
ne(Kt, {
|
|
1409
|
+
ref_key: "contextMenuRef",
|
|
1410
|
+
ref: Ee,
|
|
1411
|
+
actualFeatures: Q.value,
|
|
1412
|
+
onMenuAction: Ge
|
|
1413
|
+
}, null, 8, ["actualFeatures"])
|
|
1414
|
+
], 544));
|
|
1415
|
+
}
|
|
1416
|
+
};
|
|
1417
|
+
function nn(i, { maxWidth: e = 2560, maxHeight: t = 1440, quality: n = 0.92 } = {}) {
|
|
1418
|
+
return i ? new Promise((o) => {
|
|
1419
|
+
const a = URL.createObjectURL(i), l = new Image();
|
|
1420
|
+
l.onload = () => {
|
|
1421
|
+
const c = Math.min(e / l.width, t / l.height, 1), d = Math.floor(l.width * c), f = Math.floor(l.height * c), r = document.createElement("canvas");
|
|
1422
|
+
r.width = d, r.height = f;
|
|
1423
|
+
const p = r.getContext("2d");
|
|
1424
|
+
p.fillStyle = "#ffffff", p.fillRect(0, 0, d, f), p.drawImage(l, 0, 0, d, f), URL.revokeObjectURL(a);
|
|
1425
|
+
const C = r.toDataURL("image/jpeg", n);
|
|
1426
|
+
r.toBlob(
|
|
1427
|
+
(Q) => {
|
|
1428
|
+
o({
|
|
1429
|
+
blob: Q,
|
|
1430
|
+
dataUrl: C,
|
|
1431
|
+
format: "jpeg",
|
|
1432
|
+
quality: n,
|
|
1433
|
+
timestamp: Date.now(),
|
|
1434
|
+
width: d,
|
|
1435
|
+
height: f,
|
|
1436
|
+
size: Q.size
|
|
1437
|
+
});
|
|
1438
|
+
},
|
|
1439
|
+
"image/jpeg",
|
|
1440
|
+
n
|
|
1441
|
+
);
|
|
1442
|
+
}, l.onerror = () => {
|
|
1443
|
+
URL.revokeObjectURL(a), o(null);
|
|
1444
|
+
}, l.src = a;
|
|
1445
|
+
}) : Promise.resolve(null);
|
|
1446
|
+
}
|
|
1447
|
+
const on = (i, e = {}) => {
|
|
1448
|
+
i.provide("sldzEasyPlayerConfig", e), i.component("EasyPlayer", Wt);
|
|
1449
|
+
}, Zt = {}, Xt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
1450
|
+
__proto__: null,
|
|
1451
|
+
default: Zt
|
|
1452
|
+
}, Symbol.toStringTag, { value: "Module" })), qt = {}, _t = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
1453
|
+
__proto__: null,
|
|
1454
|
+
default: qt
|
|
1455
|
+
}, Symbol.toStringTag, { value: "Module" })), $t = {}, en = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
1456
|
+
__proto__: null,
|
|
1457
|
+
default: $t
|
|
1458
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
1459
|
+
export {
|
|
1460
|
+
Wt as EasyPlayer,
|
|
1461
|
+
on as install,
|
|
1462
|
+
nn as resizeBlobToJpeg
|
|
1463
|
+
};
|