@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 @@
|
|
|
1
|
+
{"version":3,"file":"stream-player.js","sources":["../src/packages/stream-player/adapters/BaseAdapter.js","../src/packages/stream-player/adapters/HlsAdapter.js","../src/packages/stream-player/adapters/FlvAdapter.js","../src/packages/stream-player/adapters/WebRTCAdapter.js","../src/packages/stream-player/utils/logger.js","../src/assets/images/cockpit.png","../src/assets/images/icon-save.png","../src/packages/stream-player/utils/directive.js","../node_modules/.pnpm/@element-plus+icons@0.0.11/node_modules/@element-plus/icons/es/Setting.js","../node_modules/.pnpm/@element-plus+icons@0.0.11/node_modules/@element-plus/icons/es/ZoomIn.js","../node_modules/.pnpm/@element-plus+icons@0.0.11/node_modules/@element-plus/icons/es/ZoomOut.js","../src/packages/stream-player/controls.vue","../src/packages/stream-player/index.vue","../src/packages/stream-player/dialog.vue","../src/packages/index.js"],"sourcesContent":["export default class BaseAdapter {\n async init(url) {}\n play() {}\n pause() {}\n destroy() {}\n}\n","import Hls from 'hls.js'\nimport BaseAdapter from './BaseAdapter.js'\n\nexport default class HlsAdapter extends BaseAdapter {\n constructor(video) {\n super()\n this.video = video\n this.hls = null\n }\n\n async init(url) {\n if (Hls.isSupported()) {\n this.hls = new Hls()\n this.hls.loadSource(url)\n this.hls.attachMedia(this.video)\n } else {\n // Safari 原生支持 HLS\n this.video.src = url\n }\n }\n\n play() { this.video.play() }\n pause() { this.video.pause() }\n destroy() { this.hls && this.hls.destroy() }\n}\n","import flvjs from 'flv.js'\nimport BaseAdapter from './BaseAdapter.js'\n\nexport default class FlvAdapter extends BaseAdapter {\n constructor(video) {\n super()\n this.video = video\n this.player = null\n }\n\n async init(url) {\n if (flvjs.isSupported()) {\n this.player = flvjs.createPlayer({ type: 'flv', url })\n this.player.attachMediaElement(this.video)\n this.player.load()\n }\n }\n\n play() { this.video.play() }\n pause() { this.video.pause() }\n destroy() {\n if (this.player) {\n this.player.unload()\n this.player.detachMediaElement()\n this.player.destroy()\n this.player = null\n }\n }\n}\n","import BaseAdapter from './BaseAdapter.js'\n\nexport default class WebRTCAdapter extends BaseAdapter {\n constructor(video, signaling, iceServers = [{ urls: 'stun:stun.l.google.com:19302' }]) {\n super()\n this.video = video\n this.pc = null\n // 信令通道对象,应提供 send(message) 和 onMessage(callback)\n // 若暂无,可传入 null,后续再绑定具体实现\n this.signaling = signaling || null\n this.iceServers = iceServers\n this.bindings = {\n onRemoteDescription: null,\n onIceCandidate: null,\n onTrack: null\n }\n }\n\n async init(url) {\n // 当使用自定义信令通道时,init 不再自行创建 Offer/Answer 流程。\n // 但为了向后兼容,仍提供一个局部实现:创建 Offer,发送到指定 url(作为简单信令回路)。\n this.pc = new RTCPeerConnection({\n // 你可以在这里配置 TURN/STUN 服务器\n iceServers: this.iceServers\n })\n\n // 跟踪媒体流\n this.pc.ontrack = (event) => {\n // event.streams 常有但并非所有实现都一致,尽量兼容\n const stream = event.streams && event.streams[0] ? event.streams[0] : null\n if (stream) {\n this.video.srcObject = stream\n // 如有 onTrack 回调供外部监听\n if (typeof this.bindings.onTrack === 'function') {\n this.bindings.onTrack(stream)\n }\n } else if (event.streams && event.streams.length) {\n this.video.srcObject = event.streams[0]\n }\n }\n\n // 通过信令发送/接收 ICE 候选\n this.pc.onicecandidate = (ev) => {\n if (ev.candidate && this.signaling && typeof this.signaling.send === 'function') {\n this.signaling.send({ type: 'ice-candidate', candidate: ev.candidate })\n }\n }\n\n // 如果有外部信令,绑定接收处理\n if (this.signaling && typeof this.signaling.onMessage === 'function') {\n this.signaling.onMessage(async (msg) => {\n if (!msg || !msg.type) return\n switch (msg.type) {\n case 'remote-description':\n {\n const desc = new RTCSessionDescription(msg.description)\n await this.pc.setRemoteDescription(desc)\n // 任何需要时,若收到 offer,需创建 answer\n if (desc.type === 'offer') {\n const answer = await this.pc.createAnswer()\n await this.pc.setLocalDescription(answer)\n this.signaling.send({ type: 'answer', description: this.pc.localDescription })\n }\n }\n break\n case 'ice-candidate':\n try {\n await this.pc.addIceCandidate(new RTCIceCandidate(msg.candidate))\n } catch (e) {\n console.warn('Failed to add ICE candidate:', e)\n }\n break\n default:\n break\n }\n })\n }\n\n // 简易回路:若传入 url,则作为初始握手的兜底(适用于无信令的简单用例)\n if (url) {\n // 注:在此处仍然保持简化实现,若你已经有信令,请忽略这段\n const offer = await this.pc.createOffer({ offerToReceiveVideo: true })\n await this.pc.setLocalDescription(offer)\n\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/sdp' },\n body: offer.sdp\n })\n const answerSdp = await res.text()\n await this.pc.setRemoteDescription({ type: 'answer', sdp: answerSdp })\n } catch (err) {\n console.error('WebRTC init remote description failed:', err)\n }\n }\n }\n\n // 通过显式的信令发送 remote description(若使用外部信令渠道)\n async setRemoteDescription(desc) {\n if (!this.pc) {\n throw new Error('RTCPeerConnection is not initialized')\n }\n await this.pc.setRemoteDescription(desc)\n }\n\n // 提供给外部调用,主动添加本地音视频轨(若需要)\n addTrack(track, stream) {\n if (!this.pc) {\n throw new Error('RTCPeerConnection is not initialized')\n }\n // 注意:对观看端通常不需要添加本地轨道,保留方法以便扩展\n if (stream) {\n stream.addTrack(track)\n } else if (track) {\n const s = this.video.srcObject || new MediaStream()\n s.addTrack(track)\n this.video.srcObject = s\n }\n }\n\n play() { this.video.play().catch(() => {}) }\n pause() { this.video.pause() }\n\n // 清理资源\n destroy() {\n if (this.pc) {\n try {\n this.pc.close()\n } catch (e) {\n // 忽略关闭时的异常\n }\n this.pc = null\n }\n // 断开信令监听\n if (this.signaling && typeof this.signaling.close === 'function') {\n this.signaling.close()\n }\n // 重置视频源\n if (this.video) {\n this.video.srcObject = null\n }\n }\n\n // 可选:绑定外部信令事件监听器\n bindSignalingHandlers({ onRemoteDescription, onIceCandidate, onTrack } = {}) {\n if (typeof onRemoteDescription === 'function') this.bindings.onRemoteDescription = onRemoteDescription\n if (typeof onIceCandidate === 'function') this.bindings.onIceCandidate = onIceCandidate\n if (typeof onTrack === 'function') this.bindings.onTrack = onTrack\n }\n}","export function createLogger(scope) {\n return {\n info: (...args) => console.log(`[${scope}]`, ...args),\n error: (...args) => console.error(`[${scope}]`, ...args),\n }\n}\n","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAABCcAAAQnAEmzTo0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAGCSURBVHgB7Vchd8IwEP7KQ63TxU+DLh6Pr5/Hr5pp9ivq8fPzoDfNsOts91172QJvtGmzDgTfe/eaprl8yeUudwXOhMA0iqII+ZhTxugHe0oWBMHum5ikER9Lygj94p2yIHk+1I7EIn2h5NqeUkJV2MANY53L1gl1LtmgWDUzxJEh5WoezQxqiQlly/4nOIA6CyXe2TrsT/mIdWEYHOl9oiU4YUJZUeYNQz/slyE8oA6Z6OstZe2qO4AHxEnwc47PLVT9dqzkKXc+MmGCaufexG+onCvWM8xPDeR3cRpxRnMP7OFBLGc2QxUO93CHLDCrG1B7xjRfGfBwj2Ho2NQy/a9oPGMlT/HH8PLqK/GV+CKJG8OJN9IdqgukFRiGm87Emltn6ADqHuT2YzSZ2unCP4Ha3F67Y654yZVP0B45dV/RlVjJ29zTzriYcLpBfzjwF2PqLaqEP+WZPqAm4XeEhGOs7bJAMAW9fFjhfwr6MlfbvzBStkjFGKEfiFXXWiCeD19pa3LqeLh36gAAAABJRU5ErkJggg==\"","// import { App } from 'vue'\n\nexport const clickOutside = {\n beforeMount(el, binding) {\n el.__clickOutsideHandler__ = (event) => {\n if (!el.contains(event.target) && typeof binding.value === 'function') {\n binding.value(event)\n }\n }\n document.addEventListener('mousedown', el.__clickOutsideHandler__)\n },\n unmounted(el) {\n document.removeEventListener('mousedown', el.__clickOutsideHandler__)\n el.__clickOutsideHandler__ = null\n }\n}\n\n// 注册全局指令\n// App.directive('click-outside', clickOutside) ","import { defineComponent, openBlock, createBlock, createVNode } from 'vue';\n\nvar script = defineComponent({\n name: \"Setting\"\n});\n\nconst _hoisted_1 = {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 1024 1024\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createVNode(\"path\", {\n fill: \"currentColor\",\n 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\"\n}, null, -1);\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createBlock(\"svg\", _hoisted_1, [\n _hoisted_2\n ]);\n}\n\nscript.render = render;\nscript.__file = \"packages/components/Setting.vue\";\n\nexport default script;\n","import { defineComponent, openBlock, createBlock, createVNode } from 'vue';\n\nvar script = defineComponent({\n name: \"ZoomIn\"\n});\n\nconst _hoisted_1 = {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 1024 1024\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createVNode(\"path\", {\n fill: \"currentColor\",\n 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\"\n}, null, -1);\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createBlock(\"svg\", _hoisted_1, [\n _hoisted_2\n ]);\n}\n\nscript.render = render;\nscript.__file = \"packages/components/ZoomIn.vue\";\n\nexport default script;\n","import { defineComponent, openBlock, createBlock, createVNode } from 'vue';\n\nvar script = defineComponent({\n name: \"ZoomOut\"\n});\n\nconst _hoisted_1 = {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 1024 1024\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createVNode(\"path\", {\n fill: \"currentColor\",\n 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\"\n}, null, -1);\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createBlock(\"svg\", _hoisted_1, [\n _hoisted_2\n ]);\n}\n\nscript.render = render;\nscript.__file = \"packages/components/ZoomOut.vue\";\n\nexport default script;\n","<template>\n<div class=\"player-controls\" :class=\"{'is-collapsed': isCollapsed}\">\n <div class=\"controller-trigger\" @click=\"isCollapsed = !isCollapsed;\">\n <slot name=\"controller-trigger\">\n <div class=\"trigger-btn\"><Setting /></div>\n </slot>\n </div>\n <div class=\"controller\" v-click-outside=\"() => isCollapsed = true\">\n <slot name=\"controller-panel\">\n <div class=\"controller-content\">\n <div class=\"header\">\n <div class=\"operation\">\n <el-button type=\"primary\" size=\"small\" @click=\"handlePerspective(1)\">当前画面</el-button>\n <el-button type=\"primary\" size=\"small\" @click=\"handlePerspective(2)\">布防画面</el-button>\n </div>\n <el-tooltip content=\"存为默认画面\" placement=\"top\">\n <img class=\"save-icon cursor-pointer\" :src=\"saveImg\" @click=\"handleSave\" />\n </el-tooltip>\n </div>\n <div class=\"cockpit-container\">\n <div class=\"cockpit-wrapper\">\n <img class=\"cockpit-bg\" :src=\"cockpitImg\" />\n <div class=\"up cockpit-btn\" :class=\"{'is-active': command === 'TILT_UP'}\" @mousedown=\"handleMouseDown('TILT_UP')\" @mouseup=\"handleMouseUp\"> </div>\n <div class=\"down cockpit-btn\" :class=\"{'is-active': command === 'TILT_DOWN'}\" @mousedown=\"handleMouseDown('TILT_DOWN')\" @mouseup=\"handleMouseUp\"> </div>\n <div class=\"left cockpit-btn\" :class=\"{'is-active': command === 'PAN_LEFT'}\" @mousedown=\"handleMouseDown('PAN_LEFT')\" @mouseup=\"handleMouseUp\"> </div>\n <div class=\"right cockpit-btn\" :class=\"{'is-active': command === 'PAN_RIGHT'}\" @mousedown=\"handleMouseDown('PAN_RIGHT')\" @mouseup=\"handleMouseUp\"> </div>\n </div>\n </div>\n <div class=\"block\"> \n <div class=\"description\">云台转速</div>\n <el-slider\n v-model=\"speed\"\n :min=\"1\"\n :max=\"7\"\n show-stops\n :marks=\"marks\"\n style=\" margin-top: -8px; margin-bottom: 18px;\"\n >\n </el-slider>\n </div>\n <div class=\"block\">\n <div class=\"description\">画面缩放</div>\n <el-button :icon=\"ZoomIn\" circle @mousedown.native=\"handleMouseDown('ZOOM_IN')\" @mouseup.native=\"handleMouseUp\"></el-button>\n <el-button :icon=\"ZoomOut\" circle @mousedown.native=\"handleMouseDown('ZOOM_OUT')\" @mouseup.native=\"handleMouseUp\"></el-button>\n </div>\n </div>\n </slot>\n </div>\n</div>\n</template>\n<script>\nexport default {\n name: 'StreamPlayerControls',\n}\n</script>\n<script setup>\nimport { watchEffect, onBeforeUnmount, onMounted, ref, reactive } from 'vue';\nimport cockpitImg from '../../assets/images/cockpit.png';\nimport saveImg from '../../assets/images/icon-save.png';\nimport { clickOutside } from './utils/directive';\n\nimport { ElButton, ElSlider, ElTooltip } from 'element-plus';\nimport { ZoomIn, ZoomOut, Setting } from '@element-plus/icons'\n\n// 注册局部指令\nconst vClickOutside = clickOutside;\n\nimport 'element-plus/es/components/button/style/css';\nimport 'element-plus/es/components/slider/style/css';\nimport 'element-plus/es/components/tooltip/style/css';\n\n// Props\nconst props = defineProps({\n playControlStart: {\n type: Function,\n default: () => {}\n },\n playControlStop: {\n type: Function,\n default: () => {}\n },\n setPerspective: {\n type: Function,\n default: () => {}\n },\n savePerspective: {\n type: Function,\n default: () => {}\n },\n});\n\nconst speed = ref(5);\nconst marks = reactive({\n 1: '慢',\n 7: '快'\n});\nconst command = ref('');\nconst isAlarmMode = ref(false);\nconst isCollapsed = ref(true);\n\nwatchEffect(() => {\n});\n\nonMounted(() => {\n});\n\nonBeforeUnmount(() => {\n if (command.value) {\n props.playControlStop({\n command: command.value,\n speed: speed.value,\n });\n }\n});\n\n// Methods\nfunction handleMouseDown(cmd) {\n command.value = cmd;\n props.playControlStart({\n command: cmd,\n speed: speed.value,\n })\n // .then((res) => {\n // if (res.data && res.data.code === 200) proxy?.$message.success('控制请求成功,请等待画面回流');\n // });\n}\n\nfunction handleMouseUp() {\n props.playControlStop({\n command: command.value,\n speed: speed.value,\n })\n // .then(() => {\n // command.value = '';\n // });\n}\n\nfunction handlePerspective(type) {\n isAlarmMode.value = type === 2;\n props.setPerspective({\n type,\n })\n // .then((res) => {\n // if (res.data && res.data.code === 200) proxy?.$message.success('视角切换请求成功,请等待画面回流');\n // });\n}\n\nfunction handleSave() {\n props.savePerspective()\n // .then(() => {\n // proxy?.$message?.success('保存成功');\n // });\n}\n</script>\n\n<style>\n.controller {\n width: 300px;\n background: rgba(0,0,0,0.8);\n opacity: 1;\n transform: translateX(0);\n transition: all cubic-bezier(0.4, 0, 0.2, 1) 0.3s;\n z-index: 10;\n pointer-events: all;\n}\n\n@media screen and (max-width: 1512px) {\n .controller {\n width: 210px;\n }\n\n .controller .controller-content {\n transform: scale(0.95);\n padding: 4px 8px;\n }\n}\n\n.controller-content {\n padding: 4px 20px;\n}\n\n.player-controls.is-collapsed .controller {\n opacity: 0;\n transform: translateX(-10px);\n pointer-events: none;\n}\n\n.save-icon {\n width: 20px;\n height: 20px;\n max-width: unset;\n}\n\n.header {\n display: flex;\n justify-content: space-between;\n gap: 16px;\n align-items: center;\n}\n\n.operation {\n white-space: nowrap;\n}\n\n.cockpit-container {\n margin-top: 30px;\n}\n\n.cockpit-bg,\n.cockpit-wrapper {\n width: 174px;\n height: 174px;\n margin: 0 auto;\n position: relative;\n}\n\n.cockpit-bg {\n position: absolute;\n top: 0;\n left: 0;\n}\n\n.cockpit-btn {\n position: absolute;\n /* background: rgba(255, 0, 0, 0.5); */\n width: 112px;\n height: 52px;\n z-index: 1;\n cursor: pointer;\n}\n.cockpit-btn.is-active {\n background: center / cover no-repeat url('../../assets/images/cockpit-btn.png');\n /* background: center / cover no-repeat url('~@/assets/images/cockpit-btn.png'); */\n}\n.cockpit-btn.left,\n.cockpit-btn.right {\n transform: rotate(90deg);\n top: 61px;\n}\n.cockpit-btn.up {\n left: 31px;\n top: 7px;\n}\n.cockpit-btn.down {\n left: 31px;\n transform: rotate(180deg);\n top: 115px;\n}\n.cockpit-btn.left {\n left: -23px;\n transform: rotate(-90deg);\n}\n.cockpit-btn.right {\n left: 85px;\n}\n\n.block {\n margin-top: 12px;\n}\n.block .el-button {\n font-size: 20px;\n background: transparent;\n border-color: var(--el-color-primary);\n color: var(--el-color-primary);\n}\n\n.description {\n color: rgba(255, 255, 255, 0.80);\n font-family: \"PingFang SC\";\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 24px;\n margin-bottom: 8px;\n}\n\n.controller-trigger {\n position: absolute;\n top: 12px;\n left: 12px;\n z-index: 1;\n cursor: pointer;\n visibility: hidden;\n transition: color ease-in-out .3s;\n color: #ffffff3e;\n pointer-events: all;\n}\n\n.player-controls.is-collapsed .controller-trigger {\n visibility: visible;\n color: #ffffff7e;\n}\n\n.player-controls.is-collapsed .controller-trigger:hover {\n color: #ffffff;\n}\n\n.controller-trigger .trigger-btn {\n transition: color ease-out .3s;\n width: 20px;\n height: 20px;\n}\n\n.player-controls {\n position: absolute;\n bottom: 0;\n left: 0;\n top: 0;\n /* display: flex; */\n /* gap: 6px; */\n /* background: rgba(0,0,0,0.4); */\n /* padding: 4px 8px; */\n border-radius: 6px;\n /* transition: all ease-out .3s; */\n user-select: none;\n pointer-events: none;\n}\n</style>","<template>\n <div class=\"video-player\" ref=\"container\">\n <video\n ref=\"videoRef\"\n :class=\"fitMode\"\n :autoplay=\"autoplay\"\n class=\"video-element\"\n playsinline\n controls\n ></video>\n\n <!-- 覆盖层插槽 -->\n <div class=\"video-overlay\">\n <slot name=\"overlay\"></slot>\n </div>\n\n <!-- 自定义控制区 -->\n <slot v-if=\"showControls\" name=\"controller\">\n <Controls v-bind=\"$attrs\">\n <template v-if=\"$slots['controller-trigger']\" #controller-trigger>\n <slot name=\"controller-trigger\"></slot>\n </template>\n\n <template v-if=\"$slots['controller-panel']\" #controller-panel>\n <slot name=\"controller-panel\"></slot>\n </template>\n </Controls>\n </slot>\n\n <!-- 加载/错误提示 -->\n <div v-if=\"loading\" class=\"status-overlay\">加载中...</div>\n <div v-if=\"error\" class=\"status-overlay error\">连接错误,正在重试({{ retryCount }}/{{ maxRetries }})...</div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'StreamPlayer', \n}\n</script>\n\n<script setup>\nimport { ref, watch, onMounted, onBeforeUnmount, nextTick } from 'vue'\nimport HlsAdapter from './adapters/HlsAdapter'\nimport FlvAdapter from './adapters/FlvAdapter'\nimport WebRTCAdapter from './adapters/WebRTCAdapter'\nimport { createLogger } from './utils/logger'\n\nimport Controls from './controls.vue'\n\n// 组件 Props\nconst props = defineProps({\n src: { type: String, required: true },\n protocol: { type: String, default: 'hls' },\n autoplay: { type: Boolean, default: false },\n showControls: { type: Boolean, default: true },\n fitMode: {\n type: String,\n default: 'contain', // 'contain' | 'fill' | 'cover'\n },\n reconnect: { type: Boolean, default: true }, // 自动重连开关\n maxRetries: { type: Number, default: 3 }, // 最大重试次数\n retryDelay: { type: Number, default: 3000 }, // 每次重试间隔\n beforeInit: { type: Function, default: () => {}},\n})\n\n// 回调事件(供父组件监听)\nconst emit = defineEmits([\n 'init', // 播放器初始化\n 'loaded', // 视频加载完毕\n 'play', // 开始播放\n 'pause', // 暂停播放\n 'error', // 播放错误\n 'destroy', // 销毁\n])\n\nconst videoRef = ref(null)\nconst container = ref(null)\nconst player = ref(null)\nconst isPlaying = ref(false)\nconst loading = ref(false)\nconst error = ref(false)\nconst retryCount = ref(0)\nconst log = createLogger('VideoPlayer')\n\nfunction createAdapter(protocol, video) {\n switch (protocol) {\n case 'flv': return new FlvAdapter(video)\n case 'webrtc': return new WebRTCAdapter(video)\n case 'hls':\n default: return new HlsAdapter(video)\n }\n}\n\n/** 初始化播放器 */\nasync function initPlayer() {\n if (!videoRef.value || !props.src) return\n destroy()\n\n loading.value = true\n error.value = false\n\n try {\n player.value = createAdapter(props.protocol, videoRef.value)\n if (props.beforeInit) {\n await props.beforeInit();\n }\n await player.value.init(props.src)\n emit('init', { protocol: props.protocol })\n\n const video = videoRef.value\n if (video) {\n video.addEventListener('loadeddata', () => emit('loaded'))\n video.addEventListener('playing', () => emit('play'))\n video.addEventListener('pause', () => emit('pause'))\n video.addEventListener('error', (e) => handleError(e))\n }\n\n if (props.autoplay) {\n await player.value.play()\n isPlaying.value = true\n }\n\n loading.value = false\n retryCount.value = 0\n } catch (err) {\n handleError(err)\n // emit('error', err)\n // log.error('Init player failed:', err)\n }\n}\n\n/** 自动重连机制 */\nfunction handleError(err) {\n log.error('Playback error:', err)\n emit('error', err)\n error.value = true\n loading.value = false\n\n if (props.reconnect && retryCount.value < props.maxRetries) {\n retryCount.value++\n setTimeout(async () => {\n emit('reconnect', { attempt: retryCount.value })\n await nextTick()\n await initPlayer()\n }, props.retryDelay)\n } else {\n log.warn('Max retry reached or reconnect disabled')\n }\n}\n\n/** 播放/暂停 */\nfunction togglePlay() {\n if (!player.value) return\n if (isPlaying.value) {\n player.value.pause()\n emit('pause')\n } else {\n player.value.play()\n emit('play')\n }\n isPlaying.value = !isPlaying.value\n}\n\n/** 截图 */\nfunction screenshot() {\n const video = videoRef.value\n if (!video) return\n const canvas = document.createElement('canvas')\n canvas.width = video.videoWidth\n canvas.height = video.videoHeight\n const ctx = canvas.getContext('2d')\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height)\n const dataURL = canvas.toDataURL('image/png')\n const link = document.createElement('a')\n link.href = dataURL\n link.download = 'snapshot.png'\n link.click()\n}\n\n/** 销毁播放器 */\nfunction destroy() {\n if (player.value) {\n player.value.destroy()\n emit('destroy')\n player.value = null\n isPlaying.value = false\n }\n}\n\nwatch(() => props.src, initPlayer);\nonMounted(initPlayer);\nonBeforeUnmount(destroy);\n\ndefineExpose({\n togglePlay,\n screenshot,\n});\n\n</script>\n\n<style scoped>\n.video-player {\n position: relative;\n background: #000;\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n.video-element {\n width: 100%;\n height: 100%;\n min-height: 400px;\n object-fit: contain;\n}\n.video-element.contain {\n object-fit: contain;\n}\n.video-element.fill {\n object-fit: fill;\n}\n.video-element.cover {\n object-fit: cover;\n}\n\n</style>\n","<template>\n <el-dialog\n v-model:visible=\"visible\"\n :before-close=\"close\"\n :append-to-body=\"true\"\n :class=\"dialogClass\"\n top=\"3vh\"\n width=\"90vw\"\n modal\n destroy-on-close\n class=\"stream-player-dialog\"\n @open=\"onOpen\"\n @close=\"onClose\"\n >\n <div class=\"dialog-content-wrapper\">\n <div class=\"stream-player-wrapper\">\n <stream-player v-bind=\"$attrs\">\n <template v-if=\"$slots.overlay\" #overlay>\n <slot name=\"overlay\"></slot>\n </template>\n\n <template v-if=\"$slots.controller\" #controller>\n <slot name=\"controller\">\n </slot>\n </template>\n <template v-if=\"$slots['controller-trigger']\" #controller-trigger>\n <slot name=\"controller-trigger\">\n </slot>\n </template>\n <template v-if=\"$slots['controller-panel']\" #controller-panel>\n <slot name=\"controller-panel\">\n </slot>\n </template>\n </stream-player>\n </div>\n <slot name=\"dialog-content\"></slot>\n </div>\n </el-dialog>\n</template>\n<script>\nexport default {\n name: 'StreamPlayerDialog',\n}\n</script>\n\n<script setup>\nimport { ElDialog, ElLoading } from 'element-plus';\nimport { ref, watch } from 'vue';\n\nimport StreamPlayer from './index.vue'; \n\nimport 'element-plus/es/components/dialog/style/css';\nimport 'element-plus/es/components/loading/style/css';\n\n// const vLoading = ElLoading;\n\n// Props\nconst props = defineProps({\n value: Boolean,\n title: {\n type: String,\n default: '',\n },\n dialogClass: {\n type: String,\n default: '',\n },\n onOpen: Function,\n onClose: Function,\n beforeClose: Function,\n});\n\nconst emit = defineEmits(['update:value']);\n\nconst visible = ref(props.value);\nconst fromAPI = ref(false);\nconst loading = ref(false);\nconst loadingInstance = ref();\n\nwatch(\n () => props.value,\n (newVal) => {\n visible.value = newVal;\n }\n);\n\n// 监听 visible 的变化,同步给父组件,以及执行背景切换\nwatch(visible, (val) => {\n emit('update:value', val);\n});\n\nwatch(loading, (val) => {\n if (val) {\n loadingInstance.value = ElLoading.service({\n target: '.stream-player-wrapper'\n })\n } else if (loadingInstance.value) {\n loadingInstance.value.close();\n }\n})\n\n// 打开对话框\nfunction open() {\n visible.value = true;\n fromAPI.value = true;\n\n if (typeof props.onOpen === 'function') {\n props.onOpen();\n } \n} \n\n// 关闭对话框\nfunction close(done) {\n visible.value = false;\n if (typeof props.beforeClose === 'function') {\n props.beforeClose();\n }\n if (fromAPI.value) {\n emit('update:value', false);\n }\n if (typeof done === 'function') done();\n}\n\ndefineExpose({\n open,\n close,\n})\n</script>\n\n<style>\n.stream-player-dialog {\n background-color: transparent;\n padding: 0;\n}\n\n.stream-player-dialog .el-dialog__header {\n display: none;\n}\n\n.stream-player-dialog .el-dialog__body {\n padding: 0;\n position: relative;\n background: transparent;\n}\n\n.stream-player-dialog .stream-player-wrapper {\n height: 90vh !important;\n}\n\n.stream-player-dialog video {\n max-height: 90vh;\n}\n</style>","import StreamPlayer from './stream-player/index.vue';\nimport StreamPlayerDialog from './stream-player/dialog.vue';\nimport StreamPlayerControls from './stream-player/controls.vue';\n\nexport { StreamPlayer, StreamPlayerDialog, StreamPlayerControls };\n\n\nconst StreamPlayerPlugin = {\n install(Vue) {\n Vue.component(StreamPlayer.name, StreamPlayer);\n Vue.component(StreamPlayerControls.name, StreamPlayerControls);\n const ModalConstructor = Vue.extend(StreamPlayerDialog);\n const instance = new ModalConstructor();\n document.body.appendChild(instance.$mount().$el);\n\n Vue.component(StreamPlayerDialog.name, StreamPlayerDialog)\n\n Vue.prototype.$streamPlayer = {\n open({ title, dialogClass, onOpen, onClose, beforeClose, ...rest }) {\n // 设置 props\n instance.title = title;\n instance.value = true;\n instance.dialogClass = dialogClass;\n \n instance.onOpen = onOpen;\n instance.onClose = onClose;\n instance.beforeClose = beforeClose;\n\n for (let key in rest) {\n instance[key] = rest[key];\n }\n\n // 调用 open 方法\n instance.open();\n return instance;\n },\n close() {\n instance.close();\n },\n };\n },\n};\nexport default StreamPlayerPlugin;\n"],"names":["BaseAdapter","url","HlsAdapter","video","Hls","FlvAdapter","flvjs","WebRTCAdapter","signaling","iceServers","event","stream","ev","msg","desc","answer","e","offer","answerSdp","err","track","s","onRemoteDescription","onIceCandidate","onTrack","createLogger","scope","args","cockpitImg","saveImg","clickOutside","el","binding","script","defineComponent","_hoisted_1","_hoisted_2","createVNode","render","_ctx","_cache","$props","$setup","$data","$options","openBlock","createBlock","Setting","ZoomIn","ZoomOut","__default__","vClickOutside","props","__props","speed","ref","marks","reactive","command","isAlarmMode","isCollapsed","watchEffect","onMounted","onBeforeUnmount","handleMouseDown","cmd","handleMouseUp","handlePerspective","type","handleSave","_createElementBlock","_normalizeClass","_createElementVNode","$event","_renderSlot","_createVNode","_unref","_withDirectives","_openBlock","_hoisted_3","_hoisted_4","_hoisted_5","ElButton","ElTooltip","_hoisted_7","_hoisted_8","_hoisted_10","ElSlider","_hoisted_11","emit","__emit","videoRef","container","player","isPlaying","loading","error","retryCount","log","createAdapter","protocol","initPlayer","destroy","handleError","nextTick","togglePlay","screenshot","canvas","dataURL","link","watch","__expose","Controls","$attrs","_createSlots","$slots","_toDisplayString","visible","fromAPI","loadingInstance","newVal","val","ElLoading","open","close","done","_createBlock","ElDialog","StreamPlayer","StreamPlayerPlugin","Vue","StreamPlayerControls","ModalConstructor","StreamPlayerDialog","instance","title","dialogClass","onOpen","onClose","beforeClose","rest","key"],"mappings":"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","x_google_ignoreList":[8,9,10]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
(function(f,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("hls.js"),require("flv.js"),require("element-plus")):typeof define=="function"&&define.amd?define(["exports","vue","hls.js","flv.js","element-plus"],e):(f=typeof globalThis<"u"?globalThis:f||self,e(f.StreamPlayer={},f.Vue,f.Hls,f.flvjs,f.ElementPlus))})(this,function(f,e,D,x,y){"use strict";class Q{async init(n){}play(){}pause(){}destroy(){}}class T extends Q{constructor(n){super(),this.video=n,this.hls=null}async init(n){D.isSupported()?(this.hls=new D,this.hls.loadSource(n),this.hls.attachMedia(this.video)):this.video.src=n}play(){this.video.play()}pause(){this.video.pause()}destroy(){this.hls&&this.hls.destroy()}}class O extends Q{constructor(n){super(),this.video=n,this.player=null}async init(n){x.isSupported()&&(this.player=x.createPlayer({type:"flv",url:n}),this.player.attachMediaElement(this.video),this.player.load())}play(){this.video.play()}pause(){this.video.pause()}destroy(){this.player&&(this.player.unload(),this.player.detachMediaElement(),this.player.destroy(),this.player=null)}}class L extends Q{constructor(n,t,o=[{urls:"stun:stun.l.google.com:19302"}]){super(),this.video=n,this.pc=null,this.signaling=t||null,this.iceServers=o,this.bindings={onRemoteDescription:null,onIceCandidate:null,onTrack:null}}async init(n){if(this.pc=new RTCPeerConnection({iceServers:this.iceServers}),this.pc.ontrack=t=>{const o=t.streams&&t.streams[0]?t.streams[0]:null;o?(this.video.srcObject=o,typeof this.bindings.onTrack=="function"&&this.bindings.onTrack(o)):t.streams&&t.streams.length&&(this.video.srcObject=t.streams[0])},this.pc.onicecandidate=t=>{t.candidate&&this.signaling&&typeof this.signaling.send=="function"&&this.signaling.send({type:"ice-candidate",candidate:t.candidate})},this.signaling&&typeof this.signaling.onMessage=="function"&&this.signaling.onMessage(async t=>{if(!(!t||!t.type))switch(t.type){case"remote-description":{const o=new RTCSessionDescription(t.description);if(await this.pc.setRemoteDescription(o),o.type==="offer"){const r=await this.pc.createAnswer();await this.pc.setLocalDescription(r),this.signaling.send({type:"answer",description:this.pc.localDescription})}}break;case"ice-candidate":try{await this.pc.addIceCandidate(new RTCIceCandidate(t.candidate))}catch(o){console.warn("Failed to add ICE candidate:",o)}break}}),n){const t=await this.pc.createOffer({offerToReceiveVideo:!0});await this.pc.setLocalDescription(t);try{const r=await(await fetch(n,{method:"POST",headers:{"Content-Type":"application/sdp"},body:t.sdp})).text();await this.pc.setRemoteDescription({type:"answer",sdp:r})}catch(o){console.error("WebRTC init remote description failed:",o)}}}async setRemoteDescription(n){if(!this.pc)throw new Error("RTCPeerConnection is not initialized");await this.pc.setRemoteDescription(n)}addTrack(n,t){if(!this.pc)throw new Error("RTCPeerConnection is not initialized");if(t)t.addTrack(n);else if(n){const o=this.video.srcObject||new MediaStream;o.addTrack(n),this.video.srcObject=o}}play(){this.video.play().catch(()=>{})}pause(){this.video.pause()}destroy(){if(this.pc){try{this.pc.close()}catch{}this.pc=null}this.signaling&&typeof this.signaling.close=="function"&&this.signaling.close(),this.video&&(this.video.srcObject=null)}bindSignalingHandlers({onRemoteDescription:n,onIceCandidate:t,onTrack:o}={}){typeof n=="function"&&(this.bindings.onRemoteDescription=n),typeof t=="function"&&(this.bindings.onIceCandidate=t),typeof o=="function"&&(this.bindings.onTrack=o)}}function G(a){return{info:(...n)=>console.log(`[${a}]`,...n),error:(...n)=>console.error(`[${a}]`,...n)}}const K="data:image/png;base64,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",Y="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAABCcAAAQnAEmzTo0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAGCSURBVHgB7Vchd8IwEP7KQ63TxU+DLh6Pr5/Hr5pp9ivq8fPzoDfNsOts91172QJvtGmzDgTfe/eaprl8yeUudwXOhMA0iqII+ZhTxugHe0oWBMHum5ikER9Lygj94p2yIHk+1I7EIn2h5NqeUkJV2MANY53L1gl1LtmgWDUzxJEh5WoezQxqiQlly/4nOIA6CyXe2TrsT/mIdWEYHOl9oiU4YUJZUeYNQz/slyE8oA6Z6OstZe2qO4AHxEnwc47PLVT9dqzkKXc+MmGCaufexG+onCvWM8xPDeR3cRpxRnMP7OFBLGc2QxUO93CHLDCrG1B7xjRfGfBwj2Ho2NQy/a9oPGMlT/HH8PLqK/GV+CKJG8OJN9IdqgukFRiGm87Emltn6ADqHuT2YzSZ2unCP4Ha3F67Y654yZVP0B45dV/RlVjJ29zTzriYcLpBfzjwF2PqLaqEP+WZPqAm4XeEhGOs7bJAMAW9fFjhfwr6MlfbvzBStkjFGKEfiFXXWiCeD19pa3LqeLh36gAAAABJRU5ErkJggg==",V={beforeMount(a,n){a.__clickOutsideHandler__=t=>{!a.contains(t.target)&&typeof n.value=="function"&&n.value(t)},document.addEventListener("mousedown",a.__clickOutsideHandler__)},unmounted(a){document.removeEventListener("mousedown",a.__clickOutsideHandler__),a.__clickOutsideHandler__=null}},me="",we="",Be="",Ee="",Qe="",Ie="",Ue="";var I=e.defineComponent({name:"Setting"});const b={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},H=e.createVNode("path",{fill:"currentColor",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"},null,-1);function R(a,n,t,o,r,l){return e.openBlock(),e.createBlock("svg",b,[H])}I.render=R,I.__file="packages/components/Setting.vue";const P=I;var U=e.defineComponent({name:"ZoomIn"});const j={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},v=e.createVNode("path",{fill:"currentColor",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"},null,-1);function z(a,n,t,o,r,l){return e.openBlock(),e.createBlock("svg",j,[v])}U.render=z,U.__file="packages/components/ZoomIn.vue";const N=U;var M=e.defineComponent({name:"ZoomOut"});const J={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},X=e.createVNode("path",{fill:"currentColor",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"},null,-1);function q(a,n,t,o,r,l){return e.openBlock(),e.createBlock("svg",J,[X])}M.render=q,M.__file="packages/components/ZoomOut.vue";const W=M,Me="",Z={class:"trigger-btn"},_={class:"controller"},$={class:"controller-content"},ee={class:"header"},te={class:"operation"},oe=["src"],ne={class:"cockpit-container"},ae={class:"cockpit-wrapper"},se=["src"],ie={class:"block"},le={class:"block"},w=Object.assign({name:"StreamPlayerControls"},{props:{playControlStart:{type:Function,default:()=>{}},playControlStop:{type:Function,default:()=>{}},setPerspective:{type:Function,default:()=>{}},savePerspective:{type:Function,default:()=>{}}},setup(a){const n=V,t=a,o=e.ref(5),r=e.reactive({1:"慢",7:"快"}),l=e.ref(""),m=e.ref(!1),p=e.ref(!0);e.watchEffect(()=>{}),e.onMounted(()=>{}),e.onBeforeUnmount(()=>{l.value&&t.playControlStop({command:l.value,speed:o.value})});function d(g){l.value=g,t.playControlStart({command:g,speed:o.value})}function A(){t.playControlStop({command:l.value,speed:o.value})}function h(g){m.value=g===2,t.setPerspective({type:g})}function i(){t.savePerspective()}return(g,s)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["player-controls",{"is-collapsed":p.value}])},[e.createElementVNode("div",{class:"controller-trigger",onClick:s[0]||(s[0]=u=>{p.value=!p.value})},[e.renderSlot(g.$slots,"controller-trigger",{},()=>[e.createElementVNode("div",Z,[e.createVNode(e.unref(P))])])]),e.withDirectives((e.openBlock(),e.createElementBlock("div",_,[e.renderSlot(g.$slots,"controller-panel",{},()=>[e.createElementVNode("div",$,[e.createElementVNode("div",ee,[e.createElementVNode("div",te,[e.createVNode(e.unref(y.ElButton),{type:"primary",size:"small",onClick:s[1]||(s[1]=u=>h(1))},{default:e.withCtx(()=>[...s[10]||(s[10]=[e.createTextVNode("当前画面",-1)])]),_:1}),e.createVNode(e.unref(y.ElButton),{type:"primary",size:"small",onClick:s[2]||(s[2]=u=>h(2))},{default:e.withCtx(()=>[...s[11]||(s[11]=[e.createTextVNode("布防画面",-1)])]),_:1})]),e.createVNode(e.unref(y.ElTooltip),{content:"存为默认画面",placement:"top"},{default:e.withCtx(()=>[e.createElementVNode("img",{class:"save-icon cursor-pointer",src:e.unref(Y),onClick:i},null,8,oe)]),_:1})]),e.createElementVNode("div",ne,[e.createElementVNode("div",ae,[e.createElementVNode("img",{class:"cockpit-bg",src:e.unref(K)},null,8,se),e.createElementVNode("div",{class:e.normalizeClass(["up cockpit-btn",{"is-active":l.value==="TILT_UP"}]),onMousedown:s[3]||(s[3]=u=>d("TILT_UP")),onMouseup:A},null,34),e.createElementVNode("div",{class:e.normalizeClass(["down cockpit-btn",{"is-active":l.value==="TILT_DOWN"}]),onMousedown:s[4]||(s[4]=u=>d("TILT_DOWN")),onMouseup:A},null,34),e.createElementVNode("div",{class:e.normalizeClass(["left cockpit-btn",{"is-active":l.value==="PAN_LEFT"}]),onMousedown:s[5]||(s[5]=u=>d("PAN_LEFT")),onMouseup:A},null,34),e.createElementVNode("div",{class:e.normalizeClass(["right cockpit-btn",{"is-active":l.value==="PAN_RIGHT"}]),onMousedown:s[6]||(s[6]=u=>d("PAN_RIGHT")),onMouseup:A},null,34)])]),e.createElementVNode("div",ie,[s[12]||(s[12]=e.createElementVNode("div",{class:"description"},"云台转速",-1)),e.createVNode(e.unref(y.ElSlider),{modelValue:o.value,"onUpdate:modelValue":s[7]||(s[7]=u=>o.value=u),min:1,max:7,"show-stops":"",marks:r,style:{"margin-top":"-8px","margin-bottom":"18px"}},null,8,["modelValue","marks"])]),e.createElementVNode("div",le,[s[13]||(s[13]=e.createElementVNode("div",{class:"description"},"画面缩放",-1)),e.createVNode(e.unref(y.ElButton),{icon:e.unref(N),circle:"",onMousedown:s[8]||(s[8]=u=>d("ZOOM_IN")),onMouseup:A},null,8,["icon"]),e.createVNode(e.unref(y.ElButton),{icon:e.unref(W),circle:"",onMousedown:s[9]||(s[9]=u=>d("ZOOM_OUT")),onMouseup:A},null,8,["icon"])])])])])),[[e.unref(n),()=>p.value=!0]])],2))}}),De="",re=(a,n)=>{const t=a.__vccOpts||a;for(const[o,r]of n)t[o]=r;return t},ce=["autoplay"],de={class:"video-overlay"},pe={key:1,class:"status-overlay"},Ae={key:2,class:"status-overlay error"},B=re(Object.assign({name:"StreamPlayer"},{props:{src:{type:String,required:!0},protocol:{type:String,default:"hls"},autoplay:{type:Boolean,default:!1},showControls:{type:Boolean,default:!0},fitMode:{type:String,default:"contain"},reconnect:{type:Boolean,default:!0},maxRetries:{type:Number,default:3},retryDelay:{type:Number,default:3e3},beforeInit:{type:Function,default:()=>{}}},emits:["init","loaded","play","pause","error","destroy"],setup(a,{expose:n,emit:t}){const o=a,r=t,l=e.ref(null),m=e.ref(null),p=e.ref(null),d=e.ref(!1),A=e.ref(!1),h=e.ref(!1),i=e.ref(0),g=G("VideoPlayer");function s(c,C){switch(c){case"flv":return new O(C);case"webrtc":return new L(C);case"hls":default:return new T(C)}}async function u(){if(!(!l.value||!o.src)){k(),A.value=!0,h.value=!1;try{p.value=s(o.protocol,l.value),o.beforeInit&&await o.beforeInit(),await p.value.init(o.src),r("init",{protocol:o.protocol});const c=l.value;c&&(c.addEventListener("loadeddata",()=>r("loaded")),c.addEventListener("playing",()=>r("play")),c.addEventListener("pause",()=>r("pause")),c.addEventListener("error",C=>S(C))),o.autoplay&&(await p.value.play(),d.value=!0),A.value=!1,i.value=0}catch(c){S(c)}}}function S(c){g.error("Playback error:",c),r("error",c),h.value=!0,A.value=!1,o.reconnect&&i.value<o.maxRetries?(i.value++,setTimeout(async()=>{r("reconnect",{attempt:i.value}),await e.nextTick(),await u()},o.retryDelay)):g.warn("Max retry reached or reconnect disabled")}function Ce(){p.value&&(d.value?(p.value.pause(),r("pause")):(p.value.play(),r("play")),d.value=!d.value)}function he(){const c=l.value;if(!c)return;const C=document.createElement("canvas");C.width=c.videoWidth,C.height=c.videoHeight,C.getContext("2d").drawImage(c,0,0,C.width,C.height);const ye=C.toDataURL("image/png"),F=document.createElement("a");F.href=ye,F.download="snapshot.png",F.click()}function k(){p.value&&(p.value.destroy(),r("destroy"),p.value=null,d.value=!1)}return e.watch(()=>o.src,u),e.onMounted(u),e.onBeforeUnmount(k),n({togglePlay:Ce,screenshot:he}),(c,C)=>(e.openBlock(),e.createElementBlock("div",{class:"video-player",ref_key:"container",ref:m},[e.createElementVNode("video",{ref_key:"videoRef",ref:l,class:e.normalizeClass([a.fitMode,"video-element"]),autoplay:a.autoplay,playsinline:"",controls:""},null,10,ce),e.createElementVNode("div",de,[e.renderSlot(c.$slots,"overlay",{},void 0,!0)]),a.showControls?e.renderSlot(c.$slots,"controller",{key:0},()=>[e.createVNode(w,e.normalizeProps(e.guardReactiveProps(c.$attrs)),e.createSlots({_:2},[c.$slots["controller-trigger"]?{name:"controller-trigger",fn:e.withCtx(()=>[e.renderSlot(c.$slots,"controller-trigger",{},void 0,!0)]),key:"0"}:void 0,c.$slots["controller-panel"]?{name:"controller-panel",fn:e.withCtx(()=>[e.renderSlot(c.$slots,"controller-panel",{},void 0,!0)]),key:"1"}:void 0]),1040)],!0):e.createCommentVNode("",!0),A.value?(e.openBlock(),e.createElementBlock("div",pe,"加载中...")):e.createCommentVNode("",!0),h.value?(e.openBlock(),e.createElementBlock("div",Ae,"连接错误,正在重试("+e.toDisplayString(i.value)+"/"+e.toDisplayString(a.maxRetries)+")...",1)):e.createCommentVNode("",!0)],512))}}),[["__scopeId","data-v-3ced781c"]]),ke="",Te="",Oe="",Le="",ge={class:"dialog-content-wrapper"},ue={class:"stream-player-wrapper"},E=Object.assign({name:"StreamPlayerDialog"},{props:{value:Boolean,title:{type:String,default:""},dialogClass:{type:String,default:""},onOpen:Function,onClose:Function,beforeClose:Function},emits:["update:value"],setup(a,{expose:n,emit:t}){const o=a,r=t,l=e.ref(o.value),m=e.ref(!1),p=e.ref(!1),d=e.ref();e.watch(()=>o.value,i=>{l.value=i}),e.watch(l,i=>{r("update:value",i)}),e.watch(p,i=>{i?d.value=y.ElLoading.service({target:".stream-player-wrapper"}):d.value&&d.value.close()});function A(){l.value=!0,m.value=!0,typeof o.onOpen=="function"&&o.onOpen()}function h(i){l.value=!1,typeof o.beforeClose=="function"&&o.beforeClose(),m.value&&r("update:value",!1),typeof i=="function"&&i()}return n({open:A,close:h}),(i,g)=>(e.openBlock(),e.createBlock(e.unref(y.ElDialog),{visible:l.value,"onUpdate:visible":g[0]||(g[0]=s=>l.value=s),"before-close":h,"append-to-body":!0,class:e.normalizeClass([a.dialogClass,"stream-player-dialog"]),top:"3vh",width:"90vw",modal:"","destroy-on-close":"",onOpen:a.onOpen,onClose:a.onClose},{default:e.withCtx(()=>[e.createElementVNode("div",ge,[e.createElementVNode("div",ue,[e.createVNode(B,e.normalizeProps(e.guardReactiveProps(i.$attrs)),e.createSlots({_:2},[i.$slots.overlay?{name:"overlay",fn:e.withCtx(()=>[e.renderSlot(i.$slots,"overlay")]),key:"0"}:void 0,i.$slots.controller?{name:"controller",fn:e.withCtx(()=>[e.renderSlot(i.$slots,"controller")]),key:"1"}:void 0,i.$slots["controller-trigger"]?{name:"controller-trigger",fn:e.withCtx(()=>[e.renderSlot(i.$slots,"controller-trigger")]),key:"2"}:void 0,i.$slots["controller-panel"]?{name:"controller-panel",fn:e.withCtx(()=>[e.renderSlot(i.$slots,"controller-panel")]),key:"3"}:void 0]),1040)]),e.renderSlot(i.$slots,"dialog-content")])]),_:3},8,["visible","class","onOpen","onClose"]))}}),fe={install(a){a.component(B.name,B),a.component(w.name,w);const n=a.extend(E),t=new n;document.body.appendChild(t.$mount().$el),a.component(E.name,E),a.prototype.$streamPlayer={open({title:o,dialogClass:r,onOpen:l,onClose:m,beforeClose:p,...d}){t.title=o,t.value=!0,t.dialogClass=r,t.onOpen=l,t.onClose=m,t.beforeClose=p;for(let A in d)t[A]=d[A];return t.open(),t},close(){t.close()}}}};f.StreamPlayer=B,f.StreamPlayerControls=w,f.StreamPlayerDialog=E,f.default=fe,Object.defineProperties(f,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
|
2
|
+
//# sourceMappingURL=stream-player.umd.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-player.umd.cjs","sources":["../src/packages/stream-player/adapters/BaseAdapter.js","../src/packages/stream-player/adapters/HlsAdapter.js","../src/packages/stream-player/adapters/FlvAdapter.js","../src/packages/stream-player/adapters/WebRTCAdapter.js","../src/packages/stream-player/utils/logger.js","../src/assets/images/cockpit.png","../src/assets/images/icon-save.png","../src/packages/stream-player/utils/directive.js","../node_modules/.pnpm/@element-plus+icons@0.0.11/node_modules/@element-plus/icons/es/Setting.js","../node_modules/.pnpm/@element-plus+icons@0.0.11/node_modules/@element-plus/icons/es/ZoomIn.js","../node_modules/.pnpm/@element-plus+icons@0.0.11/node_modules/@element-plus/icons/es/ZoomOut.js","../src/packages/stream-player/controls.vue","../src/packages/stream-player/index.vue","../src/packages/stream-player/dialog.vue","../src/packages/index.js"],"sourcesContent":["export default class BaseAdapter {\n async init(url) {}\n play() {}\n pause() {}\n destroy() {}\n}\n","import Hls from 'hls.js'\nimport BaseAdapter from './BaseAdapter.js'\n\nexport default class HlsAdapter extends BaseAdapter {\n constructor(video) {\n super()\n this.video = video\n this.hls = null\n }\n\n async init(url) {\n if (Hls.isSupported()) {\n this.hls = new Hls()\n this.hls.loadSource(url)\n this.hls.attachMedia(this.video)\n } else {\n // Safari 原生支持 HLS\n this.video.src = url\n }\n }\n\n play() { this.video.play() }\n pause() { this.video.pause() }\n destroy() { this.hls && this.hls.destroy() }\n}\n","import flvjs from 'flv.js'\nimport BaseAdapter from './BaseAdapter.js'\n\nexport default class FlvAdapter extends BaseAdapter {\n constructor(video) {\n super()\n this.video = video\n this.player = null\n }\n\n async init(url) {\n if (flvjs.isSupported()) {\n this.player = flvjs.createPlayer({ type: 'flv', url })\n this.player.attachMediaElement(this.video)\n this.player.load()\n }\n }\n\n play() { this.video.play() }\n pause() { this.video.pause() }\n destroy() {\n if (this.player) {\n this.player.unload()\n this.player.detachMediaElement()\n this.player.destroy()\n this.player = null\n }\n }\n}\n","import BaseAdapter from './BaseAdapter.js'\n\nexport default class WebRTCAdapter extends BaseAdapter {\n constructor(video, signaling, iceServers = [{ urls: 'stun:stun.l.google.com:19302' }]) {\n super()\n this.video = video\n this.pc = null\n // 信令通道对象,应提供 send(message) 和 onMessage(callback)\n // 若暂无,可传入 null,后续再绑定具体实现\n this.signaling = signaling || null\n this.iceServers = iceServers\n this.bindings = {\n onRemoteDescription: null,\n onIceCandidate: null,\n onTrack: null\n }\n }\n\n async init(url) {\n // 当使用自定义信令通道时,init 不再自行创建 Offer/Answer 流程。\n // 但为了向后兼容,仍提供一个局部实现:创建 Offer,发送到指定 url(作为简单信令回路)。\n this.pc = new RTCPeerConnection({\n // 你可以在这里配置 TURN/STUN 服务器\n iceServers: this.iceServers\n })\n\n // 跟踪媒体流\n this.pc.ontrack = (event) => {\n // event.streams 常有但并非所有实现都一致,尽量兼容\n const stream = event.streams && event.streams[0] ? event.streams[0] : null\n if (stream) {\n this.video.srcObject = stream\n // 如有 onTrack 回调供外部监听\n if (typeof this.bindings.onTrack === 'function') {\n this.bindings.onTrack(stream)\n }\n } else if (event.streams && event.streams.length) {\n this.video.srcObject = event.streams[0]\n }\n }\n\n // 通过信令发送/接收 ICE 候选\n this.pc.onicecandidate = (ev) => {\n if (ev.candidate && this.signaling && typeof this.signaling.send === 'function') {\n this.signaling.send({ type: 'ice-candidate', candidate: ev.candidate })\n }\n }\n\n // 如果有外部信令,绑定接收处理\n if (this.signaling && typeof this.signaling.onMessage === 'function') {\n this.signaling.onMessage(async (msg) => {\n if (!msg || !msg.type) return\n switch (msg.type) {\n case 'remote-description':\n {\n const desc = new RTCSessionDescription(msg.description)\n await this.pc.setRemoteDescription(desc)\n // 任何需要时,若收到 offer,需创建 answer\n if (desc.type === 'offer') {\n const answer = await this.pc.createAnswer()\n await this.pc.setLocalDescription(answer)\n this.signaling.send({ type: 'answer', description: this.pc.localDescription })\n }\n }\n break\n case 'ice-candidate':\n try {\n await this.pc.addIceCandidate(new RTCIceCandidate(msg.candidate))\n } catch (e) {\n console.warn('Failed to add ICE candidate:', e)\n }\n break\n default:\n break\n }\n })\n }\n\n // 简易回路:若传入 url,则作为初始握手的兜底(适用于无信令的简单用例)\n if (url) {\n // 注:在此处仍然保持简化实现,若你已经有信令,请忽略这段\n const offer = await this.pc.createOffer({ offerToReceiveVideo: true })\n await this.pc.setLocalDescription(offer)\n\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/sdp' },\n body: offer.sdp\n })\n const answerSdp = await res.text()\n await this.pc.setRemoteDescription({ type: 'answer', sdp: answerSdp })\n } catch (err) {\n console.error('WebRTC init remote description failed:', err)\n }\n }\n }\n\n // 通过显式的信令发送 remote description(若使用外部信令渠道)\n async setRemoteDescription(desc) {\n if (!this.pc) {\n throw new Error('RTCPeerConnection is not initialized')\n }\n await this.pc.setRemoteDescription(desc)\n }\n\n // 提供给外部调用,主动添加本地音视频轨(若需要)\n addTrack(track, stream) {\n if (!this.pc) {\n throw new Error('RTCPeerConnection is not initialized')\n }\n // 注意:对观看端通常不需要添加本地轨道,保留方法以便扩展\n if (stream) {\n stream.addTrack(track)\n } else if (track) {\n const s = this.video.srcObject || new MediaStream()\n s.addTrack(track)\n this.video.srcObject = s\n }\n }\n\n play() { this.video.play().catch(() => {}) }\n pause() { this.video.pause() }\n\n // 清理资源\n destroy() {\n if (this.pc) {\n try {\n this.pc.close()\n } catch (e) {\n // 忽略关闭时的异常\n }\n this.pc = null\n }\n // 断开信令监听\n if (this.signaling && typeof this.signaling.close === 'function') {\n this.signaling.close()\n }\n // 重置视频源\n if (this.video) {\n this.video.srcObject = null\n }\n }\n\n // 可选:绑定外部信令事件监听器\n bindSignalingHandlers({ onRemoteDescription, onIceCandidate, onTrack } = {}) {\n if (typeof onRemoteDescription === 'function') this.bindings.onRemoteDescription = onRemoteDescription\n if (typeof onIceCandidate === 'function') this.bindings.onIceCandidate = onIceCandidate\n if (typeof onTrack === 'function') this.bindings.onTrack = onTrack\n }\n}","export function createLogger(scope) {\n return {\n info: (...args) => console.log(`[${scope}]`, ...args),\n error: (...args) => console.error(`[${scope}]`, ...args),\n }\n}\n","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAABCcAAAQnAEmzTo0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAGCSURBVHgB7Vchd8IwEP7KQ63TxU+DLh6Pr5/Hr5pp9ivq8fPzoDfNsOts91172QJvtGmzDgTfe/eaprl8yeUudwXOhMA0iqII+ZhTxugHe0oWBMHum5ikER9Lygj94p2yIHk+1I7EIn2h5NqeUkJV2MANY53L1gl1LtmgWDUzxJEh5WoezQxqiQlly/4nOIA6CyXe2TrsT/mIdWEYHOl9oiU4YUJZUeYNQz/slyE8oA6Z6OstZe2qO4AHxEnwc47PLVT9dqzkKXc+MmGCaufexG+onCvWM8xPDeR3cRpxRnMP7OFBLGc2QxUO93CHLDCrG1B7xjRfGfBwj2Ho2NQy/a9oPGMlT/HH8PLqK/GV+CKJG8OJN9IdqgukFRiGm87Emltn6ADqHuT2YzSZ2unCP4Ha3F67Y654yZVP0B45dV/RlVjJ29zTzriYcLpBfzjwF2PqLaqEP+WZPqAm4XeEhGOs7bJAMAW9fFjhfwr6MlfbvzBStkjFGKEfiFXXWiCeD19pa3LqeLh36gAAAABJRU5ErkJggg==\"","// import { App } from 'vue'\n\nexport const clickOutside = {\n beforeMount(el, binding) {\n el.__clickOutsideHandler__ = (event) => {\n if (!el.contains(event.target) && typeof binding.value === 'function') {\n binding.value(event)\n }\n }\n document.addEventListener('mousedown', el.__clickOutsideHandler__)\n },\n unmounted(el) {\n document.removeEventListener('mousedown', el.__clickOutsideHandler__)\n el.__clickOutsideHandler__ = null\n }\n}\n\n// 注册全局指令\n// App.directive('click-outside', clickOutside) ","import { defineComponent, openBlock, createBlock, createVNode } from 'vue';\n\nvar script = defineComponent({\n name: \"Setting\"\n});\n\nconst _hoisted_1 = {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 1024 1024\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createVNode(\"path\", {\n fill: \"currentColor\",\n 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\"\n}, null, -1);\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createBlock(\"svg\", _hoisted_1, [\n _hoisted_2\n ]);\n}\n\nscript.render = render;\nscript.__file = \"packages/components/Setting.vue\";\n\nexport default script;\n","import { defineComponent, openBlock, createBlock, createVNode } from 'vue';\n\nvar script = defineComponent({\n name: \"ZoomIn\"\n});\n\nconst _hoisted_1 = {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 1024 1024\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createVNode(\"path\", {\n fill: \"currentColor\",\n 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\"\n}, null, -1);\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createBlock(\"svg\", _hoisted_1, [\n _hoisted_2\n ]);\n}\n\nscript.render = render;\nscript.__file = \"packages/components/ZoomIn.vue\";\n\nexport default script;\n","import { defineComponent, openBlock, createBlock, createVNode } from 'vue';\n\nvar script = defineComponent({\n name: \"ZoomOut\"\n});\n\nconst _hoisted_1 = {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 1024 1024\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createVNode(\"path\", {\n fill: \"currentColor\",\n 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\"\n}, null, -1);\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createBlock(\"svg\", _hoisted_1, [\n _hoisted_2\n ]);\n}\n\nscript.render = render;\nscript.__file = \"packages/components/ZoomOut.vue\";\n\nexport default script;\n","<template>\n<div class=\"player-controls\" :class=\"{'is-collapsed': isCollapsed}\">\n <div class=\"controller-trigger\" @click=\"isCollapsed = !isCollapsed;\">\n <slot name=\"controller-trigger\">\n <div class=\"trigger-btn\"><Setting /></div>\n </slot>\n </div>\n <div class=\"controller\" v-click-outside=\"() => isCollapsed = true\">\n <slot name=\"controller-panel\">\n <div class=\"controller-content\">\n <div class=\"header\">\n <div class=\"operation\">\n <el-button type=\"primary\" size=\"small\" @click=\"handlePerspective(1)\">当前画面</el-button>\n <el-button type=\"primary\" size=\"small\" @click=\"handlePerspective(2)\">布防画面</el-button>\n </div>\n <el-tooltip content=\"存为默认画面\" placement=\"top\">\n <img class=\"save-icon cursor-pointer\" :src=\"saveImg\" @click=\"handleSave\" />\n </el-tooltip>\n </div>\n <div class=\"cockpit-container\">\n <div class=\"cockpit-wrapper\">\n <img class=\"cockpit-bg\" :src=\"cockpitImg\" />\n <div class=\"up cockpit-btn\" :class=\"{'is-active': command === 'TILT_UP'}\" @mousedown=\"handleMouseDown('TILT_UP')\" @mouseup=\"handleMouseUp\"> </div>\n <div class=\"down cockpit-btn\" :class=\"{'is-active': command === 'TILT_DOWN'}\" @mousedown=\"handleMouseDown('TILT_DOWN')\" @mouseup=\"handleMouseUp\"> </div>\n <div class=\"left cockpit-btn\" :class=\"{'is-active': command === 'PAN_LEFT'}\" @mousedown=\"handleMouseDown('PAN_LEFT')\" @mouseup=\"handleMouseUp\"> </div>\n <div class=\"right cockpit-btn\" :class=\"{'is-active': command === 'PAN_RIGHT'}\" @mousedown=\"handleMouseDown('PAN_RIGHT')\" @mouseup=\"handleMouseUp\"> </div>\n </div>\n </div>\n <div class=\"block\"> \n <div class=\"description\">云台转速</div>\n <el-slider\n v-model=\"speed\"\n :min=\"1\"\n :max=\"7\"\n show-stops\n :marks=\"marks\"\n style=\" margin-top: -8px; margin-bottom: 18px;\"\n >\n </el-slider>\n </div>\n <div class=\"block\">\n <div class=\"description\">画面缩放</div>\n <el-button :icon=\"ZoomIn\" circle @mousedown.native=\"handleMouseDown('ZOOM_IN')\" @mouseup.native=\"handleMouseUp\"></el-button>\n <el-button :icon=\"ZoomOut\" circle @mousedown.native=\"handleMouseDown('ZOOM_OUT')\" @mouseup.native=\"handleMouseUp\"></el-button>\n </div>\n </div>\n </slot>\n </div>\n</div>\n</template>\n<script>\nexport default {\n name: 'StreamPlayerControls',\n}\n</script>\n<script setup>\nimport { watchEffect, onBeforeUnmount, onMounted, ref, reactive } from 'vue';\nimport cockpitImg from '../../assets/images/cockpit.png';\nimport saveImg from '../../assets/images/icon-save.png';\nimport { clickOutside } from './utils/directive';\n\nimport { ElButton, ElSlider, ElTooltip } from 'element-plus';\nimport { ZoomIn, ZoomOut, Setting } from '@element-plus/icons'\n\n// 注册局部指令\nconst vClickOutside = clickOutside;\n\nimport 'element-plus/es/components/button/style/css';\nimport 'element-plus/es/components/slider/style/css';\nimport 'element-plus/es/components/tooltip/style/css';\n\n// Props\nconst props = defineProps({\n playControlStart: {\n type: Function,\n default: () => {}\n },\n playControlStop: {\n type: Function,\n default: () => {}\n },\n setPerspective: {\n type: Function,\n default: () => {}\n },\n savePerspective: {\n type: Function,\n default: () => {}\n },\n});\n\nconst speed = ref(5);\nconst marks = reactive({\n 1: '慢',\n 7: '快'\n});\nconst command = ref('');\nconst isAlarmMode = ref(false);\nconst isCollapsed = ref(true);\n\nwatchEffect(() => {\n});\n\nonMounted(() => {\n});\n\nonBeforeUnmount(() => {\n if (command.value) {\n props.playControlStop({\n command: command.value,\n speed: speed.value,\n });\n }\n});\n\n// Methods\nfunction handleMouseDown(cmd) {\n command.value = cmd;\n props.playControlStart({\n command: cmd,\n speed: speed.value,\n })\n // .then((res) => {\n // if (res.data && res.data.code === 200) proxy?.$message.success('控制请求成功,请等待画面回流');\n // });\n}\n\nfunction handleMouseUp() {\n props.playControlStop({\n command: command.value,\n speed: speed.value,\n })\n // .then(() => {\n // command.value = '';\n // });\n}\n\nfunction handlePerspective(type) {\n isAlarmMode.value = type === 2;\n props.setPerspective({\n type,\n })\n // .then((res) => {\n // if (res.data && res.data.code === 200) proxy?.$message.success('视角切换请求成功,请等待画面回流');\n // });\n}\n\nfunction handleSave() {\n props.savePerspective()\n // .then(() => {\n // proxy?.$message?.success('保存成功');\n // });\n}\n</script>\n\n<style>\n.controller {\n width: 300px;\n background: rgba(0,0,0,0.8);\n opacity: 1;\n transform: translateX(0);\n transition: all cubic-bezier(0.4, 0, 0.2, 1) 0.3s;\n z-index: 10;\n pointer-events: all;\n}\n\n@media screen and (max-width: 1512px) {\n .controller {\n width: 210px;\n }\n\n .controller .controller-content {\n transform: scale(0.95);\n padding: 4px 8px;\n }\n}\n\n.controller-content {\n padding: 4px 20px;\n}\n\n.player-controls.is-collapsed .controller {\n opacity: 0;\n transform: translateX(-10px);\n pointer-events: none;\n}\n\n.save-icon {\n width: 20px;\n height: 20px;\n max-width: unset;\n}\n\n.header {\n display: flex;\n justify-content: space-between;\n gap: 16px;\n align-items: center;\n}\n\n.operation {\n white-space: nowrap;\n}\n\n.cockpit-container {\n margin-top: 30px;\n}\n\n.cockpit-bg,\n.cockpit-wrapper {\n width: 174px;\n height: 174px;\n margin: 0 auto;\n position: relative;\n}\n\n.cockpit-bg {\n position: absolute;\n top: 0;\n left: 0;\n}\n\n.cockpit-btn {\n position: absolute;\n /* background: rgba(255, 0, 0, 0.5); */\n width: 112px;\n height: 52px;\n z-index: 1;\n cursor: pointer;\n}\n.cockpit-btn.is-active {\n background: center / cover no-repeat url('../../assets/images/cockpit-btn.png');\n /* background: center / cover no-repeat url('~@/assets/images/cockpit-btn.png'); */\n}\n.cockpit-btn.left,\n.cockpit-btn.right {\n transform: rotate(90deg);\n top: 61px;\n}\n.cockpit-btn.up {\n left: 31px;\n top: 7px;\n}\n.cockpit-btn.down {\n left: 31px;\n transform: rotate(180deg);\n top: 115px;\n}\n.cockpit-btn.left {\n left: -23px;\n transform: rotate(-90deg);\n}\n.cockpit-btn.right {\n left: 85px;\n}\n\n.block {\n margin-top: 12px;\n}\n.block .el-button {\n font-size: 20px;\n background: transparent;\n border-color: var(--el-color-primary);\n color: var(--el-color-primary);\n}\n\n.description {\n color: rgba(255, 255, 255, 0.80);\n font-family: \"PingFang SC\";\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 24px;\n margin-bottom: 8px;\n}\n\n.controller-trigger {\n position: absolute;\n top: 12px;\n left: 12px;\n z-index: 1;\n cursor: pointer;\n visibility: hidden;\n transition: color ease-in-out .3s;\n color: #ffffff3e;\n pointer-events: all;\n}\n\n.player-controls.is-collapsed .controller-trigger {\n visibility: visible;\n color: #ffffff7e;\n}\n\n.player-controls.is-collapsed .controller-trigger:hover {\n color: #ffffff;\n}\n\n.controller-trigger .trigger-btn {\n transition: color ease-out .3s;\n width: 20px;\n height: 20px;\n}\n\n.player-controls {\n position: absolute;\n bottom: 0;\n left: 0;\n top: 0;\n /* display: flex; */\n /* gap: 6px; */\n /* background: rgba(0,0,0,0.4); */\n /* padding: 4px 8px; */\n border-radius: 6px;\n /* transition: all ease-out .3s; */\n user-select: none;\n pointer-events: none;\n}\n</style>","<template>\n <div class=\"video-player\" ref=\"container\">\n <video\n ref=\"videoRef\"\n :class=\"fitMode\"\n :autoplay=\"autoplay\"\n class=\"video-element\"\n playsinline\n controls\n ></video>\n\n <!-- 覆盖层插槽 -->\n <div class=\"video-overlay\">\n <slot name=\"overlay\"></slot>\n </div>\n\n <!-- 自定义控制区 -->\n <slot v-if=\"showControls\" name=\"controller\">\n <Controls v-bind=\"$attrs\">\n <template v-if=\"$slots['controller-trigger']\" #controller-trigger>\n <slot name=\"controller-trigger\"></slot>\n </template>\n\n <template v-if=\"$slots['controller-panel']\" #controller-panel>\n <slot name=\"controller-panel\"></slot>\n </template>\n </Controls>\n </slot>\n\n <!-- 加载/错误提示 -->\n <div v-if=\"loading\" class=\"status-overlay\">加载中...</div>\n <div v-if=\"error\" class=\"status-overlay error\">连接错误,正在重试({{ retryCount }}/{{ maxRetries }})...</div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'StreamPlayer', \n}\n</script>\n\n<script setup>\nimport { ref, watch, onMounted, onBeforeUnmount, nextTick } from 'vue'\nimport HlsAdapter from './adapters/HlsAdapter'\nimport FlvAdapter from './adapters/FlvAdapter'\nimport WebRTCAdapter from './adapters/WebRTCAdapter'\nimport { createLogger } from './utils/logger'\n\nimport Controls from './controls.vue'\n\n// 组件 Props\nconst props = defineProps({\n src: { type: String, required: true },\n protocol: { type: String, default: 'hls' },\n autoplay: { type: Boolean, default: false },\n showControls: { type: Boolean, default: true },\n fitMode: {\n type: String,\n default: 'contain', // 'contain' | 'fill' | 'cover'\n },\n reconnect: { type: Boolean, default: true }, // 自动重连开关\n maxRetries: { type: Number, default: 3 }, // 最大重试次数\n retryDelay: { type: Number, default: 3000 }, // 每次重试间隔\n beforeInit: { type: Function, default: () => {}},\n})\n\n// 回调事件(供父组件监听)\nconst emit = defineEmits([\n 'init', // 播放器初始化\n 'loaded', // 视频加载完毕\n 'play', // 开始播放\n 'pause', // 暂停播放\n 'error', // 播放错误\n 'destroy', // 销毁\n])\n\nconst videoRef = ref(null)\nconst container = ref(null)\nconst player = ref(null)\nconst isPlaying = ref(false)\nconst loading = ref(false)\nconst error = ref(false)\nconst retryCount = ref(0)\nconst log = createLogger('VideoPlayer')\n\nfunction createAdapter(protocol, video) {\n switch (protocol) {\n case 'flv': return new FlvAdapter(video)\n case 'webrtc': return new WebRTCAdapter(video)\n case 'hls':\n default: return new HlsAdapter(video)\n }\n}\n\n/** 初始化播放器 */\nasync function initPlayer() {\n if (!videoRef.value || !props.src) return\n destroy()\n\n loading.value = true\n error.value = false\n\n try {\n player.value = createAdapter(props.protocol, videoRef.value)\n if (props.beforeInit) {\n await props.beforeInit();\n }\n await player.value.init(props.src)\n emit('init', { protocol: props.protocol })\n\n const video = videoRef.value\n if (video) {\n video.addEventListener('loadeddata', () => emit('loaded'))\n video.addEventListener('playing', () => emit('play'))\n video.addEventListener('pause', () => emit('pause'))\n video.addEventListener('error', (e) => handleError(e))\n }\n\n if (props.autoplay) {\n await player.value.play()\n isPlaying.value = true\n }\n\n loading.value = false\n retryCount.value = 0\n } catch (err) {\n handleError(err)\n // emit('error', err)\n // log.error('Init player failed:', err)\n }\n}\n\n/** 自动重连机制 */\nfunction handleError(err) {\n log.error('Playback error:', err)\n emit('error', err)\n error.value = true\n loading.value = false\n\n if (props.reconnect && retryCount.value < props.maxRetries) {\n retryCount.value++\n setTimeout(async () => {\n emit('reconnect', { attempt: retryCount.value })\n await nextTick()\n await initPlayer()\n }, props.retryDelay)\n } else {\n log.warn('Max retry reached or reconnect disabled')\n }\n}\n\n/** 播放/暂停 */\nfunction togglePlay() {\n if (!player.value) return\n if (isPlaying.value) {\n player.value.pause()\n emit('pause')\n } else {\n player.value.play()\n emit('play')\n }\n isPlaying.value = !isPlaying.value\n}\n\n/** 截图 */\nfunction screenshot() {\n const video = videoRef.value\n if (!video) return\n const canvas = document.createElement('canvas')\n canvas.width = video.videoWidth\n canvas.height = video.videoHeight\n const ctx = canvas.getContext('2d')\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height)\n const dataURL = canvas.toDataURL('image/png')\n const link = document.createElement('a')\n link.href = dataURL\n link.download = 'snapshot.png'\n link.click()\n}\n\n/** 销毁播放器 */\nfunction destroy() {\n if (player.value) {\n player.value.destroy()\n emit('destroy')\n player.value = null\n isPlaying.value = false\n }\n}\n\nwatch(() => props.src, initPlayer);\nonMounted(initPlayer);\nonBeforeUnmount(destroy);\n\ndefineExpose({\n togglePlay,\n screenshot,\n});\n\n</script>\n\n<style scoped>\n.video-player {\n position: relative;\n background: #000;\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n.video-element {\n width: 100%;\n height: 100%;\n min-height: 400px;\n object-fit: contain;\n}\n.video-element.contain {\n object-fit: contain;\n}\n.video-element.fill {\n object-fit: fill;\n}\n.video-element.cover {\n object-fit: cover;\n}\n\n</style>\n","<template>\n <el-dialog\n v-model:visible=\"visible\"\n :before-close=\"close\"\n :append-to-body=\"true\"\n :class=\"dialogClass\"\n top=\"3vh\"\n width=\"90vw\"\n modal\n destroy-on-close\n class=\"stream-player-dialog\"\n @open=\"onOpen\"\n @close=\"onClose\"\n >\n <div class=\"dialog-content-wrapper\">\n <div class=\"stream-player-wrapper\">\n <stream-player v-bind=\"$attrs\">\n <template v-if=\"$slots.overlay\" #overlay>\n <slot name=\"overlay\"></slot>\n </template>\n\n <template v-if=\"$slots.controller\" #controller>\n <slot name=\"controller\">\n </slot>\n </template>\n <template v-if=\"$slots['controller-trigger']\" #controller-trigger>\n <slot name=\"controller-trigger\">\n </slot>\n </template>\n <template v-if=\"$slots['controller-panel']\" #controller-panel>\n <slot name=\"controller-panel\">\n </slot>\n </template>\n </stream-player>\n </div>\n <slot name=\"dialog-content\"></slot>\n </div>\n </el-dialog>\n</template>\n<script>\nexport default {\n name: 'StreamPlayerDialog',\n}\n</script>\n\n<script setup>\nimport { ElDialog, ElLoading } from 'element-plus';\nimport { ref, watch } from 'vue';\n\nimport StreamPlayer from './index.vue'; \n\nimport 'element-plus/es/components/dialog/style/css';\nimport 'element-plus/es/components/loading/style/css';\n\n// const vLoading = ElLoading;\n\n// Props\nconst props = defineProps({\n value: Boolean,\n title: {\n type: String,\n default: '',\n },\n dialogClass: {\n type: String,\n default: '',\n },\n onOpen: Function,\n onClose: Function,\n beforeClose: Function,\n});\n\nconst emit = defineEmits(['update:value']);\n\nconst visible = ref(props.value);\nconst fromAPI = ref(false);\nconst loading = ref(false);\nconst loadingInstance = ref();\n\nwatch(\n () => props.value,\n (newVal) => {\n visible.value = newVal;\n }\n);\n\n// 监听 visible 的变化,同步给父组件,以及执行背景切换\nwatch(visible, (val) => {\n emit('update:value', val);\n});\n\nwatch(loading, (val) => {\n if (val) {\n loadingInstance.value = ElLoading.service({\n target: '.stream-player-wrapper'\n })\n } else if (loadingInstance.value) {\n loadingInstance.value.close();\n }\n})\n\n// 打开对话框\nfunction open() {\n visible.value = true;\n fromAPI.value = true;\n\n if (typeof props.onOpen === 'function') {\n props.onOpen();\n } \n} \n\n// 关闭对话框\nfunction close(done) {\n visible.value = false;\n if (typeof props.beforeClose === 'function') {\n props.beforeClose();\n }\n if (fromAPI.value) {\n emit('update:value', false);\n }\n if (typeof done === 'function') done();\n}\n\ndefineExpose({\n open,\n close,\n})\n</script>\n\n<style>\n.stream-player-dialog {\n background-color: transparent;\n padding: 0;\n}\n\n.stream-player-dialog .el-dialog__header {\n display: none;\n}\n\n.stream-player-dialog .el-dialog__body {\n padding: 0;\n position: relative;\n background: transparent;\n}\n\n.stream-player-dialog .stream-player-wrapper {\n height: 90vh !important;\n}\n\n.stream-player-dialog video {\n max-height: 90vh;\n}\n</style>","import StreamPlayer from './stream-player/index.vue';\nimport StreamPlayerDialog from './stream-player/dialog.vue';\nimport StreamPlayerControls from './stream-player/controls.vue';\n\nexport { StreamPlayer, StreamPlayerDialog, StreamPlayerControls };\n\n\nconst StreamPlayerPlugin = {\n install(Vue) {\n Vue.component(StreamPlayer.name, StreamPlayer);\n Vue.component(StreamPlayerControls.name, StreamPlayerControls);\n const ModalConstructor = Vue.extend(StreamPlayerDialog);\n const instance = new ModalConstructor();\n document.body.appendChild(instance.$mount().$el);\n\n Vue.component(StreamPlayerDialog.name, StreamPlayerDialog)\n\n Vue.prototype.$streamPlayer = {\n open({ title, dialogClass, onOpen, onClose, beforeClose, ...rest }) {\n // 设置 props\n instance.title = title;\n instance.value = true;\n instance.dialogClass = dialogClass;\n \n instance.onOpen = onOpen;\n instance.onClose = onClose;\n instance.beforeClose = beforeClose;\n\n for (let key in rest) {\n instance[key] = rest[key];\n }\n\n // 调用 open 方法\n instance.open();\n return instance;\n },\n close() {\n instance.close();\n },\n };\n },\n};\nexport default StreamPlayerPlugin;\n"],"names":["BaseAdapter","url","HlsAdapter","video","Hls","FlvAdapter","flvjs","WebRTCAdapter","signaling","iceServers","event","stream","ev","msg","desc","answer","e","offer","answerSdp","err","track","s","onRemoteDescription","onIceCandidate","onTrack","createLogger","scope","args","cockpitImg","saveImg","clickOutside","el","binding","script","defineComponent","_hoisted_1","_hoisted_2","createVNode","render","_ctx","_cache","$props","$setup","$data","$options","openBlock","createBlock","Setting","ZoomIn","ZoomOut","vClickOutside","props","__props","speed","ref","marks","reactive","command","isAlarmMode","isCollapsed","watchEffect","onMounted","onBeforeUnmount","handleMouseDown","cmd","handleMouseUp","handlePerspective","type","handleSave","_createElementBlock","_normalizeClass","_createElementVNode","$event","_renderSlot","_createVNode","_unref","_withDirectives","_openBlock","_hoisted_3","_hoisted_4","_hoisted_5","ElButton","ElTooltip","_hoisted_7","_hoisted_8","_hoisted_10","ElSlider","_hoisted_11","emit","__emit","videoRef","container","player","isPlaying","loading","error","retryCount","log","createAdapter","protocol","initPlayer","destroy","handleError","nextTick","togglePlay","screenshot","canvas","dataURL","link","vue","__expose","Controls","$attrs","_createSlots","$slots","_toDisplayString","visible","fromAPI","loadingInstance","newVal","watch","val","ElLoading","open","close","done","_createBlock","ElDialog","StreamPlayer","StreamPlayerPlugin","Vue","StreamPlayerControls","ModalConstructor","StreamPlayerDialog","instance","title","dialogClass","onOpen","onClose","beforeClose","rest","key"],"mappings":"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","x_google_ignoreList":[8,9,10]}
|
package/lib/style.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@charset "UTF-8";:root{--el-color-white:#ffffff;--el-color-black:#000000;--el-color-primary-rgb:64,158,255;--el-color-success-rgb:103,194,58;--el-color-warning-rgb:230,162,60;--el-color-danger-rgb:245,108,108;--el-color-error-rgb:245,108,108;--el-color-info-rgb:144,147,153;--el-font-size-extra-large:20px;--el-font-size-large:18px;--el-font-size-medium:16px;--el-font-size-base:14px;--el-font-size-small:13px;--el-font-size-extra-small:12px;--el-font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;--el-font-weight-primary:500;--el-font-line-height-primary:24px;--el-index-normal:1;--el-index-top:1000;--el-index-popper:2000;--el-border-radius-base:4px;--el-border-radius-small:2px;--el-border-radius-round:20px;--el-border-radius-circle:100%;--el-transition-duration:.3s;--el-transition-duration-fast:.2s;--el-transition-function-ease-in-out-bezier:cubic-bezier(.645,.045,.355,1);--el-transition-function-fast-bezier:cubic-bezier(.23,1,.32,1);--el-transition-all:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);--el-transition-fade:opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier);--el-transition-md-fade:transform var(--el-transition-duration) var(--el-transition-function-fast-bezier),opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier);--el-transition-fade-linear:opacity var(--el-transition-duration-fast) linear;--el-transition-border:border-color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-transition-box-shadow:box-shadow var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-transition-color:color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-component-size-large:40px;--el-component-size:32px;--el-component-size-small:24px}:root{color-scheme:light;--el-color-primary:#409eff;--el-color-primary-light-3:rgb(121,187,255);--el-color-primary-light-5:rgb(160,207,255);--el-color-primary-light-7:rgb(198,226,255);--el-color-primary-light-8:rgb(217,236,255);--el-color-primary-light-9:rgb(236,245,255);--el-color-primary-dark-2:rgb(51,126,204);--el-color-success:#67c23a;--el-color-success-light-3:rgb(149,212,117);--el-color-success-light-5:rgb(179,225,157);--el-color-success-light-7:rgb(209,237,196);--el-color-success-light-8:rgb(225,243,216);--el-color-success-light-9:rgb(240,249,235);--el-color-success-dark-2:rgb(82,155,46);--el-color-warning:#e6a23c;--el-color-warning-light-3:rgb(238,190,119);--el-color-warning-light-5:rgb(243,209,158);--el-color-warning-light-7:rgb(248,227,197);--el-color-warning-light-8:rgb(250,236,216);--el-color-warning-light-9:rgb(253,246,236);--el-color-warning-dark-2:rgb(184,130,48);--el-color-danger:#f56c6c;--el-color-danger-light-3:rgb(248,152,152);--el-color-danger-light-5:rgb(250,182,182);--el-color-danger-light-7:rgb(252,211,211);--el-color-danger-light-8:rgb(253,226,226);--el-color-danger-light-9:rgb(254,240,240);--el-color-danger-dark-2:rgb(196,86,86);--el-color-error:#f56c6c;--el-color-error-light-3:rgb(248,152,152);--el-color-error-light-5:rgb(250,182,182);--el-color-error-light-7:rgb(252,211,211);--el-color-error-light-8:rgb(253,226,226);--el-color-error-light-9:rgb(254,240,240);--el-color-error-dark-2:rgb(196,86,86);--el-color-info:#909399;--el-color-info-light-3:rgb(177,179,184);--el-color-info-light-5:rgb(200,201,204);--el-color-info-light-7:rgb(222,223,224);--el-color-info-light-8:rgb(233,233,235);--el-color-info-light-9:rgb(244,244,245);--el-color-info-dark-2:rgb(115,118,122);--el-bg-color:#ffffff;--el-bg-color-page:#f2f3f5;--el-bg-color-overlay:#ffffff;--el-text-color-primary:#303133;--el-text-color-regular:#606266;--el-text-color-secondary:#909399;--el-text-color-placeholder:#a8abb2;--el-text-color-disabled:#c0c4cc;--el-border-color:#dcdfe6;--el-border-color-light:#e4e7ed;--el-border-color-lighter:#ebeef5;--el-border-color-extra-light:#f2f6fc;--el-border-color-dark:#d4d7de;--el-border-color-darker:#cdd0d6;--el-fill-color:#f0f2f5;--el-fill-color-light:#f5f7fa;--el-fill-color-lighter:#fafafa;--el-fill-color-extra-light:#fafcff;--el-fill-color-dark:#ebedf0;--el-fill-color-darker:#e6e8eb;--el-fill-color-blank:#ffffff;--el-box-shadow:0px 12px 32px 4px rgba(0,0,0,.04),0px 8px 20px rgba(0,0,0,.08);--el-box-shadow-light:0px 0px 12px rgba(0,0,0,.12);--el-box-shadow-lighter:0px 0px 6px rgba(0,0,0,.12);--el-box-shadow-dark:0px 16px 48px 16px rgba(0,0,0,.08),0px 12px 32px rgba(0,0,0,.12),0px 8px 16px -8px rgba(0,0,0,.16);--el-disabled-bg-color:var(--el-fill-color-light);--el-disabled-text-color:var(--el-text-color-placeholder);--el-disabled-border-color:var(--el-border-color-light);--el-overlay-color:rgba(0,0,0,.8);--el-overlay-color-light:rgba(0,0,0,.7);--el-overlay-color-lighter:rgba(0,0,0,.5);--el-mask-color:rgba(255,255,255,.9);--el-mask-color-extra-light:rgba(255,255,255,.3);--el-border-width:1px;--el-border-style:solid;--el-border-color-hover:var(--el-text-color-disabled);--el-border:var(--el-border-width) var(--el-border-style) var(--el-border-color);--el-svg-monochrome-grey:var(--el-border-color)}.fade-in-linear-enter-active,.fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.fade-in-linear-enter-from,.fade-in-linear-leave-to{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.el-fade-in-linear-enter-from,.el-fade-in-linear-leave-to{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-fade-in-enter-from,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter-from,.el-zoom-in-center-leave-active{opacity:0;transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;transform:scaleY(1);transform-origin:center top;transition:var(--el-transition-md-fade)}.el-zoom-in-top-enter-active[data-popper-placement^=top],.el-zoom-in-top-leave-active[data-popper-placement^=top]{transform-origin:center bottom}.el-zoom-in-top-enter-from,.el-zoom-in-top-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;transform:scaleY(1);transform-origin:center bottom;transition:var(--el-transition-md-fade)}.el-zoom-in-bottom-enter-from,.el-zoom-in-bottom-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;transform:scale(1);transform-origin:top left;transition:var(--el-transition-md-fade)}.el-zoom-in-left-enter-from,.el-zoom-in-left-leave-active{opacity:0;transform:scale(.45)}.collapse-transition{transition:var(--el-transition-duration) height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.el-collapse-transition-enter-active,.el-collapse-transition-leave-active{transition:var(--el-transition-duration) max-height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.horizontal-collapse-transition{transition:var(--el-transition-duration) width ease-in-out,var(--el-transition-duration) padding-left ease-in-out,var(--el-transition-duration) padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{transition:all 1s}.el-list-enter-from,.el-list-leave-to{opacity:0;transform:translateY(-30px)}.el-list-leave-active{position:absolute!important}.el-opacity-transition{transition:opacity var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.el-icon{--color:inherit;align-items:center;display:inline-flex;height:1em;justify-content:center;line-height:1em;position:relative;width:1em;fill:currentColor;color:var(--color);font-size:inherit}.el-icon.is-loading{animation:rotating 2s linear infinite}.el-icon svg{height:1em;width:1em}.el-button{--el-button-font-weight:var(--el-font-weight-primary);--el-button-border-color:var(--el-border-color);--el-button-bg-color:var(--el-fill-color-blank);--el-button-text-color:var(--el-text-color-regular);--el-button-disabled-text-color:var(--el-disabled-text-color);--el-button-disabled-bg-color:var(--el-fill-color-blank);--el-button-disabled-border-color:var(--el-border-color-light);--el-button-divide-border-color:rgba(255,255,255,.5);--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-color-primary-light-9);--el-button-hover-border-color:var(--el-color-primary-light-7);--el-button-active-text-color:var(--el-button-hover-text-color);--el-button-active-border-color:var(--el-color-primary);--el-button-active-bg-color:var(--el-button-hover-bg-color);--el-button-outline-color:var(--el-color-primary-light-5);--el-button-hover-link-text-color:var(--el-text-color-secondary);--el-button-active-color:var(--el-text-color-primary);align-items:center;-webkit-appearance:none;background-color:var(--el-button-bg-color);border:var(--el-border);border-color:var(--el-button-border-color);box-sizing:border-box;color:var(--el-button-text-color);cursor:pointer;display:inline-flex;font-weight:var(--el-button-font-weight);height:32px;justify-content:center;line-height:1;outline:none;text-align:center;transition:.1s;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.el-button:hover{background-color:var(--el-button-hover-bg-color);border-color:var(--el-button-hover-border-color);color:var(--el-button-hover-text-color);outline:none}.el-button:active{background-color:var(--el-button-active-bg-color);border-color:var(--el-button-active-border-color);color:var(--el-button-active-text-color);outline:none}.el-button:focus-visible{outline:2px solid var(--el-button-outline-color);outline-offset:1px;transition:outline-offset 0s,outline 0s}.el-button>span{align-items:center;display:inline-flex}.el-button+.el-button{margin-left:12px}.el-button{border-radius:var(--el-border-radius-base);font-size:var(--el-font-size-base)}.el-button,.el-button.is-round{padding:8px 15px}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon]+span{margin-left:6px}.el-button [class*=el-icon] svg{vertical-align:bottom}.el-button.is-plain{--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-fill-color-blank);--el-button-hover-border-color:var(--el-color-primary)}.el-button.is-active{background-color:var(--el-button-active-bg-color);border-color:var(--el-button-active-border-color);color:var(--el-button-active-text-color);outline:none}.el-button.is-disabled,.el-button.is-disabled:hover{background-color:var(--el-button-disabled-bg-color);background-image:none;border-color:var(--el-button-disabled-border-color);color:var(--el-button-disabled-text-color);cursor:not-allowed}.el-button.is-loading{pointer-events:none;position:relative}.el-button.is-loading:before{background-color:var(--el-mask-color-extra-light);border-radius:inherit;bottom:-1px;content:"";left:-1px;pointer-events:none;position:absolute;right:-1px;top:-1px;z-index:1}.el-button.is-round{border-radius:var(--el-border-radius-round)}.el-button.is-circle{border-radius:50%;padding:8px;width:32px}.el-button.is-text{background-color:transparent;border:0 solid transparent;color:var(--el-button-text-color)}.el-button.is-text.is-disabled{background-color:transparent!important;color:var(--el-button-disabled-text-color)}.el-button.is-text:not(.is-disabled):hover{background-color:var(--el-fill-color-light)}.el-button.is-text:not(.is-disabled):focus-visible{outline:2px solid var(--el-button-outline-color);outline-offset:1px;transition:outline-offset 0s,outline 0s}.el-button.is-text:not(.is-disabled):active{background-color:var(--el-fill-color)}.el-button.is-text:not(.is-disabled).is-has-bg{background-color:var(--el-fill-color-light)}.el-button.is-text:not(.is-disabled).is-has-bg:hover{background-color:var(--el-fill-color)}.el-button.is-text:not(.is-disabled).is-has-bg:active{background-color:var(--el-fill-color-dark)}.el-button__text--expand{letter-spacing:.3em;margin-right:-.3em}.el-button.is-link{background:transparent;border-color:transparent;color:var(--el-button-text-color);height:auto;padding:2px}.el-button.is-link:hover{color:var(--el-button-hover-link-text-color)}.el-button.is-link.is-disabled{background-color:transparent!important;border-color:transparent!important;color:var(--el-button-disabled-text-color)}.el-button.is-link:not(.is-disabled):hover{background-color:transparent;border-color:transparent}.el-button.is-link:not(.is-disabled):active{background-color:transparent;border-color:transparent;color:var(--el-button-active-color)}.el-button--text{background:transparent;border-color:transparent;color:var(--el-color-primary);padding-left:0;padding-right:0}.el-button--text.is-disabled{background-color:transparent!important;border-color:transparent!important;color:var(--el-button-disabled-text-color)}.el-button--text:not(.is-disabled):hover{background-color:transparent;border-color:transparent;color:var(--el-color-primary-light-3)}.el-button--text:not(.is-disabled):active{background-color:transparent;border-color:transparent;color:var(--el-color-primary-dark-2)}.el-button__link--expand{letter-spacing:.3em;margin-right:-.3em}.el-button--primary{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-primary);--el-button-border-color:var(--el-color-primary);--el-button-outline-color:var(--el-color-primary-light-5);--el-button-active-color:var(--el-color-primary-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-primary-light-5);--el-button-hover-bg-color:var(--el-color-primary-light-3);--el-button-hover-border-color:var(--el-color-primary-light-3);--el-button-active-bg-color:var(--el-color-primary-dark-2);--el-button-active-border-color:var(--el-color-primary-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-primary-light-5);--el-button-disabled-border-color:var(--el-color-primary-light-5)}.el-button--primary.is-link,.el-button--primary.is-plain,.el-button--primary.is-text{--el-button-text-color:var(--el-color-primary);--el-button-bg-color:var(--el-color-primary-light-9);--el-button-border-color:var(--el-color-primary-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-primary);--el-button-hover-border-color:var(--el-color-primary);--el-button-active-text-color:var(--el-color-white)}.el-button--primary.is-link.is-disabled,.el-button--primary.is-link.is-disabled:active,.el-button--primary.is-link.is-disabled:focus,.el-button--primary.is-link.is-disabled:hover,.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover,.el-button--primary.is-text.is-disabled,.el-button--primary.is-text.is-disabled:active,.el-button--primary.is-text.is-disabled:focus,.el-button--primary.is-text.is-disabled:hover{background-color:var(--el-color-primary-light-9);border-color:var(--el-color-primary-light-8);color:var(--el-color-primary-light-5)}.el-button--success{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-success);--el-button-border-color:var(--el-color-success);--el-button-outline-color:var(--el-color-success-light-5);--el-button-active-color:var(--el-color-success-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-success-light-5);--el-button-hover-bg-color:var(--el-color-success-light-3);--el-button-hover-border-color:var(--el-color-success-light-3);--el-button-active-bg-color:var(--el-color-success-dark-2);--el-button-active-border-color:var(--el-color-success-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-success-light-5);--el-button-disabled-border-color:var(--el-color-success-light-5)}.el-button--success.is-link,.el-button--success.is-plain,.el-button--success.is-text{--el-button-text-color:var(--el-color-success);--el-button-bg-color:var(--el-color-success-light-9);--el-button-border-color:var(--el-color-success-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-success);--el-button-hover-border-color:var(--el-color-success);--el-button-active-text-color:var(--el-color-white)}.el-button--success.is-link.is-disabled,.el-button--success.is-link.is-disabled:active,.el-button--success.is-link.is-disabled:focus,.el-button--success.is-link.is-disabled:hover,.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover,.el-button--success.is-text.is-disabled,.el-button--success.is-text.is-disabled:active,.el-button--success.is-text.is-disabled:focus,.el-button--success.is-text.is-disabled:hover{background-color:var(--el-color-success-light-9);border-color:var(--el-color-success-light-8);color:var(--el-color-success-light-5)}.el-button--warning{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-warning);--el-button-border-color:var(--el-color-warning);--el-button-outline-color:var(--el-color-warning-light-5);--el-button-active-color:var(--el-color-warning-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-warning-light-5);--el-button-hover-bg-color:var(--el-color-warning-light-3);--el-button-hover-border-color:var(--el-color-warning-light-3);--el-button-active-bg-color:var(--el-color-warning-dark-2);--el-button-active-border-color:var(--el-color-warning-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-warning-light-5);--el-button-disabled-border-color:var(--el-color-warning-light-5)}.el-button--warning.is-link,.el-button--warning.is-plain,.el-button--warning.is-text{--el-button-text-color:var(--el-color-warning);--el-button-bg-color:var(--el-color-warning-light-9);--el-button-border-color:var(--el-color-warning-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-warning);--el-button-hover-border-color:var(--el-color-warning);--el-button-active-text-color:var(--el-color-white)}.el-button--warning.is-link.is-disabled,.el-button--warning.is-link.is-disabled:active,.el-button--warning.is-link.is-disabled:focus,.el-button--warning.is-link.is-disabled:hover,.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover,.el-button--warning.is-text.is-disabled,.el-button--warning.is-text.is-disabled:active,.el-button--warning.is-text.is-disabled:focus,.el-button--warning.is-text.is-disabled:hover{background-color:var(--el-color-warning-light-9);border-color:var(--el-color-warning-light-8);color:var(--el-color-warning-light-5)}.el-button--danger{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-danger);--el-button-border-color:var(--el-color-danger);--el-button-outline-color:var(--el-color-danger-light-5);--el-button-active-color:var(--el-color-danger-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-danger-light-5);--el-button-hover-bg-color:var(--el-color-danger-light-3);--el-button-hover-border-color:var(--el-color-danger-light-3);--el-button-active-bg-color:var(--el-color-danger-dark-2);--el-button-active-border-color:var(--el-color-danger-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-danger-light-5);--el-button-disabled-border-color:var(--el-color-danger-light-5)}.el-button--danger.is-link,.el-button--danger.is-plain,.el-button--danger.is-text{--el-button-text-color:var(--el-color-danger);--el-button-bg-color:var(--el-color-danger-light-9);--el-button-border-color:var(--el-color-danger-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-danger);--el-button-hover-border-color:var(--el-color-danger);--el-button-active-text-color:var(--el-color-white)}.el-button--danger.is-link.is-disabled,.el-button--danger.is-link.is-disabled:active,.el-button--danger.is-link.is-disabled:focus,.el-button--danger.is-link.is-disabled:hover,.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover,.el-button--danger.is-text.is-disabled,.el-button--danger.is-text.is-disabled:active,.el-button--danger.is-text.is-disabled:focus,.el-button--danger.is-text.is-disabled:hover{background-color:var(--el-color-danger-light-9);border-color:var(--el-color-danger-light-8);color:var(--el-color-danger-light-5)}.el-button--info{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-info);--el-button-border-color:var(--el-color-info);--el-button-outline-color:var(--el-color-info-light-5);--el-button-active-color:var(--el-color-info-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-info-light-5);--el-button-hover-bg-color:var(--el-color-info-light-3);--el-button-hover-border-color:var(--el-color-info-light-3);--el-button-active-bg-color:var(--el-color-info-dark-2);--el-button-active-border-color:var(--el-color-info-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-info-light-5);--el-button-disabled-border-color:var(--el-color-info-light-5)}.el-button--info.is-link,.el-button--info.is-plain,.el-button--info.is-text{--el-button-text-color:var(--el-color-info);--el-button-bg-color:var(--el-color-info-light-9);--el-button-border-color:var(--el-color-info-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-info);--el-button-hover-border-color:var(--el-color-info);--el-button-active-text-color:var(--el-color-white)}.el-button--info.is-link.is-disabled,.el-button--info.is-link.is-disabled:active,.el-button--info.is-link.is-disabled:focus,.el-button--info.is-link.is-disabled:hover,.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover,.el-button--info.is-text.is-disabled,.el-button--info.is-text.is-disabled:active,.el-button--info.is-text.is-disabled:focus,.el-button--info.is-text.is-disabled:hover{background-color:var(--el-color-info-light-9);border-color:var(--el-color-info-light-8);color:var(--el-color-info-light-5)}.el-button--large{--el-button-size:40px;height:var(--el-button-size)}.el-button--large [class*=el-icon]+span{margin-left:8px}.el-button--large{border-radius:var(--el-border-radius-base);font-size:var(--el-font-size-base);padding:12px 19px}.el-button--large.is-round{padding:12px 19px}.el-button--large.is-circle{padding:12px;width:var(--el-button-size)}.el-button--small{--el-button-size:24px;height:var(--el-button-size)}.el-button--small [class*=el-icon]+span{margin-left:4px}.el-button--small{border-radius:calc(var(--el-border-radius-base) - 1px);font-size:12px;padding:5px 11px}.el-button--small.is-round{padding:5px 11px}.el-button--small.is-circle{padding:5px;width:var(--el-button-size)}.el-slider{--el-slider-main-bg-color:var(--el-color-primary);--el-slider-runway-bg-color:var(--el-border-color-light);--el-slider-stop-bg-color:var(--el-color-white);--el-slider-disabled-color:var(--el-text-color-placeholder);--el-slider-border-radius:3px;--el-slider-height:6px;--el-slider-button-size:20px;--el-slider-button-wrapper-size:36px;--el-slider-button-wrapper-offset:-15px;align-items:center;display:flex;height:32px;width:100%}.el-slider__runway{background-color:var(--el-slider-runway-bg-color);border-radius:var(--el-slider-border-radius);cursor:pointer;flex:1;height:var(--el-slider-height);position:relative}.el-slider__runway.show-input{margin-right:30px;width:auto}.el-slider__runway.is-disabled{cursor:default}.el-slider__runway.is-disabled .el-slider__bar{background-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button{border-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button-wrapper.hover,.el-slider__runway.is-disabled .el-slider__button-wrapper:hover,.el-slider__runway.is-disabled .el-slider__button-wrapper.dragging{cursor:not-allowed}.el-slider__runway.is-disabled .el-slider__button.dragging,.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button:hover{transform:scale(1)}.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button:hover,.el-slider__runway.is-disabled .el-slider__button.dragging{cursor:not-allowed}.el-slider__input{flex-shrink:0;width:130px}.el-slider__bar{background-color:var(--el-slider-main-bg-color);border-bottom-left-radius:var(--el-slider-border-radius);border-top-left-radius:var(--el-slider-border-radius);height:var(--el-slider-height);position:absolute}.el-slider__button-wrapper{background-color:transparent;height:var(--el-slider-button-wrapper-size);line-height:normal;outline:none;position:absolute;text-align:center;top:var(--el-slider-button-wrapper-offset);transform:translate(-50%);-webkit-user-select:none;-moz-user-select:none;user-select:none;width:var(--el-slider-button-wrapper-size);z-index:1}.el-slider__button-wrapper:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:grab}.el-slider__button-wrapper.dragging{cursor:grabbing}.el-slider__button{background-color:var(--el-color-white);border:2px solid var(--el-slider-main-bg-color);border-radius:50%;box-sizing:border-box;display:inline-block;height:var(--el-slider-button-size);transition:var(--el-transition-duration-fast);-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:var(--el-slider-button-size)}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:grab}.el-slider__button.dragging{cursor:grabbing}.el-slider__stop{background-color:var(--el-slider-stop-bg-color);border-radius:var(--el-border-radius-circle);height:var(--el-slider-height);position:absolute;transform:translate(-50%);width:var(--el-slider-height)}.el-slider__marks{height:100%;left:12px;top:0;width:18px}.el-slider__marks-text{color:var(--el-color-info);font-size:14px;margin-top:15px;position:absolute;transform:translate(-50%);white-space:pre}.el-slider.is-vertical{display:inline-flex;flex:0;height:100%;position:relative;width:auto}.el-slider.is-vertical .el-slider__runway{height:100%;margin:0 16px;width:var(--el-slider-height)}.el-slider.is-vertical .el-slider__bar{border-radius:0 0 3px 3px;height:auto;width:var(--el-slider-height)}.el-slider.is-vertical .el-slider__button-wrapper{left:var(--el-slider-button-wrapper-offset);top:auto;transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{transform:translateY(50%)}.el-slider.is-vertical .el-slider__marks-text{left:15px;margin-top:0;transform:translateY(50%)}.el-slider--large{height:40px}.el-slider--small{height:24px}.el-textarea{--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);--el-input-width:100%;display:inline-block;font-size:var(--el-font-size-base);position:relative;vertical-align:bottom;width:100%}.el-textarea__inner{-webkit-appearance:none;background-color:var(--el-input-bg-color,var(--el-fill-color-blank));background-image:none;border:none;border-radius:var(--el-input-border-radius,var(--el-border-radius-base));box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset;box-sizing:border-box;color:var(--el-input-text-color,var(--el-text-color-regular));display:block;font-family:inherit;font-size:inherit;line-height:1.5;padding:5px 11px;position:relative;resize:vertical;transition:var(--el-transition-box-shadow);width:100%}.el-textarea__inner::-moz-placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-textarea__inner::placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-textarea__inner:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-textarea__inner:focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset;outline:none}.el-textarea .el-input__count{background:var(--el-fill-color-blank);bottom:5px;color:var(--el-color-info);font-size:12px;line-height:14px;position:absolute;right:10px}.el-textarea .el-input__count.is-outside{background:transparent;bottom:unset;line-height:1;padding-top:2px;position:absolute;right:0;top:100%}.el-textarea.is-disabled .el-textarea__inner{background-color:var(--el-disabled-bg-color);box-shadow:0 0 0 1px var(--el-disabled-border-color) inset;color:var(--el-disabled-text-color);cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:var(--el-text-color-placeholder)}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:var(--el-text-color-placeholder)}.el-textarea.is-exceed .el-textarea__inner{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-textarea.is-exceed .el-input__count{color:var(--el-color-danger)}.el-input{--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);--el-input-width:100%;--el-input-height:var(--el-component-size);box-sizing:border-box;display:inline-flex;font-size:var(--el-font-size-base);line-height:var(--el-input-height);position:relative;vertical-align:middle;width:var(--el-input-width)}.el-input::-webkit-scrollbar{width:6px;z-index:11}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{background:var(--el-text-color-disabled);border-radius:5px;width:6px}.el-input::-webkit-scrollbar-corner,.el-input::-webkit-scrollbar-track{background:var(--el-fill-color-blank)}.el-input::-webkit-scrollbar-track-piece{background:var(--el-fill-color-blank);width:6px}.el-input .el-input__clear,.el-input .el-input__password{color:var(--el-input-icon-color);cursor:pointer;font-size:14px}.el-input .el-input__clear:hover,.el-input .el-input__password:hover{color:var(--el-input-clear-hover-color)}.el-input .el-input__count{align-items:center;color:var(--el-color-info);display:inline-flex;font-size:12px;height:100%}.el-input .el-input__count .el-input__count-inner{background:var(--el-fill-color-blank);display:inline-block;line-height:normal;padding-left:8px}.el-input .el-input__count.is-outside{height:unset;padding-top:2px;position:absolute;right:0;top:100%}.el-input .el-input__count.is-outside .el-input__count-inner{background:transparent;line-height:1;padding-left:0}.el-input__wrapper{align-items:center;background-color:var(--el-input-bg-color,var(--el-fill-color-blank));background-image:none;border-radius:var(--el-input-border-radius,var(--el-border-radius-base));box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset;cursor:text;display:inline-flex;flex-grow:1;justify-content:center;padding:1px 11px;transform:translateZ(0);transition:var(--el-transition-box-shadow)}.el-input__wrapper:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-input__wrapper.is-focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-input{--el-input-inner-height:calc(var(--el-input-height, 32px) - 2px)}.el-input__inner{-webkit-appearance:none;background:none;border:none;box-sizing:border-box;color:var(--el-input-text-color,var(--el-text-color-regular));flex-grow:1;font-size:inherit;height:var(--el-input-inner-height);line-height:var(--el-input-inner-height);outline:none;padding:0;width:100%}.el-input__inner:focus{outline:none}.el-input__inner::-moz-placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-input__inner::placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-input__inner[type=password]::-ms-reveal{display:none}.el-input__inner[type=number]{line-height:1}.el-input__prefix{color:var(--el-input-icon-color,var(--el-text-color-placeholder));display:inline-flex;flex-shrink:0;flex-wrap:nowrap;height:100%;line-height:var(--el-input-inner-height);pointer-events:none;text-align:center;transition:all var(--el-transition-duration);white-space:nowrap}.el-input__prefix-inner{align-items:center;display:inline-flex;justify-content:center;pointer-events:all}.el-input__prefix-inner>:last-child{margin-right:8px}.el-input__prefix-inner>:first-child,.el-input__prefix-inner>:first-child.el-input__icon{margin-left:0}.el-input__suffix{color:var(--el-input-icon-color,var(--el-text-color-placeholder));display:inline-flex;flex-shrink:0;flex-wrap:nowrap;height:100%;line-height:var(--el-input-inner-height);pointer-events:none;text-align:center;transition:all var(--el-transition-duration);white-space:nowrap}.el-input__suffix-inner{align-items:center;display:inline-flex;justify-content:center;pointer-events:all}.el-input__suffix-inner>:first-child{margin-left:8px}.el-input .el-input__icon{align-items:center;display:flex;height:inherit;justify-content:center;line-height:inherit;margin-left:8px;transition:all var(--el-transition-duration)}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-color, ) inset}.el-input.is-disabled{cursor:not-allowed}.el-input.is-disabled .el-input__wrapper{background-color:var(--el-disabled-bg-color);box-shadow:0 0 0 1px var(--el-disabled-border-color) inset;cursor:not-allowed}.el-input.is-disabled .el-input__inner{color:var(--el-disabled-text-color);-webkit-text-fill-color:var(--el-disabled-text-color);cursor:not-allowed}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:var(--el-text-color-placeholder)}.el-input.is-disabled .el-input__inner::placeholder{color:var(--el-text-color-placeholder)}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-disabled .el-input__prefix-inner,.el-input.is-disabled .el-input__suffix-inner{pointer-events:none}.el-input.is-exceed .el-input__wrapper{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-input.is-exceed .el-input__suffix .el-input__count{color:var(--el-color-danger)}.el-input--large{--el-input-height:var(--el-component-size-large);font-size:14px}.el-input--large .el-input__wrapper{padding:1px 15px}.el-input--large{--el-input-inner-height:calc(var(--el-input-height, 40px) - 2px)}.el-input--small{--el-input-height:var(--el-component-size-small);font-size:12px}.el-input--small .el-input__wrapper{padding:1px 7px}.el-input--small{--el-input-inner-height:calc(var(--el-input-height, 24px) - 2px)}.el-input-group{align-items:stretch;display:inline-flex;width:100%}.el-input-group__append,.el-input-group__prepend{align-items:center;background-color:var(--el-fill-color-light);border-radius:var(--el-input-border-radius);color:var(--el-color-info);display:inline-flex;justify-content:center;min-height:100%;padding:0 20px;position:relative;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:none}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;flex:1;margin:0 -20px}.el-input-group__append button.el-button,.el-input-group__append button.el-button:hover,.el-input-group__append div.el-select .el-select__wrapper,.el-input-group__append div.el-select:hover .el-select__wrapper,.el-input-group__prepend button.el-button,.el-input-group__prepend button.el-button:hover,.el-input-group__prepend div.el-select .el-select__wrapper,.el-input-group__prepend div.el-select:hover .el-select__wrapper{background-color:transparent;border-color:transparent;color:inherit}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-bottom-right-radius:0;border-right:0;border-top-right-radius:0;box-shadow:1px 0 0 0 var(--el-input-border-color) inset,0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset}.el-input-group__append{border-bottom-left-radius:0;border-left:0;border-top-left-radius:0;box-shadow:0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset,-1px 0 0 0 var(--el-input-border-color) inset}.el-input-group--prepend>.el-input__wrapper{border-bottom-left-radius:0;border-top-left-radius:0}.el-input-group--prepend .el-input-group__prepend .el-select .el-select__wrapper{border-bottom-right-radius:0;border-top-right-radius:0;box-shadow:1px 0 0 0 var(--el-input-border-color) inset,0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset}.el-input-group--append>.el-input__wrapper{border-bottom-right-radius:0;border-top-right-radius:0}.el-input-group--append .el-input-group__append .el-select .el-select__wrapper{border-bottom-left-radius:0;border-top-left-radius:0;box-shadow:0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset,-1px 0 0 0 var(--el-input-border-color) inset}.el-input-hidden{display:none!important}.el-input-number{display:inline-flex;line-height:30px;position:relative;vertical-align:middle;width:150px}.el-input-number .el-input__wrapper{padding-left:42px;padding-right:42px}.el-input-number .el-input__inner{-webkit-appearance:none;-moz-appearance:textfield;line-height:1;text-align:center}.el-input-number .el-input__inner::-webkit-inner-spin-button,.el-input-number .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-input-number.is-left .el-input__inner{text-align:left}.el-input-number.is-right .el-input__inner{text-align:right}.el-input-number.is-center .el-input__inner{text-align:center}.el-input-number__decrease,.el-input-number__increase{align-items:center;background:var(--el-fill-color-light);bottom:1px;color:var(--el-text-color-regular);cursor:pointer;display:flex;font-size:13px;height:auto;justify-content:center;position:absolute;top:1px;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:32px;z-index:1}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:var(--el-color-primary)}.el-input-number__decrease:hover~.el-input:not(.is-disabled) .el-input__wrapper,.el-input-number__increase:hover~.el-input:not(.is-disabled) .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color,var(--el-color-primary)) inset}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-input-number__increase{border-left:var(--el-border);border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0;right:1px}.el-input-number__decrease{border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);border-right:var(--el-border);left:1px}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:var(--el-disabled-border-color);color:var(--el-disabled-border-color)}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:var(--el-disabled-border-color);cursor:not-allowed}.el-input-number--large{line-height:38px;width:180px}.el-input-number--large .el-input-number__decrease,.el-input-number--large .el-input-number__increase{font-size:14px;width:40px}.el-input-number--large.is-controls-right .el-input--large .el-input__wrapper{padding-right:47px}.el-input-number--large .el-input--large .el-input__wrapper{padding-left:47px;padding-right:47px}.el-input-number--small{line-height:22px;width:120px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{font-size:12px;width:24px}.el-input-number--small.is-controls-right .el-input--small .el-input__wrapper{padding-right:31px}.el-input-number--small .el-input--small .el-input__wrapper{padding-left:31px;padding-right:31px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{transform:scale(.9)}.el-input-number.is-without-controls .el-input__wrapper{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__wrapper{padding-left:15px;padding-right:42px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{--el-input-number-controls-height:15px;height:var(--el-input-number-controls-height);line-height:var(--el-input-number-controls-height)}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-bottom:var(--el-border);border-radius:0 var(--el-border-radius-base) 0 0;bottom:auto;left:auto}.el-input-number.is-controls-right .el-input-number__decrease{border-left:var(--el-border);border-radius:0 0 var(--el-border-radius-base) 0;border-right:none;left:auto;right:1px;top:auto}.el-input-number.is-controls-right[class*=large] [class*=decrease],.el-input-number.is-controls-right[class*=large] [class*=increase]{--el-input-number-controls-height:19px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{--el-input-number-controls-height:11px}.el-popper{--el-popper-border-radius:var(--el-popover-border-radius,4px);border-radius:var(--el-popper-border-radius);font-size:12px;line-height:20px;min-width:10px;overflow-wrap:break-word;padding:5px 11px;position:absolute;visibility:visible;word-break:normal;z-index:2000}.el-popper.is-dark{background:var(--el-text-color-primary);border:1px solid var(--el-text-color-primary);color:var(--el-bg-color)}.el-popper.is-dark>.el-popper__arrow:before{background:var(--el-text-color-primary);border:1px solid var(--el-text-color-primary);right:0}.el-popper.is-light{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light)}.el-popper.is-light>.el-popper__arrow:before{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);right:0}.el-popper.is-pure{padding:0}.el-popper__arrow{height:10px;position:absolute;width:10px;z-index:-1}.el-popper__arrow:before{background:var(--el-text-color-primary);box-sizing:border-box;content:" ";height:10px;position:absolute;transform:rotate(45deg);width:10px;z-index:-1}.el-popper[data-popper-placement^=top]>.el-popper__arrow{bottom:-5px}.el-popper[data-popper-placement^=top]>.el-popper__arrow:before{border-bottom-right-radius:2px}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow{top:-5px}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow:before{border-top-left-radius:2px}.el-popper[data-popper-placement^=left]>.el-popper__arrow{right:-5px}.el-popper[data-popper-placement^=left]>.el-popper__arrow:before{border-top-right-radius:2px}.el-popper[data-popper-placement^=right]>.el-popper__arrow{left:-5px}.el-popper[data-popper-placement^=right]>.el-popper__arrow:before{border-bottom-left-radius:2px}.el-popper[data-popper-placement^=top]>.el-popper__arrow:before{border-left-color:transparent!important;border-top-color:transparent!important}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow:before{border-bottom-color:transparent!important;border-right-color:transparent!important}.el-popper[data-popper-placement^=left]>.el-popper__arrow:before{border-bottom-color:transparent!important;border-left-color:transparent!important}.el-popper[data-popper-placement^=right]>.el-popper__arrow:before{border-right-color:transparent!important;border-top-color:transparent!important}.controller{width:300px;background:rgba(0,0,0,.8);opacity:1;transform:translate(0);transition:all cubic-bezier(.4,0,.2,1) .3s;z-index:10;pointer-events:all}@media screen and (max-width: 1512px){.controller{width:210px}.controller .controller-content{transform:scale(.95);padding:4px 8px}}.controller-content{padding:4px 20px}.player-controls.is-collapsed .controller{opacity:0;transform:translate(-10px);pointer-events:none}.save-icon{width:20px;height:20px;max-width:unset}.header{display:flex;justify-content:space-between;gap:16px;align-items:center}.operation{white-space:nowrap}.cockpit-container{margin-top:30px}.cockpit-bg,.cockpit-wrapper{width:174px;height:174px;margin:0 auto;position:relative}.cockpit-bg{position:absolute;top:0;left:0}.cockpit-btn{position:absolute;width:112px;height:52px;z-index:1;cursor:pointer}.cockpit-btn.is-active{background:center / cover no-repeat url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKgAAABOCAYAAAC0Vl0rAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAhGVYSWZNTQAqAAAACAAFARIAAwAAAAEAAQAAARoABQAAAAEAAABKARsABQAAAAEAAABSASgAAwAAAAEAAgAAh2kABAAAAAEAAABaAAAAAAAAAGwAAAABAAAAbAAAAAEAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAqKADAAQAAAABAAAATgAAAAAKooCTAAAACXBIWXMAABCcAAAQnAEmzTo0AAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgoZXuEHAAAIKElEQVR4Ae2dP0/jSBjGDaG4KxCBaruzoKEj111HtkBaiWK5T0C2pVn2AyCCqKgWPsGGbxCqu6vWVHfVXmhBSKbiSq9okBBwz5PL5ALYxn/G9th+R3LGGc+8M+/jX94ZOw5MWZKeKLC8vGzf3t42G41G6/HxsYmDNrY57DPne25Mk/v/lfz/6mGXG5PLl6mpKebfsXncv7+/53vPdd0BckkBCkwFlFe+mCDe3d0RQhvOriBvIed+E1veyUWHLsA9Y/7w8EBoB4DXQ17rVAtAbdsmdK3p6en2CMRVvC8CxLiwuWhwBnCdukJbSUAngNwAkCs4yW1sVUkDAHtKaLFMcKoeZSsDKKFEhOwAyPcgsYWtDBFSx4fGAaxniLB9wOroMGiSjVID+gzKtknCFjQWrmMJ7ElVomvpABUoY6F/glmlD1gZXb1YLQ2pXBpAAWYbkWEXutVp+taFCW9t9bEMOC7bMsBoQEfRchvryo84U3VZU+qCMsjOcBkAWPcAqxtUyZRyIwFltMTUtAkwNyCUgJkdLQ50Pr68vOxl10U6y0YBOjGNt9O5Ja1jKuAiGByhDdeqbsy2mVY3AtClpaUOppxNeNrO1Fsx/qoCWKv2TJr+CwV0BCYvfOxXlZMKuSowAvUIAXWQa8fPOisE0NFU/gVjsZ+NR96ap4CD6Z8XVE4RQ8sVUFljFnGKtfVJUD/kvUbNBVCAaWPKYMRsa5NLDBWiQN5r1EwBBZf8fpz3MbnOlFQhBfICtZGVZrwAgu3fsL3DJql6CrQAaafZbP7oeZ6TlXvaI6hM51mdKqPtupgp97K44a81gi4uLnYhI9eay0bLKYPTrUATy7iNhYUFe25u7gwR1dPVgZYIiqjJcE8wW7oGJnbKq8DotlRXhwepAWXUlIsgHaeicjb49enbtLelEgMqa83KAZWJQ2mjaSJAETXVrSN50iiT01o5o4mjaSxAR/c1P+NT0amchOJQ5gqAm0+Y8g/jdBT5Kn40pf8J4+04HdSp7urqqgWdrKurqzq5HdlXXEi/i3ulHwlQ3HTfxCj62N5EHk3NKq6vr1v7+/vW2tqadX19bV1cXNRMgcju8o7PBm7wn0S5HfUqoFhv7iI0Myz/EHkINatIOHd2dsZeM5IKpGM5/HaagHQbkH4HpH/5VVBlgYByvTk/P8+vKjuqsuQvFXgOp6ohkColgnNO+YB0HpD+HlTLF9CJ9WYrqKGUW1YQnEobgVQpEZwD0l8QCDcA6h9+U/4LQEdwfoVJO9isHHkNTqWQQKqUCM3fBK1LnwAKOLmA5ZW6XAyF6BkVTmVCIFVKhOZclzKSniKS/qNqju+D8kodP5bixVBTHZT8pQKE7eDg4OWBCCVbW1vWt2/fItSsdRUPF+X8inRAFWb4MoKzx31J4Qrc3NxY5+fn1uzsbHhFn6NJ2viYqXoRI+nfmM3585LelMBZ9fNdXv8QST80MOf34IKsOct7His7ckRSe5rzPTwczveV9VQcK6MCA7I5vEjCfM95n7eWWmX0RMZcOQWGcGIN6o2v4gXSyp3ksjo0hpMOjAHlG4GUKkgqUIEncHIcTwBlgUBKFSQVoMALODmGF4CyUCClCpJyVMAXTvbvCygPCKRUQVIOCvDnID/zgsivr2m/QpaxgdyCClJHyjUpoH6r5Asn+wiMoGoAEkmVEpJrVkDB6YbZfRVQNhZIwySUYwkUiAQn7UYClBUFUqogSYMCkeFkX5EBZWWBlCpISqFALDjZTyxA2UAgpQqSEigQG072ERtQNhJIqYKkGAokgpP2EwHKhgIpVZAUQYHEcNJ2YkDZWCClCpJCFEgFJ+2mApQGBFKqIMlHgdRw0mZqQGlEIKUKkiYU0AIn7WkBlIYEUqogCQpog5NqagOUxgRSqlDrpBVOKqkVUBoUSKlCLRMfLuJTSa5O7wOfZkraiTwFlVS5UrcbPvmmG04qoj2CKpklkiolKp8rODP5ZXBmgPK0CKQCZ1oFMgW0gpC68InbFX6mzYdshxv+ptX4gVv8x7UmyrlZWJPZyH7CxvfcH5Yjr0LKNHIqgTIHlB2VMJJ6GPYAEJ4BvgH2HR3rK+owMzPTgs0WbK4AYObcypZygZOi5AIoOyoBpATyFPD0MdwBL/Y47qwTdWk0Gm3A+h5bG/3ZWfeZ0n5ucHKcuQHKzgyElFCeAMqejghJH9MmaNTCMoHA8h9XGBddMS7eShqk9TNq+1wB5aAMgNQDlMeMlBDaiSpUEfWglQ1Yd02JrBjH8E8i5qlF7oDSuYIgJZhHAPMQYOYyfes8kdCsg/EzqrZ12o1qqwg4ObZCAGXHOUJaajCp1WSCblwCfAQwncnyLPeLgpM+FQYoO88Y0kqBSb0mE7RT039nslz3fpFw0pdCAeUAMoL0GMJul3EqpyZxEkHF1P8Fbdpx2kWpWzScHGPhgHIQGiHl0zRcyDu0W6cEDblG3YXPtg6/TYCTfhgBKAeSFtLRBVC3DlGTegWl0b+u7AYdj1JuCpwcqzGAcjAJIa1t1KRmfgk6ctr/imO23/GwMsC5hw95N6xOnseMApSOx4EUJ6GP20ac0kt32yiPkxw3mpoGJzUyDlAOKgqkEPMTwDxkfUnBCkDLDXyQP6OGHVxr+GCLUZFTjdVIQDm4EEj5XfCvgNNRTkgergC0DJ3yTYycyiPtT9Qrw2lzTtsQ7i3sTH7vy/Umvwt20tqvU3voNdSNS6LnfpsMJ8dqbARVQk5EUovAElx1TPL4CkyuS02HM753BbUgpNwK6r5y3RJS6Nktg2P/AuJ6+vUDTtAwAAAAAElFTkSuQmCC)}.cockpit-btn.left,.cockpit-btn.right{transform:rotate(90deg);top:61px}.cockpit-btn.up{left:31px;top:7px}.cockpit-btn.down{left:31px;transform:rotate(180deg);top:115px}.cockpit-btn.left{left:-23px;transform:rotate(-90deg)}.cockpit-btn.right{left:85px}.block{margin-top:12px}.block .el-button{font-size:20px;background:transparent;border-color:var(--el-color-primary);color:var(--el-color-primary)}.description{color:#fffc;font-family:PingFang SC;font-size:14px;font-style:normal;font-weight:400;line-height:24px;margin-bottom:8px}.controller-trigger{position:absolute;top:12px;left:12px;z-index:1;cursor:pointer;visibility:hidden;transition:color ease-in-out .3s;color:#ffffff3e;pointer-events:all}.player-controls.is-collapsed .controller-trigger{visibility:visible;color:#ffffff7e}.player-controls.is-collapsed .controller-trigger:hover{color:#fff}.controller-trigger .trigger-btn{transition:color ease-out .3s;width:20px;height:20px}.player-controls{position:absolute;bottom:0;left:0;top:0;border-radius:6px;-webkit-user-select:none;user-select:none;pointer-events:none}.video-player[data-v-3ced781c]{position:relative;background:#000;width:100%;height:100%;overflow:hidden}.video-element[data-v-3ced781c]{width:100%;height:100%;min-height:400px;object-fit:contain}.video-element.contain[data-v-3ced781c]{object-fit:contain}.video-element.fill[data-v-3ced781c]{object-fit:fill}.video-element.cover[data-v-3ced781c]{object-fit:cover}:root{--el-popup-modal-bg-color:var(--el-color-black);--el-popup-modal-opacity:.5}.v-modal-enter{animation:v-modal-in var(--el-transition-duration-fast) ease}.v-modal-leave{animation:v-modal-out var(--el-transition-duration-fast) ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{to{opacity:0}}.v-modal{background:var(--el-popup-modal-bg-color);height:100%;left:0;opacity:var(--el-popup-modal-opacity);position:fixed;top:0;width:100%}.el-popup-parent--hidden{overflow:hidden}.el-dialog{--el-dialog-width:50%;--el-dialog-margin-top:15vh;--el-dialog-bg-color:var(--el-bg-color);--el-dialog-box-shadow:var(--el-box-shadow);--el-dialog-title-font-size:var(--el-font-size-large);--el-dialog-content-font-size:14px;--el-dialog-font-line-height:var(--el-font-line-height-primary);--el-dialog-padding-primary:16px;--el-dialog-border-radius:var(--el-border-radius-base);background:var(--el-dialog-bg-color);border-radius:var(--el-dialog-border-radius);box-shadow:var(--el-dialog-box-shadow);box-sizing:border-box;margin:var(--el-dialog-margin-top,15vh) auto 50px;overflow-wrap:break-word;padding:var(--el-dialog-padding-primary);position:relative;width:var(--el-dialog-width,50%)}.el-dialog:focus{outline:none!important}.el-dialog.is-align-center{margin:auto}.el-dialog.is-fullscreen{--el-dialog-width:100%;--el-dialog-margin-top:0;border-radius:0;height:100%;margin-bottom:0;overflow:auto}.el-dialog__wrapper{bottom:0;left:0;margin:0;overflow:auto;position:fixed;right:0;top:0}.el-dialog.is-draggable .el-dialog__header{cursor:move;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-dialog__header{padding-bottom:var(--el-dialog-padding-primary)}.el-dialog__header.show-close{padding-right:calc(var(--el-dialog-padding-primary) + var(--el-message-close-size, 16px))}.el-dialog__headerbtn{background:transparent;border:none;cursor:pointer;font-size:var(--el-message-close-size,16px);height:48px;outline:none;padding:0;position:absolute;right:0;top:0;width:48px}.el-dialog__headerbtn .el-dialog__close{color:var(--el-color-info);font-size:inherit}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:var(--el-color-primary)}.el-dialog__title{color:var(--el-text-color-primary);font-size:var(--el-dialog-title-font-size);line-height:var(--el-dialog-font-line-height)}.el-dialog__body{color:var(--el-text-color-regular);font-size:var(--el-dialog-content-font-size)}.el-dialog__footer{box-sizing:border-box;padding-top:var(--el-dialog-padding-primary);text-align:right}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial}.el-dialog--center .el-dialog__footer{text-align:inherit}.el-modal-dialog.is-penetrable{pointer-events:none}.el-modal-dialog.is-penetrable .el-dialog{pointer-events:auto}.el-overlay-dialog{bottom:0;left:0;overflow:auto;position:fixed;right:0;top:0}.dialog-fade-enter-active{animation:modal-fade-in var(--el-transition-duration)}.dialog-fade-enter-active .el-overlay-dialog{animation:dialog-fade-in var(--el-transition-duration)}.dialog-fade-leave-active{animation:modal-fade-out var(--el-transition-duration)}.dialog-fade-leave-active .el-overlay-dialog{animation:dialog-fade-out var(--el-transition-duration)}@keyframes dialog-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes dialog-fade-out{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,-20px,0)}}@keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}@keyframes modal-fade-out{0%{opacity:1}to{opacity:0}}.el-overlay{background-color:var(--el-overlay-color-lighter);bottom:0;height:100%;left:0;overflow:auto;position:fixed;right:0;top:0;z-index:2000}.el-overlay .el-overlay-root{height:0}:root{--el-loading-spinner-size:42px;--el-loading-fullscreen-spinner-size:50px}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{background-color:var(--el-mask-color);bottom:0;left:0;margin:0;position:absolute;right:0;top:0;transition:opacity var(--el-transition-duration);z-index:2000}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:calc((0px - var(--el-loading-fullscreen-spinner-size))/2)}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:var(--el-loading-fullscreen-spinner-size);width:var(--el-loading-fullscreen-spinner-size)}.el-loading-spinner{margin-top:calc((0px - var(--el-loading-spinner-size))/2);position:absolute;text-align:center;top:50%;width:100%}.el-loading-spinner .el-loading-text{color:var(--el-color-primary);font-size:14px;margin:3px 0}.el-loading-spinner .circular{animation:loading-rotate 2s linear infinite;display:inline;height:var(--el-loading-spinner-size);width:var(--el-loading-spinner-size)}.el-loading-spinner .path{animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:var(--el-color-primary);stroke-linecap:round}.el-loading-spinner i{color:var(--el-color-primary)}.el-loading-fade-enter-from,.el-loading-fade-leave-to{opacity:0}@keyframes loading-rotate{to{transform:rotate(1turn)}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.stream-player-dialog{background-color:transparent;padding:0}.stream-player-dialog .el-dialog__header{display:none}.stream-player-dialog .el-dialog__body{padding:0;position:relative;background:transparent}.stream-player-dialog .stream-player-wrapper{height:90vh!important}.stream-player-dialog video{max-height:90vh}
|
package/package.json
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@boldarialblack/multi-stream-player",
|
|
3
|
+
"description": "流媒体播放器组件,支持多种流媒体协议(HLS、FLV、WebRTC),提供对话框模式和自定义控制界面。",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "BoldArialBlack"
|
|
7
|
+
},
|
|
8
|
+
"license": "MIT",
|
|
9
|
+
"type": "module",
|
|
10
|
+
"main": "lib/stream-player.js",
|
|
11
|
+
"module": "lib/stream-player.js",
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"import": "./lib/stream-player.js",
|
|
15
|
+
"require": "./lib/stream-player.umd.cjs"
|
|
16
|
+
},
|
|
17
|
+
"./style.css": "./lib/style.css"
|
|
18
|
+
},
|
|
19
|
+
"files": ["lib", "README.md", "LICENSE"],
|
|
20
|
+
"repository": {
|
|
21
|
+
"type": "git",
|
|
22
|
+
"url": "https://github.com/your-username/stream-player.git"
|
|
23
|
+
},
|
|
24
|
+
"homepage": "https://github.com/your-username/stream-player#readme",
|
|
25
|
+
"bugs": {
|
|
26
|
+
"url": "https://github.com/your-username/stream-player/issues"
|
|
27
|
+
},
|
|
28
|
+
"keywords": ["vue", "player", "stream", "hls", "flv", "webrtc"],
|
|
29
|
+
"publishConfig": {
|
|
30
|
+
"access": "public"
|
|
31
|
+
},
|
|
32
|
+
"scripts": {
|
|
33
|
+
"dev": "vitepress dev docs --host",
|
|
34
|
+
"dev:demo": "vite --host",
|
|
35
|
+
"build": "vite build",
|
|
36
|
+
"preview": "vite preview",
|
|
37
|
+
"docs:dev": "vitepress dev docs",
|
|
38
|
+
"docs:build": "vitepress build docs",
|
|
39
|
+
"docs:preview": "vitepress preview docs"
|
|
40
|
+
},
|
|
41
|
+
"dependencies": {
|
|
42
|
+
"@element-plus/icons": "^0.0.11",
|
|
43
|
+
"element-plus": "^2.11.5",
|
|
44
|
+
"flv.js": "^1.6.2",
|
|
45
|
+
"hls.js": "^1.6.13",
|
|
46
|
+
"vue": "^3.3.4"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@eslint/js": "^9.38.0",
|
|
50
|
+
"@eslint/json": "^0.13.2",
|
|
51
|
+
"@eslint/markdown": "^7.5.0",
|
|
52
|
+
"@vitejs/plugin-vue": "^4.2.3",
|
|
53
|
+
"eslint": "^9.38.0",
|
|
54
|
+
"eslint-plugin-vue": "^10.5.1",
|
|
55
|
+
"globals": "^16.4.0",
|
|
56
|
+
"unplugin-element-plus": "^0.10.0",
|
|
57
|
+
"vite": "^4.4.5",
|
|
58
|
+
"vitepress": "^1.6.4"
|
|
59
|
+
}
|
|
60
|
+
}
|