@boldarialblack/multi-stream-player 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/LICENSE +21 -0
- package/README.md +34 -0
- package/lib/stream-player.js +638 -0
- package/lib/stream-player.js.map +1 -0
- package/lib/stream-player.umd.cjs +2 -0
- package/lib/stream-player.umd.cjs.map +1 -0
- package/lib/style.css +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,638 @@
|
|
|
1
|
+
import { defineComponent as G, openBlock as Q, createBlock as M, createVNode as v, ref as A, reactive as $, watchEffect as ee, onMounted as V, onBeforeUnmount as J, createElementBlock as I, normalizeClass as E, createElementVNode as c, renderSlot as f, unref as y, withDirectives as te, withCtx as m, createTextVNode as P, watch as F, normalizeProps as X, guardReactiveProps as W, createSlots as q, createCommentVNode as O, toDisplayString as R, nextTick as oe } from "vue";
|
|
2
|
+
import j from "hls.js";
|
|
3
|
+
import z from "flv.js";
|
|
4
|
+
import { ElButton as U, ElTooltip as ne, ElSlider as se, ElLoading as ie, ElDialog as ae } from "element-plus";
|
|
5
|
+
class K {
|
|
6
|
+
async init(o) {
|
|
7
|
+
}
|
|
8
|
+
play() {
|
|
9
|
+
}
|
|
10
|
+
pause() {
|
|
11
|
+
}
|
|
12
|
+
destroy() {
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
class le extends K {
|
|
16
|
+
constructor(o) {
|
|
17
|
+
super(), this.video = o, this.hls = null;
|
|
18
|
+
}
|
|
19
|
+
async init(o) {
|
|
20
|
+
j.isSupported() ? (this.hls = new j(), this.hls.loadSource(o), this.hls.attachMedia(this.video)) : this.video.src = o;
|
|
21
|
+
}
|
|
22
|
+
play() {
|
|
23
|
+
this.video.play();
|
|
24
|
+
}
|
|
25
|
+
pause() {
|
|
26
|
+
this.video.pause();
|
|
27
|
+
}
|
|
28
|
+
destroy() {
|
|
29
|
+
this.hls && this.hls.destroy();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
class re extends K {
|
|
33
|
+
constructor(o) {
|
|
34
|
+
super(), this.video = o, this.player = null;
|
|
35
|
+
}
|
|
36
|
+
async init(o) {
|
|
37
|
+
z.isSupported() && (this.player = z.createPlayer({ type: "flv", url: o }), this.player.attachMediaElement(this.video), this.player.load());
|
|
38
|
+
}
|
|
39
|
+
play() {
|
|
40
|
+
this.video.play();
|
|
41
|
+
}
|
|
42
|
+
pause() {
|
|
43
|
+
this.video.pause();
|
|
44
|
+
}
|
|
45
|
+
destroy() {
|
|
46
|
+
this.player && (this.player.unload(), this.player.detachMediaElement(), this.player.destroy(), this.player = null);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
class ce extends K {
|
|
50
|
+
constructor(o, e, t = [{ urls: "stun:stun.l.google.com:19302" }]) {
|
|
51
|
+
super(), this.video = o, this.pc = null, this.signaling = e || null, this.iceServers = t, this.bindings = {
|
|
52
|
+
onRemoteDescription: null,
|
|
53
|
+
onIceCandidate: null,
|
|
54
|
+
onTrack: null
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
async init(o) {
|
|
58
|
+
if (this.pc = new RTCPeerConnection({
|
|
59
|
+
// 你可以在这里配置 TURN/STUN 服务器
|
|
60
|
+
iceServers: this.iceServers
|
|
61
|
+
}), this.pc.ontrack = (e) => {
|
|
62
|
+
const t = e.streams && e.streams[0] ? e.streams[0] : null;
|
|
63
|
+
t ? (this.video.srcObject = t, typeof this.bindings.onTrack == "function" && this.bindings.onTrack(t)) : e.streams && e.streams.length && (this.video.srcObject = e.streams[0]);
|
|
64
|
+
}, this.pc.onicecandidate = (e) => {
|
|
65
|
+
e.candidate && this.signaling && typeof this.signaling.send == "function" && this.signaling.send({ type: "ice-candidate", candidate: e.candidate });
|
|
66
|
+
}, this.signaling && typeof this.signaling.onMessage == "function" && this.signaling.onMessage(async (e) => {
|
|
67
|
+
if (!(!e || !e.type))
|
|
68
|
+
switch (e.type) {
|
|
69
|
+
case "remote-description":
|
|
70
|
+
{
|
|
71
|
+
const t = new RTCSessionDescription(e.description);
|
|
72
|
+
if (await this.pc.setRemoteDescription(t), t.type === "offer") {
|
|
73
|
+
const l = await this.pc.createAnswer();
|
|
74
|
+
await this.pc.setLocalDescription(l), this.signaling.send({ type: "answer", description: this.pc.localDescription });
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
break;
|
|
78
|
+
case "ice-candidate":
|
|
79
|
+
try {
|
|
80
|
+
await this.pc.addIceCandidate(new RTCIceCandidate(e.candidate));
|
|
81
|
+
} catch (t) {
|
|
82
|
+
console.warn("Failed to add ICE candidate:", t);
|
|
83
|
+
}
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
}), o) {
|
|
87
|
+
const e = await this.pc.createOffer({ offerToReceiveVideo: !0 });
|
|
88
|
+
await this.pc.setLocalDescription(e);
|
|
89
|
+
try {
|
|
90
|
+
const l = await (await fetch(o, {
|
|
91
|
+
method: "POST",
|
|
92
|
+
headers: { "Content-Type": "application/sdp" },
|
|
93
|
+
body: e.sdp
|
|
94
|
+
})).text();
|
|
95
|
+
await this.pc.setRemoteDescription({ type: "answer", sdp: l });
|
|
96
|
+
} catch (t) {
|
|
97
|
+
console.error("WebRTC init remote description failed:", t);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// 通过显式的信令发送 remote description(若使用外部信令渠道)
|
|
102
|
+
async setRemoteDescription(o) {
|
|
103
|
+
if (!this.pc)
|
|
104
|
+
throw new Error("RTCPeerConnection is not initialized");
|
|
105
|
+
await this.pc.setRemoteDescription(o);
|
|
106
|
+
}
|
|
107
|
+
// 提供给外部调用,主动添加本地音视频轨(若需要)
|
|
108
|
+
addTrack(o, e) {
|
|
109
|
+
if (!this.pc)
|
|
110
|
+
throw new Error("RTCPeerConnection is not initialized");
|
|
111
|
+
if (e)
|
|
112
|
+
e.addTrack(o);
|
|
113
|
+
else if (o) {
|
|
114
|
+
const t = this.video.srcObject || new MediaStream();
|
|
115
|
+
t.addTrack(o), this.video.srcObject = t;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
play() {
|
|
119
|
+
this.video.play().catch(() => {
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
pause() {
|
|
123
|
+
this.video.pause();
|
|
124
|
+
}
|
|
125
|
+
// 清理资源
|
|
126
|
+
destroy() {
|
|
127
|
+
if (this.pc) {
|
|
128
|
+
try {
|
|
129
|
+
this.pc.close();
|
|
130
|
+
} catch {
|
|
131
|
+
}
|
|
132
|
+
this.pc = null;
|
|
133
|
+
}
|
|
134
|
+
this.signaling && typeof this.signaling.close == "function" && this.signaling.close(), this.video && (this.video.srcObject = null);
|
|
135
|
+
}
|
|
136
|
+
// 可选:绑定外部信令事件监听器
|
|
137
|
+
bindSignalingHandlers({ onRemoteDescription: o, onIceCandidate: e, onTrack: t } = {}) {
|
|
138
|
+
typeof o == "function" && (this.bindings.onRemoteDescription = o), typeof e == "function" && (this.bindings.onIceCandidate = e), typeof t == "function" && (this.bindings.onTrack = t);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
function de(n) {
|
|
142
|
+
return {
|
|
143
|
+
info: (...o) => console.log(`[${n}]`, ...o),
|
|
144
|
+
error: (...o) => console.error(`[${n}]`, ...o)
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
const ue = "data:image/png;base64,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", pe = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAABCcAAAQnAEmzTo0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAGCSURBVHgB7Vchd8IwEP7KQ63TxU+DLh6Pr5/Hr5pp9ivq8fPzoDfNsOts91172QJvtGmzDgTfe/eaprl8yeUudwXOhMA0iqII+ZhTxugHe0oWBMHum5ikER9Lygj94p2yIHk+1I7EIn2h5NqeUkJV2MANY53L1gl1LtmgWDUzxJEh5WoezQxqiQlly/4nOIA6CyXe2TrsT/mIdWEYHOl9oiU4YUJZUeYNQz/slyE8oA6Z6OstZe2qO4AHxEnwc47PLVT9dqzkKXc+MmGCaufexG+onCvWM8xPDeR3cRpxRnMP7OFBLGc2QxUO93CHLDCrG1B7xjRfGfBwj2Ho2NQy/a9oPGMlT/HH8PLqK/GV+CKJG8OJN9IdqgukFRiGm87Emltn6ADqHuT2YzSZ2unCP4Ha3F67Y654yZVP0B45dV/RlVjJ29zTzriYcLpBfzjwF2PqLaqEP+WZPqAm4XeEhGOs7bJAMAW9fFjhfwr6MlfbvzBStkjFGKEfiFXXWiCeD19pa3LqeLh36gAAAABJRU5ErkJggg==", Ae = {
|
|
148
|
+
beforeMount(n, o) {
|
|
149
|
+
n.__clickOutsideHandler__ = (e) => {
|
|
150
|
+
!n.contains(e.target) && typeof o.value == "function" && o.value(e);
|
|
151
|
+
}, document.addEventListener("mousedown", n.__clickOutsideHandler__);
|
|
152
|
+
},
|
|
153
|
+
unmounted(n) {
|
|
154
|
+
document.removeEventListener("mousedown", n.__clickOutsideHandler__), n.__clickOutsideHandler__ = null;
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
var S = G({
|
|
158
|
+
name: "Setting"
|
|
159
|
+
});
|
|
160
|
+
const ge = {
|
|
161
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
162
|
+
viewBox: "0 0 1024 1024"
|
|
163
|
+
}, Ce = /* @__PURE__ */ v("path", {
|
|
164
|
+
fill: "currentColor",
|
|
165
|
+
d: "M600.704 64a32 32 0 0 1 30.464 22.208l35.2 109.376c14.784 7.232 28.928 15.36 42.432 24.512l112.384-24.192a32 32 0 0 1 34.432 15.36L944.32 364.8a32 32 0 0 1-4.032 37.504l-77.12 85.12a357.12 357.12 0 0 1 0 49.024l77.12 85.248a32 32 0 0 1 4.032 37.504l-88.704 153.6a32 32 0 0 1-34.432 15.296L708.8 803.904c-13.44 9.088-27.648 17.28-42.368 24.512l-35.264 109.376A32 32 0 0 1 600.704 960H423.296a32 32 0 0 1-30.464-22.208L357.696 828.48a351.616 351.616 0 0 1-42.56-24.64l-112.32 24.256a32 32 0 0 1-34.432-15.36L79.68 659.2a32 32 0 0 1 4.032-37.504l77.12-85.248a357.12 357.12 0 0 1 0-48.896l-77.12-85.248A32 32 0 0 1 79.68 364.8l88.704-153.6a32 32 0 0 1 34.432-15.296l112.32 24.256c13.568-9.152 27.776-17.408 42.56-24.64l35.2-109.312A32 32 0 0 1 423.232 64H600.64zm-23.424 64H446.72l-36.352 113.088-24.512 11.968a294.113 294.113 0 0 0-34.816 20.096l-22.656 15.36-116.224-25.088-65.28 113.152 79.68 88.192-1.92 27.136a293.12 293.12 0 0 0 0 40.192l1.92 27.136-79.808 88.192 65.344 113.152 116.224-25.024 22.656 15.296a294.113 294.113 0 0 0 34.816 20.096l24.512 11.968L446.72 896h130.688l36.48-113.152 24.448-11.904a288.282 288.282 0 0 0 34.752-20.096l22.592-15.296 116.288 25.024 65.28-113.152-79.744-88.192 1.92-27.136a293.12 293.12 0 0 0 0-40.256l-1.92-27.136 79.808-88.128-65.344-113.152-116.288 24.96-22.592-15.232a287.616 287.616 0 0 0-34.752-20.096l-24.448-11.904L577.344 128zM512 320a192 192 0 1 1 0 384 192 192 0 0 1 0-384zm0 64a128 128 0 1 0 0 256 128 128 0 0 0 0-256z"
|
|
166
|
+
}, null, -1);
|
|
167
|
+
function he(n, o, e, t, l, a) {
|
|
168
|
+
return Q(), M("svg", ge, [
|
|
169
|
+
Ce
|
|
170
|
+
]);
|
|
171
|
+
}
|
|
172
|
+
S.render = he;
|
|
173
|
+
S.__file = "packages/components/Setting.vue";
|
|
174
|
+
const ye = S;
|
|
175
|
+
var Y = G({
|
|
176
|
+
name: "ZoomIn"
|
|
177
|
+
});
|
|
178
|
+
const ve = {
|
|
179
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
180
|
+
viewBox: "0 0 1024 1024"
|
|
181
|
+
}, fe = /* @__PURE__ */ v("path", {
|
|
182
|
+
fill: "currentColor",
|
|
183
|
+
d: "m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704zm-32-384v-96a32 32 0 0 1 64 0v96h96a32 32 0 0 1 0 64h-96v96a32 32 0 0 1-64 0v-96h-96a32 32 0 0 1 0-64h96z"
|
|
184
|
+
}, null, -1);
|
|
185
|
+
function me(n, o, e, t, l, a) {
|
|
186
|
+
return Q(), M("svg", ve, [
|
|
187
|
+
fe
|
|
188
|
+
]);
|
|
189
|
+
}
|
|
190
|
+
Y.render = me;
|
|
191
|
+
Y.__file = "packages/components/ZoomIn.vue";
|
|
192
|
+
const we = Y;
|
|
193
|
+
var k = G({
|
|
194
|
+
name: "ZoomOut"
|
|
195
|
+
});
|
|
196
|
+
const Qe = {
|
|
197
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
198
|
+
viewBox: "0 0 1024 1024"
|
|
199
|
+
}, Be = /* @__PURE__ */ v("path", {
|
|
200
|
+
fill: "currentColor",
|
|
201
|
+
d: "m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704zM352 448h256a32 32 0 0 1 0 64H352a32 32 0 0 1 0-64z"
|
|
202
|
+
}, null, -1);
|
|
203
|
+
function Ee(n, o, e, t, l, a) {
|
|
204
|
+
return Q(), M("svg", Qe, [
|
|
205
|
+
Be
|
|
206
|
+
]);
|
|
207
|
+
}
|
|
208
|
+
k.render = Ee;
|
|
209
|
+
k.__file = "packages/components/ZoomOut.vue";
|
|
210
|
+
const Ie = k;
|
|
211
|
+
const Ue = { class: "trigger-btn" }, Fe = { class: "controller" }, Me = { class: "controller-content" }, De = { class: "header" }, Oe = { class: "operation" }, xe = ["src"], Le = { class: "cockpit-container" }, Te = { class: "cockpit-wrapper" }, Ge = ["src"], Ke = { class: "block" }, Se = { class: "block" }, Ye = {
|
|
212
|
+
name: "StreamPlayerControls"
|
|
213
|
+
}, L = /* @__PURE__ */ Object.assign(Ye, {
|
|
214
|
+
props: {
|
|
215
|
+
playControlStart: {
|
|
216
|
+
type: Function,
|
|
217
|
+
default: () => {
|
|
218
|
+
}
|
|
219
|
+
},
|
|
220
|
+
playControlStop: {
|
|
221
|
+
type: Function,
|
|
222
|
+
default: () => {
|
|
223
|
+
}
|
|
224
|
+
},
|
|
225
|
+
setPerspective: {
|
|
226
|
+
type: Function,
|
|
227
|
+
default: () => {
|
|
228
|
+
}
|
|
229
|
+
},
|
|
230
|
+
savePerspective: {
|
|
231
|
+
type: Function,
|
|
232
|
+
default: () => {
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
},
|
|
236
|
+
setup(n) {
|
|
237
|
+
const o = Ae, e = n, t = A(5), l = $({
|
|
238
|
+
1: "慢",
|
|
239
|
+
7: "快"
|
|
240
|
+
}), a = A(""), B = A(!1), u = A(!0);
|
|
241
|
+
ee(() => {
|
|
242
|
+
}), V(() => {
|
|
243
|
+
}), J(() => {
|
|
244
|
+
a.value && e.playControlStop({
|
|
245
|
+
command: a.value,
|
|
246
|
+
speed: t.value
|
|
247
|
+
});
|
|
248
|
+
});
|
|
249
|
+
function d(g) {
|
|
250
|
+
a.value = g, e.playControlStart({
|
|
251
|
+
command: g,
|
|
252
|
+
speed: t.value
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
function p() {
|
|
256
|
+
e.playControlStop({
|
|
257
|
+
command: a.value,
|
|
258
|
+
speed: t.value
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
function w(g) {
|
|
262
|
+
B.value = g === 2, e.setPerspective({
|
|
263
|
+
type: g
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
function i() {
|
|
267
|
+
e.savePerspective();
|
|
268
|
+
}
|
|
269
|
+
return (g, s) => (Q(), I("div", {
|
|
270
|
+
class: E(["player-controls", { "is-collapsed": u.value }])
|
|
271
|
+
}, [
|
|
272
|
+
c("div", {
|
|
273
|
+
class: "controller-trigger",
|
|
274
|
+
onClick: s[0] || (s[0] = (C) => {
|
|
275
|
+
u.value = !u.value;
|
|
276
|
+
})
|
|
277
|
+
}, [
|
|
278
|
+
f(g.$slots, "controller-trigger", {}, () => [
|
|
279
|
+
c("div", Ue, [
|
|
280
|
+
v(y(ye))
|
|
281
|
+
])
|
|
282
|
+
])
|
|
283
|
+
]),
|
|
284
|
+
te((Q(), I("div", Fe, [
|
|
285
|
+
f(g.$slots, "controller-panel", {}, () => [
|
|
286
|
+
c("div", Me, [
|
|
287
|
+
c("div", De, [
|
|
288
|
+
c("div", Oe, [
|
|
289
|
+
v(y(U), {
|
|
290
|
+
type: "primary",
|
|
291
|
+
size: "small",
|
|
292
|
+
onClick: s[1] || (s[1] = (C) => w(1))
|
|
293
|
+
}, {
|
|
294
|
+
default: m(() => [...s[10] || (s[10] = [
|
|
295
|
+
P("当前画面", -1)
|
|
296
|
+
])]),
|
|
297
|
+
_: 1
|
|
298
|
+
}),
|
|
299
|
+
v(y(U), {
|
|
300
|
+
type: "primary",
|
|
301
|
+
size: "small",
|
|
302
|
+
onClick: s[2] || (s[2] = (C) => w(2))
|
|
303
|
+
}, {
|
|
304
|
+
default: m(() => [...s[11] || (s[11] = [
|
|
305
|
+
P("布防画面", -1)
|
|
306
|
+
])]),
|
|
307
|
+
_: 1
|
|
308
|
+
})
|
|
309
|
+
]),
|
|
310
|
+
v(y(ne), {
|
|
311
|
+
content: "存为默认画面",
|
|
312
|
+
placement: "top"
|
|
313
|
+
}, {
|
|
314
|
+
default: m(() => [
|
|
315
|
+
c("img", {
|
|
316
|
+
class: "save-icon cursor-pointer",
|
|
317
|
+
src: y(pe),
|
|
318
|
+
onClick: i
|
|
319
|
+
}, null, 8, xe)
|
|
320
|
+
]),
|
|
321
|
+
_: 1
|
|
322
|
+
})
|
|
323
|
+
]),
|
|
324
|
+
c("div", Le, [
|
|
325
|
+
c("div", Te, [
|
|
326
|
+
c("img", {
|
|
327
|
+
class: "cockpit-bg",
|
|
328
|
+
src: y(ue)
|
|
329
|
+
}, null, 8, Ge),
|
|
330
|
+
c("div", {
|
|
331
|
+
class: E(["up cockpit-btn", { "is-active": a.value === "TILT_UP" }]),
|
|
332
|
+
onMousedown: s[3] || (s[3] = (C) => d("TILT_UP")),
|
|
333
|
+
onMouseup: p
|
|
334
|
+
}, null, 34),
|
|
335
|
+
c("div", {
|
|
336
|
+
class: E(["down cockpit-btn", { "is-active": a.value === "TILT_DOWN" }]),
|
|
337
|
+
onMousedown: s[4] || (s[4] = (C) => d("TILT_DOWN")),
|
|
338
|
+
onMouseup: p
|
|
339
|
+
}, null, 34),
|
|
340
|
+
c("div", {
|
|
341
|
+
class: E(["left cockpit-btn", { "is-active": a.value === "PAN_LEFT" }]),
|
|
342
|
+
onMousedown: s[5] || (s[5] = (C) => d("PAN_LEFT")),
|
|
343
|
+
onMouseup: p
|
|
344
|
+
}, null, 34),
|
|
345
|
+
c("div", {
|
|
346
|
+
class: E(["right cockpit-btn", { "is-active": a.value === "PAN_RIGHT" }]),
|
|
347
|
+
onMousedown: s[6] || (s[6] = (C) => d("PAN_RIGHT")),
|
|
348
|
+
onMouseup: p
|
|
349
|
+
}, null, 34)
|
|
350
|
+
])
|
|
351
|
+
]),
|
|
352
|
+
c("div", Ke, [
|
|
353
|
+
s[12] || (s[12] = c("div", { class: "description" }, "云台转速", -1)),
|
|
354
|
+
v(y(se), {
|
|
355
|
+
modelValue: t.value,
|
|
356
|
+
"onUpdate:modelValue": s[7] || (s[7] = (C) => t.value = C),
|
|
357
|
+
min: 1,
|
|
358
|
+
max: 7,
|
|
359
|
+
"show-stops": "",
|
|
360
|
+
marks: l,
|
|
361
|
+
style: { "margin-top": "-8px", "margin-bottom": "18px" }
|
|
362
|
+
}, null, 8, ["modelValue", "marks"])
|
|
363
|
+
]),
|
|
364
|
+
c("div", Se, [
|
|
365
|
+
s[13] || (s[13] = c("div", { class: "description" }, "画面缩放", -1)),
|
|
366
|
+
v(y(U), {
|
|
367
|
+
icon: y(we),
|
|
368
|
+
circle: "",
|
|
369
|
+
onMousedown: s[8] || (s[8] = (C) => d("ZOOM_IN")),
|
|
370
|
+
onMouseup: p
|
|
371
|
+
}, null, 8, ["icon"]),
|
|
372
|
+
v(y(U), {
|
|
373
|
+
icon: y(Ie),
|
|
374
|
+
circle: "",
|
|
375
|
+
onMousedown: s[9] || (s[9] = (C) => d("ZOOM_OUT")),
|
|
376
|
+
onMouseup: p
|
|
377
|
+
}, null, 8, ["icon"])
|
|
378
|
+
])
|
|
379
|
+
])
|
|
380
|
+
])
|
|
381
|
+
])), [
|
|
382
|
+
[y(o), () => u.value = !0]
|
|
383
|
+
])
|
|
384
|
+
], 2));
|
|
385
|
+
}
|
|
386
|
+
});
|
|
387
|
+
const ke = (n, o) => {
|
|
388
|
+
const e = n.__vccOpts || n;
|
|
389
|
+
for (const [t, l] of o)
|
|
390
|
+
e[t] = l;
|
|
391
|
+
return e;
|
|
392
|
+
}, be = ["autoplay"], He = { class: "video-overlay" }, Pe = {
|
|
393
|
+
key: 1,
|
|
394
|
+
class: "status-overlay"
|
|
395
|
+
}, Re = {
|
|
396
|
+
key: 2,
|
|
397
|
+
class: "status-overlay error"
|
|
398
|
+
}, je = {
|
|
399
|
+
name: "StreamPlayer"
|
|
400
|
+
}, ze = /* @__PURE__ */ Object.assign(je, {
|
|
401
|
+
props: {
|
|
402
|
+
src: { type: String, required: !0 },
|
|
403
|
+
protocol: { type: String, default: "hls" },
|
|
404
|
+
autoplay: { type: Boolean, default: !1 },
|
|
405
|
+
showControls: { type: Boolean, default: !0 },
|
|
406
|
+
fitMode: {
|
|
407
|
+
type: String,
|
|
408
|
+
default: "contain"
|
|
409
|
+
// 'contain' | 'fill' | 'cover'
|
|
410
|
+
},
|
|
411
|
+
reconnect: { type: Boolean, default: !0 },
|
|
412
|
+
// 自动重连开关
|
|
413
|
+
maxRetries: { type: Number, default: 3 },
|
|
414
|
+
// 最大重试次数
|
|
415
|
+
retryDelay: { type: Number, default: 3e3 },
|
|
416
|
+
// 每次重试间隔
|
|
417
|
+
beforeInit: { type: Function, default: () => {
|
|
418
|
+
} }
|
|
419
|
+
},
|
|
420
|
+
emits: [
|
|
421
|
+
"init",
|
|
422
|
+
// 播放器初始化
|
|
423
|
+
"loaded",
|
|
424
|
+
// 视频加载完毕
|
|
425
|
+
"play",
|
|
426
|
+
// 开始播放
|
|
427
|
+
"pause",
|
|
428
|
+
// 暂停播放
|
|
429
|
+
"error",
|
|
430
|
+
// 播放错误
|
|
431
|
+
"destroy"
|
|
432
|
+
// 销毁
|
|
433
|
+
],
|
|
434
|
+
setup(n, { expose: o, emit: e }) {
|
|
435
|
+
const t = n, l = e, a = A(null), B = A(null), u = A(null), d = A(!1), p = A(!1), w = A(!1), i = A(0), g = de("VideoPlayer");
|
|
436
|
+
function s(r, h) {
|
|
437
|
+
switch (r) {
|
|
438
|
+
case "flv":
|
|
439
|
+
return new re(h);
|
|
440
|
+
case "webrtc":
|
|
441
|
+
return new ce(h);
|
|
442
|
+
case "hls":
|
|
443
|
+
default:
|
|
444
|
+
return new le(h);
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
async function C() {
|
|
448
|
+
if (!(!a.value || !t.src)) {
|
|
449
|
+
H(), p.value = !0, w.value = !1;
|
|
450
|
+
try {
|
|
451
|
+
u.value = s(t.protocol, a.value), t.beforeInit && await t.beforeInit(), await u.value.init(t.src), l("init", { protocol: t.protocol });
|
|
452
|
+
const r = a.value;
|
|
453
|
+
r && (r.addEventListener("loadeddata", () => l("loaded")), r.addEventListener("playing", () => l("play")), r.addEventListener("pause", () => l("pause")), r.addEventListener("error", (h) => b(h))), t.autoplay && (await u.value.play(), d.value = !0), p.value = !1, i.value = 0;
|
|
454
|
+
} catch (r) {
|
|
455
|
+
b(r);
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
function b(r) {
|
|
460
|
+
g.error("Playback error:", r), l("error", r), w.value = !0, p.value = !1, t.reconnect && i.value < t.maxRetries ? (i.value++, setTimeout(async () => {
|
|
461
|
+
l("reconnect", { attempt: i.value }), await oe(), await C();
|
|
462
|
+
}, t.retryDelay)) : g.warn("Max retry reached or reconnect disabled");
|
|
463
|
+
}
|
|
464
|
+
function Z() {
|
|
465
|
+
u.value && (d.value ? (u.value.pause(), l("pause")) : (u.value.play(), l("play")), d.value = !d.value);
|
|
466
|
+
}
|
|
467
|
+
function N() {
|
|
468
|
+
const r = a.value;
|
|
469
|
+
if (!r)
|
|
470
|
+
return;
|
|
471
|
+
const h = document.createElement("canvas");
|
|
472
|
+
h.width = r.videoWidth, h.height = r.videoHeight, h.getContext("2d").drawImage(r, 0, 0, h.width, h.height);
|
|
473
|
+
const _ = h.toDataURL("image/png"), D = document.createElement("a");
|
|
474
|
+
D.href = _, D.download = "snapshot.png", D.click();
|
|
475
|
+
}
|
|
476
|
+
function H() {
|
|
477
|
+
u.value && (u.value.destroy(), l("destroy"), u.value = null, d.value = !1);
|
|
478
|
+
}
|
|
479
|
+
return F(() => t.src, C), V(C), J(H), o({
|
|
480
|
+
togglePlay: Z,
|
|
481
|
+
screenshot: N
|
|
482
|
+
}), (r, h) => (Q(), I("div", {
|
|
483
|
+
class: "video-player",
|
|
484
|
+
ref_key: "container",
|
|
485
|
+
ref: B
|
|
486
|
+
}, [
|
|
487
|
+
c("video", {
|
|
488
|
+
ref_key: "videoRef",
|
|
489
|
+
ref: a,
|
|
490
|
+
class: E([n.fitMode, "video-element"]),
|
|
491
|
+
autoplay: n.autoplay,
|
|
492
|
+
playsinline: "",
|
|
493
|
+
controls: ""
|
|
494
|
+
}, null, 10, be),
|
|
495
|
+
c("div", He, [
|
|
496
|
+
f(r.$slots, "overlay", {}, void 0, !0)
|
|
497
|
+
]),
|
|
498
|
+
n.showControls ? f(r.$slots, "controller", { key: 0 }, () => [
|
|
499
|
+
v(L, X(W(r.$attrs)), q({ _: 2 }, [
|
|
500
|
+
r.$slots["controller-trigger"] ? {
|
|
501
|
+
name: "controller-trigger",
|
|
502
|
+
fn: m(() => [
|
|
503
|
+
f(r.$slots, "controller-trigger", {}, void 0, !0)
|
|
504
|
+
]),
|
|
505
|
+
key: "0"
|
|
506
|
+
} : void 0,
|
|
507
|
+
r.$slots["controller-panel"] ? {
|
|
508
|
+
name: "controller-panel",
|
|
509
|
+
fn: m(() => [
|
|
510
|
+
f(r.$slots, "controller-panel", {}, void 0, !0)
|
|
511
|
+
]),
|
|
512
|
+
key: "1"
|
|
513
|
+
} : void 0
|
|
514
|
+
]), 1040)
|
|
515
|
+
], !0) : O("", !0),
|
|
516
|
+
p.value ? (Q(), I("div", Pe, "加载中...")) : O("", !0),
|
|
517
|
+
w.value ? (Q(), I("div", Re, "连接错误,正在重试(" + R(i.value) + "/" + R(n.maxRetries) + ")...", 1)) : O("", !0)
|
|
518
|
+
], 512));
|
|
519
|
+
}
|
|
520
|
+
}), T = /* @__PURE__ */ ke(ze, [["__scopeId", "data-v-3ced781c"]]);
|
|
521
|
+
const Ve = { class: "dialog-content-wrapper" }, Je = { class: "stream-player-wrapper" }, Xe = {
|
|
522
|
+
name: "StreamPlayerDialog"
|
|
523
|
+
}, x = /* @__PURE__ */ Object.assign(Xe, {
|
|
524
|
+
props: {
|
|
525
|
+
value: Boolean,
|
|
526
|
+
title: {
|
|
527
|
+
type: String,
|
|
528
|
+
default: ""
|
|
529
|
+
},
|
|
530
|
+
dialogClass: {
|
|
531
|
+
type: String,
|
|
532
|
+
default: ""
|
|
533
|
+
},
|
|
534
|
+
onOpen: Function,
|
|
535
|
+
onClose: Function,
|
|
536
|
+
beforeClose: Function
|
|
537
|
+
},
|
|
538
|
+
emits: ["update:value"],
|
|
539
|
+
setup(n, { expose: o, emit: e }) {
|
|
540
|
+
const t = n, l = e, a = A(t.value), B = A(!1), u = A(!1), d = A();
|
|
541
|
+
F(
|
|
542
|
+
() => t.value,
|
|
543
|
+
(i) => {
|
|
544
|
+
a.value = i;
|
|
545
|
+
}
|
|
546
|
+
), F(a, (i) => {
|
|
547
|
+
l("update:value", i);
|
|
548
|
+
}), F(u, (i) => {
|
|
549
|
+
i ? d.value = ie.service({
|
|
550
|
+
target: ".stream-player-wrapper"
|
|
551
|
+
}) : d.value && d.value.close();
|
|
552
|
+
});
|
|
553
|
+
function p() {
|
|
554
|
+
a.value = !0, B.value = !0, typeof t.onOpen == "function" && t.onOpen();
|
|
555
|
+
}
|
|
556
|
+
function w(i) {
|
|
557
|
+
a.value = !1, typeof t.beforeClose == "function" && t.beforeClose(), B.value && l("update:value", !1), typeof i == "function" && i();
|
|
558
|
+
}
|
|
559
|
+
return o({
|
|
560
|
+
open: p,
|
|
561
|
+
close: w
|
|
562
|
+
}), (i, g) => (Q(), M(y(ae), {
|
|
563
|
+
visible: a.value,
|
|
564
|
+
"onUpdate:visible": g[0] || (g[0] = (s) => a.value = s),
|
|
565
|
+
"before-close": w,
|
|
566
|
+
"append-to-body": !0,
|
|
567
|
+
class: E([n.dialogClass, "stream-player-dialog"]),
|
|
568
|
+
top: "3vh",
|
|
569
|
+
width: "90vw",
|
|
570
|
+
modal: "",
|
|
571
|
+
"destroy-on-close": "",
|
|
572
|
+
onOpen: n.onOpen,
|
|
573
|
+
onClose: n.onClose
|
|
574
|
+
}, {
|
|
575
|
+
default: m(() => [
|
|
576
|
+
c("div", Ve, [
|
|
577
|
+
c("div", Je, [
|
|
578
|
+
v(T, X(W(i.$attrs)), q({ _: 2 }, [
|
|
579
|
+
i.$slots.overlay ? {
|
|
580
|
+
name: "overlay",
|
|
581
|
+
fn: m(() => [
|
|
582
|
+
f(i.$slots, "overlay")
|
|
583
|
+
]),
|
|
584
|
+
key: "0"
|
|
585
|
+
} : void 0,
|
|
586
|
+
i.$slots.controller ? {
|
|
587
|
+
name: "controller",
|
|
588
|
+
fn: m(() => [
|
|
589
|
+
f(i.$slots, "controller")
|
|
590
|
+
]),
|
|
591
|
+
key: "1"
|
|
592
|
+
} : void 0,
|
|
593
|
+
i.$slots["controller-trigger"] ? {
|
|
594
|
+
name: "controller-trigger",
|
|
595
|
+
fn: m(() => [
|
|
596
|
+
f(i.$slots, "controller-trigger")
|
|
597
|
+
]),
|
|
598
|
+
key: "2"
|
|
599
|
+
} : void 0,
|
|
600
|
+
i.$slots["controller-panel"] ? {
|
|
601
|
+
name: "controller-panel",
|
|
602
|
+
fn: m(() => [
|
|
603
|
+
f(i.$slots, "controller-panel")
|
|
604
|
+
]),
|
|
605
|
+
key: "3"
|
|
606
|
+
} : void 0
|
|
607
|
+
]), 1040)
|
|
608
|
+
]),
|
|
609
|
+
f(i.$slots, "dialog-content")
|
|
610
|
+
])
|
|
611
|
+
]),
|
|
612
|
+
_: 3
|
|
613
|
+
}, 8, ["visible", "class", "onOpen", "onClose"]));
|
|
614
|
+
}
|
|
615
|
+
}), $e = {
|
|
616
|
+
install(n) {
|
|
617
|
+
n.component(T.name, T), n.component(L.name, L);
|
|
618
|
+
const o = n.extend(x), e = new o();
|
|
619
|
+
document.body.appendChild(e.$mount().$el), n.component(x.name, x), n.prototype.$streamPlayer = {
|
|
620
|
+
open({ title: t, dialogClass: l, onOpen: a, onClose: B, beforeClose: u, ...d }) {
|
|
621
|
+
e.title = t, e.value = !0, e.dialogClass = l, e.onOpen = a, e.onClose = B, e.beforeClose = u;
|
|
622
|
+
for (let p in d)
|
|
623
|
+
e[p] = d[p];
|
|
624
|
+
return e.open(), e;
|
|
625
|
+
},
|
|
626
|
+
close() {
|
|
627
|
+
e.close();
|
|
628
|
+
}
|
|
629
|
+
};
|
|
630
|
+
}
|
|
631
|
+
};
|
|
632
|
+
export {
|
|
633
|
+
T as StreamPlayer,
|
|
634
|
+
L as StreamPlayerControls,
|
|
635
|
+
x as StreamPlayerDialog,
|
|
636
|
+
$e as default
|
|
637
|
+
};
|
|
638
|
+
//# sourceMappingURL=stream-player.js.map
|