sip-connector 14.1.0-alpha.12 → 14.1.0-alpha.13
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/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("events-constructor");const i=require("./@SipConnector-Xh6_JpUI.cjs"),W=require("@krivega/cancelable-promise"),ce=require("repeated-calls"),ae=require("ts-debounce"),_=require("debug"),le=require("sequent-promises"),ue=require("stack-promises"),de=e=>e instanceof Object&&("originator"in e||"cause"in e),ge=e=>{if(W.isCanceledError(e))return!0;if(!de(e))return!1;const{originator:n,cause:t}=e;return typeof t=="string"?t===i.ECallCause.REQUEST_TIMEOUT||t===i.ECallCause.REJECTED||n===i.Originator.LOCAL&&(t===i.ECallCause.CANCELED||t===i.ECallCause.BYE):!1},fe=(e,n)=>(e.degradationPreference=n.degradationPreference,e),Ce=(e,n)=>{e.encodings??=[];for(let t=e.encodings.length;t<n;t+=1)e.encodings.push({});return e},G=e=>(n,t)=>t!==void 0&&n!==t||t===void 0&&n!==e,he=G(),Se=(e,n)=>{if(he(e,n))return e},me=(e,n)=>{const t=e.maxBitrate,o=Se(n,t);return o!==void 0&&(e.maxBitrate=o),e},K=1,Re=G(K),pe=(e,n)=>{const t=e===void 0?void 0:Math.max(e,K);if(t!==void 0&&Re(t,n))return t},ye=(e,n)=>{const t=e.scaleResolutionDownBy,o=pe(n,t);return o!==void 0&&(e.scaleResolutionDownBy=o),e},Ee=(e,n)=>{const t=n.encodings?.length??0;return Ce(e,t),e.encodings.forEach((o,r)=>{const s=(n?.encodings??[])[r],c=s?.maxBitrate,a=s?.scaleResolutionDownBy;me(o,c),ye(o,a)}),e},Te=(e,n)=>{if(e.codecs?.length!==n.codecs?.length)return!0;for(let t=0;t<(e.codecs?.length??0);t++)if(JSON.stringify(e.codecs[t])!==JSON.stringify(n.codecs[t]))return!0;if(e.headerExtensions?.length!==n.headerExtensions?.length)return!0;for(let t=0;t<(e.headerExtensions?.length??0);t++)if(JSON.stringify(e.headerExtensions[t])!==JSON.stringify(n.headerExtensions[t]))return!0;if(e.encodings?.length!==n.encodings?.length)return!0;for(let t=0;t<(e.encodings.length??0);t++)if(JSON.stringify(e.encodings[t])!==JSON.stringify(n.encodings[t]))return!0;return e.rtcp?.cname!==n.rtcp?.cname||e.rtcp?.reducedSize!==n.rtcp?.reducedSize||e.degradationPreference!==n.degradationPreference},q=async(e,n)=>{const t=e.getParameters(),o=JSON.parse(JSON.stringify(t));Ee(t,n),fe(t,n);const r=Te(o,t);return r&&await e.setParameters(t),{parameters:t,isChanged:r}},ve=e=>e.getVideoTracks()[0],Me=1e6,m=e=>e*Me,Y=m(.06),be=m(4),_e=e=>e<=64?Y:e<=128?m(.12):e<=256?m(.25):e<=384?m(.32):e<=426?m(.38):e<=640?m(.5):e<=848?m(.7):e<=1280?m(1):e<=1920?m(2):be,z=(e,n)=>e!==void 0&&n!==void 0&&e.toLowerCase().includes(n.toLowerCase()),Ae="av1",Oe=e=>z(e,Ae),Ne=.6,Q=(e,n)=>Oe(n)?e*Ne:e,Be=e=>Q(Y,e),Z=(e,n)=>{const t=_e(e);return Q(t,n)},H=1,ee=({videoTrack:e,targetSize:n,codec:t})=>{const o=e.getSettings(),r=o.width,s=o.height,c=r===void 0?H:r/n.width,a=s===void 0?H:s/n.height,l=Math.max(c,a,H),d=Z(n.width,t);return{scaleResolutionDownBy:l,maxBitrate:d}},w=({mediaStream:e,simulcastEncodings:n,sendEncodings:t})=>{if(n&&n.length>0){const o=t??[],r=ve(e);if(r===void 0)throw new Error("No video track");return n.forEach((s,c)=>{const a=o[c]??{};a.active=!0,s.rid!==void 0&&(a.rid=s.rid),s.scalabilityMode!==void 0&&(a.scalabilityMode=s.scalabilityMode);const{maxBitrate:l,scaleResolutionDownBy:d}=ee({videoTrack:r,targetSize:{width:s.width,height:s.height}});a.maxBitrate=l,a.scaleResolutionDownBy=d,o[c]=a}),o}return t},ne="purgatory",P=e=>e===ne,we=(e,n)=>e.filter(o=>n.some(r=>r.clockRate===o.clockRate&&r.mimeType===o.mimeType&&r.channels===o.channels&&r.sdpFmtpLine===o.sdpFmtpLine)),De=e=>{const n=RTCRtpSender.getCapabilities(e),t=RTCRtpReceiver.getCapabilities(e),o=n===null?[]:n.codecs,r=t===null?[]:t.codecs;return we(o,r)},Pe=(e,n)=>n===void 0||n.length===0?e:e.sort((t,o)=>{const r=n.indexOf(t.mimeType),s=n.indexOf(o.mimeType),c=r===-1?Number.MAX_VALUE:r,a=s===-1?Number.MAX_VALUE:s;return c-a}),Ie=(e,n)=>n===void 0||n.length===0?e:e.filter(t=>!n.includes(t.mimeType)),xe=(e,{preferredMimeTypesVideoCodecs:n,excludeMimeTypesVideoCodecs:t})=>{if(typeof e.setCodecPreferences=="function"&&e.sender.track?.kind==="video"&&(n!==void 0&&n.length>0||t!==void 0&&t.length>0)){const o=De("video"),r=Ie(o,t),s=Pe(r,n);e.setCodecPreferences(s)}},D=(e,{preferredMimeTypesVideoCodecs:n,excludeMimeTypesVideoCodecs:t})=>async o=>{try{xe(o,{preferredMimeTypesVideoCodecs:n,excludeMimeTypesVideoCodecs:t}),Object.values(e).filter(s=>s!=null).length>0&&(i.logger("updateTransceiver setParametersToSender",e),await q(o.sender,e))}catch(r){i.logger("updateTransceiver error",r)}},$=e=>{if(!W.isCanceledError(e)&&!ce.hasCanceledError(e))throw e;return{isSuccessful:!1}},Fe=({kind:e,readyState:n})=>e==="video"&&n==="live",Ue=new Set(["on","once","onceRace","wait","off","sendDTMF","hangUp","declineToIncomingCall","sendChannels","checkTelephony","waitChannels","ping","connection","isConfigured","isRegistered"]);class ke{on;once;onceRace;wait;off;sendDTMF;hangUp;declineToIncomingCall;sendChannels;checkTelephony;waitChannels;ping;connection;isConfigured;isRegistered;sipConnector;preferredMimeTypesVideoCodecs;excludeMimeTypesVideoCodecs;constructor(n,{preferredMimeTypesVideoCodecs:t,excludeMimeTypesVideoCodecs:o}={}){return this.preferredMimeTypesVideoCodecs=t,this.excludeMimeTypesVideoCodecs=o,this.sipConnector=n,new Proxy(this,{get:(r,s,c)=>{if(typeof s=="string"&&Ue.has(s)&&s in this.sipConnector){const l=Reflect.get(this.sipConnector,s,this.sipConnector);return typeof l=="function"?l.bind(this.sipConnector):l}const a=Reflect.get(r,s,c);return typeof a=="function"?a.bind(r):a}})}connectToServer=async n=>{const{userAgent:t,sipWebSocketServerURL:o,sipServerUrl:r,remoteAddress:s,displayName:c,name:a,password:l,isRegisteredUser:d,isDisconnectOnFail:f}=n;return i.logger("connectToServer",n),this.sipConnector.connect({userAgent:t,sipWebSocketServerURL:o,sipServerUrl:r,remoteAddress:s,displayName:c,password:l,user:a,register:d}).then(g=>(i.logger("connectToServer then"),{ua:g,isSuccessful:!0})).catch(async g=>(i.logger("connectToServer catch: error",g),f===!0?this.sipConnector.disconnect().then(()=>$(g)).catch(()=>$(g)):$(g)))};callToServer=async n=>{const{conference:t,mediaStream:o,extraHeaders:r,iceServers:s,contentHint:c,simulcastEncodings:a,degradationPreference:l,sendEncodings:d,offerToReceiveAudio:f,offerToReceiveVideo:g,directionVideo:I,directionAudio:x,setRemoteStreams:C,onBeforeProgressCall:R,onSuccessProgressCall:h,onEnterPurgatory:S,onEnterConference:p,onFailProgressCall:y,onFinishProgressCall:E,onEndedCall:T}=n,b=this.resolveHandleReadyRemoteStreamsDebounced({onReadyRemoteStreams:C}),A=this.resolveHandleReadyRemoteStreams({onReadyRemoteStreams:()=>{b().catch(_)}}),O=D({degradationPreference:l},{preferredMimeTypesVideoCodecs:this.preferredMimeTypesVideoCodecs,excludeMimeTypesVideoCodecs:this.excludeMimeTypesVideoCodecs});i.logger("callToServer",n);const N=async()=>(i.logger("startCall"),this.sipConnector.call({mediaStream:o,extraHeaders:r,iceServers:s,contentHint:c,offerToReceiveAudio:f,offerToReceiveVideo:g,directionVideo:I,directionAudio:x,sendEncodings:w({mediaStream:o,simulcastEncodings:a,sendEncodings:d}),number:t,onAddedTransceiver:O,ontrack:A}));let v=!1,M;const B=(i.logger("subscribeEnterConference: onEnterConference",p),S??p?this.sipConnector.on("api:enterRoom",({room:u})=>{i.logger("enterRoom",{_room:u,isSuccessProgressCall:v}),M=u,P(M)?S&&S():p&&p({isSuccessProgressCall:v})}):()=>{}),k=u=>(i.logger("onSuccess"),v=!0,b().catch(_),h&&h({isPurgatory:P(M)}),this.sipConnector.onceRace(["call:ended","call:failed"],()=>{B(),T&&T()}),u),V=u=>{throw i.logger("onFail"),y&&y(),B(),u},L=()=>{i.logger("onFinish"),E&&E()};return i.logger("onBeforeProgressCall"),R&&R(t),N().then(k).catch(u=>V(u)).finally(L)};disconnectFromServer=async()=>this.sipConnector.disconnect().then(()=>(i.logger("disconnectFromServer: then"),{isSuccessful:!0})).catch(n=>(i.logger("disconnectFromServer: catch",n),{isSuccessful:!1}));answerToIncomingCall=async n=>{const{mediaStream:t,extraHeaders:o,iceServers:r,contentHint:s,simulcastEncodings:c,degradationPreference:a,sendEncodings:l,offerToReceiveAudio:d,offerToReceiveVideo:f,directionVideo:g,directionAudio:I,setRemoteStreams:x,onBeforeProgressCall:C,onSuccessProgressCall:R,onEnterPurgatory:h,onEnterConference:S,onFailProgressCall:p,onFinishProgressCall:y,onEndedCall:E}=n,T=this.resolveHandleReadyRemoteStreamsDebounced({onReadyRemoteStreams:x}),b=this.resolveHandleReadyRemoteStreams({onReadyRemoteStreams:()=>{T().catch(_)}}),A=D({degradationPreference:a},{preferredMimeTypesVideoCodecs:this.preferredMimeTypesVideoCodecs,excludeMimeTypesVideoCodecs:this.excludeMimeTypesVideoCodecs});i.logger("answerToIncomingCall",n);const O=async()=>this.sipConnector.answerToIncomingCall({mediaStream:t,extraHeaders:o,iceServers:r,contentHint:s,offerToReceiveAudio:d,offerToReceiveVideo:f,directionVideo:g,directionAudio:I,sendEncodings:w({mediaStream:t,simulcastEncodings:c,sendEncodings:l}),onAddedTransceiver:A,ontrack:b}),N=()=>{const{remoteCallerData:u}=this.sipConnector;return u.incomingNumber};let v=!1,M;const B=(i.logger("subscribeEnterConference: onEnterConference",S),h??S?this.sipConnector.on("api:enterRoom",u=>{i.logger("enterRoom",{_room:u,isSuccessProgressCall:v}),M=u,P(M)?h&&h():S&&S({isSuccessProgressCall:v})}):()=>{}),k=u=>(i.logger("onSuccess"),v=!0,T().catch(_),R&&R({isPurgatory:P(M)}),this.sipConnector.onceRace(["call:ended","call:failed"],()=>{B(),E&&E()}),u),V=u=>{throw i.logger("onFail"),p&&p(),B(),u},L=()=>{i.logger("onFinish"),y&&y()};if(i.logger("onBeforeProgressCall"),C){const u=N();C(u)}return O().then(k).catch(u=>V(u)).finally(L)};updatePresentation=async({mediaStream:n,isP2P:t,maxBitrate:o,contentHint:r,simulcastEncodings:s,degradationPreference:c,sendEncodings:a,preferredMimeTypesVideoCodecs:l,excludeMimeTypesVideoCodecs:d})=>{const f=D({degradationPreference:c},{preferredMimeTypesVideoCodecs:l,excludeMimeTypesVideoCodecs:d});return i.logger("updatePresentation"),this.sipConnector.updatePresentation(n,{isP2P:t,maxBitrate:o,contentHint:r,sendEncodings:w({mediaStream:n,simulcastEncodings:s,sendEncodings:a}),onAddedTransceiver:f})};startPresentation=async({mediaStream:n,isP2P:t,maxBitrate:o,contentHint:r,simulcastEncodings:s,degradationPreference:c,sendEncodings:a,preferredMimeTypesVideoCodecs:l,excludeMimeTypesVideoCodecs:d,callLimit:f})=>{const g=D({degradationPreference:c},{preferredMimeTypesVideoCodecs:l,excludeMimeTypesVideoCodecs:d});return i.logger("startPresentation"),this.sipConnector.startPresentation(n,{isP2P:t,maxBitrate:o,contentHint:r,callLimit:f,sendEncodings:w({mediaStream:n,simulcastEncodings:s,sendEncodings:a}),onAddedTransceiver:g})};stopShareSipConnector=async({isP2P:n=!1}={})=>(i.logger("stopShareSipConnector"),this.sipConnector.stopPresentation({isP2P:n}).catch(t=>{i.logger(t)}));sendRefusalToTurnOnMic=async()=>{i.logger("sendRefusalToTurnOnMic"),await this.sipConnector.sendRefusalToTurnOnMic().catch(n=>{i.logger("sendRefusalToTurnOnMic: error",n)})};sendRefusalToTurnOnCam=async()=>{i.logger("sendRefusalToTurnOnCam"),await this.sipConnector.sendRefusalToTurnOnCam().catch(n=>{i.logger("sendRefusalToTurnOnCam: error",n)})};sendMediaState=async({isEnabledCam:n,isEnabledMic:t})=>{i.logger("sendMediaState"),await this.sipConnector.sendMediaState({cam:n,mic:t})};replaceMediaStream=async(n,{deleteExisting:t,addMissing:o,forceRenegotiation:r,contentHint:s,simulcastEncodings:c,degradationPreference:a,sendEncodings:l}={})=>{const d=D({degradationPreference:a},{preferredMimeTypesVideoCodecs:this.preferredMimeTypesVideoCodecs,excludeMimeTypesVideoCodecs:this.excludeMimeTypesVideoCodecs});return i.logger("replaceMediaStream"),this.sipConnector.replaceMediaStream(n,{deleteExisting:t,addMissing:o,forceRenegotiation:r,contentHint:s,sendEncodings:w({mediaStream:n,simulcastEncodings:c,sendEncodings:l}),onAddedTransceiver:d})};askPermissionToEnableCam=async()=>{i.logger("askPermissionToEnableCam"),await this.sipConnector.askPermissionToEnableCam()};resolveHandleReadyRemoteStreamsDebounced=({onReadyRemoteStreams:n})=>ae.debounce(()=>{const t=this.sipConnector.getRemoteStreams();i.logger("remoteStreams",t),t&&n(t)},200);resolveHandleReadyRemoteStreams=({onReadyRemoteStreams:n})=>({track:t})=>{Fe(t)&&n()};getRemoteStreams=()=>(i.logger("getRemoteStreams"),this.sipConnector.getRemoteStreams());onUseLicense=n=>(i.logger("onUseLicense"),this.sipConnector.on("api:useLicense",n));onMustStopPresentation=n=>(i.logger("onMustStopPresentation"),this.sipConnector.on("api:mustStopPresentation",n));onMoveToSpectators=n=>(i.logger("onMoveToSpectators"),this.sipConnector.on("api:participant:move-request-to-spectators",n));onMoveToParticipants=n=>(i.logger("onMoveToParticipants"),this.sipConnector.on("api:participant:move-request-to-participants",n))}const U=e=>{const{url:n,cause:t}=e;let o=n;return(t===i.ECallCause.BAD_MEDIA_DESCRIPTION||t===i.ECallCause.NOT_FOUND)&&(o=`${e.message.to.uri.user}@${e.message.to.uri.host}`),o};var te=(e=>(e.CONNECT_SERVER_FAILED="CONNECT_SERVER_FAILED",e.WRONG_USER_OR_PASSWORD="WRONG_USER_OR_PASSWORD",e.BAD_MEDIA_ERROR="BAD_MEDIA_ERROR",e.NOT_FOUND_ERROR="NOT_FOUND_ERROR",e.WS_CONNECTION_FAILED="WS_CONNECTION_FAILED",e.CONNECT_SERVER_FAILED_BY_LINK="CONNECT_SERVER_FAILED_BY_LINK",e))(te||{});const Ve=new Error("Unknown error"),Le=(e=Ve)=>{const{cause:n,socket:t}=e;let o="CONNECT_SERVER_FAILED";switch(n){case"Forbidden":{o="WRONG_USER_OR_PASSWORD";break}case i.ECallCause.BAD_MEDIA_DESCRIPTION:{o="BAD_MEDIA_ERROR";break}case i.ECallCause.NOT_FOUND:{o="NOT_FOUND_ERROR";break}default:t!==void 0&&t._ws?.readyState===3?o="WS_CONNECTION_FAILED":U(e)!==void 0&&U(e)!==""&&(o="CONNECT_SERVER_FAILED_BY_LINK")}return o},He=e=>{let n="";try{n=JSON.stringify(e)}catch(t){i.logger("failed to stringify message",t)}return n},$e=new Error("Unknown error"),qe=(e=$e)=>{const{code:n,cause:t,message:o}=e,r=U(e),s={code:"",cause:"",message:""};return typeof o=="object"&&o!==null?s.message=He(o):o&&(s.message=String(o)),r!==void 0&&r!==""&&(s.link=r),n!==void 0&&n!==""&&(s.code=n),t!==void 0&&t!==""&&(s.cause=t),s},Je=Object.freeze(Object.defineProperty({__proto__:null,EErrorTypes:te,getLinkError:U,getTypeFromError:Le,getValuesFromError:qe},Symbol.toStringTag,{value:"Module"})),Xe=({sessionId:e,remoteAddress:n,isMutedAudio:t,isMutedVideo:o,isRegistered:r,isPresentationCall:s})=>{const c=[],a=t?"0":"1",l=o?"0":"1";return c.push(`X-Vinteo-Mic-State: ${a}`,`X-Vinteo-MainCam-State: ${l}`),(r===!1||r===void 0)&&c.push("X-Vinteo-Purgatory-Call: yes"),e!==void 0&&e!==""&&c.push(`X-Vinteo-Session: ${e}`),s===!0&&c.push("X-Vinteo-Presentation-Call: yes"),n!==void 0&&n!==""&&c.push(`X-Vinteo-Remote: ${n}`),c},je="[@*!|]",We="_",Ge=e=>{let n=e;return n=n.replaceAll(new RegExp(je,"g"),We),n},Ke=({appName:e,appVersion:n,browserName:t,browserVersion:o})=>{const s=`${Ge(e)} ${n}`;return`ChromeNew - ${t===void 0?s:`${t} ${o}, ${s}`}`},Ye=({isUnifiedSdpSemantic:e,appVersion:n,browserName:t,browserVersion:o,appName:r})=>e?Ke({appVersion:n,browserName:t,browserVersion:o,appName:r}):"Chrome",ze=e=>n=>[...n].map(o=>async()=>e(o)),Qe=async({accumulatedKeys:e,sendKey:n,canRunTask:t})=>{const r=ze(n)(e);return le.sequentPromises(r,t)},Ze=e=>t=>(i.logger("onStartMainCam"),e.on("api:admin-start-main-cam",t)),en=e=>t=>(i.logger("onStartMic"),e.on("api:admin-start-mic",t)),nn=e=>t=>(i.logger("onStopMainCam"),e.on("api:admin-stop-main-cam",t)),tn=e=>t=>(i.logger("onStopMic"),e.on("api:admin-stop-mic",t)),on=({sipConnector:e})=>{const n=(C,R)=>({isSyncForced:h})=>{if(h===!0){C();return}R()},t=Ze(e),o=nn(e),r=en(e),s=tn(e);let c,a,l,d;const f=({onStartMainCamForced:C,onStartMainCamNotForced:R,onStopMainCamForced:h,onStopMainCamNotForced:S,onStartMicForced:p,onStartMicNotForced:y,onStopMicForced:E,onStopMicNotForced:T})=>{const b=n(C,R);c=t(b);const A=n(h,S);a=o(A);const O=n(p,y);l=r(O);const N=n(E,T);d=s(N)},g=()=>{c?.(),a?.(),l?.(),d?.()};return{start:C=>{f(C)},stop:()=>{g()}}},rn=Object.freeze(Object.defineProperty({__proto__:null,PURGATORY_CONFERENCE_NUMBER:ne,createSyncMediaState:on,error:Je,getExtraHeaders:Xe,getUserAgent:Ye,hasPurgatory:P,sendDtmfAccumulated:Qe},Symbol.toStringTag,{value:"Module"}));var oe=(e=>(e.VP8="video/VP8",e.VP9="video/VP9",e.H264="video/H264",e.AV1="video/AV1",e.rtx="video/rtx",e.red="video/red",e.flexfec03="video/flexfec-03",e))(oe||{});const sn=e=>[...e.keys()].map(n=>e.get(n)),cn=(e,n)=>sn(e).find(t=>t?.type===n),re=async e=>e.getStats().then(n=>cn(n,"codec")?.mimeType),an=e=>e.find(n=>n.track?.kind==="video"),ln=async(e,n,t)=>{const{isChanged:o,parameters:r}=await q(e,{encodings:[{scaleResolutionDownBy:n.scaleResolutionDownBy,maxBitrate:n.maxBitrate}]});return o&&t&&t(r),{isChanged:o,parameters:r}},se=ue.createStackPromises(),un=async()=>se().catch(e=>{i.logger("videoSendingBalancer: error",e)}),dn=async e=>(se.add(e),un()),J=async({sender:e,scaleResolutionDownBy:n,maxBitrate:t,onSetParameters:o})=>dn(async()=>ln(e,{scaleResolutionDownBy:n,maxBitrate:t},o)),gn=async({sender:e,codec:n},t)=>{const r=Be(n);return J({sender:e,maxBitrate:r,onSetParameters:t,scaleResolutionDownBy:200})},F=async({sender:e,videoTrack:n,codec:t},o)=>{const c=n.getSettings().width,a=Z(c??0,t);return J({sender:e,maxBitrate:a,onSetParameters:o,scaleResolutionDownBy:1})},fn=async({sender:e,videoTrack:n,resolution:t,codec:o},r)=>{const[s,c]=t.split("x"),{maxBitrate:a,scaleResolutionDownBy:l}=ee({videoTrack:n,codec:o,targetSize:{width:Number(s),height:Number(c)}});return J({sender:e,maxBitrate:a,onSetParameters:r,scaleResolutionDownBy:l})},Cn=async({mainCam:e,resolutionMainCam:n,sender:t,videoTrack:o,codec:r},s)=>{switch(e){case i.EEventsMainCAM.PAUSE_MAIN_CAM:return gn({sender:t,codec:r},s);case i.EEventsMainCAM.RESUME_MAIN_CAM:return F({sender:t,videoTrack:o,codec:r},s);case i.EEventsMainCAM.MAX_MAIN_CAM_RESOLUTION:return n!==void 0?fn({sender:t,videoTrack:o,codec:r,resolution:n},s):F({sender:t,videoTrack:o,codec:r},s);case i.EEventsMainCAM.ADMIN_STOP_MAIN_CAM:case i.EEventsMainCAM.ADMIN_START_MAIN_CAM:case void 0:return F({sender:t,videoTrack:o,codec:r},s);default:return F({sender:t,videoTrack:o,codec:r},s)}},X={isChanged:!1,parameters:{encodings:[{}],transactionId:"0",codecs:[],headerExtensions:[],rtcp:{}}},j=async({mainCam:e,resolutionMainCam:n,connection:t,onSetParameters:o,ignoreForCodec:r})=>{const s=t.getSenders(),c=an(s);if(!c?.track)return X;const a=await re(c);return z(a,r)?X:Cn({mainCam:e,resolutionMainCam:n,sender:c,codec:a,videoTrack:c.track},o)},hn=(e,{ignoreForCodec:n,onSetParameters:t}={})=>{const o=async()=>{const{connection:l}=e;if(!l)throw new Error("connection is not exist");return j({connection:l,onSetParameters:t,ignoreForCodec:n})};let r=o;const s=l=>{r=async()=>{const{mainCam:d,resolutionMainCam:f}=l,{connection:g}=e;if(!g)throw new Error("connection is not exist");return j({mainCam:d,resolutionMainCam:f,connection:g,onSetParameters:t,ignoreForCodec:n})},r().catch(_)};return{subscribe:()=>{e.on("api:main-cam-control",s)},unsubscribe:()=>{e.off("api:main-cam-control",s)},balanceByTrack:o,resetMainCamControl(){r=o},async reBalance(){return r()}}};exports.ECallCause=i.ECallCause;exports.EUseLicense=i.EUseLicense;exports.SipConnector=i.SipConnector;exports.disableDebug=i.disableDebug;exports.enableDebug=i.enableDebug;exports.hasCanceledStartPresentationError=i.hasCanceledStartPresentationError;exports.debug=_;exports.EMimeTypesVideoCodecs=oe;exports.SipConnectorFacade=ke;exports.getCodecFromSender=re;exports.hasCanceledCallError=ge;exports.resolveVideoSendingBalancer=hn;exports.setParametersToSender=q;exports.tools=rn;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("events-constructor");const i=require("./@SipConnector-Xh6_JpUI.cjs"),G=require("@krivega/cancelable-promise"),ae=require("repeated-calls"),le=require("ts-debounce"),_=require("debug"),ue=require("sequent-promises"),de=require("stack-promises"),ge=e=>e instanceof Object&&("originator"in e||"cause"in e),fe=e=>{if(G.isCanceledError(e))return!0;if(!ge(e))return!1;const{originator:n,cause:t}=e;return typeof t=="string"?t===i.ECallCause.REQUEST_TIMEOUT||t===i.ECallCause.REJECTED||n===i.Originator.LOCAL&&(t===i.ECallCause.CANCELED||t===i.ECallCause.BYE):!1},Ce=(e,n)=>(e.degradationPreference=n.degradationPreference,e),he=(e,n)=>{e.encodings??=[];for(let t=e.encodings.length;t<n;t+=1)e.encodings.push({});return e},K=e=>(n,t)=>t!==void 0&&n!==t||t===void 0&&n!==e,Se=K(),me=(e,n)=>{if(Se(e,n))return e},Re=(e,n)=>{const t=e.maxBitrate,o=me(n,t);return o!==void 0&&(e.maxBitrate=o),e},Y=1,pe=K(Y),ye=(e,n)=>{const t=e===void 0?void 0:Math.max(e,Y);if(t!==void 0&&pe(t,n))return t},Ee=(e,n)=>{const t=e.scaleResolutionDownBy,o=ye(n,t);return o!==void 0&&(e.scaleResolutionDownBy=o),e},Te=(e,n)=>{const t=n.encodings?.length??0;return he(e,t),e.encodings.forEach((o,r)=>{const s=(n?.encodings??[])[r],c=s?.maxBitrate,a=s?.scaleResolutionDownBy;Re(o,c),Ee(o,a)}),e},ve=(e,n)=>{if(e.codecs?.length!==n.codecs?.length)return!0;for(let t=0;t<(e.codecs?.length??0);t++)if(JSON.stringify(e.codecs[t])!==JSON.stringify(n.codecs[t]))return!0;if(e.headerExtensions?.length!==n.headerExtensions?.length)return!0;for(let t=0;t<(e.headerExtensions?.length??0);t++)if(JSON.stringify(e.headerExtensions[t])!==JSON.stringify(n.headerExtensions[t]))return!0;if(e.encodings?.length!==n.encodings?.length)return!0;for(let t=0;t<(e.encodings.length??0);t++)if(JSON.stringify(e.encodings[t])!==JSON.stringify(n.encodings[t]))return!0;return e.rtcp?.cname!==n.rtcp?.cname||e.rtcp?.reducedSize!==n.rtcp?.reducedSize||e.degradationPreference!==n.degradationPreference},q=async(e,n)=>{const t=e.getParameters(),o=JSON.parse(JSON.stringify(t));Te(t,n),Ce(t,n);const r=ve(o,t);return r&&await e.setParameters(t),{parameters:t,isChanged:r}},Me=e=>e.getVideoTracks()[0],be=1e6,m=e=>e*be,z=m(.06),Q=m(4),_e=e=>e<=64?z:e<=128?m(.12):e<=256?m(.25):e<=384?m(.32):e<=426?m(.38):e<=640?m(.5):e<=848?m(.7):e<=1280?m(1):e<=1920?m(2):Q,Z=(e,n)=>e!==void 0&&n!==void 0&&e.toLowerCase().includes(n.toLowerCase()),Ae="av1",Oe=e=>Z(e,Ae),Ne=.6,J=(e,n)=>Oe(n)?e*Ne:e,Be=e=>J(z,e),we=e=>J(Q,e),ee=(e,n)=>{const t=_e(e);return J(t,n)},H=1,ne=({videoTrack:e,targetSize:n,codec:t})=>{const o=e.getSettings(),r=o.width,s=o.height,c=r===void 0?H:r/n.width,a=s===void 0?H:s/n.height,l=Math.max(c,a,H),d=ee(n.width,t);return{scaleResolutionDownBy:l,maxBitrate:d}},w=({mediaStream:e,simulcastEncodings:n,sendEncodings:t})=>{if(n&&n.length>0){const o=t??[],r=Me(e);if(r===void 0)throw new Error("No video track");return n.forEach((s,c)=>{const a=o[c]??{};a.active=!0,s.rid!==void 0&&(a.rid=s.rid),s.scalabilityMode!==void 0&&(a.scalabilityMode=s.scalabilityMode);const{maxBitrate:l,scaleResolutionDownBy:d}=ne({videoTrack:r,targetSize:{width:s.width,height:s.height}});a.maxBitrate=l,a.scaleResolutionDownBy=d,o[c]=a}),o}return t},te="purgatory",P=e=>e===te,De=(e,n)=>e.filter(o=>n.some(r=>r.clockRate===o.clockRate&&r.mimeType===o.mimeType&&r.channels===o.channels&&r.sdpFmtpLine===o.sdpFmtpLine)),Pe=e=>{const n=RTCRtpSender.getCapabilities(e),t=RTCRtpReceiver.getCapabilities(e),o=n===null?[]:n.codecs,r=t===null?[]:t.codecs;return De(o,r)},Ie=(e,n)=>n===void 0||n.length===0?e:e.sort((t,o)=>{const r=n.indexOf(t.mimeType),s=n.indexOf(o.mimeType),c=r===-1?Number.MAX_VALUE:r,a=s===-1?Number.MAX_VALUE:s;return c-a}),xe=(e,n)=>n===void 0||n.length===0?e:e.filter(t=>!n.includes(t.mimeType)),Fe=(e,{preferredMimeTypesVideoCodecs:n,excludeMimeTypesVideoCodecs:t})=>{if(typeof e.setCodecPreferences=="function"&&e.sender.track?.kind==="video"&&(n!==void 0&&n.length>0||t!==void 0&&t.length>0)){const o=Pe("video"),r=xe(o,t),s=Ie(r,n);e.setCodecPreferences(s)}},D=(e,{preferredMimeTypesVideoCodecs:n,excludeMimeTypesVideoCodecs:t})=>async o=>{try{Fe(o,{preferredMimeTypesVideoCodecs:n,excludeMimeTypesVideoCodecs:t}),Object.values(e).filter(s=>s!=null).length>0&&(i.logger("updateTransceiver setParametersToSender",e),await q(o.sender,e))}catch(r){i.logger("updateTransceiver error",r)}},$=e=>{if(!G.isCanceledError(e)&&!ae.hasCanceledError(e))throw e;return{isSuccessful:!1}},Ue=({kind:e,readyState:n})=>e==="video"&&n==="live",ke=new Set(["on","once","onceRace","wait","off","sendDTMF","hangUp","declineToIncomingCall","sendChannels","checkTelephony","waitChannels","ping","connection","isConfigured","isRegistered"]);class Ve{on;once;onceRace;wait;off;sendDTMF;hangUp;declineToIncomingCall;sendChannels;checkTelephony;waitChannels;ping;connection;isConfigured;isRegistered;sipConnector;preferredMimeTypesVideoCodecs;excludeMimeTypesVideoCodecs;constructor(n,{preferredMimeTypesVideoCodecs:t,excludeMimeTypesVideoCodecs:o}={}){return this.preferredMimeTypesVideoCodecs=t,this.excludeMimeTypesVideoCodecs=o,this.sipConnector=n,new Proxy(this,{get:(r,s,c)=>{if(typeof s=="string"&&ke.has(s)&&s in this.sipConnector){const l=Reflect.get(this.sipConnector,s,this.sipConnector);return typeof l=="function"?l.bind(this.sipConnector):l}const a=Reflect.get(r,s,c);return typeof a=="function"?a.bind(r):a}})}connectToServer=async n=>{const{userAgent:t,sipWebSocketServerURL:o,sipServerUrl:r,remoteAddress:s,displayName:c,name:a,password:l,isRegisteredUser:d,isDisconnectOnFail:f}=n;return i.logger("connectToServer",n),this.sipConnector.connect({userAgent:t,sipWebSocketServerURL:o,sipServerUrl:r,remoteAddress:s,displayName:c,password:l,user:a,register:d}).then(g=>(i.logger("connectToServer then"),{ua:g,isSuccessful:!0})).catch(async g=>(i.logger("connectToServer catch: error",g),f===!0?this.sipConnector.disconnect().then(()=>$(g)).catch(()=>$(g)):$(g)))};callToServer=async n=>{const{conference:t,mediaStream:o,extraHeaders:r,iceServers:s,contentHint:c,simulcastEncodings:a,degradationPreference:l,sendEncodings:d,offerToReceiveAudio:f,offerToReceiveVideo:g,directionVideo:I,directionAudio:x,setRemoteStreams:C,onBeforeProgressCall:R,onSuccessProgressCall:h,onEnterPurgatory:S,onEnterConference:p,onFailProgressCall:y,onFinishProgressCall:E,onEndedCall:T}=n,b=this.resolveHandleReadyRemoteStreamsDebounced({onReadyRemoteStreams:C}),A=this.resolveHandleReadyRemoteStreams({onReadyRemoteStreams:()=>{b().catch(_)}}),O=D({degradationPreference:l},{preferredMimeTypesVideoCodecs:this.preferredMimeTypesVideoCodecs,excludeMimeTypesVideoCodecs:this.excludeMimeTypesVideoCodecs});i.logger("callToServer",n);const N=async()=>(i.logger("startCall"),this.sipConnector.call({mediaStream:o,extraHeaders:r,iceServers:s,contentHint:c,offerToReceiveAudio:f,offerToReceiveVideo:g,directionVideo:I,directionAudio:x,sendEncodings:w({mediaStream:o,simulcastEncodings:a,sendEncodings:d}),number:t,onAddedTransceiver:O,ontrack:A}));let v=!1,M;const B=(i.logger("subscribeEnterConference: onEnterConference",p),S??p?this.sipConnector.on("api:enterRoom",({room:u})=>{i.logger("enterRoom",{_room:u,isSuccessProgressCall:v}),M=u,P(M)?S&&S():p&&p({isSuccessProgressCall:v})}):()=>{}),k=u=>(i.logger("onSuccess"),v=!0,b().catch(_),h&&h({isPurgatory:P(M)}),this.sipConnector.onceRace(["call:ended","call:failed"],()=>{B(),T&&T()}),u),V=u=>{throw i.logger("onFail"),y&&y(),B(),u},L=()=>{i.logger("onFinish"),E&&E()};return i.logger("onBeforeProgressCall"),R&&R(t),N().then(k).catch(u=>V(u)).finally(L)};disconnectFromServer=async()=>this.sipConnector.disconnect().then(()=>(i.logger("disconnectFromServer: then"),{isSuccessful:!0})).catch(n=>(i.logger("disconnectFromServer: catch",n),{isSuccessful:!1}));answerToIncomingCall=async n=>{const{mediaStream:t,extraHeaders:o,iceServers:r,contentHint:s,simulcastEncodings:c,degradationPreference:a,sendEncodings:l,offerToReceiveAudio:d,offerToReceiveVideo:f,directionVideo:g,directionAudio:I,setRemoteStreams:x,onBeforeProgressCall:C,onSuccessProgressCall:R,onEnterPurgatory:h,onEnterConference:S,onFailProgressCall:p,onFinishProgressCall:y,onEndedCall:E}=n,T=this.resolveHandleReadyRemoteStreamsDebounced({onReadyRemoteStreams:x}),b=this.resolveHandleReadyRemoteStreams({onReadyRemoteStreams:()=>{T().catch(_)}}),A=D({degradationPreference:a},{preferredMimeTypesVideoCodecs:this.preferredMimeTypesVideoCodecs,excludeMimeTypesVideoCodecs:this.excludeMimeTypesVideoCodecs});i.logger("answerToIncomingCall",n);const O=async()=>this.sipConnector.answerToIncomingCall({mediaStream:t,extraHeaders:o,iceServers:r,contentHint:s,offerToReceiveAudio:d,offerToReceiveVideo:f,directionVideo:g,directionAudio:I,sendEncodings:w({mediaStream:t,simulcastEncodings:c,sendEncodings:l}),onAddedTransceiver:A,ontrack:b}),N=()=>{const{remoteCallerData:u}=this.sipConnector;return u.incomingNumber};let v=!1,M;const B=(i.logger("subscribeEnterConference: onEnterConference",S),h??S?this.sipConnector.on("api:enterRoom",u=>{i.logger("enterRoom",{_room:u,isSuccessProgressCall:v}),M=u,P(M)?h&&h():S&&S({isSuccessProgressCall:v})}):()=>{}),k=u=>(i.logger("onSuccess"),v=!0,T().catch(_),R&&R({isPurgatory:P(M)}),this.sipConnector.onceRace(["call:ended","call:failed"],()=>{B(),E&&E()}),u),V=u=>{throw i.logger("onFail"),p&&p(),B(),u},L=()=>{i.logger("onFinish"),y&&y()};if(i.logger("onBeforeProgressCall"),C){const u=N();C(u)}return O().then(k).catch(u=>V(u)).finally(L)};updatePresentation=async({mediaStream:n,isP2P:t,maxBitrate:o,contentHint:r,simulcastEncodings:s,degradationPreference:c,sendEncodings:a,preferredMimeTypesVideoCodecs:l,excludeMimeTypesVideoCodecs:d})=>{const f=D({degradationPreference:c},{preferredMimeTypesVideoCodecs:l,excludeMimeTypesVideoCodecs:d});return i.logger("updatePresentation"),this.sipConnector.updatePresentation(n,{isP2P:t,maxBitrate:o,contentHint:r,sendEncodings:w({mediaStream:n,simulcastEncodings:s,sendEncodings:a}),onAddedTransceiver:f})};startPresentation=async({mediaStream:n,isP2P:t,maxBitrate:o,contentHint:r,simulcastEncodings:s,degradationPreference:c,sendEncodings:a,preferredMimeTypesVideoCodecs:l,excludeMimeTypesVideoCodecs:d,callLimit:f})=>{const g=D({degradationPreference:c},{preferredMimeTypesVideoCodecs:l,excludeMimeTypesVideoCodecs:d});return i.logger("startPresentation"),this.sipConnector.startPresentation(n,{isP2P:t,maxBitrate:o,contentHint:r,callLimit:f,sendEncodings:w({mediaStream:n,simulcastEncodings:s,sendEncodings:a}),onAddedTransceiver:g})};stopShareSipConnector=async({isP2P:n=!1}={})=>(i.logger("stopShareSipConnector"),this.sipConnector.stopPresentation({isP2P:n}).catch(t=>{i.logger(t)}));sendRefusalToTurnOnMic=async()=>{i.logger("sendRefusalToTurnOnMic"),await this.sipConnector.sendRefusalToTurnOnMic().catch(n=>{i.logger("sendRefusalToTurnOnMic: error",n)})};sendRefusalToTurnOnCam=async()=>{i.logger("sendRefusalToTurnOnCam"),await this.sipConnector.sendRefusalToTurnOnCam().catch(n=>{i.logger("sendRefusalToTurnOnCam: error",n)})};sendMediaState=async({isEnabledCam:n,isEnabledMic:t})=>{i.logger("sendMediaState"),await this.sipConnector.sendMediaState({cam:n,mic:t})};replaceMediaStream=async(n,{deleteExisting:t,addMissing:o,forceRenegotiation:r,contentHint:s,simulcastEncodings:c,degradationPreference:a,sendEncodings:l}={})=>{const d=D({degradationPreference:a},{preferredMimeTypesVideoCodecs:this.preferredMimeTypesVideoCodecs,excludeMimeTypesVideoCodecs:this.excludeMimeTypesVideoCodecs});return i.logger("replaceMediaStream"),this.sipConnector.replaceMediaStream(n,{deleteExisting:t,addMissing:o,forceRenegotiation:r,contentHint:s,sendEncodings:w({mediaStream:n,simulcastEncodings:c,sendEncodings:l}),onAddedTransceiver:d})};askPermissionToEnableCam=async()=>{i.logger("askPermissionToEnableCam"),await this.sipConnector.askPermissionToEnableCam()};resolveHandleReadyRemoteStreamsDebounced=({onReadyRemoteStreams:n})=>le.debounce(()=>{const t=this.sipConnector.getRemoteStreams();i.logger("remoteStreams",t),t&&n(t)},200);resolveHandleReadyRemoteStreams=({onReadyRemoteStreams:n})=>({track:t})=>{Ue(t)&&n()};getRemoteStreams=()=>(i.logger("getRemoteStreams"),this.sipConnector.getRemoteStreams());onUseLicense=n=>(i.logger("onUseLicense"),this.sipConnector.on("api:useLicense",n));onMustStopPresentation=n=>(i.logger("onMustStopPresentation"),this.sipConnector.on("api:mustStopPresentation",n));onMoveToSpectators=n=>(i.logger("onMoveToSpectators"),this.sipConnector.on("api:participant:move-request-to-spectators",n));onMoveToParticipants=n=>(i.logger("onMoveToParticipants"),this.sipConnector.on("api:participant:move-request-to-participants",n))}const U=e=>{const{url:n,cause:t}=e;let o=n;return(t===i.ECallCause.BAD_MEDIA_DESCRIPTION||t===i.ECallCause.NOT_FOUND)&&(o=`${e.message.to.uri.user}@${e.message.to.uri.host}`),o};var oe=(e=>(e.CONNECT_SERVER_FAILED="CONNECT_SERVER_FAILED",e.WRONG_USER_OR_PASSWORD="WRONG_USER_OR_PASSWORD",e.BAD_MEDIA_ERROR="BAD_MEDIA_ERROR",e.NOT_FOUND_ERROR="NOT_FOUND_ERROR",e.WS_CONNECTION_FAILED="WS_CONNECTION_FAILED",e.CONNECT_SERVER_FAILED_BY_LINK="CONNECT_SERVER_FAILED_BY_LINK",e))(oe||{});const Le=new Error("Unknown error"),He=(e=Le)=>{const{cause:n,socket:t}=e;let o="CONNECT_SERVER_FAILED";switch(n){case"Forbidden":{o="WRONG_USER_OR_PASSWORD";break}case i.ECallCause.BAD_MEDIA_DESCRIPTION:{o="BAD_MEDIA_ERROR";break}case i.ECallCause.NOT_FOUND:{o="NOT_FOUND_ERROR";break}default:t!==void 0&&t._ws?.readyState===3?o="WS_CONNECTION_FAILED":U(e)!==void 0&&U(e)!==""&&(o="CONNECT_SERVER_FAILED_BY_LINK")}return o},$e=e=>{let n="";try{n=JSON.stringify(e)}catch(t){i.logger("failed to stringify message",t)}return n},qe=new Error("Unknown error"),Je=(e=qe)=>{const{code:n,cause:t,message:o}=e,r=U(e),s={code:"",cause:"",message:""};return typeof o=="object"&&o!==null?s.message=$e(o):o&&(s.message=String(o)),r!==void 0&&r!==""&&(s.link=r),n!==void 0&&n!==""&&(s.code=n),t!==void 0&&t!==""&&(s.cause=t),s},Xe=Object.freeze(Object.defineProperty({__proto__:null,EErrorTypes:oe,getLinkError:U,getTypeFromError:He,getValuesFromError:Je},Symbol.toStringTag,{value:"Module"})),je=({sessionId:e,remoteAddress:n,isMutedAudio:t,isMutedVideo:o,isRegistered:r,isPresentationCall:s})=>{const c=[],a=t?"0":"1",l=o?"0":"1";return c.push(`X-Vinteo-Mic-State: ${a}`,`X-Vinteo-MainCam-State: ${l}`),(r===!1||r===void 0)&&c.push("X-Vinteo-Purgatory-Call: yes"),e!==void 0&&e!==""&&c.push(`X-Vinteo-Session: ${e}`),s===!0&&c.push("X-Vinteo-Presentation-Call: yes"),n!==void 0&&n!==""&&c.push(`X-Vinteo-Remote: ${n}`),c},We="[@*!|]",Ge="_",Ke=e=>{let n=e;return n=n.replaceAll(new RegExp(We,"g"),Ge),n},Ye=({appName:e,appVersion:n,browserName:t,browserVersion:o})=>{const s=`${Ke(e)} ${n}`;return`ChromeNew - ${t===void 0?s:`${t} ${o}, ${s}`}`},ze=({isUnifiedSdpSemantic:e,appVersion:n,browserName:t,browserVersion:o,appName:r})=>e?Ye({appVersion:n,browserName:t,browserVersion:o,appName:r}):"Chrome",Qe=e=>n=>[...n].map(o=>async()=>e(o)),Ze=async({accumulatedKeys:e,sendKey:n,canRunTask:t})=>{const r=Qe(n)(e);return ue.sequentPromises(r,t)},en=e=>t=>(i.logger("onStartMainCam"),e.on("api:admin-start-main-cam",t)),nn=e=>t=>(i.logger("onStartMic"),e.on("api:admin-start-mic",t)),tn=e=>t=>(i.logger("onStopMainCam"),e.on("api:admin-stop-main-cam",t)),on=e=>t=>(i.logger("onStopMic"),e.on("api:admin-stop-mic",t)),rn=({sipConnector:e})=>{const n=(C,R)=>({isSyncForced:h})=>{if(h===!0){C();return}R()},t=en(e),o=tn(e),r=nn(e),s=on(e);let c,a,l,d;const f=({onStartMainCamForced:C,onStartMainCamNotForced:R,onStopMainCamForced:h,onStopMainCamNotForced:S,onStartMicForced:p,onStartMicNotForced:y,onStopMicForced:E,onStopMicNotForced:T})=>{const b=n(C,R);c=t(b);const A=n(h,S);a=o(A);const O=n(p,y);l=r(O);const N=n(E,T);d=s(N)},g=()=>{c?.(),a?.(),l?.(),d?.()};return{start:C=>{f(C)},stop:()=>{g()}}},sn=Object.freeze(Object.defineProperty({__proto__:null,PURGATORY_CONFERENCE_NUMBER:te,createSyncMediaState:rn,error:Xe,getExtraHeaders:je,getUserAgent:ze,hasPurgatory:P,sendDtmfAccumulated:Ze},Symbol.toStringTag,{value:"Module"}));var re=(e=>(e.VP8="video/VP8",e.VP9="video/VP9",e.H264="video/H264",e.AV1="video/AV1",e.rtx="video/rtx",e.red="video/red",e.flexfec03="video/flexfec-03",e))(re||{});const cn=e=>[...e.keys()].map(n=>e.get(n)),an=(e,n)=>cn(e).find(t=>t?.type===n),se=async e=>e.getStats().then(n=>an(n,"codec")?.mimeType),ln=e=>e.find(n=>n.track?.kind==="video"),un=async(e,n,t)=>{const{isChanged:o,parameters:r}=await q(e,{encodings:[{scaleResolutionDownBy:n.scaleResolutionDownBy,maxBitrate:n.maxBitrate}]});return o&&t&&t(r),{isChanged:o,parameters:r}},ie=de.createStackPromises(),dn=async()=>ie().catch(e=>{i.logger("videoSendingBalancer: error",e)}),gn=async e=>(ie.add(e),dn()),X=async({sender:e,scaleResolutionDownBy:n,maxBitrate:t,onSetParameters:o})=>gn(async()=>un(e,{scaleResolutionDownBy:n,maxBitrate:t},o)),fn=async({sender:e,codec:n},t)=>{const r=Be(n);return X({sender:e,maxBitrate:r,onSetParameters:t,scaleResolutionDownBy:200})},F=async({sender:e,videoTrack:n,codec:t},o)=>{const c=n.getSettings().width,a=c===void 0?we(t):ee(c,t);return X({sender:e,maxBitrate:a,onSetParameters:o,scaleResolutionDownBy:1})},Cn=async({sender:e,videoTrack:n,resolution:t,codec:o},r)=>{const[s,c]=t.split("x"),{maxBitrate:a,scaleResolutionDownBy:l}=ne({videoTrack:n,codec:o,targetSize:{width:Number(s),height:Number(c)}});return X({sender:e,maxBitrate:a,onSetParameters:r,scaleResolutionDownBy:l})},hn=async({mainCam:e,resolutionMainCam:n,sender:t,videoTrack:o,codec:r},s)=>{switch(e){case i.EEventsMainCAM.PAUSE_MAIN_CAM:return fn({sender:t,codec:r},s);case i.EEventsMainCAM.RESUME_MAIN_CAM:return F({sender:t,videoTrack:o,codec:r},s);case i.EEventsMainCAM.MAX_MAIN_CAM_RESOLUTION:return n!==void 0?Cn({sender:t,videoTrack:o,codec:r,resolution:n},s):F({sender:t,videoTrack:o,codec:r},s);case i.EEventsMainCAM.ADMIN_STOP_MAIN_CAM:case i.EEventsMainCAM.ADMIN_START_MAIN_CAM:case void 0:return F({sender:t,videoTrack:o,codec:r},s);default:return F({sender:t,videoTrack:o,codec:r},s)}},j={isChanged:!1,parameters:{encodings:[{}],transactionId:"0",codecs:[],headerExtensions:[],rtcp:{}}},W=async({mainCam:e,resolutionMainCam:n,connection:t,onSetParameters:o,ignoreForCodec:r})=>{const s=t.getSenders(),c=ln(s);if(!c?.track)return j;const a=await se(c);return Z(a,r)?j:hn({mainCam:e,resolutionMainCam:n,sender:c,codec:a,videoTrack:c.track},o)},Sn=(e,{ignoreForCodec:n,onSetParameters:t}={})=>{const o=async()=>{const{connection:l}=e;if(!l)throw new Error("connection is not exist");return W({connection:l,onSetParameters:t,ignoreForCodec:n})};let r=o;const s=l=>{r=async()=>{const{mainCam:d,resolutionMainCam:f}=l,{connection:g}=e;if(!g)throw new Error("connection is not exist");return W({mainCam:d,resolutionMainCam:f,connection:g,onSetParameters:t,ignoreForCodec:n})},r().catch(_)};return{subscribe:()=>{e.on("api:main-cam-control",s)},unsubscribe:()=>{e.off("api:main-cam-control",s)},balanceByTrack:o,resetMainCamControl(){r=o},async reBalance(){return r()}}};exports.ECallCause=i.ECallCause;exports.EUseLicense=i.EUseLicense;exports.SipConnector=i.SipConnector;exports.disableDebug=i.disableDebug;exports.enableDebug=i.enableDebug;exports.hasCanceledStartPresentationError=i.hasCanceledStartPresentationError;exports.debug=_;exports.EMimeTypesVideoCodecs=re;exports.SipConnectorFacade=Ve;exports.getCodecFromSender=se;exports.hasCanceledCallError=fe;exports.resolveVideoSendingBalancer=Sn;exports.setParametersToSender=q;exports.tools=sn;
|
package/dist/index.js
CHANGED
|
@@ -1,53 +1,53 @@
|
|
|
1
1
|
import "events-constructor";
|
|
2
|
-
import { E as y, O as
|
|
3
|
-
import { b as
|
|
4
|
-
import { isCanceledError as
|
|
5
|
-
import { hasCanceledError as
|
|
6
|
-
import { debounce as
|
|
7
|
-
import
|
|
8
|
-
import { default as
|
|
9
|
-
import { sequentPromises as
|
|
10
|
-
import { createStackPromises as
|
|
11
|
-
const
|
|
12
|
-
if (
|
|
2
|
+
import { E as y, O as ae, l as i, a as w } from "./@SipConnector-C-ThpS1P.js";
|
|
3
|
+
import { b as Bn, S as wn, d as Dn, e as Pn, h as xn } from "./@SipConnector-C-ThpS1P.js";
|
|
4
|
+
import { isCanceledError as Y } from "@krivega/cancelable-promise";
|
|
5
|
+
import { hasCanceledError as ue } from "repeated-calls";
|
|
6
|
+
import { debounce as de } from "ts-debounce";
|
|
7
|
+
import x from "debug";
|
|
8
|
+
import { default as Fn } from "debug";
|
|
9
|
+
import { sequentPromises as le } from "sequent-promises";
|
|
10
|
+
import { createStackPromises as fe } from "stack-promises";
|
|
11
|
+
const he = (e) => e instanceof Object && ("originator" in e || "cause" in e), Mn = (e) => {
|
|
12
|
+
if (Y(e))
|
|
13
13
|
return !0;
|
|
14
|
-
if (!
|
|
14
|
+
if (!he(e))
|
|
15
15
|
return !1;
|
|
16
16
|
const { originator: n, cause: t } = e;
|
|
17
|
-
return typeof t == "string" ? t === y.REQUEST_TIMEOUT || t === y.REJECTED || n ===
|
|
18
|
-
},
|
|
17
|
+
return typeof t == "string" ? t === y.REQUEST_TIMEOUT || t === y.REJECTED || n === ae.LOCAL && (t === y.CANCELED || t === y.BYE) : !1;
|
|
18
|
+
}, ge = (e, n) => (e.degradationPreference = n.degradationPreference, e), Ce = (e, n) => {
|
|
19
19
|
e.encodings ??= [];
|
|
20
20
|
for (let t = e.encodings.length; t < n; t += 1)
|
|
21
21
|
e.encodings.push({});
|
|
22
22
|
return e;
|
|
23
|
-
},
|
|
24
|
-
if (
|
|
23
|
+
}, q = (e) => (n, t) => t !== void 0 && n !== t || t === void 0 && n !== e, Se = q(), me = (e, n) => {
|
|
24
|
+
if (Se(e, n))
|
|
25
25
|
return e;
|
|
26
|
-
},
|
|
27
|
-
const t = e.maxBitrate, o =
|
|
26
|
+
}, Re = (e, n) => {
|
|
27
|
+
const t = e.maxBitrate, o = me(n, t);
|
|
28
28
|
return o !== void 0 && (e.maxBitrate = o), e;
|
|
29
|
-
},
|
|
30
|
-
|
|
31
|
-
),
|
|
32
|
-
const t = e === void 0 ? void 0 : Math.max(e,
|
|
33
|
-
if (t !== void 0 &&
|
|
29
|
+
}, z = 1, pe = q(
|
|
30
|
+
z
|
|
31
|
+
), ye = (e, n) => {
|
|
32
|
+
const t = e === void 0 ? void 0 : Math.max(e, z);
|
|
33
|
+
if (t !== void 0 && pe(
|
|
34
34
|
t,
|
|
35
35
|
n
|
|
36
36
|
))
|
|
37
37
|
return t;
|
|
38
|
-
},
|
|
39
|
-
const t = e.scaleResolutionDownBy, o =
|
|
38
|
+
}, Ee = (e, n) => {
|
|
39
|
+
const t = e.scaleResolutionDownBy, o = ye(
|
|
40
40
|
n,
|
|
41
41
|
t
|
|
42
42
|
);
|
|
43
43
|
return o !== void 0 && (e.scaleResolutionDownBy = o), e;
|
|
44
|
-
},
|
|
44
|
+
}, Te = (e, n) => {
|
|
45
45
|
const t = n.encodings?.length ?? 0;
|
|
46
|
-
return
|
|
46
|
+
return Ce(e, t), e.encodings.forEach((o, s) => {
|
|
47
47
|
const r = (n?.encodings ?? [])[s], c = r?.maxBitrate, a = r?.scaleResolutionDownBy;
|
|
48
|
-
|
|
48
|
+
Re(o, c), Ee(o, a);
|
|
49
49
|
}), e;
|
|
50
|
-
},
|
|
50
|
+
}, ve = (e, n) => {
|
|
51
51
|
if (e.codecs?.length !== n.codecs?.length)
|
|
52
52
|
return !0;
|
|
53
53
|
for (let t = 0; t < (e.codecs?.length ?? 0); t++)
|
|
@@ -64,22 +64,22 @@ const fe = (e) => e instanceof Object && ("originator" in e || "cause" in e), vn
|
|
|
64
64
|
if (JSON.stringify(e.encodings[t]) !== JSON.stringify(n.encodings[t]))
|
|
65
65
|
return !0;
|
|
66
66
|
return e.rtcp?.cname !== n.rtcp?.cname || e.rtcp?.reducedSize !== n.rtcp?.reducedSize || e.degradationPreference !== n.degradationPreference;
|
|
67
|
-
},
|
|
67
|
+
}, Q = async (e, n) => {
|
|
68
68
|
const t = e.getParameters(), o = JSON.parse(
|
|
69
69
|
JSON.stringify(t)
|
|
70
70
|
);
|
|
71
|
-
|
|
72
|
-
const s =
|
|
71
|
+
Te(t, n), ge(t, n);
|
|
72
|
+
const s = ve(o, t);
|
|
73
73
|
return s && await e.setParameters(t), { parameters: t, isChanged: s };
|
|
74
|
-
},
|
|
74
|
+
}, Me = (e) => e.getVideoTracks()[0], be = 1e6, m = (e) => e * be, Z = m(0.06), ee = m(4), _e = (e) => e <= 64 ? Z : e <= 128 ? m(0.12) : e <= 256 ? m(0.25) : e <= 384 ? m(0.32) : e <= 426 ? m(0.38) : e <= 640 ? m(0.5) : e <= 848 ? m(0.7) : e <= 1280 ? m(1) : e <= 1920 ? m(2) : ee, ne = (e, n) => e !== void 0 && n !== void 0 && e.toLowerCase().includes(n.toLowerCase()), Ae = "av1", Oe = (e) => ne(e, Ae), Ne = 0.6, W = (e, n) => Oe(n) ? e * Ne : e, Be = (e) => W(Z, e), we = (e) => W(ee, e), te = (e, n) => {
|
|
75
75
|
const t = _e(e);
|
|
76
|
-
return
|
|
77
|
-
}, J = 1,
|
|
76
|
+
return W(t, n);
|
|
77
|
+
}, J = 1, oe = ({
|
|
78
78
|
videoTrack: e,
|
|
79
79
|
targetSize: n,
|
|
80
80
|
codec: t
|
|
81
81
|
}) => {
|
|
82
|
-
const o = e.getSettings(), s = o.width, r = o.height, c = s === void 0 ? J : s / n.width, a = r === void 0 ? J : r / n.height, u = Math.max(c, a, J), l =
|
|
82
|
+
const o = e.getSettings(), s = o.width, r = o.height, c = s === void 0 ? J : s / n.width, a = r === void 0 ? J : r / n.height, u = Math.max(c, a, J), l = te(n.width, t);
|
|
83
83
|
return { scaleResolutionDownBy: u, maxBitrate: l };
|
|
84
84
|
}, D = ({
|
|
85
85
|
mediaStream: e,
|
|
@@ -87,13 +87,13 @@ const fe = (e) => e instanceof Object && ("originator" in e || "cause" in e), vn
|
|
|
87
87
|
sendEncodings: t
|
|
88
88
|
}) => {
|
|
89
89
|
if (n && n.length > 0) {
|
|
90
|
-
const o = t ?? [], s =
|
|
90
|
+
const o = t ?? [], s = Me(e);
|
|
91
91
|
if (s === void 0)
|
|
92
92
|
throw new Error("No video track");
|
|
93
93
|
return n.forEach((r, c) => {
|
|
94
94
|
const a = o[c] ?? {};
|
|
95
95
|
a.active = !0, r.rid !== void 0 && (a.rid = r.rid), r.scalabilityMode !== void 0 && (a.scalabilityMode = r.scalabilityMode);
|
|
96
|
-
const { maxBitrate: u, scaleResolutionDownBy: l } =
|
|
96
|
+
const { maxBitrate: u, scaleResolutionDownBy: l } = oe({
|
|
97
97
|
videoTrack: s,
|
|
98
98
|
targetSize: {
|
|
99
99
|
width: r.width,
|
|
@@ -104,18 +104,18 @@ const fe = (e) => e instanceof Object && ("originator" in e || "cause" in e), vn
|
|
|
104
104
|
}), o;
|
|
105
105
|
}
|
|
106
106
|
return t;
|
|
107
|
-
},
|
|
107
|
+
}, se = "purgatory", I = (e) => e === se, De = (e, n) => e.filter((o) => n.some((s) => s.clockRate === o.clockRate && s.mimeType === o.mimeType && s.channels === o.channels && s.sdpFmtpLine === o.sdpFmtpLine)), Pe = (e) => {
|
|
108
108
|
const n = RTCRtpSender.getCapabilities(e), t = RTCRtpReceiver.getCapabilities(e), o = n === null ? [] : n.codecs, s = t === null ? [] : t.codecs;
|
|
109
|
-
return
|
|
110
|
-
},
|
|
109
|
+
return De(o, s);
|
|
110
|
+
}, xe = (e, n) => n === void 0 || n.length === 0 ? e : e.sort((t, o) => {
|
|
111
111
|
const s = n.indexOf(t.mimeType), r = n.indexOf(o.mimeType), c = s === -1 ? Number.MAX_VALUE : s, a = r === -1 ? Number.MAX_VALUE : r;
|
|
112
112
|
return c - a;
|
|
113
|
-
}), Ie = (e, n) => n === void 0 || n.length === 0 ? e : e.filter((t) => !n.includes(t.mimeType)),
|
|
113
|
+
}), Ie = (e, n) => n === void 0 || n.length === 0 ? e : e.filter((t) => !n.includes(t.mimeType)), Fe = (e, {
|
|
114
114
|
preferredMimeTypesVideoCodecs: n,
|
|
115
115
|
excludeMimeTypesVideoCodecs: t
|
|
116
116
|
}) => {
|
|
117
117
|
if (typeof e.setCodecPreferences == "function" && e.sender.track?.kind === "video" && (n !== void 0 && n.length > 0 || t !== void 0 && t.length > 0)) {
|
|
118
|
-
const o =
|
|
118
|
+
const o = Pe("video"), s = Ie(o, t), r = xe(s, n);
|
|
119
119
|
e.setCodecPreferences(r);
|
|
120
120
|
}
|
|
121
121
|
}, P = (e, {
|
|
@@ -123,18 +123,18 @@ const fe = (e) => e instanceof Object && ("originator" in e || "cause" in e), vn
|
|
|
123
123
|
excludeMimeTypesVideoCodecs: t
|
|
124
124
|
}) => async (o) => {
|
|
125
125
|
try {
|
|
126
|
-
|
|
126
|
+
Fe(o, {
|
|
127
127
|
preferredMimeTypesVideoCodecs: n,
|
|
128
128
|
excludeMimeTypesVideoCodecs: t
|
|
129
|
-
}), Object.values(e).filter((r) => r != null).length > 0 && (i("updateTransceiver setParametersToSender", e), await
|
|
129
|
+
}), Object.values(e).filter((r) => r != null).length > 0 && (i("updateTransceiver setParametersToSender", e), await Q(o.sender, e));
|
|
130
130
|
} catch (s) {
|
|
131
131
|
i("updateTransceiver error", s);
|
|
132
132
|
}
|
|
133
133
|
}, X = (e) => {
|
|
134
|
-
if (!
|
|
134
|
+
if (!Y(e) && !ue(e))
|
|
135
135
|
throw e;
|
|
136
136
|
return { isSuccessful: !1 };
|
|
137
|
-
},
|
|
137
|
+
}, Ue = ({ kind: e, readyState: n }) => e === "video" && n === "live", ke = /* @__PURE__ */ new Set([
|
|
138
138
|
"on",
|
|
139
139
|
"once",
|
|
140
140
|
"onceRace",
|
|
@@ -151,7 +151,7 @@ const fe = (e) => e instanceof Object && ("originator" in e || "cause" in e), vn
|
|
|
151
151
|
"isConfigured",
|
|
152
152
|
"isRegistered"
|
|
153
153
|
]);
|
|
154
|
-
class
|
|
154
|
+
class bn {
|
|
155
155
|
// @ts-expect-error: proxy method
|
|
156
156
|
on;
|
|
157
157
|
// @ts-expect-error: proxy method
|
|
@@ -191,7 +191,7 @@ class Mn {
|
|
|
191
191
|
} = {}) {
|
|
192
192
|
return this.preferredMimeTypesVideoCodecs = t, this.excludeMimeTypesVideoCodecs = o, this.sipConnector = n, new Proxy(this, {
|
|
193
193
|
get: (s, r, c) => {
|
|
194
|
-
if (typeof r == "string" &&
|
|
194
|
+
if (typeof r == "string" && ke.has(r) && r in this.sipConnector) {
|
|
195
195
|
const u = Reflect.get(this.sipConnector, r, this.sipConnector);
|
|
196
196
|
return typeof u == "function" ? u.bind(this.sipConnector) : u;
|
|
197
197
|
}
|
|
@@ -249,7 +249,7 @@ class Mn {
|
|
|
249
249
|
onReadyRemoteStreams: g
|
|
250
250
|
}), A = this.resolveHandleReadyRemoteStreams({
|
|
251
251
|
onReadyRemoteStreams: () => {
|
|
252
|
-
_().catch(
|
|
252
|
+
_().catch(x);
|
|
253
253
|
}
|
|
254
254
|
}), O = P(
|
|
255
255
|
{
|
|
@@ -281,9 +281,9 @@ class Mn {
|
|
|
281
281
|
}));
|
|
282
282
|
let M = !1, b;
|
|
283
283
|
const B = (i("subscribeEnterConference: onEnterConference", p), S ?? p ? this.sipConnector.on("api:enterRoom", ({ room: d }) => {
|
|
284
|
-
i("enterRoom", { _room: d, isSuccessProgressCall: M }), b = d,
|
|
284
|
+
i("enterRoom", { _room: d, isSuccessProgressCall: M }), b = d, I(b) ? S && S() : p && p({ isSuccessProgressCall: M });
|
|
285
285
|
}) : () => {
|
|
286
|
-
}), L = (d) => (i("onSuccess"), M = !0, _().catch(
|
|
286
|
+
}), L = (d) => (i("onSuccess"), M = !0, _().catch(x), C && C({ isPurgatory: I(b) }), this.sipConnector.onceRace(["call:ended", "call:failed"], () => {
|
|
287
287
|
B(), v && v();
|
|
288
288
|
}), d), H = (d) => {
|
|
289
289
|
throw i("onFail"), E && E(), B(), d;
|
|
@@ -318,7 +318,7 @@ class Mn {
|
|
|
318
318
|
onReadyRemoteStreams: U
|
|
319
319
|
}), _ = this.resolveHandleReadyRemoteStreams({
|
|
320
320
|
onReadyRemoteStreams: () => {
|
|
321
|
-
v().catch(
|
|
321
|
+
v().catch(x);
|
|
322
322
|
}
|
|
323
323
|
}), A = P(
|
|
324
324
|
{
|
|
@@ -352,9 +352,9 @@ class Mn {
|
|
|
352
352
|
};
|
|
353
353
|
let M = !1, b;
|
|
354
354
|
const B = (i("subscribeEnterConference: onEnterConference", S), C ?? S ? this.sipConnector.on("api:enterRoom", (d) => {
|
|
355
|
-
i("enterRoom", { _room: d, isSuccessProgressCall: M }), b = d,
|
|
355
|
+
i("enterRoom", { _room: d, isSuccessProgressCall: M }), b = d, I(b) ? C && C() : S && S({ isSuccessProgressCall: M });
|
|
356
356
|
}) : () => {
|
|
357
|
-
}), L = (d) => (i("onSuccess"), M = !0, v().catch(
|
|
357
|
+
}), L = (d) => (i("onSuccess"), M = !0, v().catch(x), R && R({ isPurgatory: I(b) }), this.sipConnector.onceRace(["call:ended", "call:failed"], () => {
|
|
358
358
|
B(), T && T();
|
|
359
359
|
}), d), H = (d) => {
|
|
360
360
|
throw i("onFail"), p && p(), B(), d;
|
|
@@ -490,7 +490,7 @@ class Mn {
|
|
|
490
490
|
};
|
|
491
491
|
resolveHandleReadyRemoteStreamsDebounced = ({
|
|
492
492
|
onReadyRemoteStreams: n
|
|
493
|
-
}) =>
|
|
493
|
+
}) => de(() => {
|
|
494
494
|
const t = this.sipConnector.getRemoteStreams();
|
|
495
495
|
i("remoteStreams", t), t && n(t);
|
|
496
496
|
}, 200);
|
|
@@ -498,7 +498,7 @@ class Mn {
|
|
|
498
498
|
resolveHandleReadyRemoteStreams = ({
|
|
499
499
|
onReadyRemoteStreams: n
|
|
500
500
|
}) => ({ track: t }) => {
|
|
501
|
-
|
|
501
|
+
Ue(t) && n();
|
|
502
502
|
};
|
|
503
503
|
getRemoteStreams = () => (i("getRemoteStreams"), this.sipConnector.getRemoteStreams());
|
|
504
504
|
onUseLicense = (n) => (i("onUseLicense"), this.sipConnector.on("api:useLicense", n));
|
|
@@ -511,8 +511,8 @@ const V = (e) => {
|
|
|
511
511
|
let o = n;
|
|
512
512
|
return (t === y.BAD_MEDIA_DESCRIPTION || t === y.NOT_FOUND) && (o = `${e.message.to.uri.user}@${e.message.to.uri.host}`), o;
|
|
513
513
|
};
|
|
514
|
-
var
|
|
515
|
-
const
|
|
514
|
+
var re = /* @__PURE__ */ ((e) => (e.CONNECT_SERVER_FAILED = "CONNECT_SERVER_FAILED", e.WRONG_USER_OR_PASSWORD = "WRONG_USER_OR_PASSWORD", e.BAD_MEDIA_ERROR = "BAD_MEDIA_ERROR", e.NOT_FOUND_ERROR = "NOT_FOUND_ERROR", e.WS_CONNECTION_FAILED = "WS_CONNECTION_FAILED", e.CONNECT_SERVER_FAILED_BY_LINK = "CONNECT_SERVER_FAILED_BY_LINK", e))(re || {});
|
|
515
|
+
const Ve = new Error("Unknown error"), Le = (e = Ve) => {
|
|
516
516
|
const { cause: n, socket: t } = e;
|
|
517
517
|
let o = "CONNECT_SERVER_FAILED";
|
|
518
518
|
switch (n) {
|
|
@@ -532,7 +532,7 @@ const ke = new Error("Unknown error"), Ve = (e = ke) => {
|
|
|
532
532
|
t !== void 0 && t._ws?.readyState === 3 ? o = "WS_CONNECTION_FAILED" : V(e) !== void 0 && V(e) !== "" && (o = "CONNECT_SERVER_FAILED_BY_LINK");
|
|
533
533
|
}
|
|
534
534
|
return o;
|
|
535
|
-
},
|
|
535
|
+
}, He = (e) => {
|
|
536
536
|
let n = "";
|
|
537
537
|
try {
|
|
538
538
|
n = JSON.stringify(e);
|
|
@@ -540,16 +540,16 @@ const ke = new Error("Unknown error"), Ve = (e = ke) => {
|
|
|
540
540
|
i("failed to stringify message", t);
|
|
541
541
|
}
|
|
542
542
|
return n;
|
|
543
|
-
},
|
|
543
|
+
}, $e = new Error("Unknown error"), Je = (e = $e) => {
|
|
544
544
|
const { code: n, cause: t, message: o } = e, s = V(e), r = { code: "", cause: "", message: "" };
|
|
545
|
-
return typeof o == "object" && o !== null ? r.message =
|
|
546
|
-
},
|
|
545
|
+
return typeof o == "object" && o !== null ? r.message = He(o) : o && (r.message = String(o)), s !== void 0 && s !== "" && (r.link = s), n !== void 0 && n !== "" && (r.code = n), t !== void 0 && t !== "" && (r.cause = t), r;
|
|
546
|
+
}, Xe = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
547
547
|
__proto__: null,
|
|
548
|
-
EErrorTypes:
|
|
548
|
+
EErrorTypes: re,
|
|
549
549
|
getLinkError: V,
|
|
550
|
-
getTypeFromError:
|
|
551
|
-
getValuesFromError:
|
|
552
|
-
}, Symbol.toStringTag, { value: "Module" })),
|
|
550
|
+
getTypeFromError: Le,
|
|
551
|
+
getValuesFromError: Je
|
|
552
|
+
}, Symbol.toStringTag, { value: "Module" })), We = ({
|
|
553
553
|
sessionId: e,
|
|
554
554
|
remoteAddress: n,
|
|
555
555
|
isMutedAudio: t,
|
|
@@ -559,38 +559,38 @@ const ke = new Error("Unknown error"), Ve = (e = ke) => {
|
|
|
559
559
|
}) => {
|
|
560
560
|
const c = [], a = t ? "0" : "1", u = o ? "0" : "1";
|
|
561
561
|
return c.push(`X-Vinteo-Mic-State: ${a}`, `X-Vinteo-MainCam-State: ${u}`), (s === !1 || s === void 0) && c.push("X-Vinteo-Purgatory-Call: yes"), e !== void 0 && e !== "" && c.push(`X-Vinteo-Session: ${e}`), r === !0 && c.push("X-Vinteo-Presentation-Call: yes"), n !== void 0 && n !== "" && c.push(`X-Vinteo-Remote: ${n}`), c;
|
|
562
|
-
},
|
|
562
|
+
}, je = "[@*!|]", Ge = "_", Ke = (e) => {
|
|
563
563
|
let n = e;
|
|
564
|
-
return n = n.replaceAll(new RegExp(
|
|
565
|
-
},
|
|
564
|
+
return n = n.replaceAll(new RegExp(je, "g"), Ge), n;
|
|
565
|
+
}, Ye = ({
|
|
566
566
|
appName: e,
|
|
567
567
|
appVersion: n,
|
|
568
568
|
browserName: t,
|
|
569
569
|
browserVersion: o
|
|
570
570
|
}) => {
|
|
571
|
-
const r = `${
|
|
571
|
+
const r = `${Ke(e)} ${n}`;
|
|
572
572
|
return `ChromeNew - ${t === void 0 ? r : `${t} ${o}, ${r}`}`;
|
|
573
|
-
},
|
|
573
|
+
}, qe = ({
|
|
574
574
|
isUnifiedSdpSemantic: e,
|
|
575
575
|
appVersion: n,
|
|
576
576
|
browserName: t,
|
|
577
577
|
browserVersion: o,
|
|
578
578
|
appName: s
|
|
579
|
-
}) => e ?
|
|
579
|
+
}) => e ? Ye({ appVersion: n, browserName: t, browserVersion: o, appName: s }) : "Chrome", ze = (e) => (n) => [...n].map((o) => async () => e(o)), Qe = async ({
|
|
580
580
|
accumulatedKeys: e,
|
|
581
581
|
sendKey: n,
|
|
582
582
|
canRunTask: t
|
|
583
583
|
}) => {
|
|
584
|
-
const s =
|
|
585
|
-
return
|
|
586
|
-
},
|
|
584
|
+
const s = ze(n)(e);
|
|
585
|
+
return le(s, t);
|
|
586
|
+
}, Ze = (e) => (t) => (i("onStartMainCam"), e.on("api:admin-start-main-cam", t)), en = (e) => (t) => (i("onStartMic"), e.on("api:admin-start-mic", t)), nn = (e) => (t) => (i("onStopMainCam"), e.on("api:admin-stop-main-cam", t)), tn = (e) => (t) => (i("onStopMic"), e.on("api:admin-stop-mic", t)), on = ({ sipConnector: e }) => {
|
|
587
587
|
const n = (g, R) => ({ isSyncForced: C }) => {
|
|
588
588
|
if (C === !0) {
|
|
589
589
|
g();
|
|
590
590
|
return;
|
|
591
591
|
}
|
|
592
592
|
R();
|
|
593
|
-
}, t =
|
|
593
|
+
}, t = Ze(e), o = nn(e), s = en(e), r = tn(e);
|
|
594
594
|
let c, a, u, l;
|
|
595
595
|
const h = ({
|
|
596
596
|
onStartMainCamForced: g,
|
|
@@ -627,19 +627,19 @@ const ke = new Error("Unknown error"), Ve = (e = ke) => {
|
|
|
627
627
|
f();
|
|
628
628
|
}
|
|
629
629
|
};
|
|
630
|
-
},
|
|
630
|
+
}, _n = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
631
631
|
__proto__: null,
|
|
632
|
-
PURGATORY_CONFERENCE_NUMBER:
|
|
633
|
-
createSyncMediaState:
|
|
634
|
-
error:
|
|
635
|
-
getExtraHeaders:
|
|
636
|
-
getUserAgent:
|
|
637
|
-
hasPurgatory:
|
|
638
|
-
sendDtmfAccumulated:
|
|
632
|
+
PURGATORY_CONFERENCE_NUMBER: se,
|
|
633
|
+
createSyncMediaState: on,
|
|
634
|
+
error: Xe,
|
|
635
|
+
getExtraHeaders: We,
|
|
636
|
+
getUserAgent: qe,
|
|
637
|
+
hasPurgatory: I,
|
|
638
|
+
sendDtmfAccumulated: Qe
|
|
639
639
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
640
|
-
var
|
|
641
|
-
const
|
|
642
|
-
const { isChanged: o, parameters: s } = await
|
|
640
|
+
var sn = /* @__PURE__ */ ((e) => (e.VP8 = "video/VP8", e.VP9 = "video/VP9", e.H264 = "video/H264", e.AV1 = "video/AV1", e.rtx = "video/rtx", e.red = "video/red", e.flexfec03 = "video/flexfec-03", e))(sn || {});
|
|
641
|
+
const rn = (e) => [...e.keys()].map((n) => e.get(n)), cn = (e, n) => rn(e).find((t) => t?.type === n), an = async (e) => e.getStats().then((n) => cn(n, "codec")?.mimeType), un = (e) => e.find((n) => n.track?.kind === "video"), dn = async (e, n, t) => {
|
|
642
|
+
const { isChanged: o, parameters: s } = await Q(e, {
|
|
643
643
|
encodings: [
|
|
644
644
|
{
|
|
645
645
|
scaleResolutionDownBy: n.scaleResolutionDownBy,
|
|
@@ -648,16 +648,16 @@ const sn = (e) => [...e.keys()].map((n) => e.get(n)), rn = (e, n) => sn(e).find(
|
|
|
648
648
|
]
|
|
649
649
|
});
|
|
650
650
|
return o && t && t(s), { isChanged: o, parameters: s };
|
|
651
|
-
},
|
|
651
|
+
}, ie = fe(), ln = async () => ie().catch((e) => {
|
|
652
652
|
i("videoSendingBalancer: error", e);
|
|
653
|
-
}),
|
|
653
|
+
}), fn = async (e) => (ie.add(e), ln()), j = async ({
|
|
654
654
|
sender: e,
|
|
655
655
|
scaleResolutionDownBy: n,
|
|
656
656
|
maxBitrate: t,
|
|
657
657
|
onSetParameters: o
|
|
658
|
-
}) =>
|
|
658
|
+
}) => fn(async () => dn(e, { scaleResolutionDownBy: n, maxBitrate: t }, o)), hn = async ({ sender: e, codec: n }, t) => {
|
|
659
659
|
const s = Be(n);
|
|
660
|
-
return
|
|
660
|
+
return j({
|
|
661
661
|
sender: e,
|
|
662
662
|
maxBitrate: s,
|
|
663
663
|
onSetParameters: t,
|
|
@@ -668,20 +668,20 @@ const sn = (e) => [...e.keys()].map((n) => e.get(n)), rn = (e, n) => sn(e).find(
|
|
|
668
668
|
videoTrack: n,
|
|
669
669
|
codec: t
|
|
670
670
|
}, o) => {
|
|
671
|
-
const c = n.getSettings().width, a =
|
|
672
|
-
return
|
|
671
|
+
const c = n.getSettings().width, a = c === void 0 ? we(t) : te(c, t);
|
|
672
|
+
return j({
|
|
673
673
|
sender: e,
|
|
674
674
|
maxBitrate: a,
|
|
675
675
|
onSetParameters: o,
|
|
676
676
|
scaleResolutionDownBy: 1
|
|
677
677
|
});
|
|
678
|
-
},
|
|
678
|
+
}, gn = async ({
|
|
679
679
|
sender: e,
|
|
680
680
|
videoTrack: n,
|
|
681
681
|
resolution: t,
|
|
682
682
|
codec: o
|
|
683
683
|
}, s) => {
|
|
684
|
-
const [r, c] = t.split("x"), { maxBitrate: a, scaleResolutionDownBy: u } =
|
|
684
|
+
const [r, c] = t.split("x"), { maxBitrate: a, scaleResolutionDownBy: u } = oe({
|
|
685
685
|
videoTrack: n,
|
|
686
686
|
codec: o,
|
|
687
687
|
targetSize: {
|
|
@@ -689,13 +689,13 @@ const sn = (e) => [...e.keys()].map((n) => e.get(n)), rn = (e, n) => sn(e).find(
|
|
|
689
689
|
height: Number(c)
|
|
690
690
|
}
|
|
691
691
|
});
|
|
692
|
-
return
|
|
692
|
+
return j({
|
|
693
693
|
sender: e,
|
|
694
694
|
maxBitrate: a,
|
|
695
695
|
onSetParameters: s,
|
|
696
696
|
scaleResolutionDownBy: u
|
|
697
697
|
});
|
|
698
|
-
},
|
|
698
|
+
}, Cn = async ({
|
|
699
699
|
mainCam: e,
|
|
700
700
|
resolutionMainCam: n,
|
|
701
701
|
sender: t,
|
|
@@ -704,11 +704,11 @@ const sn = (e) => [...e.keys()].map((n) => e.get(n)), rn = (e, n) => sn(e).find(
|
|
|
704
704
|
}, r) => {
|
|
705
705
|
switch (e) {
|
|
706
706
|
case w.PAUSE_MAIN_CAM:
|
|
707
|
-
return
|
|
707
|
+
return hn({ sender: t, codec: s }, r);
|
|
708
708
|
case w.RESUME_MAIN_CAM:
|
|
709
709
|
return k({ sender: t, videoTrack: o, codec: s }, r);
|
|
710
710
|
case w.MAX_MAIN_CAM_RESOLUTION:
|
|
711
|
-
return n !== void 0 ?
|
|
711
|
+
return n !== void 0 ? gn(
|
|
712
712
|
{ sender: t, videoTrack: o, codec: s, resolution: n },
|
|
713
713
|
r
|
|
714
714
|
) : k({ sender: t, videoTrack: o, codec: s }, r);
|
|
@@ -719,7 +719,7 @@ const sn = (e) => [...e.keys()].map((n) => e.get(n)), rn = (e, n) => sn(e).find(
|
|
|
719
719
|
default:
|
|
720
720
|
return k({ sender: t, videoTrack: o, codec: s }, r);
|
|
721
721
|
}
|
|
722
|
-
},
|
|
722
|
+
}, G = {
|
|
723
723
|
isChanged: !1,
|
|
724
724
|
parameters: {
|
|
725
725
|
encodings: [{}],
|
|
@@ -728,18 +728,18 @@ const sn = (e) => [...e.keys()].map((n) => e.get(n)), rn = (e, n) => sn(e).find(
|
|
|
728
728
|
headerExtensions: [],
|
|
729
729
|
rtcp: {}
|
|
730
730
|
}
|
|
731
|
-
},
|
|
731
|
+
}, K = async ({
|
|
732
732
|
mainCam: e,
|
|
733
733
|
resolutionMainCam: n,
|
|
734
734
|
connection: t,
|
|
735
735
|
onSetParameters: o,
|
|
736
736
|
ignoreForCodec: s
|
|
737
737
|
}) => {
|
|
738
|
-
const r = t.getSenders(), c =
|
|
738
|
+
const r = t.getSenders(), c = un(r);
|
|
739
739
|
if (!c?.track)
|
|
740
|
-
return
|
|
741
|
-
const a = await
|
|
742
|
-
return
|
|
740
|
+
return G;
|
|
741
|
+
const a = await an(c);
|
|
742
|
+
return ne(a, s) ? G : Cn(
|
|
743
743
|
{
|
|
744
744
|
mainCam: e,
|
|
745
745
|
resolutionMainCam: n,
|
|
@@ -749,7 +749,7 @@ const sn = (e) => [...e.keys()].map((n) => e.get(n)), rn = (e, n) => sn(e).find(
|
|
|
749
749
|
},
|
|
750
750
|
o
|
|
751
751
|
);
|
|
752
|
-
},
|
|
752
|
+
}, An = (e, {
|
|
753
753
|
ignoreForCodec: n,
|
|
754
754
|
onSetParameters: t
|
|
755
755
|
} = {}) => {
|
|
@@ -757,7 +757,7 @@ const sn = (e) => [...e.keys()].map((n) => e.get(n)), rn = (e, n) => sn(e).find(
|
|
|
757
757
|
const { connection: u } = e;
|
|
758
758
|
if (!u)
|
|
759
759
|
throw new Error("connection is not exist");
|
|
760
|
-
return
|
|
760
|
+
return K({
|
|
761
761
|
connection: u,
|
|
762
762
|
onSetParameters: t,
|
|
763
763
|
ignoreForCodec: n
|
|
@@ -769,14 +769,14 @@ const sn = (e) => [...e.keys()].map((n) => e.get(n)), rn = (e, n) => sn(e).find(
|
|
|
769
769
|
const { mainCam: l, resolutionMainCam: h } = u, { connection: f } = e;
|
|
770
770
|
if (!f)
|
|
771
771
|
throw new Error("connection is not exist");
|
|
772
|
-
return
|
|
772
|
+
return K({
|
|
773
773
|
mainCam: l,
|
|
774
774
|
resolutionMainCam: h,
|
|
775
775
|
connection: f,
|
|
776
776
|
onSetParameters: t,
|
|
777
777
|
ignoreForCodec: n
|
|
778
778
|
});
|
|
779
|
-
}, s().catch(
|
|
779
|
+
}, s().catch(x);
|
|
780
780
|
};
|
|
781
781
|
return {
|
|
782
782
|
subscribe: () => {
|
|
@@ -796,17 +796,17 @@ const sn = (e) => [...e.keys()].map((n) => e.get(n)), rn = (e, n) => sn(e).find(
|
|
|
796
796
|
};
|
|
797
797
|
export {
|
|
798
798
|
y as ECallCause,
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
799
|
+
sn as EMimeTypesVideoCodecs,
|
|
800
|
+
Bn as EUseLicense,
|
|
801
|
+
wn as SipConnector,
|
|
802
|
+
bn as SipConnectorFacade,
|
|
803
|
+
Fn as debug,
|
|
804
|
+
Dn as disableDebug,
|
|
805
|
+
Pn as enableDebug,
|
|
806
|
+
an as getCodecFromSender,
|
|
807
|
+
Mn as hasCanceledCallError,
|
|
808
|
+
xn as hasCanceledStartPresentationError,
|
|
809
|
+
An as resolveVideoSendingBalancer,
|
|
810
|
+
Q as setParametersToSender,
|
|
811
|
+
_n as tools
|
|
812
812
|
};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export declare const getMinimumBitrate: (codec?: string) => number;
|
|
2
|
+
export declare const getMaximumBitrate: (codec?: string) => number;
|
|
2
3
|
declare const getMaxBitrateByWidthAndCodec: (maxWidth: number, codec?: string) => number;
|
|
3
4
|
export default getMaxBitrateByWidthAndCodec;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const
|
|
2
|
-
export default
|
|
1
|
+
declare const scaleBitrate: (senders: RTCRtpSender[], mediaStream: MediaStream, maxBitrate: number) => Promise<import('./setEncodingsToSender').TResult | undefined>;
|
|
2
|
+
export default scaleBitrate;
|