| 12345678910111213141516171819202122232425262728 |
- import{c as g,bj as se,d as B,Y as ae,Z as p,a1 as S,a2 as Z,a3 as K,$ as E,a0 as c,T as o,a8 as y,ay as x,aQ as I,a7 as C,n as l,aK as w,a6 as V,a5 as R,bS as le,j as ie,bo as q,bc as P,at as te,f as ce,a9 as re,aH as D,bt as ue,aG as de,aI as pe}from"./index-1f7267da.js";import"./dayjs-919e6097.js";import{S as j}from"./index-2e39ef19.js";import{D as X}from"./index-0f7fd87e.js";import{E as _e,F as ve,H as fe}from"./gb28181-59fe2452.js";var F=(e=>(e.VERTICAL="vertical",e.HORIZONTAL="horizontal",e))(F||{}),d=(e=>(e[e.STOP=0]="STOP",e[e.MOVE_RIGHT=1]="MOVE_RIGHT",e[e.MOVE_LEFT=2]="MOVE_LEFT",e[e.MOVE_DOWN=4]="MOVE_DOWN",e[e.MOVE_UP=8]="MOVE_UP",e[e.MOVE_LEFT_UP=10]="MOVE_LEFT_UP",e[e.MOVE_LEFT_DOWN=6]="MOVE_LEFT_DOWN",e[e.MOVE_RIGHT_UP=9]="MOVE_RIGHT_UP",e[e.MOVE_RIGHT_DOWN=5]="MOVE_RIGHT_DOWN",e[e.SHOT_ZOOM_FAR=16]="SHOT_ZOOM_FAR",e[e.SHOT_ZOOM_NEAR=32]="SHOT_ZOOM_NEAR",e[e.SHOT_FOCUS_FAR=66]="SHOT_FOCUS_FAR",e[e.SHOT_FOCUS_NEAR=65]="SHOT_FOCUS_NEAR",e[e.APERTRUE_FAR=72]="APERTRUE_FAR",e[e.APERTRUE_NEAR=68]="APERTRUE_NEAR",e[e.WIPER_OPEN=140]="WIPER_OPEN",e[e.WIPER_CLOSE=141]="WIPER_CLOSE",e[e.POINT_SET=129]="POINT_SET",e[e.POINT_CALL=130]="POINT_CALL",e[e.POINT_DEL=131]="POINT_DEL",e))(d||{});const me=[1,2,3,4,5,6,7,8],ne=(e,t)=>{const s=e;let a,n,r;switch(e){case 1:case 2:case 66:case 65:a=U();break;case 8:case 4:case 72:case 68:n=U();break;case 10:case 6:case 9:case 5:a=U(),n=U();break;case 16:case 32:r=ke();break;case 140:case 141:a=1;break;case 129:case 130:case 131:n=me[t]}return Ce({valIdx3:s,valIdx4:a,valIdx5:n,valIdx6:r})};function Ce({valIdx3:e,valIdx4:t,valIdx5:s,valIdx6:a}){const n=[165,15,1,0,0,0,0,0];return e&&(n[3]=e),t&&(n[4]=t),s&&(n[5]=s),a&&(n[6]=a),n[7]=(n[0]+n[1]+n[2]+n[3]+n[4]+n[5]+n[6])%256,Ee(n)}function Ee(e){let t="";for(let s=0;s<e.length;s++){let a=e[s].toString(16);a.length===1&&(a="0"+a),t+=a.toUpperCase()}return t}const Q=g(5),Oe=()=>g(Q),be=[25,50,75,100,125,150,175,200,225,250],ge=[16,48,80,112,144,160,176,192,208,224];function U(){return be[Q.value-1]}function ke(){return ge[Q.value-1]}const Ge=()=>ne(0);var L=(e=>(e.CLICK="click",e.CONTINUE="continue",e))(L||{});const oe=se({id:"app-control-store",state:()=>({controlMode:"continue"})}),he={class:"move-btn"},Ie=B({__name:"move",props:{clickCB:{type:Function}},setup(e){const t=oe(),s=g([[{ptzType:d.MOVE_LEFT_UP,icon:"iconamoon:arrow-left-2-duotone",iconClass:"rotate-45",btnClass:"active:top-2px"},{ptzType:d.MOVE_UP,icon:"iconamoon:arrow-left-2-duotone",iconClass:"rotate-90",btnClass:"top--12px active:left-2px"},{ptzType:d.MOVE_RIGHT_UP,icon:"iconamoon:arrow-left-2-duotone",iconClass:"rotate-135",btnClass:"active:top-2px"}],[{ptzType:d.MOVE_LEFT,icon:"iconamoon:arrow-left-2-duotone",iconClass:"ml--25px",btnClass:"active:top-2px"},{ptzType:d.STOP,icon:"lets-icons:stop",btnClass:"top-2px"},{ptzType:d.MOVE_RIGHT,icon:"iconamoon:arrow-left-2-duotone",iconClass:"rotate-180 mr--25px",btnClass:"active:top-2px"}],[{ptzType:d.MOVE_LEFT_DOWN,icon:"iconamoon:arrow-left-2-duotone",iconClass:"rotate--45",btnClass:"active:top-2px"},{ptzType:d.MOVE_DOWN,icon:"iconamoon:arrow-left-2-duotone",iconClass:"rotate-270",btnClass:"bottom--10px active:top-8px"},{ptzType:d.MOVE_RIGHT_DOWN,icon:"iconamoon:arrow-left-2-duotone",iconClass:"rotate-225",btnClass:"active:top-2px"}]]);return ae(()=>{t.controlMode===L.CLICK?s.value[1][1]={icon:"mingcute:round-line",btnClass:"top-2px cursor-unset pointer-events-none"}:s.value[1][1]={ptzType:d.STOP,icon:"lets-icons:stop",btnClass:"top-2px"}}),(a,n)=>(p(),S("ul",he,[(p(!0),S(Z,null,K(s.value,(r,k)=>(p(),S("li",{key:k},[(p(!0),S(Z,null,K(r,(_,f)=>(p(),E(o(I),{key:f,type:"text",class:x([`${_?.btnClass}`]),onClick:()=>a.clickCB(_.ptzType)},{icon:c(()=>[_.icon==="mingcute:round-line"?(p(),E(o(y),{key:0,color:"#bcbcbc",hoverColor:"#bcbcbc",icon:_.icon,size:30,class:x(["v-text-bottom",`${_?.iconClass}`])},null,8,["icon","class"])):(p(),E(o(y),{key:1,icon:_.icon,size:26,class:x(["v-text-bottom",`${_?.iconClass}`])},null,8,["icon","class"]))]),_:2},1032,["class","onClick"]))),128))]))),128))]))}});const Se={class:"text-text text-center"},$=B({__name:"compose-btn",props:{clickCB:{type:Function},title:{},direction:{},items:{}},setup(e){return(t,s)=>(p(),E(o(w),{title:t.title},{default:c(()=>[C("div",{class:x(["compose-btn",`${t.direction}`])},[l(o(w),{title:t.items?.first.title},{default:c(()=>[l(o(I),{size:"small",type:"text",onClick:s[0]||(s[0]=()=>t.clickCB(t.items?.first.ptzType))},{icon:c(()=>[t.items?.first.svg?(p(),E(o(j),{key:0,icon:t.items.first.svg,size:"20"},null,8,["icon"])):(p(),E(o(y),{key:1,icon:t.items?.first.icon,size:"20"},null,8,["icon"]))]),_:1})]),_:1},8,["title"]),C("span",Se,V(t.items?.center),1),l(o(w),{title:t.items?.last.title},{default:c(()=>[l(o(I),{size:"small",type:"text",onClick:s[1]||(s[1]=()=>t.clickCB(t.items?.last.ptzType))},{icon:c(()=>[t.items?.last.svg?(p(),E(o(j),{key:0,icon:t.items.last.svg,size:"20"},null,8,["icon"])):(p(),E(o(y),{key:1,icon:t.items?.last.icon,size:"20"},null,8,["icon"]))]),_:1})]),_:1},8,["title"])],2)]),_:1},8,["title"]))}});const ee=B({__name:"single-btn",props:{clickCB:{type:Function},title:{},icon:{},svg:{},ptzType:{}},setup(e){return(t,s)=>(p(),E(o(w),{title:t.title},{default:c(()=>[l(o(I),{class:"single-btn",type:"text",shape:"circle",onClick:s[0]||(s[0]=()=>t.clickCB(t.ptzType))},{icon:c(()=>[t.svg?(p(),E(o(j),{key:0,icon:t.svg,size:"16"},null,8,["icon"])):(p(),E(o(y),{key:1,icon:t.icon,size:"16"},null,8,["icon"]))]),_:1})]),_:1},8,["title"]))}});const ye={class:"speed-btn"},Te={class:"speedNum text-text cursor-auto"},xe=B({__name:"speed",setup(e){const t=Oe(),s=(a="plus")=>{a==="plus"?t.value<10&&t.value++:t.value>1&&t.value--};return(a,n)=>(p(),E(o(w),{title:"速度,支持 1-10 "},{default:c(()=>[C("div",ye,[l(o(I),{size:"small",type:"text",disabled:o(t)===1,onClick:n[0]||(n[0]=()=>s("reduce"))},{icon:c(()=>[l(o(y),{icon:"ant-design:minus-outlined",size:"20"})]),_:1},8,["disabled"]),C("span",Te,V(o(t)),1),n[2]||(n[2]=C("span",{class:"speedNumBg"}," ",-1)),l(o(I),{size:"small",type:"text",onClick:n[1]||(n[1]=()=>s("plus")),disabled:o(t)===10},{icon:c(()=>[l(o(y),{icon:"ant-design:plus-outlined",size:"20"})]),_:1},8,["disabled"])])]),_:1}))}});const we={class:"flex justify-between"},Be={class:"font-size-18px"},Ne=B({__name:"point",props:{clickCB:{type:Function}},setup(e){const t=[{name:"①",ptzType:"xxx"},{name:"②",ptzType:"xxx"},{name:"③",ptzType:"xxx"},{name:"④",ptzType:"xxx"},{name:"⑤",ptzType:"xxx"},{name:"⑥",ptzType:"xxx"},{name:"⑦",ptzType:"xxx"},{name:"⑧",ptzType:"xxx"}];return(s,a)=>(p(),S("div",we,[(p(),S(Z,null,K(t,(n,r)=>l(o(le),{key:n.name,trigger:"hover"},{content:c(()=>[C("div",null,[l(o(I),{size:"small",type:"link",onClick:()=>s.clickCB(o(d).POINT_SET,r)},{default:c(()=>a[0]||(a[0]=[R("添加")])),_:2},1032,["onClick"]),l(o(X),{type:"vertical",class:"m-0"}),l(o(I),{size:"small",type:"link",onClick:()=>s.clickCB(o(d).POINT_CALL,r)},{default:c(()=>a[1]||(a[1]=[R("调用")])),_:2},1032,["onClick"]),l(o(X),{type:"vertical",class:"m-0"}),l(o(I),{size:"small",type:"link",danger:"",onClick:()=>s.clickCB(o(d).POINT_DEL,r)},{default:c(()=>a[2]||(a[2]=[R("删除")])),_:2},1032,["onClick"])])]),default:c(()=>[l(o(I),{class:"point flex-center",type:"text",shape:"circle",size:"small"},{default:c(()=>[C("span",Be,V(n.name),1)]),_:2},1024)]),_:2},1024)),64))]))}});const Re=["disabled"],G=1200,Ae=B({__name:"broadcast-btn",props:{deviceId:{},channelId:{},apiBaseUrl:{}},setup(e){const t=e,s=g(!1),a=g(!1),n=g(null),r=g(null),k=g(null),_=g(null),f=g(new Uint8Array(0));class N{static encode(u){const v=new Uint8Array(u.length);for(let m=0;m<u.length;m++)v[m]=N.linearToALaw(u[m]);return v}static linearToALaw(u){let A=0,M=0,z=0;return u<0&&(A=128,u=-u),u>32767&&(u=32767),u>=256?(M=N.findExponent(u),z=u>>M+3&15):(M=0,z=u>>4),(A|M<<4|z)^85}static findExponent(u){let v=0;for(v=0;v<8&&!(u<=256<<v);v++);return v}}async function O(){if(!t.deviceId||!t.channelId){P.error("设备ID或通道ID不能为空");return}if(!(s.value||a.value))try{a.value=!0;const i=await _e({deviceId:t.deviceId,channelId:t.channelId});if(!i||i.code!==0)throw new Error(i?.message||"广播启动失败");const u=ve();if(n.value=new WebSocket(u),n.value.binaryType="arraybuffer",await new Promise((v,m)=>{if(!n.value)return m(new Error("WebSocket 创建失败"));n.value.onopen=()=>{v()},n.value.onerror=b=>{console.error("[Broadcast] WebSocket 错误:",b),m(new Error("WebSocket 连接失败"))},n.value.onclose=()=>{J()}}),await h(),n.value&&n.value.readyState===WebSocket.OPEN){const v={type:"startBroadcast",deviceId:t.deviceId,channelId:t.channelId};n.value.send(JSON.stringify(v))}s.value=!0,a.value=!1,P.success("语音广播已启动")}catch(i){a.value=!1;const u=i?.message||i?.msg||"广播启动失败";P.error(`广播失败: ${u}`),console.error("[Broadcast] 启动失败:",i),H()}}async function h(){try{if(!navigator.mediaDevices||!navigator.mediaDevices.getUserMedia)throw new Error("浏览器不支持麦克风访问");if(window.location.protocol!=="https:"&&!["localhost","127.0.0.1"].includes(window.location.hostname))throw new Error("麦克风访问需要 HTTPS 连接。请使用 https:// 访问,或在服务器本机使用 localhost 访问");k.value=await navigator.mediaDevices.getUserMedia({audio:{sampleRate:8e3,channelCount:1,echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0}}),r.value=new AudioContext({sampleRate:8e3});const i=r.value.createMediaStreamSource(k.value),u=`
- class PCMProcessor extends AudioWorkletProcessor {
- constructor() {
- super();
- this.bufferSize = 2048;
- this.buffer = new Float32Array(this.bufferSize);
- this.bufferIndex = 0;
- }
- process(inputs, outputs, parameters) {
- const input = inputs[0];
- if (!input || input.length === 0) return true;
-
- const inputChannel = input[0];
- for (let i = 0; i < inputChannel.length; i++) {
- this.buffer[this.bufferIndex++] = inputChannel[i];
-
- if (this.bufferIndex >= this.bufferSize) {
- this.port.postMessage(this.buffer.slice());
- this.bufferIndex = 0;
- }
- }
- return true;
- }
- }
- registerProcessor('pcm-processor', PCMProcessor);
- `,v=new Blob([u],{type:"application/javascript"}),m=URL.createObjectURL(v);await r.value.audioWorklet.addModule(m),_.value=new AudioWorkletNode(r.value,"pcm-processor"),_.value.port.onmessage=b=>{T(b.data)},i.connect(_.value),_.value.connect(r.value.destination)}catch(i){throw console.error("[Broadcast] 音频采集失败:",i),i.name==="NotAllowedError"?new Error("麦克风权限被拒绝。请在浏览器设置中允许此网站访问麦克风"):i.name==="NotFoundError"?new Error("未找到麦克风设备。请检查麦克风是否已连接"):i.name==="NotReadableError"?new Error("麦克风被其他应用占用。请关闭其他使用麦克风的应用"):i.message&&i.message.includes("HTTPS")?i:new Error(`无法访问麦克风: ${i.message||"未知错误"}`)}}function T(i){if(!s.value||!n.value||n.value.readyState!==WebSocket.OPEN)return;const u=new Int16Array(i.length);for(let b=0;b<i.length;b++){const A=Math.max(-1,Math.min(1,i[b]));u[b]=Math.floor(A*32767)}const v=N.encode(u),m=new Uint8Array(f.value.length+v.length);for(m.set(f.value),m.set(v,f.value.length),f.value=m;f.value.length>=G;){const b=f.value.slice(0,G);f.value=f.value.slice(G),n.value&&n.value.readyState===WebSocket.OPEN&&n.value.send(b)}}async function J(){if(s.value)try{if(n.value&&n.value.readyState===WebSocket.OPEN){const i={type:"stopBroadcast"};n.value.send(JSON.stringify(i))}await fe({deviceId:t.deviceId,channelId:t.channelId}),P.success("语音广播已停止")}catch(i){console.error("[Broadcast] 停止失败:",i)}finally{H()}}function H(){s.value=!1,a.value=!1,n.value&&(n.value.close(),n.value=null),_.value&&(_.value.disconnect(),_.value.port.onmessage=null,_.value=null),r.value&&(r.value.close(),r.value=null),k.value&&(k.value.getTracks().forEach(i=>i.stop()),k.value=null),f.value=new Uint8Array(0)}function Y(){O()}function W(){s.value&&J()}return ie(()=>{H()}),(i,u)=>(p(),E(o(w),null,{title:c(()=>[R(V(a.value?"正在连接...":s.value?"松开停止喊话":"按住喊话"),1)]),default:c(()=>[C("button",{class:x(["broadcast-btn",{broadcasting:s.value,connecting:a.value}]),disabled:a.value,onMousedown:Y,onMouseup:W,onMouseleave:W,onTouchstart:q(Y,["prevent"]),onTouchend:q(W,["prevent"])},[l(o(y),{icon:s.value?"mdi:microphone":a.value?"mdi:loading":"mdi:microphone-outline",class:x({"animate-spin":a.value}),size:24},null,8,["icon","class"])],42,Re)]),_:1}))}});const Me=te(Ae,[["__scopeId","data-v-c99e59a9"]]),Pe={class:"text-center mt-15px"},Ue={key:0,class:"broadcast-container mt-15px"},Fe={class:"w-140px flex justify-around"},Le=B({__name:"index",props:{hanldeClick:{type:Function},allowed:{type:Boolean},deviceId:{},channelId:{}},setup(e){const t=e,s={first:{ptzType:d.SHOT_ZOOM_FAR,icon:"ant-design:zoom-in-outlined",title:"镜头放大"},last:{ptzType:d.SHOT_ZOOM_NEAR,icon:"ant-design:zoom-out-outlined",title:"镜头缩小"},center:"镜头"},a={first:{ptzType:d.SHOT_FOCUS_FAR,icon:"icon-park-outline:focus-one",title:"聚焦近"},last:{ptzType:d.SHOT_FOCUS_NEAR,icon:"ph:corners-out-fill",title:"聚焦远"},center:"焦距"},n={first:{ptzType:d.APERTRUE_NEAR,svg:"aperture-near",title:"光圈放大"},last:{ptzType:d.APERTRUE_FAR,svg:"aperture-far",title:"光圈缩小"},center:"光圈"},r=(O,h)=>{const T=ne(O,h);t.hanldeClick(T)},k=g("0"),_=oe(),f=ce({get(){return _.controlMode},set(O){_.controlMode=O}}),N=[{label:"连动",value:L.CONTINUE},{label:"点动",value:L.CLICK}];return(O,h)=>(p(),S("div",{class:x(["operate-panel flex flex-col items-center",{notAllowed:!O.allowed}])},[l(xe),C("div",Pe,[l(Ie,{clickCB:r})]),O.deviceId&&O.channelId?(p(),S("div",Ue,[l(Me,{deviceId:O.deviceId,channelId:O.channelId},null,8,["deviceId","channelId"])])):re("",!0),C("div",Fe,[l($,{key:"shotZoomBtn",direction:o(F).VERTICAL,items:s,class:"mt-20px",clickCB:r},null,8,["direction"]),l($,{key:"shotFocusBtn",direction:o(F).VERTICAL,items:a,class:"mt-20px",clickCB:r},null,8,["direction"]),l($,{key:"apertureBtn",direction:o(F).VERTICAL,items:n,class:"mt-20px",clickCB:r},null,8,["direction"])]),l(o(pe),{activeKey:k.value,"onUpdate:activeKey":h[1]||(h[1]=T=>k.value=T),class:"w-full mt-15px",size:"small"},{default:c(()=>[l(o(D),{key:"0",tab:"控制模式"},{default:c(()=>[l(o(w),null,{title:c(()=>h[2]||(h[2]=[C("p",{class:"mb-4px"},[C("b",null,"连动模式"),R(":点击一次操作后会一直执行,需要点击暂停方可停止上次动作 ")],-1),C("p",{class:"mb-0"},[C("b",null,"点动模式"),R(":点击一次执行一次,会自动停止,大范围移动需要多次点击,可配合较大的速度值操作 ")],-1)])),default:c(()=>[l(o(ue),{value:f.value,"onUpdate:value":h[0]||(h[0]=T=>f.value=T),options:N},null,8,["value"])]),_:1})]),_:1}),l(o(D),{key:"1",tab:"预置位"},{default:c(()=>[l(Ne,{clickCB:r})]),_:1}),l(o(D),{key:"2",tab:"雨刷"},{default:c(()=>[l(o(de),null,{default:c(()=>[l(ee,{title:"雨刷开",svg:"open",ptzType:o(d).WIPER_OPEN,clickCB:r},null,8,["ptzType"]),l(ee,{title:"雨刷关",svg:"close",ptzType:o(d).WIPER_CLOSE,clickCB:r},null,8,["ptzType"])]),_:1})]),_:1})]),_:1},8,["activeKey"])],2))}});const Ze=te(Le,[["__scopeId","data-v-a39d353f"]]);export{Ze as D,L as I,Ge as p,oe as u};
- //# sourceMappingURL=index-6ec20f53.js.map
|