trtc-sdk-v5 5.7.0-beta.7 → 5.7.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/index.d.ts CHANGED
@@ -308,12 +308,14 @@ declare type PluginStartOptionsMap = {
308
308
  'VirtualBackground': VirtualBackgroundOptions;
309
309
  'Watermark': WatermarkOptions;
310
310
  'Beauty': BeautyOptions;
311
+ 'BasicBeauty': BasicBeautyOptions;
311
312
  };
312
313
  declare type PluginUpdateOptionsMap = {
313
314
  'AudioMixer': UpdateAudioMixerOptions;
314
315
  'CDNStreaming': CDNStreamingOptions;
315
316
  'VirtualBackground': UpdateVirtualBackgroundOptions;
316
317
  'Beauty': UpdateBeautyOptions;
318
+ 'BasicBeauty': BasicBeautyOptions;
317
319
  };
318
320
  declare type PluginStopOptionsMap = {
319
321
  'AudioMixer': StopAudioMixerOptions;
@@ -322,6 +324,7 @@ declare type PluginStopOptionsMap = {
322
324
  'VirtualBackground': undefined;
323
325
  'Watermark': undefined;
324
326
  'Beauty': undefined;
327
+ 'BasicBeauty': undefined;
325
328
  };
326
329
  declare interface TRTCStatistics {
327
330
  rtt: number;
@@ -1632,7 +1635,8 @@ declare interface TRTCEventTypes {
1632
1635
  * })
1633
1636
  */
1634
1637
  sendSEIMessage(buffer: ArrayBuffer, options?: {
1635
- seiPayloadType: number;
1638
+ seiPayloadType?: number;
1639
+ toSubStream?: boolean;
1636
1640
  }): void;
1637
1641
  /**
1638
1642
  * Send Custom Message to all remote users in the room. <br>
@@ -1755,21 +1759,7 @@ declare interface TRTCEventTypes {
1755
1759
  * | checkResult.detail.isVp8EncodeSupported | boolean | Whether the current browser supports VP8 encoding for uplink |
1756
1760
  * | checkResult.detail.isVp8DecodeSupported | boolean | Whether the current browser supports VP8 decoding for downlink |
1757
1761
  */
1758
- static isSupported(): Promise<{
1759
- result: boolean;
1760
- detail: {
1761
- isBrowserSupported: boolean;
1762
- isWebRTCSupported: boolean;
1763
- isWebCodecsSupported: boolean;
1764
- isMediaDevicesSupported: boolean;
1765
- isScreenShareSupported: boolean;
1766
- isSmallStreamSupported: boolean;
1767
- isH264EncodeSupported: boolean;
1768
- isVp8EncodeSupported: boolean;
1769
- isH264DecodeSupported: boolean;
1770
- isVp8DecodeSupported: boolean;
1771
- };
1772
- }>;
1762
+ static isSupported(): Promise<any> | null;
1773
1763
  /**
1774
1764
  * Returns the list of camera devices
1775
1765
  * <br>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "trtc-sdk-v5",
3
- "version": "5.7.0-beta.7",
3
+ "version": "5.7.0",
4
4
  "description": "Tencent Cloud RTC SDK for Web",
5
5
  "main": "trtc.js",
6
6
  "types": "index.d.ts",
@@ -1 +1 @@
1
- var ue=Object.create;var J=Object.defineProperty,me=Object.defineProperties,le=Object.getOwnPropertyDescriptor,ce=Object.getOwnPropertyDescriptors,pe=Object.getOwnPropertyNames,z=Object.getOwnPropertySymbols,he=Object.getPrototypeOf,j=Object.prototype.hasOwnProperty,ge=Object.prototype.propertyIsEnumerable;var K=(l,e,i)=>e in l?J(l,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):l[e]=i,I=(l,e)=>{for(var i in e||(e={}))j.call(e,i)&&K(l,i,e[i]);if(z)for(var i of z(e))ge.call(e,i)&&K(l,i,e[i]);return l},Y=(l,e)=>me(l,ce(e));var Se=(l,e)=>()=>(e||l((e={exports:{}}).exports,e),e.exports);var be=(l,e,i,d)=>{if(e&&typeof e=="object"||typeof e=="function")for(let u of pe(e))!j.call(l,u)&&u!==i&&J(l,u,{get:()=>e[u],enumerable:!(d=le(e,u))||d.enumerable});return l};var Z=(l,e,i)=>(i=l!=null?ue(he(l)):{},be(e||!l||!l.__esModule?J(i,"default",{value:l,enumerable:!0}):i,l));var S=(l,e,i)=>(K(l,typeof e!="symbol"?e+"":e,i),i);var q=Se((Q,V)=>{(function(l){"use strict";function e(t,p){var r=(t&65535)+(p&65535),g=(t>>16)+(p>>16)+(r>>16);return g<<16|r&65535}function i(t,p){return t<<p|t>>>32-p}function d(t,p,r,g,C,T){return e(i(e(e(p,t),e(g,T)),C),r)}function u(t,p,r,g,C,T,f){return d(p&r|~p&g,t,p,C,T,f)}function c(t,p,r,g,C,T,f){return d(p&g|r&~g,t,p,C,T,f)}function m(t,p,r,g,C,T,f){return d(p^r^g,t,p,C,T,f)}function h(t,p,r,g,C,T,f){return d(r^(p|~g),t,p,C,T,f)}function b(t,p){t[p>>5]|=128<<p%32,t[(p+64>>>9<<4)+14]=p;var r,g,C,T,f,o=1732584193,a=-271733879,s=-1732584194,n=271733878;for(r=0;r<t.length;r+=16)g=o,C=a,T=s,f=n,o=u(o,a,s,n,t[r],7,-680876936),n=u(n,o,a,s,t[r+1],12,-389564586),s=u(s,n,o,a,t[r+2],17,606105819),a=u(a,s,n,o,t[r+3],22,-1044525330),o=u(o,a,s,n,t[r+4],7,-176418897),n=u(n,o,a,s,t[r+5],12,1200080426),s=u(s,n,o,a,t[r+6],17,-1473231341),a=u(a,s,n,o,t[r+7],22,-45705983),o=u(o,a,s,n,t[r+8],7,1770035416),n=u(n,o,a,s,t[r+9],12,-1958414417),s=u(s,n,o,a,t[r+10],17,-42063),a=u(a,s,n,o,t[r+11],22,-1990404162),o=u(o,a,s,n,t[r+12],7,1804603682),n=u(n,o,a,s,t[r+13],12,-40341101),s=u(s,n,o,a,t[r+14],17,-1502002290),a=u(a,s,n,o,t[r+15],22,1236535329),o=c(o,a,s,n,t[r+1],5,-165796510),n=c(n,o,a,s,t[r+6],9,-1069501632),s=c(s,n,o,a,t[r+11],14,643717713),a=c(a,s,n,o,t[r],20,-373897302),o=c(o,a,s,n,t[r+5],5,-701558691),n=c(n,o,a,s,t[r+10],9,38016083),s=c(s,n,o,a,t[r+15],14,-660478335),a=c(a,s,n,o,t[r+4],20,-405537848),o=c(o,a,s,n,t[r+9],5,568446438),n=c(n,o,a,s,t[r+14],9,-1019803690),s=c(s,n,o,a,t[r+3],14,-187363961),a=c(a,s,n,o,t[r+8],20,1163531501),o=c(o,a,s,n,t[r+13],5,-1444681467),n=c(n,o,a,s,t[r+2],9,-51403784),s=c(s,n,o,a,t[r+7],14,1735328473),a=c(a,s,n,o,t[r+12],20,-1926607734),o=m(o,a,s,n,t[r+5],4,-378558),n=m(n,o,a,s,t[r+8],11,-2022574463),s=m(s,n,o,a,t[r+11],16,1839030562),a=m(a,s,n,o,t[r+14],23,-35309556),o=m(o,a,s,n,t[r+1],4,-1530992060),n=m(n,o,a,s,t[r+4],11,1272893353),s=m(s,n,o,a,t[r+7],16,-155497632),a=m(a,s,n,o,t[r+10],23,-1094730640),o=m(o,a,s,n,t[r+13],4,681279174),n=m(n,o,a,s,t[r],11,-358537222),s=m(s,n,o,a,t[r+3],16,-722521979),a=m(a,s,n,o,t[r+6],23,76029189),o=m(o,a,s,n,t[r+9],4,-640364487),n=m(n,o,a,s,t[r+12],11,-421815835),s=m(s,n,o,a,t[r+15],16,530742520),a=m(a,s,n,o,t[r+2],23,-995338651),o=h(o,a,s,n,t[r],6,-198630844),n=h(n,o,a,s,t[r+7],10,1126891415),s=h(s,n,o,a,t[r+14],15,-1416354905),a=h(a,s,n,o,t[r+5],21,-57434055),o=h(o,a,s,n,t[r+12],6,1700485571),n=h(n,o,a,s,t[r+3],10,-1894986606),s=h(s,n,o,a,t[r+10],15,-1051523),a=h(a,s,n,o,t[r+1],21,-2054922799),o=h(o,a,s,n,t[r+8],6,1873313359),n=h(n,o,a,s,t[r+15],10,-30611744),s=h(s,n,o,a,t[r+6],15,-1560198380),a=h(a,s,n,o,t[r+13],21,1309151649),o=h(o,a,s,n,t[r+4],6,-145523070),n=h(n,o,a,s,t[r+11],10,-1120210379),s=h(s,n,o,a,t[r+2],15,718787259),a=h(a,s,n,o,t[r+9],21,-343485551),o=e(o,g),a=e(a,C),s=e(s,T),n=e(n,f);return[o,a,s,n]}function _(t){var p,r="",g=t.length*32;for(p=0;p<g;p+=8)r+=String.fromCharCode(t[p>>5]>>>p%32&255);return r}function D(t){var p,r=[];for(r[(t.length>>2)-1]=void 0,p=0;p<r.length;p+=1)r[p]=0;var g=t.length*8;for(p=0;p<g;p+=8)r[p>>5]|=(t.charCodeAt(p/8)&255)<<p%32;return r}function R(t){return _(b(D(t),t.length*8))}function k(t,p){var r,g=D(t),C=[],T=[],f;for(C[15]=T[15]=void 0,g.length>16&&(g=b(g,t.length*8)),r=0;r<16;r+=1)C[r]=g[r]^909522486,T[r]=g[r]^1549556828;return f=b(C.concat(D(p)),512+p.length*8),_(b(T.concat(f),512+128))}function E(t){var p="0123456789abcdef",r="",g,C;for(C=0;C<t.length;C+=1)g=t.charCodeAt(C),r+=p.charAt(g>>>4&15)+p.charAt(g&15);return r}function O(t){return unescape(encodeURIComponent(t))}function U(t){return R(O(t))}function F(t){return E(U(t))}function G(t,p){return k(O(t),O(p))}function A(t,p){return E(G(t,p))}function B(t,p,r){return p?r?G(p,t):A(p,t):r?U(t):F(t)}typeof define=="function"&&define.amd?define(function(){return B}):typeof V=="object"&&V.exports?V.exports=B:l.md5=B})(Q)});var ee=Z(q(),1);var y=(d=>(d.PublishMainStreamToCDN="publish-main-stream-to-cdn",d.PublishSubStreamToCDN="publish-sub-stream-to-cdn",d.PublishMixStreamToCDN="publish-mix-stream-to-cdn",d))(y||{}),X=(i=>(i.Main="main",i.Sub="sub",i))(X||{});var H={IT_AUDIO_VIDEO:0,IT_PICTURE:2,IT_CANVAS:3,IT_PURE_AUDIO:4,IT_PURE_VIDEO:5};var M=class{constructor(e,i){S(this,"_core");S(this,"_room");S(this,"_log");S(this,"_params");S(this,"_publishGivenCDNData",null);this._core=e,this._room=e.room,this._log=i}get isPublishingGivenCDN(){return!!this._params}async startPublishGivenCDN(e){if(this._log.info(`[CDNStreaming] startPublishGivenCDN() current: ${JSON.stringify(this._params)}, params: ${JSON.stringify(e)}`),this.isPublishingGivenCDN){let{appId:i,bizId:d,url:u}=this._params||{};if(i===e.appId&&d===e.bizId&&u===e.url)return;await this.stopPublishGivenCDN()}this._params=e,this._publishGivenCDNData={pushRequestTime:Date.now(),pushAppId:e.appId,pushBizId:e.bizId,pushCdnUrl:e.url,pushStreamType:this.convertStreamType(e==null?void 0:e.publishMode),pushStreamId:e.streamId};try{let i=await this._room.sendStartPublishCDN(this._publishGivenCDNData,!1),{code:d,message:u}=i.data;if(d===0)this._log.info("[CDNStreaming] server success: start given cdn.");else throw this.resetGivenCDN(),this._log.error(`[CDNStreaming] server failed: start given cdn errCode: ${d} errMsg: ${u} options: ${JSON.stringify(e)}`),new Error(`[CDNStreaming] server failed: start given cdn errCode: ${d} errMsg: ${u}`)}catch(i){throw this.resetGivenCDN(),i}}async stopPublishGivenCDN(){if(this._log.info("[CDNStreaming] stopPublishGivenCDN"),!this.isPublishingGivenCDN||!this._publishGivenCDNData){this.resetGivenCDN();return}let{pushAppId:e,pushBizId:i,pushCdnUrl:d,pushStreamType:u,pushStreamId:c}=this._publishGivenCDNData,m={pushRequestTime:Date.now(),pushAppId:e,pushBizId:i,pushCdnUrl:d,pushStreamType:u,pushStreamId:c},h=await this._room.sendStopPublishCDN(m,!1),{code:b,message:_}=h.data;if(b===0)this._log.info("[CDNStreaming] server success: stop given cdn."),this.resetGivenCDN();else throw this._log.error(`[CDNStreaming] server failed: stop given cdn errCode: ${b} errMsg: ${_} data: ${JSON.stringify(m)}`),new Error(`[CDNStreaming] server failed: stop given cdn errCode: ${b} errMsg: ${_}`)}resetGivenCDN(){this._publishGivenCDNData=null,this._params=void 0}convertStreamType(e){return e==="publish-sub-stream-to-cdn"?"aux":"main"}};var L=class{constructor(e,i){S(this,"_core");S(this,"_room");S(this,"_log");S(this,"_config",null);S(this,"_data",null);S(this,"_givenCDNManager");this._core=e,this._room=e.room,this._log=i,this.reset()}get isMixing(){return!!this._data}get isStarted(){return!!this._config}get hasCustomCDN(){var e,i,d;return((e=this._config)==null?void 0:e.target.appId)&&((i=this._config)==null?void 0:i.target.bizId)&&((d=this._config)==null?void 0:d.target.url)}async startMixTranscode(e){if(this._log.info(`startMixTranscode: ${JSON.stringify(e)}`),this._config=e,this.installEvents(),!!this._core.room.isJoined)try{let i=this.getInputParam(e),d=this.getOutputParam(e),u=this.getOutputSessionId({config:e,roomId:this._room.roomId,userId:this._room.userId});this.isMixing&&this._data&&u!==this._data.outputSessionId&&(this._log.info("[CDNStreaming] streamId changed, auto stop mixing before start"),await this.doStopMixTranscode()),await this.doStartMixTranscode({outputSessionId:u,inputParam:i,outputParam:d});let{appId:c,bizId:m,url:h,streamId:b=""}=e.target;c&&m&&h&&(this._givenCDNManager||(this._givenCDNManager=new M(this._core,this._log)),await this._givenCDNManager.startPublishGivenCDN({publishMode:e.target.publishMode,appId:c,bizId:m,url:h,streamId:b}))}catch(i){throw this.reset(),i}}async doStartMixTranscode({outputSessionId:e,inputParam:i,outputParam:d}){let u={roomId:String(this._room.roomId),mcuRequestTime:Date.now(),outputSessionId:e,inputParam:i,outputParam:d};this._log.info(`[CDNStreaming] doStartMixTranscode: ${JSON.stringify(u)}`);let c=await this._room.sendStartMixTranscode(u),{code:m}=c.data,{message:h}=c.data;if(m===0)this._log.info("[CDNStreaming] server success: start mix"),this._data=u;else throw m===-102083&&(h=`Please enable relayed-push in ${this._core.constants.CLOUD_CONSOLE_URL} and try later, refer to ${this._core.constants.DOC_URL}tutorial-26-advanced-publish-cdn-stream.html`),this._log.error(`[CDNStreaming] server failed: start mix errCode: ${m} errMsg: ${h}`),new Error(`[CDNStreaming] server failed: start mix errCode: ${m} errMsg: ${h}`)}async stopMixTranscode(){this._log.info("[CDNStreaming] stopMixTranscode");try{this.isStarted&&this.isMixing&&(await this.doStopMixTranscode(),this._config&&this.hasCustomCDN&&this._givenCDNManager&&await this._givenCDNManager.stopPublishGivenCDN())}catch(e){throw e}this.reset()}async doStopMixTranscode(){let e={mcuRequestTime:Date.now(),outputSessionId:this._data.outputSessionId,streamType:this._data.outputParam.streamType};this._log.info(`[CDNStreaming] doStopMixTranscode: ${JSON.stringify(e)}`);let i=await this._room.sendStopMixTranscode(e),{code:d,message:u}=i.data;if(d===0)this._log.info("[CDNStreaming] server success: stop mix"),this.reset();else throw this._log.error(`[CDNStreaming] server failed: stop mix errCode: ${d} errMsg: ${u}`),new Error(`[CDNStreaming] server failed: stop mix errCode: ${d} errMsg: ${u}`)}reset(){this._config=null,this._data=null,this.uninstallEvents()}installEvents(){this._core.room.on("joined",this.handleRoomJoined,this),this._core.room.on("left",this.handleRoomLeft,this)}uninstallEvents(){this._core.room.off("joined",this.handleRoomJoined,this),this._core.room.off("left",this.handleRoomLeft,this)}async handleRoomJoined(){this._log.info(`[CDNStreaming] handleJoined: ${JSON.stringify(this._config)}`),this.isStarted&&this._config&&await this.startMixTranscode(this._config)}async handleRoomLeft(){this._log.info(`[CDNStreaming] handleRoomLeft: ${JSON.stringify(this._config)}`),this._data=null}getOutputSessionId({config:e,userId:i,roomId:d}){return this._core.utils.isString(e.target.streamId)&&e.target.streamId.length>0?e.target.streamId:(0,ee.default)(`${d}_${i}_main`)}getStringRoomId(e,i){return e?String(e):i}getInputParam(e){let{mix:i={}}=e,{audioMixUserList:d=[],videoLayoutList:u=[]}=i,c=u.map(m=>({userId:m.fixedVideoUser.userId,roomId:this.getStringRoomId(m.fixedVideoUser.roomId,m.fixedVideoUser.strRoomId)||this._core.room.roomId,width:m.width||0,height:m.height||0,locationX:m.locationX||0,locationY:m.locationY||0,zOrder:m.zOrder||1,streamType:m.fixedVideoStreamType==="sub"?1:0,inputType:H.IT_PURE_VIDEO,renderMode:m.fillMode||0}));return d.forEach(m=>{let h=c.findIndex(b=>b.userId===m.userId&&b.roomId===this.getStringRoomId(m.roomId,m.strRoomId));h!==-1?c[h].inputType=H.IT_AUDIO_VIDEO:c.push({userId:m.userId,roomId:m.roomId||m.strRoomId||this._core.room.roomId,inputType:H.IT_PURE_AUDIO})}),c}getOutputParam(e){let i=e.target.streamId||"",{encoding:d={},mix:u={}}=e;return{streamId:i,streamType:i.length>0?1:0,width:this._core.utils.isUndefined(d.videoWidth)?640:d.videoWidth,height:this._core.utils.isUndefined(d.videoHeight)?480:d.videoHeight,videoBps:d.videoBitrate||0,fps:d.videoFramerate||15,gop:d.videoGOP||2,audioSampleRate:d.audioSampleRate||48e3,audioBps:d.audioBitrate||64,audioChannels:d.audioChannels||1,backgroundColor:u.backgroundColor||0,backgroundImg:u.backgroundImage||"",extraInfo:"",videoCodec:2,audioCodec:0}}};var $=Z(q(),1);var x=class{constructor(e,i){S(this,"_room");S(this,"_core");S(this,"_log");S(this,"_paramsForTencentCDN");S(this,"_initParamsForTencentCDN",{isPublished:!1,isStarted:!1});this._core=e,this._room=e.room,this._log=i,this._paramsForTencentCDN=new Map([["publish-main-stream-to-cdn",this._initParamsForTencentCDN],["publish-sub-stream-to-cdn",this._initParamsForTencentCDN]])}installEvents(){this._core.innerEmitter.on("104",this.handlePublished,this),this._core.room.on("left",this.handleRoomLeft,this)}uninstallEvents(){this._core.innerEmitter.off("104",this.handlePublished,this),this._core.room.off("left",this.handleRoomLeft,this)}async handlePublished({track:e}){var u;if(e.room!==this._room||(this._log.info(`[CDNStreaming] handlePublished: mediaType ${e.mediaType}, roomID ${(u=e==null?void 0:e.room)==null?void 0:u.roomId}`),e.mediaType===1))return;let i=e.mediaType===4?"publish-main-stream-to-cdn":"publish-sub-stream-to-cdn",d=this._paramsForTencentCDN.get(i)||null;d!=null&&d.target&&d.isStarted&&await this.startPublishTencentCDN(d.target)}async handleRoomLeft(){this._log.info("[CDNStreaming] handleRoomLeft"),this.changeDataStatus("publish-main-stream-to-cdn",{isPublished:!1}),this.changeDataStatus("publish-sub-stream-to-cdn",{isPublished:!1})}isStreamPublished(e){return e==="publish-main-stream-to-cdn"&&!this._room.isMainStreamPublished?(this._log.info("[CDNStreaming] Main stream has not already published, will auto reStart after published."),!1):e==="publish-sub-stream-to-cdn"&&!this._room.isAuxStreamPublished?(this._log.info("[CDNStreaming] Sub has not already published, will auto reStart after published."),!1):!0}changeDataStatus(e,i){let d=this._paramsForTencentCDN.get(e),u=I(I({},d),i);this._paramsForTencentCDN.set(e,u)}async startPublishTencentCDN(e){if(this._log.info(`[CDNStreaming] startPublishTencentCDN ${JSON.stringify(e)}`),this.installEvents(),this.changeDataStatus(e.publishMode,{target:e,isStarted:!0}),!this.isStreamPublished(e.publishMode))return;let i=e.streamId||"",d=this.generatePublishCDNStreamId(i,e.publishMode),u=this.generatePublishCDNSessionId(e.publishMode),c=e.publishMode==="publish-sub-stream-to-cdn"?1:0,m={requestTime:Date.now(),sessionId:u,streamId:d,streamType:c};await this.doStartPublishTencentCDN(m,e.publishMode);let{appId:h,bizId:b,url:_}=e;if(h&&b&&_){let D=this._paramsForTencentCDN.get(e.publishMode)||this._initParamsForTencentCDN;D!=null&&D.givenCDNManager||(D.givenCDNManager=new M(this._core,this._log),this._paramsForTencentCDN.set(e.publishMode,D)),await D.givenCDNManager.startPublishGivenCDN({publishMode:e.publishMode,appId:h,bizId:b,url:_,streamId:d})}}async doStartPublishTencentCDN(e,i){this._log.info(`[CDNStreaming] doStartPublishTencentCDN: ${JSON.stringify(e)}`);let d=6,u=500,c=0;for(;;){let m=await this._room.sendStartPublishCDN(e,!0),{code:h}=m.data,{message:b}=m.data;if(h===0){this._log.info("[CDNStreaming] server success: start tencent cdn"),this.changeDataStatus(i,{isPublished:!0});break}else if(h===-10006&&c<d)this._log.warn(`[CDNStreaming] doStartPublishTencentCDN: retry...${c+1}/6, reason: ${b}`),c+=1,await new Promise(_=>setTimeout(_,u));else throw this.changeDataStatus(i,{isPublished:!1}),h===-102083&&(b=`Please enable relayed-push in ${this._core.constants.CLOUD_CONSOLE_URL} and try later, refer to ${this._core.constants.DOC_URL}tutorial-26-advanced-publish-cdn-stream.html`),this._log.error(`[CDNStreaming] server failed: start tencent cdn errCode: ${h} errMsg: ${b}`),new Error(`[CDNStreaming] server failed: start tencent cdn errCode: ${h} errMsg: ${b}`)}}async stopPublishTencentCDN(e){this._log.info(`[CDNStreaming] doStartPublishTencentCDN: ${JSON.stringify(e)}`);let i=this._paramsForTencentCDN.get(e)||this._initParamsForTencentCDN;if(i.isPublished){let{target:d}=i;d!=null&&d.bizId&&d.appId&&d.url&&(i!=null&&i.givenCDNManager)&&await(i==null?void 0:i.givenCDNManager.stopPublishGivenCDN()),await this.doStopPublishTencentCDN(e)}this._paramsForTencentCDN.set(e,this._initParamsForTencentCDN)}async doStopPublishTencentCDN(e){let i={requestTime:Date.now(),sessionId:(0,$.default)(`${this._room.roomId}_${this._room.userId}_${this.convertPublishModeToStreamType(e)}`)};this._log.info(`[CDNStreaming] doStopPublishTencentCDN: ${JSON.stringify(i)}`);let d=await this._room.sendStopPublishCDN(i,!0),{code:u}=d.data,{message:c}=d.data;if(u===0)this._log.info("[CDNStreaming] server success: stop tencent cdn"),this._paramsForTencentCDN.set(e,this._initParamsForTencentCDN),this.reset(e);else throw u===-102069&&(this._paramsForTencentCDN.set(e,this._initParamsForTencentCDN),c=`can not stop in auto relayed-push mode ${c}`),this._log.error(`[CDNStreaming] server failed: stop tencent cdn errCode: ${u} errMsg: ${c}`),new Error(`[CDNStreaming] server failed: stop tencent cdn errCode: ${u} errMsg: ${c}`)}reset(e){this.uninstallEvents(),this._paramsForTencentCDN.set(e,this._initParamsForTencentCDN)}generatePublishCDNStreamId(e,i){if(e===""){let d=`${this._room.roomId}_${this._room.userId}_${this.convertPublishModeToStreamType(i)}`;return/^[A-Za-z\d_-]*$/.test(d)||(d=(0,$.default)(d)),`${this._room.sdkAppId}_${d}`}return e}convertPublishModeToStreamType(e){return e==="publish-main-stream-to-cdn"?"main":"aux"}generatePublishCDNSessionId(e){return(0,$.default)(`${this._room.roomId}_${this._room.userId}_${this.convertPublishModeToStreamType(e)}`)}};var te=l=>typeof l=="string";var N;function Te(l,e,i,d){if(!/^[A-Za-z\d_-]*$/.test(l)){let{RtcError:c,ErrorCode:m,ErrorCodeDictionary:h}=N;throw new c({code:m.INVALID_PARAMETER,extraCode:h.INVALID_STREAM_ID,messageParams:{key:"streamId"}})}}function De(l,e,i,d){let{RtcError:u,ErrorCode:c,ErrorCodeDictionary:m}=N;if(te(l))throw new u({code:c.INVALID_PARAMETER,extraCode:m.INVALID_ROOM_ID_INTEGER_STRING,fnName:i,messageParams:{key:"roomId"}});if(l===void 0)return;if(!(/^[1-9]\d*$/.test(String(l))&&l<4294967295))throw new u({code:c.INVALID_PARAMETER,extraCode:m.INVALID_ROOM_ID_INTEGER,fnName:i,messageParams:{key:"roomId"}})}function _e(l,e,i,d){let{RtcError:u,ErrorCode:c,ErrorCodeDictionary:m}=N;if(!/^[A-Za-z\d\s!#$%&()+\-:;<=.>?@[\]^_{}|~,]{1,64}$/.test(l))throw new u({code:c.INVALID_PARAMETER,extraCode:m.INVALID_ROOM_ID_STRING,fnName:i,messageParams:{key:"strRoomId"}})}var P={type:"number",notLessThanZero:!0},re={type:"object",required:!0,properties:{userId:{required:!0,type:"string"},roomId:{type:["string","number"],validate:De},strRoomId:{type:"string",validate:_e}}},ie={required:!0,properties:{publishMode:{required:!0,values:["publish-main-stream-to-cdn","publish-mix-stream-to-cdn","publish-sub-stream-to-cdn"]},streamId:{required:!1,type:"string",validate:Te},appId:{type:"number",allowEmpty:!1},bizId:{type:"number",allowEmpty:!1},url:{type:"string",allowEmpty:!1}}},oe={required:!1,type:"object",properties:{videoWidth:P,videoHeight:P,videoBitrate:Y(I({},P),{allowEmpty:!1}),videoFramerate:{type:"number",validate(l,e,i,d){if(l<=0||l>30){let{RtcError:u,ErrorCode:c}=N;throw new u({code:c.INVALID_PARAMETER,message:"Invalid parameter mixConfig -> videoFramerate, the value must be between (0, 30]."})}}},videoGOP:{type:"number",validate(l,e,i,d){if(l<1||l>8){let{RtcError:u,ErrorCode:c}=N;throw new u({code:c.INVALID_PARAMETER,message:"Invalid parameter mixConfig -> videoGOP, the value must be between [1, 8]."})}}},audioSampleRate:P,audioBitrate:{type:"number",validate(l,e,i,d){if(l<32||l>192){let{RtcError:u,ErrorCode:c}=N;throw new u({code:c.INVALID_PARAMETER,message:"Invalid parameter mixConfig -> audioBitrate, the value must be between [32, 192]."})}}},audioChannels:{type:"number",values:[1,2]}}},ae={required:!1,type:"object",properties:{backgroundColor:{type:"number"},backgroundImage:{type:"string"},audioMixUserList:{type:"array",arrayItem:I({},re)},videoLayoutList:{type:"array",required:!0,arrayItem:{type:"object",properties:{fixedVideoUser:I({},re),fixedVideoStreamType:{type:"string",required:!0,values:["main","sub"]},fillMode:{type:"number",values:[0,1,2,4]},zOrder:{type:"number",required:!0,validate(l,e,i,d){if(l<1||l>15){let{RtcError:u,ErrorCode:c}=N;throw new u({code:c.INVALID_PARAMETER,message:"Invalid parameter mix -> videoLayoutList -> zOrder, the value must be between [1, 15]."})}}},width:P,height:P,locationX:P,locationY:P}}}}};function se(l){return N=l.errorModule,{name:"CDNStreamingOptions",type:"object",required:!0,allowEmpty:!1,properties:{target:I({},ie),encoding:I({},oe),mix:I({},ae)},validate(e,i,d,u){var b,_;let{publishMode:c}=e.target,{encoding:m,mix:h}=e;if(c==="publish-mix-stream-to-cdn"){let{RtcError:D,ErrorCode:R,ErrorCodeDictionary:k}=l.errorModule;if(!m)throw new D({code:R.INVALID_PARAMETER,extraCode:k.INVALID_PARAMETER_REQUIRED,fnName:d,messageParams:{key:"encoding"}});if(!h)throw new D({code:R.INVALID_PARAMETER,extraCode:k.INVALID_PARAMETER_REQUIRED,fnName:d,messageParams:{key:"mix"}});if(h&&h.videoLayoutList){let E=0,O=0,U=[];if(h.videoLayoutList.forEach((A,B)=>{U.push(A.fixedVideoUser.userId),A.width+A.locationX>E&&(E=A.width+A.locationX),A.height+A.locationY>O&&(O=A.height+A.locationY)}),U.indexOf(l.room.userId)<0)throw new D({code:R.INVALID_PARAMETER,message:"Invalid parameter mix -> videoLayoutList, the value must be include self."});let F=(b=m==null?void 0:m.videoWidth)!=null?b:640,G=(_=m==null?void 0:m.videoHeight)!=null?_:480;if(F<E||G<O)throw new D({code:R.INVALID_PARAMETER,message:"Invalid parameter encoding, the width and height of the mixed video must encompass all the mixed-in video streams."})}}}}}function ne(l){return N=l.errorModule,{name:"CDNStreamingOptions",type:"object",required:!0,allowEmpty:!1,properties:{target:I({},ie),encoding:I({},oe),mix:I({},ae)}}}function de(l){return N=l.errorModule,{name:"CDNStreamingOptions",type:"object",required:!0,allowEmpty:!1,properties:{target:{required:!0,properties:{publishMode:{required:!0,values:["publish-main-stream-to-cdn","publish-mix-stream-to-cdn","publish-sub-stream-to-cdn"]}}}}}}var v=0,w=class w{constructor(e){this.core=e;S(this,"_mixTranscodeManager");S(this,"_publishCDNManager");S(this,"_core");S(this,"_modeOptions");S(this,"seq");S(this,"_log");v=v+1,this.seq=v,this._log=e.log.createChild({id:`${this.getAlias()}${v}`}),this._log.info(`[CDNStreaming] created id=${this.getAlias()}${v}`),this._core=e,this._modeOptions=new Map,this._mixTranscodeManager=new L(e,this._log),this._publishCDNManager=new x(e,this._log)}getName(){return w.Name}getAlias(){return"cdn"}getValidateRule(e){switch(e){case"start":return se(this._core);case"update":return ne(this._core);case"stop":return de(this._core)}}getGroup(e){return e.target.publishMode}async start(e){return this._modeOptions.set(e.target.publishMode,e),await this.doStart(e)}async update(e){let i=this._modeOptions.get(e.target.publishMode);return this._core.utils.deepMerge(i,e),await this.doStart(i)}async stop(e){switch(e.target.publishMode){case"publish-mix-stream-to-cdn":{await this._mixTranscodeManager.stopMixTranscode();break}case"publish-main-stream-to-cdn":case"publish-sub-stream-to-cdn":{await this._publishCDNManager.stopPublishTencentCDN(e.target.publishMode);break}}this._modeOptions.delete(e.target.publishMode)}async doStart(e){switch(this._log.info(`[CDNStreaming] doStart: ${JSON.stringify(e)}`),e.target.publishMode){case"publish-mix-stream-to-cdn":{await this._mixTranscodeManager.startMixTranscode(e);break}case"publish-main-stream-to-cdn":case"publish-sub-stream-to-cdn":{await this._publishCDNManager.startPublishTencentCDN(e.target);break}}}};S(w,"TYPE",{PublishMode:{PublishMainStreamToCDN:"publish-main-stream-to-cdn",PublishSubStreamToCDN:"publish-sub-stream-to-cdn",PublishMixStreamToCDN:"publish-mix-stream-to-cdn"}}),S(w,"Name","CDNStreaming");var W=w;var ot=W;export{W as CDNStreaming,y as PublishMode,X as TRTCStreamType,ot as default};
1
+ var ue=Object.create;var J=Object.defineProperty,me=Object.defineProperties,le=Object.getOwnPropertyDescriptor,ce=Object.getOwnPropertyDescriptors,pe=Object.getOwnPropertyNames,z=Object.getOwnPropertySymbols,he=Object.getPrototypeOf,j=Object.prototype.hasOwnProperty,ge=Object.prototype.propertyIsEnumerable;var K=(l,e,i)=>e in l?J(l,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):l[e]=i,I=(l,e)=>{for(var i in e||(e={}))j.call(e,i)&&K(l,i,e[i]);if(z)for(var i of z(e))ge.call(e,i)&&K(l,i,e[i]);return l},Y=(l,e)=>me(l,ce(e));var Se=(l,e)=>()=>(e||l((e={exports:{}}).exports,e),e.exports);var be=(l,e,i,d)=>{if(e&&typeof e=="object"||typeof e=="function")for(let u of pe(e))!j.call(l,u)&&u!==i&&J(l,u,{get:()=>e[u],enumerable:!(d=le(e,u))||d.enumerable});return l};var Z=(l,e,i)=>(i=l!=null?ue(he(l)):{},be(e||!l||!l.__esModule?J(i,"default",{value:l,enumerable:!0}):i,l));var S=(l,e,i)=>(K(l,typeof e!="symbol"?e+"":e,i),i);var q=Se((Q,V)=>{(function(l){"use strict";function e(t,p){var r=(t&65535)+(p&65535),g=(t>>16)+(p>>16)+(r>>16);return g<<16|r&65535}function i(t,p){return t<<p|t>>>32-p}function d(t,p,r,g,C,D){return e(i(e(e(p,t),e(g,D)),C),r)}function u(t,p,r,g,C,D,f){return d(p&r|~p&g,t,p,C,D,f)}function c(t,p,r,g,C,D,f){return d(p&g|r&~g,t,p,C,D,f)}function m(t,p,r,g,C,D,f){return d(p^r^g,t,p,C,D,f)}function h(t,p,r,g,C,D,f){return d(r^(p|~g),t,p,C,D,f)}function b(t,p){t[p>>5]|=128<<p%32,t[(p+64>>>9<<4)+14]=p;var r,g,C,D,f,a=1732584193,o=-271733879,s=-1732584194,n=271733878;for(r=0;r<t.length;r+=16)g=a,C=o,D=s,f=n,a=u(a,o,s,n,t[r],7,-680876936),n=u(n,a,o,s,t[r+1],12,-389564586),s=u(s,n,a,o,t[r+2],17,606105819),o=u(o,s,n,a,t[r+3],22,-1044525330),a=u(a,o,s,n,t[r+4],7,-176418897),n=u(n,a,o,s,t[r+5],12,1200080426),s=u(s,n,a,o,t[r+6],17,-1473231341),o=u(o,s,n,a,t[r+7],22,-45705983),a=u(a,o,s,n,t[r+8],7,1770035416),n=u(n,a,o,s,t[r+9],12,-1958414417),s=u(s,n,a,o,t[r+10],17,-42063),o=u(o,s,n,a,t[r+11],22,-1990404162),a=u(a,o,s,n,t[r+12],7,1804603682),n=u(n,a,o,s,t[r+13],12,-40341101),s=u(s,n,a,o,t[r+14],17,-1502002290),o=u(o,s,n,a,t[r+15],22,1236535329),a=c(a,o,s,n,t[r+1],5,-165796510),n=c(n,a,o,s,t[r+6],9,-1069501632),s=c(s,n,a,o,t[r+11],14,643717713),o=c(o,s,n,a,t[r],20,-373897302),a=c(a,o,s,n,t[r+5],5,-701558691),n=c(n,a,o,s,t[r+10],9,38016083),s=c(s,n,a,o,t[r+15],14,-660478335),o=c(o,s,n,a,t[r+4],20,-405537848),a=c(a,o,s,n,t[r+9],5,568446438),n=c(n,a,o,s,t[r+14],9,-1019803690),s=c(s,n,a,o,t[r+3],14,-187363961),o=c(o,s,n,a,t[r+8],20,1163531501),a=c(a,o,s,n,t[r+13],5,-1444681467),n=c(n,a,o,s,t[r+2],9,-51403784),s=c(s,n,a,o,t[r+7],14,1735328473),o=c(o,s,n,a,t[r+12],20,-1926607734),a=m(a,o,s,n,t[r+5],4,-378558),n=m(n,a,o,s,t[r+8],11,-2022574463),s=m(s,n,a,o,t[r+11],16,1839030562),o=m(o,s,n,a,t[r+14],23,-35309556),a=m(a,o,s,n,t[r+1],4,-1530992060),n=m(n,a,o,s,t[r+4],11,1272893353),s=m(s,n,a,o,t[r+7],16,-155497632),o=m(o,s,n,a,t[r+10],23,-1094730640),a=m(a,o,s,n,t[r+13],4,681279174),n=m(n,a,o,s,t[r],11,-358537222),s=m(s,n,a,o,t[r+3],16,-722521979),o=m(o,s,n,a,t[r+6],23,76029189),a=m(a,o,s,n,t[r+9],4,-640364487),n=m(n,a,o,s,t[r+12],11,-421815835),s=m(s,n,a,o,t[r+15],16,530742520),o=m(o,s,n,a,t[r+2],23,-995338651),a=h(a,o,s,n,t[r],6,-198630844),n=h(n,a,o,s,t[r+7],10,1126891415),s=h(s,n,a,o,t[r+14],15,-1416354905),o=h(o,s,n,a,t[r+5],21,-57434055),a=h(a,o,s,n,t[r+12],6,1700485571),n=h(n,a,o,s,t[r+3],10,-1894986606),s=h(s,n,a,o,t[r+10],15,-1051523),o=h(o,s,n,a,t[r+1],21,-2054922799),a=h(a,o,s,n,t[r+8],6,1873313359),n=h(n,a,o,s,t[r+15],10,-30611744),s=h(s,n,a,o,t[r+6],15,-1560198380),o=h(o,s,n,a,t[r+13],21,1309151649),a=h(a,o,s,n,t[r+4],6,-145523070),n=h(n,a,o,s,t[r+11],10,-1120210379),s=h(s,n,a,o,t[r+2],15,718787259),o=h(o,s,n,a,t[r+9],21,-343485551),a=e(a,g),o=e(o,C),s=e(s,D),n=e(n,f);return[a,o,s,n]}function _(t){var p,r="",g=t.length*32;for(p=0;p<g;p+=8)r+=String.fromCharCode(t[p>>5]>>>p%32&255);return r}function T(t){var p,r=[];for(r[(t.length>>2)-1]=void 0,p=0;p<r.length;p+=1)r[p]=0;var g=t.length*8;for(p=0;p<g;p+=8)r[p>>5]|=(t.charCodeAt(p/8)&255)<<p%32;return r}function E(t){return _(b(T(t),t.length*8))}function k(t,p){var r,g=T(t),C=[],D=[],f;for(C[15]=D[15]=void 0,g.length>16&&(g=b(g,t.length*8)),r=0;r<16;r+=1)C[r]=g[r]^909522486,D[r]=g[r]^1549556828;return f=b(C.concat(T(p)),512+p.length*8),_(b(D.concat(f),512+128))}function y(t){var p="0123456789abcdef",r="",g,C;for(C=0;C<t.length;C+=1)g=t.charCodeAt(C),r+=p.charAt(g>>>4&15)+p.charAt(g&15);return r}function N(t){return unescape(encodeURIComponent(t))}function M(t){return E(N(t))}function F(t){return y(M(t))}function G(t,p){return k(N(t),N(p))}function A(t,p){return y(G(t,p))}function B(t,p,r){return p?r?G(p,t):A(p,t):r?M(t):F(t)}typeof define=="function"&&define.amd?define(function(){return B}):typeof V=="object"&&V.exports?V.exports=B:l.md5=B})(Q)});var ee=Z(q(),1);var U=(d=>(d.PublishMainStreamToCDN="publish-main-stream-to-cdn",d.PublishSubStreamToCDN="publish-sub-stream-to-cdn",d.PublishMixStreamToCDN="publish-mix-stream-to-cdn",d))(U||{}),X=(i=>(i.Main="main",i.Sub="sub",i))(X||{});var H={IT_AUDIO_VIDEO:0,IT_PICTURE:2,IT_CANVAS:3,IT_PURE_AUDIO:4,IT_PURE_VIDEO:5};var R=class{constructor(e,i){S(this,"_core");S(this,"_room");S(this,"_log");S(this,"_params");S(this,"_publishGivenCDNData",null);this._core=e,this._room=e.room,this._log=i}get isPublishingGivenCDN(){return!!this._params}async startPublishGivenCDN(e){if(this._log.info(`[CDNStreaming] startPublishGivenCDN() current: ${JSON.stringify(this._params)}, params: ${JSON.stringify(e)}`),this.isPublishingGivenCDN){let{appId:i,bizId:d,url:u}=this._params||{};if(i===e.appId&&d===e.bizId&&u===e.url)return;await this.stopPublishGivenCDN()}this._params=e,this._publishGivenCDNData={pushRequestTime:Date.now(),pushAppId:e.appId,pushBizId:e.bizId,pushCdnUrl:e.url,pushStreamType:this.convertStreamType(e==null?void 0:e.publishMode),pushStreamId:e.streamId};try{let i=await this._room.sendStartPublishCDN(this._publishGivenCDNData,!1),{code:d,message:u}=i.data;if(d===0)this._log.info("[CDNStreaming] server success: start given cdn.");else throw this.resetGivenCDN(),this._log.error(`[CDNStreaming] server failed: start given cdn errCode: ${d} errMsg: ${u} options: ${JSON.stringify(e)}`),new Error(`[CDNStreaming] server failed: start given cdn errCode: ${d} errMsg: ${u}`)}catch(i){throw this.resetGivenCDN(),i}}async stopPublishGivenCDN(){if(this._log.info("[CDNStreaming] stopPublishGivenCDN"),!this.isPublishingGivenCDN||!this._publishGivenCDNData){this.resetGivenCDN();return}let{pushAppId:e,pushBizId:i,pushCdnUrl:d,pushStreamType:u,pushStreamId:c}=this._publishGivenCDNData,m={pushRequestTime:Date.now(),pushAppId:e,pushBizId:i,pushCdnUrl:d,pushStreamType:u,pushStreamId:c},h=await this._room.sendStopPublishCDN(m,!1),{code:b,message:_}=h.data;if(b===0)this._log.info("[CDNStreaming] server success: stop given cdn."),this.resetGivenCDN();else throw this._log.error(`[CDNStreaming] server failed: stop given cdn errCode: ${b} errMsg: ${_} data: ${JSON.stringify(m)}`),new Error(`[CDNStreaming] server failed: stop given cdn errCode: ${b} errMsg: ${_}`)}resetGivenCDN(){this._publishGivenCDNData=null,this._params=void 0}convertStreamType(e){return e==="publish-sub-stream-to-cdn"?"aux":"main"}};var L=class{constructor(e,i){S(this,"_core");S(this,"_room");S(this,"_log");S(this,"_config",null);S(this,"_data",null);S(this,"_givenCDNManager");this._core=e,this._room=e.room,this._log=i,this.reset()}get isMixing(){return!!this._data}get isStarted(){return!!this._config}get hasCustomCDN(){var e,i,d;return((e=this._config)==null?void 0:e.target.appId)&&((i=this._config)==null?void 0:i.target.bizId)&&((d=this._config)==null?void 0:d.target.url)}async startMixTranscode(e){if(this._log.info(`startMixTranscode: ${JSON.stringify(e)}`),this._config=e,this.installEvents(),!!this._core.room.isJoined)try{let i=this.getInputParam(e),d=this.getOutputParam(e),u=this.getOutputSessionId({config:e,roomId:this._room.roomId,userId:this._room.userId});this.isMixing&&this._data&&u!==this._data.outputSessionId&&(this._log.info("[CDNStreaming] streamId changed, auto stop mixing before start"),await this.doStopMixTranscode()),await this.doStartMixTranscode({outputSessionId:u,inputParam:i,outputParam:d});let{appId:c,bizId:m,url:h,streamId:b=""}=e.target;c&&m&&h&&(this._givenCDNManager||(this._givenCDNManager=new R(this._core,this._log)),await this._givenCDNManager.startPublishGivenCDN({publishMode:e.target.publishMode,appId:c,bizId:m,url:h,streamId:b}))}catch(i){throw this.reset(),i}}async doStartMixTranscode({outputSessionId:e,inputParam:i,outputParam:d}){let u={roomId:String(this._room.roomId),mcuRequestTime:Date.now(),outputSessionId:e,inputParam:i,outputParam:d};this._log.info(`[CDNStreaming] doStartMixTranscode: ${JSON.stringify(u)}`);let c=await this._room.sendStartMixTranscode(u),{code:m}=c.data,{message:h}=c.data;if(m===0)this._log.info("[CDNStreaming] server success: start mix"),this._data=u;else throw m===-102083&&(h=`Please enable relayed-push in ${this._core.constants.CLOUD_CONSOLE_URL} and try later, refer to ${this._core.constants.DOC_URL}tutorial-26-advanced-publish-cdn-stream.html`),this._log.error(`[CDNStreaming] server failed: start mix errCode: ${m} errMsg: ${h}`),new Error(`[CDNStreaming] server failed: start mix errCode: ${m} errMsg: ${h}`)}async stopMixTranscode(){this._log.info("[CDNStreaming] stopMixTranscode");try{this.isStarted&&this.isMixing&&(await this.doStopMixTranscode(),this._config&&this.hasCustomCDN&&this._givenCDNManager&&await this._givenCDNManager.stopPublishGivenCDN())}catch(e){throw e}this.reset()}async doStopMixTranscode(){let e={mcuRequestTime:Date.now(),outputSessionId:this._data.outputSessionId,streamType:this._data.outputParam.streamType};this._log.info(`[CDNStreaming] doStopMixTranscode: ${JSON.stringify(e)}`);let i=await this._room.sendStopMixTranscode(e),{code:d,message:u}=i.data;if(d===0)this._log.info("[CDNStreaming] server success: stop mix"),this.reset();else throw this._log.error(`[CDNStreaming] server failed: stop mix errCode: ${d} errMsg: ${u}`),new Error(`[CDNStreaming] server failed: stop mix errCode: ${d} errMsg: ${u}`)}reset(){this._config=null,this._data=null,this.uninstallEvents()}installEvents(){this._core.room.on("joined",this.handleRoomJoined,this),this._core.room.on("left",this.handleRoomLeft,this)}uninstallEvents(){this._core.room.off("joined",this.handleRoomJoined,this),this._core.room.off("left",this.handleRoomLeft,this)}async handleRoomJoined(){this._log.info(`[CDNStreaming] handleJoined: ${JSON.stringify(this._config)}`),this.isStarted&&this._config&&await this.startMixTranscode(this._config)}async handleRoomLeft(){this._log.info(`[CDNStreaming] handleRoomLeft: ${JSON.stringify(this._config)}`),this._data=null}getOutputSessionId({config:e,userId:i,roomId:d}){return this._core.utils.isString(e.target.streamId)&&e.target.streamId.length>0?e.target.streamId:(0,ee.default)(`${d}_${i}_main`)}getStringRoomId(e,i){return e?String(e):i}getInputParam(e){let{mix:i={}}=e,{audioMixUserList:d=[],videoLayoutList:u=[]}=i,c=u.map(m=>({userId:m.fixedVideoUser.userId,roomId:this.getStringRoomId(m.fixedVideoUser.roomId,m.fixedVideoUser.strRoomId)||this._core.room.roomId,width:m.width||0,height:m.height||0,locationX:m.locationX||0,locationY:m.locationY||0,zOrder:m.zOrder||1,streamType:m.fixedVideoStreamType==="sub"?1:0,inputType:H.IT_PURE_VIDEO,renderMode:m.fillMode||0}));return d.forEach(m=>{let h=c.findIndex(b=>b.userId===m.userId&&b.roomId===this.getStringRoomId(m.roomId,m.strRoomId));h!==-1?c[h].inputType=H.IT_AUDIO_VIDEO:c.push({userId:m.userId,roomId:m.roomId||m.strRoomId||this._core.room.roomId,inputType:H.IT_PURE_AUDIO})}),c}getOutputParam(e){let i=e.target.streamId||"",{encoding:d={},mix:u={}}=e;return{streamId:i,streamType:i.length>0?1:0,width:this._core.utils.isUndefined(d.videoWidth)?640:d.videoWidth,height:this._core.utils.isUndefined(d.videoHeight)?480:d.videoHeight,videoBps:d.videoBitrate||0,fps:d.videoFramerate||15,gop:d.videoGOP||2,audioSampleRate:d.audioSampleRate||48e3,audioBps:d.audioBitrate||64,audioChannels:d.audioChannels||1,backgroundColor:u.backgroundColor||0,backgroundImg:u.backgroundImage||"",extraInfo:"",videoCodec:2,audioCodec:0}}};var $=Z(q(),1);var x=class{constructor(e,i){S(this,"_room");S(this,"_core");S(this,"_log");S(this,"_paramsForTencentCDN");S(this,"_initParamsForTencentCDN",{isPublished:!1,isStarted:!1});this._core=e,this._room=e.room,this._log=i,this._paramsForTencentCDN=new Map([["publish-main-stream-to-cdn",this._initParamsForTencentCDN],["publish-sub-stream-to-cdn",this._initParamsForTencentCDN]])}installEvents(){this._core.innerEmitter.on("104",this.handlePublished,this),this._core.room.on("left",this.handleRoomLeft,this)}uninstallEvents(){this._core.innerEmitter.off("104",this.handlePublished,this),this._core.room.off("left",this.handleRoomLeft,this)}async handlePublished({track:e}){var u;if(e.room!==this._room||(this._log.info(`[CDNStreaming] handlePublished: mediaType ${e.mediaType}, roomID ${(u=e==null?void 0:e.room)==null?void 0:u.roomId}`),e.mediaType===1))return;let i=e.mediaType===4?"publish-main-stream-to-cdn":"publish-sub-stream-to-cdn",d=this._paramsForTencentCDN.get(i)||null;d!=null&&d.target&&d.isStarted&&await this.startPublishTencentCDN(d.target)}async handleRoomLeft(){this._log.info("[CDNStreaming] handleRoomLeft"),this.changeDataStatus("publish-main-stream-to-cdn",{isPublished:!1}),this.changeDataStatus("publish-sub-stream-to-cdn",{isPublished:!1})}isStreamPublished(e){return e==="publish-main-stream-to-cdn"&&!this._room.isMainStreamPublished?(this._log.info("[CDNStreaming] Main stream has not already published, will auto reStart after published."),!1):e==="publish-sub-stream-to-cdn"&&!this._room.isAuxStreamPublished?(this._log.info("[CDNStreaming] Sub has not already published, will auto reStart after published."),!1):!0}changeDataStatus(e,i){let d=this._paramsForTencentCDN.get(e),u=I(I({},d),i);this._paramsForTencentCDN.set(e,u)}async startPublishTencentCDN(e){if(this._log.info(`[CDNStreaming] startPublishTencentCDN ${JSON.stringify(e)}`),this.installEvents(),this.changeDataStatus(e.publishMode,{target:e,isStarted:!0}),!this.isStreamPublished(e.publishMode))return;let i=e.streamId||"",d=this.generatePublishCDNStreamId(i,e.publishMode),u=this.generatePublishCDNSessionId(e.publishMode),c=e.publishMode==="publish-sub-stream-to-cdn"?1:0,m={requestTime:Date.now(),sessionId:u,streamId:d,streamType:c};await this.doStartPublishTencentCDN(m,e.publishMode);let{appId:h,bizId:b,url:_}=e;if(h&&b&&_){let T=this._paramsForTencentCDN.get(e.publishMode)||this._initParamsForTencentCDN;T!=null&&T.givenCDNManager||(T.givenCDNManager=new R(this._core,this._log),this._paramsForTencentCDN.set(e.publishMode,T)),await T.givenCDNManager.startPublishGivenCDN({publishMode:e.publishMode,appId:h,bizId:b,url:_,streamId:d})}}async doStartPublishTencentCDN(e,i){this._log.info(`[CDNStreaming] doStartPublishTencentCDN: ${JSON.stringify(e)}`);let d=6,u=500,c=0;for(;;){let m=await this._room.sendStartPublishCDN(e,!0),{code:h}=m.data,{message:b}=m.data;if(h===0){this._log.info("[CDNStreaming] server success: start tencent cdn"),this.changeDataStatus(i,{isPublished:!0});break}else if(h===-10006&&c<d)this._log.warn(`[CDNStreaming] doStartPublishTencentCDN: retry...${c+1}/6, reason: ${b}`),c+=1,await new Promise(_=>setTimeout(_,u));else throw this.changeDataStatus(i,{isPublished:!1}),h===-102083&&(b=`Please enable relayed-push in ${this._core.constants.CLOUD_CONSOLE_URL} and try later, refer to ${this._core.constants.DOC_URL}tutorial-26-advanced-publish-cdn-stream.html`),this._log.error(`[CDNStreaming] server failed: start tencent cdn errCode: ${h} errMsg: ${b}`),new Error(`[CDNStreaming] server failed: start tencent cdn errCode: ${h} errMsg: ${b}`)}}async stopPublishTencentCDN(e){this._log.info(`[CDNStreaming] doStartPublishTencentCDN: ${JSON.stringify(e)}`);let i=this._paramsForTencentCDN.get(e)||this._initParamsForTencentCDN;if(i.isPublished){let{target:d}=i;d!=null&&d.bizId&&d.appId&&d.url&&(i!=null&&i.givenCDNManager)&&await(i==null?void 0:i.givenCDNManager.stopPublishGivenCDN()),await this.doStopPublishTencentCDN(e)}this._paramsForTencentCDN.set(e,this._initParamsForTencentCDN)}async doStopPublishTencentCDN(e){let i={requestTime:Date.now(),sessionId:(0,$.default)(`${this._room.roomId}_${this._room.userId}_${this.convertPublishModeToStreamType(e)}`)};this._log.info(`[CDNStreaming] doStopPublishTencentCDN: ${JSON.stringify(i)}`);let d=await this._room.sendStopPublishCDN(i,!0),{code:u}=d.data,{message:c}=d.data;if(u===0)this._log.info("[CDNStreaming] server success: stop tencent cdn"),this._paramsForTencentCDN.set(e,this._initParamsForTencentCDN),this.reset(e);else throw u===-102069&&(this._paramsForTencentCDN.set(e,this._initParamsForTencentCDN),c=`can not stop in auto relayed-push mode ${c}`),this._log.error(`[CDNStreaming] server failed: stop tencent cdn errCode: ${u} errMsg: ${c}`),new Error(`[CDNStreaming] server failed: stop tencent cdn errCode: ${u} errMsg: ${c}`)}reset(e){this.uninstallEvents(),this._paramsForTencentCDN.set(e,this._initParamsForTencentCDN)}generatePublishCDNStreamId(e,i){if(e===""){let d=`${this._room.roomId}_${this._room.userId}_${this.convertPublishModeToStreamType(i)}`;return/^[A-Za-z\d_-]*$/.test(d)||(d=(0,$.default)(d)),`${this._room.sdkAppId}_${d}`}return e}convertPublishModeToStreamType(e){return e==="publish-main-stream-to-cdn"?"main":"aux"}generatePublishCDNSessionId(e){return(0,$.default)(`${this._room.roomId}_${this._room.userId}_${this.convertPublishModeToStreamType(e)}`)}};var te=l=>typeof l=="string";var P;function De(l,e,i,d){if(!/^[A-Za-z\d_-]*$/.test(l)){let{RtcError:c,ErrorCode:m,ErrorCodeDictionary:h}=P;throw new c({code:m.INVALID_PARAMETER,extraCode:h.INVALID_STREAM_ID,messageParams:{key:"streamId"}})}}function Te(l,e,i,d){let{RtcError:u,ErrorCode:c,ErrorCodeDictionary:m}=P;if(te(l))throw new u({code:c.INVALID_PARAMETER,extraCode:m.INVALID_ROOM_ID_INTEGER_STRING,fnName:i,messageParams:{key:"roomId"}});if(l===void 0)return;if(!(/^[1-9]\d*$/.test(String(l))&&l<4294967295))throw new u({code:c.INVALID_PARAMETER,extraCode:m.INVALID_ROOM_ID_INTEGER,fnName:i,messageParams:{key:"roomId"}})}function _e(l,e,i,d){let{RtcError:u,ErrorCode:c,ErrorCodeDictionary:m}=P;if(!/^[A-Za-z\d\s!#$%&()+\-:;<=.>?@[\]^_{}|~,]{1,64}$/.test(l))throw new u({code:c.INVALID_PARAMETER,extraCode:m.INVALID_ROOM_ID_STRING,fnName:i,messageParams:{key:"strRoomId"}})}var O={type:"number",notLessThanZero:!0},re={type:"object",required:!0,properties:{userId:{required:!0,type:"string"},roomId:{type:["string","number"],validate:Te},strRoomId:{type:"string",validate:_e}}},ie={required:!0,properties:{publishMode:{required:!0,values:["publish-main-stream-to-cdn","publish-mix-stream-to-cdn","publish-sub-stream-to-cdn"]},streamId:{required:!1,type:"string",validate:De},appId:{type:"number",allowEmpty:!1},bizId:{type:"number",allowEmpty:!1},url:{type:"string",allowEmpty:!1}}},ae={required:!1,type:"object",properties:{videoWidth:O,videoHeight:O,videoBitrate:Y(I({},O),{allowEmpty:!1}),videoFramerate:{type:"number",validate(l,e,i,d){if(l<=0||l>30){let{RtcError:u,ErrorCode:c}=P;throw new u({code:c.INVALID_PARAMETER,message:"Invalid parameter mixConfig -> videoFramerate, the value must be between (0, 30]."})}}},videoGOP:{type:"number",validate(l,e,i,d){if(l<1||l>8){let{RtcError:u,ErrorCode:c}=P;throw new u({code:c.INVALID_PARAMETER,message:"Invalid parameter mixConfig -> videoGOP, the value must be between [1, 8]."})}}},audioSampleRate:O,audioBitrate:{type:"number",validate(l,e,i,d){if(l<32||l>192){let{RtcError:u,ErrorCode:c}=P;throw new u({code:c.INVALID_PARAMETER,message:"Invalid parameter mixConfig -> audioBitrate, the value must be between [32, 192]."})}}},audioChannels:{type:"number",values:[1,2]}}},oe={required:!1,type:"object",properties:{backgroundColor:{type:"number"},backgroundImage:{type:"string"},audioMixUserList:{type:"array",arrayItem:I({},re)},videoLayoutList:{type:"array",required:!0,arrayItem:{type:"object",properties:{fixedVideoUser:I({},re),fixedVideoStreamType:{type:"string",required:!0,values:["main","sub"]},fillMode:{type:"number",values:[0,1,2,4]},zOrder:{type:"number",required:!0,validate(l,e,i,d){if(l<1||l>15){let{RtcError:u,ErrorCode:c}=P;throw new u({code:c.INVALID_PARAMETER,message:"Invalid parameter mix -> videoLayoutList -> zOrder, the value must be between [1, 15]."})}}},width:O,height:O,locationX:O,locationY:O}}}}};function se(l){return P=l.errorModule,{name:"CDNStreamingOptions",type:"object",required:!0,allowEmpty:!1,properties:{target:I({},ie),encoding:I({},ae),mix:I({},oe)},validate(e,i,d,u){var b,_;let{publishMode:c}=e.target,{encoding:m,mix:h}=e;if(c==="publish-mix-stream-to-cdn"){let{RtcError:T,ErrorCode:E,ErrorCodeDictionary:k}=l.errorModule;if(!m)throw new T({code:E.INVALID_PARAMETER,extraCode:k.INVALID_PARAMETER_REQUIRED,fnName:d,messageParams:{key:"encoding"}});if(!h)throw new T({code:E.INVALID_PARAMETER,extraCode:k.INVALID_PARAMETER_REQUIRED,fnName:d,messageParams:{key:"mix"}});if(h&&h.videoLayoutList){let y=0,N=0,M=[];if(h.videoLayoutList.forEach((A,B)=>{M.push(A.fixedVideoUser.userId),A.width+A.locationX>y&&(y=A.width+A.locationX),A.height+A.locationY>N&&(N=A.height+A.locationY)}),M.indexOf(l.room.userId)<0)throw new T({code:E.INVALID_PARAMETER,message:"Invalid parameter mix -> videoLayoutList, the value must be include self."});let F=(b=m==null?void 0:m.videoWidth)!=null?b:640,G=(_=m==null?void 0:m.videoHeight)!=null?_:480;if(F<y||G<N)throw new T({code:E.INVALID_PARAMETER,message:"Invalid parameter encoding, the width and height of the mixed video must encompass all the mixed-in video streams."})}}}}}function ne(l){return P=l.errorModule,{name:"CDNStreamingOptions",type:"object",required:!0,allowEmpty:!1,properties:{target:I({},ie),encoding:I({},ae),mix:I({},oe)}}}function de(l){return P=l.errorModule,{name:"CDNStreamingOptions",type:"object",required:!0,allowEmpty:!1,properties:{target:{required:!0,properties:{publishMode:{required:!0,values:["publish-main-stream-to-cdn","publish-mix-stream-to-cdn","publish-sub-stream-to-cdn"]}}}}}}var v=0,w=class w{constructor(e){this.core=e;S(this,"_mixTranscodeManager");S(this,"_publishCDNManager");S(this,"_core");S(this,"_modeOptions");S(this,"seq");S(this,"_log");v=v+1,this.seq=v,this._log=e.log.createChild({id:`${this.getAlias()}${v}`}),this._log.info(`[CDNStreaming] created id=${this.getAlias()}${v}`),this._core=e,this._modeOptions=new Map,this._mixTranscodeManager=new L(e,this._log),this._publishCDNManager=new x(e,this._log)}getName(){return w.Name}getAlias(){return"cdn"}getValidateRule(e){switch(e){case"start":return se(this._core);case"update":return ne(this._core);case"stop":return de(this._core)}}getGroup(e){return e.target.publishMode}async start(e){return this._modeOptions.set(e.target.publishMode,e),await this.doStart(e)}async update(e){let i=this._modeOptions.get(e.target.publishMode);return this._core.utils.deepMerge(i,e),await this.doStart(i)}async stop(e){switch(e.target.publishMode){case"publish-mix-stream-to-cdn":{await this._mixTranscodeManager.stopMixTranscode();break}case"publish-main-stream-to-cdn":case"publish-sub-stream-to-cdn":{await this._publishCDNManager.stopPublishTencentCDN(e.target.publishMode);break}}this._modeOptions.delete(e.target.publishMode)}async doStart(e){switch(this._log.info(`[CDNStreaming] doStart: ${JSON.stringify(e)}`),e.target.publishMode){case"publish-mix-stream-to-cdn":{await this._mixTranscodeManager.startMixTranscode(e);break}case"publish-main-stream-to-cdn":case"publish-sub-stream-to-cdn":{await this._publishCDNManager.startPublishTencentCDN(e.target);break}}}};S(w,"TYPE",{PublishMode:{PublishMainStreamToCDN:"publish-main-stream-to-cdn",PublishSubStreamToCDN:"publish-sub-stream-to-cdn",PublishMixStreamToCDN:"publish-mix-stream-to-cdn"}}),S(w,"Name","CDNStreaming");var W=w;var at=W;export{W as CDNStreaming,U as PublishMode,X as TRTCStreamType,at as default};
@@ -1 +1 @@
1
- "use strict";var CDNStreaming=(()=>{var me=Object.create;var L=Object.defineProperty,le=Object.defineProperties,ce=Object.getOwnPropertyDescriptor,pe=Object.getOwnPropertyDescriptors,he=Object.getOwnPropertyNames,z=Object.getOwnPropertySymbols,ge=Object.getPrototypeOf,j=Object.prototype.hasOwnProperty,Se=Object.prototype.propertyIsEnumerable;var X=(l,e,i)=>e in l?L(l,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):l[e]=i,I=(l,e)=>{for(var i in e||(e={}))j.call(e,i)&&X(l,i,e[i]);if(z)for(var i of z(e))Se.call(e,i)&&X(l,i,e[i]);return l},Y=(l,e)=>le(l,pe(e));var be=(l,e)=>()=>(e||l((e={exports:{}}).exports,e),e.exports),Ce=(l,e)=>{for(var i in e)L(l,i,{get:e[i],enumerable:!0})},Z=(l,e,i,d)=>{if(e&&typeof e=="object"||typeof e=="function")for(let u of he(e))!j.call(l,u)&&u!==i&&L(l,u,{get:()=>e[u],enumerable:!(d=ce(e,u))||d.enumerable});return l};var Q=(l,e,i)=>(i=l!=null?me(ge(l)):{},Z(e||!l||!l.__esModule?L(i,"default",{value:l,enumerable:!0}):i,l)),Te=l=>Z(L({},"__esModule",{value:!0}),l);var S=(l,e,i)=>(X(l,typeof e!="symbol"?e+"":e,i),i);var W=be((ee,H)=>{(function(l){"use strict";function e(t,p){var r=(t&65535)+(p&65535),g=(t>>16)+(p>>16)+(r>>16);return g<<16|r&65535}function i(t,p){return t<<p|t>>>32-p}function d(t,p,r,g,C,T){return e(i(e(e(p,t),e(g,T)),C),r)}function u(t,p,r,g,C,T,f){return d(p&r|~p&g,t,p,C,T,f)}function c(t,p,r,g,C,T,f){return d(p&g|r&~g,t,p,C,T,f)}function m(t,p,r,g,C,T,f){return d(p^r^g,t,p,C,T,f)}function h(t,p,r,g,C,T,f){return d(r^(p|~g),t,p,C,T,f)}function b(t,p){t[p>>5]|=128<<p%32,t[(p+64>>>9<<4)+14]=p;var r,g,C,T,f,o=1732584193,a=-271733879,s=-1732584194,n=271733878;for(r=0;r<t.length;r+=16)g=o,C=a,T=s,f=n,o=u(o,a,s,n,t[r],7,-680876936),n=u(n,o,a,s,t[r+1],12,-389564586),s=u(s,n,o,a,t[r+2],17,606105819),a=u(a,s,n,o,t[r+3],22,-1044525330),o=u(o,a,s,n,t[r+4],7,-176418897),n=u(n,o,a,s,t[r+5],12,1200080426),s=u(s,n,o,a,t[r+6],17,-1473231341),a=u(a,s,n,o,t[r+7],22,-45705983),o=u(o,a,s,n,t[r+8],7,1770035416),n=u(n,o,a,s,t[r+9],12,-1958414417),s=u(s,n,o,a,t[r+10],17,-42063),a=u(a,s,n,o,t[r+11],22,-1990404162),o=u(o,a,s,n,t[r+12],7,1804603682),n=u(n,o,a,s,t[r+13],12,-40341101),s=u(s,n,o,a,t[r+14],17,-1502002290),a=u(a,s,n,o,t[r+15],22,1236535329),o=c(o,a,s,n,t[r+1],5,-165796510),n=c(n,o,a,s,t[r+6],9,-1069501632),s=c(s,n,o,a,t[r+11],14,643717713),a=c(a,s,n,o,t[r],20,-373897302),o=c(o,a,s,n,t[r+5],5,-701558691),n=c(n,o,a,s,t[r+10],9,38016083),s=c(s,n,o,a,t[r+15],14,-660478335),a=c(a,s,n,o,t[r+4],20,-405537848),o=c(o,a,s,n,t[r+9],5,568446438),n=c(n,o,a,s,t[r+14],9,-1019803690),s=c(s,n,o,a,t[r+3],14,-187363961),a=c(a,s,n,o,t[r+8],20,1163531501),o=c(o,a,s,n,t[r+13],5,-1444681467),n=c(n,o,a,s,t[r+2],9,-51403784),s=c(s,n,o,a,t[r+7],14,1735328473),a=c(a,s,n,o,t[r+12],20,-1926607734),o=m(o,a,s,n,t[r+5],4,-378558),n=m(n,o,a,s,t[r+8],11,-2022574463),s=m(s,n,o,a,t[r+11],16,1839030562),a=m(a,s,n,o,t[r+14],23,-35309556),o=m(o,a,s,n,t[r+1],4,-1530992060),n=m(n,o,a,s,t[r+4],11,1272893353),s=m(s,n,o,a,t[r+7],16,-155497632),a=m(a,s,n,o,t[r+10],23,-1094730640),o=m(o,a,s,n,t[r+13],4,681279174),n=m(n,o,a,s,t[r],11,-358537222),s=m(s,n,o,a,t[r+3],16,-722521979),a=m(a,s,n,o,t[r+6],23,76029189),o=m(o,a,s,n,t[r+9],4,-640364487),n=m(n,o,a,s,t[r+12],11,-421815835),s=m(s,n,o,a,t[r+15],16,530742520),a=m(a,s,n,o,t[r+2],23,-995338651),o=h(o,a,s,n,t[r],6,-198630844),n=h(n,o,a,s,t[r+7],10,1126891415),s=h(s,n,o,a,t[r+14],15,-1416354905),a=h(a,s,n,o,t[r+5],21,-57434055),o=h(o,a,s,n,t[r+12],6,1700485571),n=h(n,o,a,s,t[r+3],10,-1894986606),s=h(s,n,o,a,t[r+10],15,-1051523),a=h(a,s,n,o,t[r+1],21,-2054922799),o=h(o,a,s,n,t[r+8],6,1873313359),n=h(n,o,a,s,t[r+15],10,-30611744),s=h(s,n,o,a,t[r+6],15,-1560198380),a=h(a,s,n,o,t[r+13],21,1309151649),o=h(o,a,s,n,t[r+4],6,-145523070),n=h(n,o,a,s,t[r+11],10,-1120210379),s=h(s,n,o,a,t[r+2],15,718787259),a=h(a,s,n,o,t[r+9],21,-343485551),o=e(o,g),a=e(a,C),s=e(s,T),n=e(n,f);return[o,a,s,n]}function _(t){var p,r="",g=t.length*32;for(p=0;p<g;p+=8)r+=String.fromCharCode(t[p>>5]>>>p%32&255);return r}function D(t){var p,r=[];for(r[(t.length>>2)-1]=void 0,p=0;p<r.length;p+=1)r[p]=0;var g=t.length*8;for(p=0;p<g;p+=8)r[p>>5]|=(t.charCodeAt(p/8)&255)<<p%32;return r}function E(t){return _(b(D(t),t.length*8))}function G(t,p){var r,g=D(t),C=[],T=[],f;for(C[15]=T[15]=void 0,g.length>16&&(g=b(g,t.length*8)),r=0;r<16;r+=1)C[r]=g[r]^909522486,T[r]=g[r]^1549556828;return f=b(C.concat(D(p)),512+p.length*8),_(b(T.concat(f),512+128))}function y(t){var p="0123456789abcdef",r="",g,C;for(C=0;C<t.length;C+=1)g=t.charCodeAt(C),r+=p.charAt(g>>>4&15)+p.charAt(g&15);return r}function O(t){return unescape(encodeURIComponent(t))}function U(t){return E(O(t))}function q(t){return y(U(t))}function B(t,p){return G(O(t),O(p))}function A(t,p){return y(B(t,p))}function V(t,p,r){return p?r?B(p,t):A(p,t):r?U(t):q(t)}typeof define=="function"&&define.amd?define(function(){return V}):typeof H=="object"&&H.exports?H.exports=V:l.md5=V})(ee)});var Ne={};Ce(Ne,{CDNStreaming:()=>J,PublishMode:()=>M,TRTCStreamType:()=>$,default:()=>Ae});var te=Q(W(),1);var M=(d=>(d.PublishMainStreamToCDN="publish-main-stream-to-cdn",d.PublishSubStreamToCDN="publish-sub-stream-to-cdn",d.PublishMixStreamToCDN="publish-mix-stream-to-cdn",d))(M||{}),$=(i=>(i.Main="main",i.Sub="sub",i))($||{});var F={IT_AUDIO_VIDEO:0,IT_PICTURE:2,IT_CANVAS:3,IT_PURE_AUDIO:4,IT_PURE_VIDEO:5};var R=class{constructor(e,i){S(this,"_core");S(this,"_room");S(this,"_log");S(this,"_params");S(this,"_publishGivenCDNData",null);this._core=e,this._room=e.room,this._log=i}get isPublishingGivenCDN(){return!!this._params}async startPublishGivenCDN(e){if(this._log.info(`[CDNStreaming] startPublishGivenCDN() current: ${JSON.stringify(this._params)}, params: ${JSON.stringify(e)}`),this.isPublishingGivenCDN){let{appId:i,bizId:d,url:u}=this._params||{};if(i===e.appId&&d===e.bizId&&u===e.url)return;await this.stopPublishGivenCDN()}this._params=e,this._publishGivenCDNData={pushRequestTime:Date.now(),pushAppId:e.appId,pushBizId:e.bizId,pushCdnUrl:e.url,pushStreamType:this.convertStreamType(e==null?void 0:e.publishMode),pushStreamId:e.streamId};try{let i=await this._room.sendStartPublishCDN(this._publishGivenCDNData,!1),{code:d,message:u}=i.data;if(d===0)this._log.info("[CDNStreaming] server success: start given cdn.");else throw this.resetGivenCDN(),this._log.error(`[CDNStreaming] server failed: start given cdn errCode: ${d} errMsg: ${u} options: ${JSON.stringify(e)}`),new Error(`[CDNStreaming] server failed: start given cdn errCode: ${d} errMsg: ${u}`)}catch(i){throw this.resetGivenCDN(),i}}async stopPublishGivenCDN(){if(this._log.info("[CDNStreaming] stopPublishGivenCDN"),!this.isPublishingGivenCDN||!this._publishGivenCDNData){this.resetGivenCDN();return}let{pushAppId:e,pushBizId:i,pushCdnUrl:d,pushStreamType:u,pushStreamId:c}=this._publishGivenCDNData,m={pushRequestTime:Date.now(),pushAppId:e,pushBizId:i,pushCdnUrl:d,pushStreamType:u,pushStreamId:c},h=await this._room.sendStopPublishCDN(m,!1),{code:b,message:_}=h.data;if(b===0)this._log.info("[CDNStreaming] server success: stop given cdn."),this.resetGivenCDN();else throw this._log.error(`[CDNStreaming] server failed: stop given cdn errCode: ${b} errMsg: ${_} data: ${JSON.stringify(m)}`),new Error(`[CDNStreaming] server failed: stop given cdn errCode: ${b} errMsg: ${_}`)}resetGivenCDN(){this._publishGivenCDNData=null,this._params=void 0}convertStreamType(e){return e==="publish-sub-stream-to-cdn"?"aux":"main"}};var x=class{constructor(e,i){S(this,"_core");S(this,"_room");S(this,"_log");S(this,"_config",null);S(this,"_data",null);S(this,"_givenCDNManager");this._core=e,this._room=e.room,this._log=i,this.reset()}get isMixing(){return!!this._data}get isStarted(){return!!this._config}get hasCustomCDN(){var e,i,d;return((e=this._config)==null?void 0:e.target.appId)&&((i=this._config)==null?void 0:i.target.bizId)&&((d=this._config)==null?void 0:d.target.url)}async startMixTranscode(e){if(this._log.info(`startMixTranscode: ${JSON.stringify(e)}`),this._config=e,this.installEvents(),!!this._core.room.isJoined)try{let i=this.getInputParam(e),d=this.getOutputParam(e),u=this.getOutputSessionId({config:e,roomId:this._room.roomId,userId:this._room.userId});this.isMixing&&this._data&&u!==this._data.outputSessionId&&(this._log.info("[CDNStreaming] streamId changed, auto stop mixing before start"),await this.doStopMixTranscode()),await this.doStartMixTranscode({outputSessionId:u,inputParam:i,outputParam:d});let{appId:c,bizId:m,url:h,streamId:b=""}=e.target;c&&m&&h&&(this._givenCDNManager||(this._givenCDNManager=new R(this._core,this._log)),await this._givenCDNManager.startPublishGivenCDN({publishMode:e.target.publishMode,appId:c,bizId:m,url:h,streamId:b}))}catch(i){throw this.reset(),i}}async doStartMixTranscode({outputSessionId:e,inputParam:i,outputParam:d}){let u={roomId:String(this._room.roomId),mcuRequestTime:Date.now(),outputSessionId:e,inputParam:i,outputParam:d};this._log.info(`[CDNStreaming] doStartMixTranscode: ${JSON.stringify(u)}`);let c=await this._room.sendStartMixTranscode(u),{code:m}=c.data,{message:h}=c.data;if(m===0)this._log.info("[CDNStreaming] server success: start mix"),this._data=u;else throw m===-102083&&(h=`Please enable relayed-push in ${this._core.constants.CLOUD_CONSOLE_URL} and try later, refer to ${this._core.constants.DOC_URL}tutorial-26-advanced-publish-cdn-stream.html`),this._log.error(`[CDNStreaming] server failed: start mix errCode: ${m} errMsg: ${h}`),new Error(`[CDNStreaming] server failed: start mix errCode: ${m} errMsg: ${h}`)}async stopMixTranscode(){this._log.info("[CDNStreaming] stopMixTranscode");try{this.isStarted&&this.isMixing&&(await this.doStopMixTranscode(),this._config&&this.hasCustomCDN&&this._givenCDNManager&&await this._givenCDNManager.stopPublishGivenCDN())}catch(e){throw e}this.reset()}async doStopMixTranscode(){let e={mcuRequestTime:Date.now(),outputSessionId:this._data.outputSessionId,streamType:this._data.outputParam.streamType};this._log.info(`[CDNStreaming] doStopMixTranscode: ${JSON.stringify(e)}`);let i=await this._room.sendStopMixTranscode(e),{code:d,message:u}=i.data;if(d===0)this._log.info("[CDNStreaming] server success: stop mix"),this.reset();else throw this._log.error(`[CDNStreaming] server failed: stop mix errCode: ${d} errMsg: ${u}`),new Error(`[CDNStreaming] server failed: stop mix errCode: ${d} errMsg: ${u}`)}reset(){this._config=null,this._data=null,this.uninstallEvents()}installEvents(){this._core.room.on("joined",this.handleRoomJoined,this),this._core.room.on("left",this.handleRoomLeft,this)}uninstallEvents(){this._core.room.off("joined",this.handleRoomJoined,this),this._core.room.off("left",this.handleRoomLeft,this)}async handleRoomJoined(){this._log.info(`[CDNStreaming] handleJoined: ${JSON.stringify(this._config)}`),this.isStarted&&this._config&&await this.startMixTranscode(this._config)}async handleRoomLeft(){this._log.info(`[CDNStreaming] handleRoomLeft: ${JSON.stringify(this._config)}`),this._data=null}getOutputSessionId({config:e,userId:i,roomId:d}){return this._core.utils.isString(e.target.streamId)&&e.target.streamId.length>0?e.target.streamId:(0,te.default)(`${d}_${i}_main`)}getStringRoomId(e,i){return e?String(e):i}getInputParam(e){let{mix:i={}}=e,{audioMixUserList:d=[],videoLayoutList:u=[]}=i,c=u.map(m=>({userId:m.fixedVideoUser.userId,roomId:this.getStringRoomId(m.fixedVideoUser.roomId,m.fixedVideoUser.strRoomId)||this._core.room.roomId,width:m.width||0,height:m.height||0,locationX:m.locationX||0,locationY:m.locationY||0,zOrder:m.zOrder||1,streamType:m.fixedVideoStreamType==="sub"?1:0,inputType:F.IT_PURE_VIDEO,renderMode:m.fillMode||0}));return d.forEach(m=>{let h=c.findIndex(b=>b.userId===m.userId&&b.roomId===this.getStringRoomId(m.roomId,m.strRoomId));h!==-1?c[h].inputType=F.IT_AUDIO_VIDEO:c.push({userId:m.userId,roomId:m.roomId||m.strRoomId||this._core.room.roomId,inputType:F.IT_PURE_AUDIO})}),c}getOutputParam(e){let i=e.target.streamId||"",{encoding:d={},mix:u={}}=e;return{streamId:i,streamType:i.length>0?1:0,width:this._core.utils.isUndefined(d.videoWidth)?640:d.videoWidth,height:this._core.utils.isUndefined(d.videoHeight)?480:d.videoHeight,videoBps:d.videoBitrate||0,fps:d.videoFramerate||15,gop:d.videoGOP||2,audioSampleRate:d.audioSampleRate||48e3,audioBps:d.audioBitrate||64,audioChannels:d.audioChannels||1,backgroundColor:u.backgroundColor||0,backgroundImg:u.backgroundImage||"",extraInfo:"",videoCodec:2,audioCodec:0}}};var K=Q(W(),1);var v=class{constructor(e,i){S(this,"_room");S(this,"_core");S(this,"_log");S(this,"_paramsForTencentCDN");S(this,"_initParamsForTencentCDN",{isPublished:!1,isStarted:!1});this._core=e,this._room=e.room,this._log=i,this._paramsForTencentCDN=new Map([["publish-main-stream-to-cdn",this._initParamsForTencentCDN],["publish-sub-stream-to-cdn",this._initParamsForTencentCDN]])}installEvents(){this._core.innerEmitter.on("104",this.handlePublished,this),this._core.room.on("left",this.handleRoomLeft,this)}uninstallEvents(){this._core.innerEmitter.off("104",this.handlePublished,this),this._core.room.off("left",this.handleRoomLeft,this)}async handlePublished({track:e}){var u;if(e.room!==this._room||(this._log.info(`[CDNStreaming] handlePublished: mediaType ${e.mediaType}, roomID ${(u=e==null?void 0:e.room)==null?void 0:u.roomId}`),e.mediaType===1))return;let i=e.mediaType===4?"publish-main-stream-to-cdn":"publish-sub-stream-to-cdn",d=this._paramsForTencentCDN.get(i)||null;d!=null&&d.target&&d.isStarted&&await this.startPublishTencentCDN(d.target)}async handleRoomLeft(){this._log.info("[CDNStreaming] handleRoomLeft"),this.changeDataStatus("publish-main-stream-to-cdn",{isPublished:!1}),this.changeDataStatus("publish-sub-stream-to-cdn",{isPublished:!1})}isStreamPublished(e){return e==="publish-main-stream-to-cdn"&&!this._room.isMainStreamPublished?(this._log.info("[CDNStreaming] Main stream has not already published, will auto reStart after published."),!1):e==="publish-sub-stream-to-cdn"&&!this._room.isAuxStreamPublished?(this._log.info("[CDNStreaming] Sub has not already published, will auto reStart after published."),!1):!0}changeDataStatus(e,i){let d=this._paramsForTencentCDN.get(e),u=I(I({},d),i);this._paramsForTencentCDN.set(e,u)}async startPublishTencentCDN(e){if(this._log.info(`[CDNStreaming] startPublishTencentCDN ${JSON.stringify(e)}`),this.installEvents(),this.changeDataStatus(e.publishMode,{target:e,isStarted:!0}),!this.isStreamPublished(e.publishMode))return;let i=e.streamId||"",d=this.generatePublishCDNStreamId(i,e.publishMode),u=this.generatePublishCDNSessionId(e.publishMode),c=e.publishMode==="publish-sub-stream-to-cdn"?1:0,m={requestTime:Date.now(),sessionId:u,streamId:d,streamType:c};await this.doStartPublishTencentCDN(m,e.publishMode);let{appId:h,bizId:b,url:_}=e;if(h&&b&&_){let D=this._paramsForTencentCDN.get(e.publishMode)||this._initParamsForTencentCDN;D!=null&&D.givenCDNManager||(D.givenCDNManager=new R(this._core,this._log),this._paramsForTencentCDN.set(e.publishMode,D)),await D.givenCDNManager.startPublishGivenCDN({publishMode:e.publishMode,appId:h,bizId:b,url:_,streamId:d})}}async doStartPublishTencentCDN(e,i){this._log.info(`[CDNStreaming] doStartPublishTencentCDN: ${JSON.stringify(e)}`);let d=6,u=500,c=0;for(;;){let m=await this._room.sendStartPublishCDN(e,!0),{code:h}=m.data,{message:b}=m.data;if(h===0){this._log.info("[CDNStreaming] server success: start tencent cdn"),this.changeDataStatus(i,{isPublished:!0});break}else if(h===-10006&&c<d)this._log.warn(`[CDNStreaming] doStartPublishTencentCDN: retry...${c+1}/6, reason: ${b}`),c+=1,await new Promise(_=>setTimeout(_,u));else throw this.changeDataStatus(i,{isPublished:!1}),h===-102083&&(b=`Please enable relayed-push in ${this._core.constants.CLOUD_CONSOLE_URL} and try later, refer to ${this._core.constants.DOC_URL}tutorial-26-advanced-publish-cdn-stream.html`),this._log.error(`[CDNStreaming] server failed: start tencent cdn errCode: ${h} errMsg: ${b}`),new Error(`[CDNStreaming] server failed: start tencent cdn errCode: ${h} errMsg: ${b}`)}}async stopPublishTencentCDN(e){this._log.info(`[CDNStreaming] doStartPublishTencentCDN: ${JSON.stringify(e)}`);let i=this._paramsForTencentCDN.get(e)||this._initParamsForTencentCDN;if(i.isPublished){let{target:d}=i;d!=null&&d.bizId&&d.appId&&d.url&&(i!=null&&i.givenCDNManager)&&await(i==null?void 0:i.givenCDNManager.stopPublishGivenCDN()),await this.doStopPublishTencentCDN(e)}this._paramsForTencentCDN.set(e,this._initParamsForTencentCDN)}async doStopPublishTencentCDN(e){let i={requestTime:Date.now(),sessionId:(0,K.default)(`${this._room.roomId}_${this._room.userId}_${this.convertPublishModeToStreamType(e)}`)};this._log.info(`[CDNStreaming] doStopPublishTencentCDN: ${JSON.stringify(i)}`);let d=await this._room.sendStopPublishCDN(i,!0),{code:u}=d.data,{message:c}=d.data;if(u===0)this._log.info("[CDNStreaming] server success: stop tencent cdn"),this._paramsForTencentCDN.set(e,this._initParamsForTencentCDN),this.reset(e);else throw u===-102069&&(this._paramsForTencentCDN.set(e,this._initParamsForTencentCDN),c=`can not stop in auto relayed-push mode ${c}`),this._log.error(`[CDNStreaming] server failed: stop tencent cdn errCode: ${u} errMsg: ${c}`),new Error(`[CDNStreaming] server failed: stop tencent cdn errCode: ${u} errMsg: ${c}`)}reset(e){this.uninstallEvents(),this._paramsForTencentCDN.set(e,this._initParamsForTencentCDN)}generatePublishCDNStreamId(e,i){if(e===""){let d=`${this._room.roomId}_${this._room.userId}_${this.convertPublishModeToStreamType(i)}`;return/^[A-Za-z\d_-]*$/.test(d)||(d=(0,K.default)(d)),`${this._room.sdkAppId}_${d}`}return e}convertPublishModeToStreamType(e){return e==="publish-main-stream-to-cdn"?"main":"aux"}generatePublishCDNSessionId(e){return(0,K.default)(`${this._room.roomId}_${this._room.userId}_${this.convertPublishModeToStreamType(e)}`)}};var re=l=>typeof l=="string";var N;function _e(l,e,i,d){if(!/^[A-Za-z\d_-]*$/.test(l)){let{RtcError:c,ErrorCode:m,ErrorCodeDictionary:h}=N;throw new c({code:m.INVALID_PARAMETER,extraCode:h.INVALID_STREAM_ID,messageParams:{key:"streamId"}})}}function fe(l,e,i,d){let{RtcError:u,ErrorCode:c,ErrorCodeDictionary:m}=N;if(re(l))throw new u({code:c.INVALID_PARAMETER,extraCode:m.INVALID_ROOM_ID_INTEGER_STRING,fnName:i,messageParams:{key:"roomId"}});if(l===void 0)return;if(!(/^[1-9]\d*$/.test(String(l))&&l<4294967295))throw new u({code:c.INVALID_PARAMETER,extraCode:m.INVALID_ROOM_ID_INTEGER,fnName:i,messageParams:{key:"roomId"}})}function Ie(l,e,i,d){let{RtcError:u,ErrorCode:c,ErrorCodeDictionary:m}=N;if(!/^[A-Za-z\d\s!#$%&()+\-:;<=.>?@[\]^_{}|~,]{1,64}$/.test(l))throw new u({code:c.INVALID_PARAMETER,extraCode:m.INVALID_ROOM_ID_STRING,fnName:i,messageParams:{key:"strRoomId"}})}var P={type:"number",notLessThanZero:!0},ie={type:"object",required:!0,properties:{userId:{required:!0,type:"string"},roomId:{type:["string","number"],validate:fe},strRoomId:{type:"string",validate:Ie}}},oe={required:!0,properties:{publishMode:{required:!0,values:["publish-main-stream-to-cdn","publish-mix-stream-to-cdn","publish-sub-stream-to-cdn"]},streamId:{required:!1,type:"string",validate:_e},appId:{type:"number",allowEmpty:!1},bizId:{type:"number",allowEmpty:!1},url:{type:"string",allowEmpty:!1}}},ae={required:!1,type:"object",properties:{videoWidth:P,videoHeight:P,videoBitrate:Y(I({},P),{allowEmpty:!1}),videoFramerate:{type:"number",validate(l,e,i,d){if(l<=0||l>30){let{RtcError:u,ErrorCode:c}=N;throw new u({code:c.INVALID_PARAMETER,message:"Invalid parameter mixConfig -> videoFramerate, the value must be between (0, 30]."})}}},videoGOP:{type:"number",validate(l,e,i,d){if(l<1||l>8){let{RtcError:u,ErrorCode:c}=N;throw new u({code:c.INVALID_PARAMETER,message:"Invalid parameter mixConfig -> videoGOP, the value must be between [1, 8]."})}}},audioSampleRate:P,audioBitrate:{type:"number",validate(l,e,i,d){if(l<32||l>192){let{RtcError:u,ErrorCode:c}=N;throw new u({code:c.INVALID_PARAMETER,message:"Invalid parameter mixConfig -> audioBitrate, the value must be between [32, 192]."})}}},audioChannels:{type:"number",values:[1,2]}}},se={required:!1,type:"object",properties:{backgroundColor:{type:"number"},backgroundImage:{type:"string"},audioMixUserList:{type:"array",arrayItem:I({},ie)},videoLayoutList:{type:"array",required:!0,arrayItem:{type:"object",properties:{fixedVideoUser:I({},ie),fixedVideoStreamType:{type:"string",required:!0,values:["main","sub"]},fillMode:{type:"number",values:[0,1,2,4]},zOrder:{type:"number",required:!0,validate(l,e,i,d){if(l<1||l>15){let{RtcError:u,ErrorCode:c}=N;throw new u({code:c.INVALID_PARAMETER,message:"Invalid parameter mix -> videoLayoutList -> zOrder, the value must be between [1, 15]."})}}},width:P,height:P,locationX:P,locationY:P}}}}};function ne(l){return N=l.errorModule,{name:"CDNStreamingOptions",type:"object",required:!0,allowEmpty:!1,properties:{target:I({},oe),encoding:I({},ae),mix:I({},se)},validate(e,i,d,u){var b,_;let{publishMode:c}=e.target,{encoding:m,mix:h}=e;if(c==="publish-mix-stream-to-cdn"){let{RtcError:D,ErrorCode:E,ErrorCodeDictionary:G}=l.errorModule;if(!m)throw new D({code:E.INVALID_PARAMETER,extraCode:G.INVALID_PARAMETER_REQUIRED,fnName:d,messageParams:{key:"encoding"}});if(!h)throw new D({code:E.INVALID_PARAMETER,extraCode:G.INVALID_PARAMETER_REQUIRED,fnName:d,messageParams:{key:"mix"}});if(h&&h.videoLayoutList){let y=0,O=0,U=[];if(h.videoLayoutList.forEach((A,V)=>{U.push(A.fixedVideoUser.userId),A.width+A.locationX>y&&(y=A.width+A.locationX),A.height+A.locationY>O&&(O=A.height+A.locationY)}),U.indexOf(l.room.userId)<0)throw new D({code:E.INVALID_PARAMETER,message:"Invalid parameter mix -> videoLayoutList, the value must be include self."});let q=(b=m==null?void 0:m.videoWidth)!=null?b:640,B=(_=m==null?void 0:m.videoHeight)!=null?_:480;if(q<y||B<O)throw new D({code:E.INVALID_PARAMETER,message:"Invalid parameter encoding, the width and height of the mixed video must encompass all the mixed-in video streams."})}}}}}function de(l){return N=l.errorModule,{name:"CDNStreamingOptions",type:"object",required:!0,allowEmpty:!1,properties:{target:I({},oe),encoding:I({},ae),mix:I({},se)}}}function ue(l){return N=l.errorModule,{name:"CDNStreamingOptions",type:"object",required:!0,allowEmpty:!1,properties:{target:{required:!0,properties:{publishMode:{required:!0,values:["publish-main-stream-to-cdn","publish-mix-stream-to-cdn","publish-sub-stream-to-cdn"]}}}}}}var w=0,k=class k{constructor(e){this.core=e;S(this,"_mixTranscodeManager");S(this,"_publishCDNManager");S(this,"_core");S(this,"_modeOptions");S(this,"seq");S(this,"_log");w=w+1,this.seq=w,this._log=e.log.createChild({id:`${this.getAlias()}${w}`}),this._log.info(`[CDNStreaming] created id=${this.getAlias()}${w}`),this._core=e,this._modeOptions=new Map,this._mixTranscodeManager=new x(e,this._log),this._publishCDNManager=new v(e,this._log)}getName(){return k.Name}getAlias(){return"cdn"}getValidateRule(e){switch(e){case"start":return ne(this._core);case"update":return de(this._core);case"stop":return ue(this._core)}}getGroup(e){return e.target.publishMode}async start(e){return this._modeOptions.set(e.target.publishMode,e),await this.doStart(e)}async update(e){let i=this._modeOptions.get(e.target.publishMode);return this._core.utils.deepMerge(i,e),await this.doStart(i)}async stop(e){switch(e.target.publishMode){case"publish-mix-stream-to-cdn":{await this._mixTranscodeManager.stopMixTranscode();break}case"publish-main-stream-to-cdn":case"publish-sub-stream-to-cdn":{await this._publishCDNManager.stopPublishTencentCDN(e.target.publishMode);break}}this._modeOptions.delete(e.target.publishMode)}async doStart(e){switch(this._log.info(`[CDNStreaming] doStart: ${JSON.stringify(e)}`),e.target.publishMode){case"publish-mix-stream-to-cdn":{await this._mixTranscodeManager.startMixTranscode(e);break}case"publish-main-stream-to-cdn":case"publish-sub-stream-to-cdn":{await this._publishCDNManager.startPublishTencentCDN(e.target);break}}}};S(k,"TYPE",{PublishMode:{PublishMainStreamToCDN:"publish-main-stream-to-cdn",PublishSubStreamToCDN:"publish-sub-stream-to-cdn",PublishMixStreamToCDN:"publish-mix-stream-to-cdn"}}),S(k,"Name","CDNStreaming");var J=k;var Ae=J;return Te(Ne);})().default;
1
+ "use strict";var CDNStreaming=(()=>{var me=Object.create;var L=Object.defineProperty,le=Object.defineProperties,ce=Object.getOwnPropertyDescriptor,pe=Object.getOwnPropertyDescriptors,he=Object.getOwnPropertyNames,z=Object.getOwnPropertySymbols,ge=Object.getPrototypeOf,j=Object.prototype.hasOwnProperty,Se=Object.prototype.propertyIsEnumerable;var X=(l,e,i)=>e in l?L(l,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):l[e]=i,I=(l,e)=>{for(var i in e||(e={}))j.call(e,i)&&X(l,i,e[i]);if(z)for(var i of z(e))Se.call(e,i)&&X(l,i,e[i]);return l},Y=(l,e)=>le(l,pe(e));var be=(l,e)=>()=>(e||l((e={exports:{}}).exports,e),e.exports),Ce=(l,e)=>{for(var i in e)L(l,i,{get:e[i],enumerable:!0})},Z=(l,e,i,d)=>{if(e&&typeof e=="object"||typeof e=="function")for(let u of he(e))!j.call(l,u)&&u!==i&&L(l,u,{get:()=>e[u],enumerable:!(d=ce(e,u))||d.enumerable});return l};var Q=(l,e,i)=>(i=l!=null?me(ge(l)):{},Z(e||!l||!l.__esModule?L(i,"default",{value:l,enumerable:!0}):i,l)),De=l=>Z(L({},"__esModule",{value:!0}),l);var S=(l,e,i)=>(X(l,typeof e!="symbol"?e+"":e,i),i);var W=be((ee,H)=>{(function(l){"use strict";function e(t,p){var r=(t&65535)+(p&65535),g=(t>>16)+(p>>16)+(r>>16);return g<<16|r&65535}function i(t,p){return t<<p|t>>>32-p}function d(t,p,r,g,C,D){return e(i(e(e(p,t),e(g,D)),C),r)}function u(t,p,r,g,C,D,f){return d(p&r|~p&g,t,p,C,D,f)}function c(t,p,r,g,C,D,f){return d(p&g|r&~g,t,p,C,D,f)}function m(t,p,r,g,C,D,f){return d(p^r^g,t,p,C,D,f)}function h(t,p,r,g,C,D,f){return d(r^(p|~g),t,p,C,D,f)}function b(t,p){t[p>>5]|=128<<p%32,t[(p+64>>>9<<4)+14]=p;var r,g,C,D,f,a=1732584193,o=-271733879,s=-1732584194,n=271733878;for(r=0;r<t.length;r+=16)g=a,C=o,D=s,f=n,a=u(a,o,s,n,t[r],7,-680876936),n=u(n,a,o,s,t[r+1],12,-389564586),s=u(s,n,a,o,t[r+2],17,606105819),o=u(o,s,n,a,t[r+3],22,-1044525330),a=u(a,o,s,n,t[r+4],7,-176418897),n=u(n,a,o,s,t[r+5],12,1200080426),s=u(s,n,a,o,t[r+6],17,-1473231341),o=u(o,s,n,a,t[r+7],22,-45705983),a=u(a,o,s,n,t[r+8],7,1770035416),n=u(n,a,o,s,t[r+9],12,-1958414417),s=u(s,n,a,o,t[r+10],17,-42063),o=u(o,s,n,a,t[r+11],22,-1990404162),a=u(a,o,s,n,t[r+12],7,1804603682),n=u(n,a,o,s,t[r+13],12,-40341101),s=u(s,n,a,o,t[r+14],17,-1502002290),o=u(o,s,n,a,t[r+15],22,1236535329),a=c(a,o,s,n,t[r+1],5,-165796510),n=c(n,a,o,s,t[r+6],9,-1069501632),s=c(s,n,a,o,t[r+11],14,643717713),o=c(o,s,n,a,t[r],20,-373897302),a=c(a,o,s,n,t[r+5],5,-701558691),n=c(n,a,o,s,t[r+10],9,38016083),s=c(s,n,a,o,t[r+15],14,-660478335),o=c(o,s,n,a,t[r+4],20,-405537848),a=c(a,o,s,n,t[r+9],5,568446438),n=c(n,a,o,s,t[r+14],9,-1019803690),s=c(s,n,a,o,t[r+3],14,-187363961),o=c(o,s,n,a,t[r+8],20,1163531501),a=c(a,o,s,n,t[r+13],5,-1444681467),n=c(n,a,o,s,t[r+2],9,-51403784),s=c(s,n,a,o,t[r+7],14,1735328473),o=c(o,s,n,a,t[r+12],20,-1926607734),a=m(a,o,s,n,t[r+5],4,-378558),n=m(n,a,o,s,t[r+8],11,-2022574463),s=m(s,n,a,o,t[r+11],16,1839030562),o=m(o,s,n,a,t[r+14],23,-35309556),a=m(a,o,s,n,t[r+1],4,-1530992060),n=m(n,a,o,s,t[r+4],11,1272893353),s=m(s,n,a,o,t[r+7],16,-155497632),o=m(o,s,n,a,t[r+10],23,-1094730640),a=m(a,o,s,n,t[r+13],4,681279174),n=m(n,a,o,s,t[r],11,-358537222),s=m(s,n,a,o,t[r+3],16,-722521979),o=m(o,s,n,a,t[r+6],23,76029189),a=m(a,o,s,n,t[r+9],4,-640364487),n=m(n,a,o,s,t[r+12],11,-421815835),s=m(s,n,a,o,t[r+15],16,530742520),o=m(o,s,n,a,t[r+2],23,-995338651),a=h(a,o,s,n,t[r],6,-198630844),n=h(n,a,o,s,t[r+7],10,1126891415),s=h(s,n,a,o,t[r+14],15,-1416354905),o=h(o,s,n,a,t[r+5],21,-57434055),a=h(a,o,s,n,t[r+12],6,1700485571),n=h(n,a,o,s,t[r+3],10,-1894986606),s=h(s,n,a,o,t[r+10],15,-1051523),o=h(o,s,n,a,t[r+1],21,-2054922799),a=h(a,o,s,n,t[r+8],6,1873313359),n=h(n,a,o,s,t[r+15],10,-30611744),s=h(s,n,a,o,t[r+6],15,-1560198380),o=h(o,s,n,a,t[r+13],21,1309151649),a=h(a,o,s,n,t[r+4],6,-145523070),n=h(n,a,o,s,t[r+11],10,-1120210379),s=h(s,n,a,o,t[r+2],15,718787259),o=h(o,s,n,a,t[r+9],21,-343485551),a=e(a,g),o=e(o,C),s=e(s,D),n=e(n,f);return[a,o,s,n]}function _(t){var p,r="",g=t.length*32;for(p=0;p<g;p+=8)r+=String.fromCharCode(t[p>>5]>>>p%32&255);return r}function T(t){var p,r=[];for(r[(t.length>>2)-1]=void 0,p=0;p<r.length;p+=1)r[p]=0;var g=t.length*8;for(p=0;p<g;p+=8)r[p>>5]|=(t.charCodeAt(p/8)&255)<<p%32;return r}function y(t){return _(b(T(t),t.length*8))}function G(t,p){var r,g=T(t),C=[],D=[],f;for(C[15]=D[15]=void 0,g.length>16&&(g=b(g,t.length*8)),r=0;r<16;r+=1)C[r]=g[r]^909522486,D[r]=g[r]^1549556828;return f=b(C.concat(T(p)),512+p.length*8),_(b(D.concat(f),512+128))}function U(t){var p="0123456789abcdef",r="",g,C;for(C=0;C<t.length;C+=1)g=t.charCodeAt(C),r+=p.charAt(g>>>4&15)+p.charAt(g&15);return r}function N(t){return unescape(encodeURIComponent(t))}function M(t){return y(N(t))}function q(t){return U(M(t))}function B(t,p){return G(N(t),N(p))}function A(t,p){return U(B(t,p))}function V(t,p,r){return p?r?B(p,t):A(p,t):r?M(t):q(t)}typeof define=="function"&&define.amd?define(function(){return V}):typeof H=="object"&&H.exports?H.exports=V:l.md5=V})(ee)});var Pe={};Ce(Pe,{CDNStreaming:()=>J,PublishMode:()=>R,TRTCStreamType:()=>$,default:()=>Ae});var te=Q(W(),1);var R=(d=>(d.PublishMainStreamToCDN="publish-main-stream-to-cdn",d.PublishSubStreamToCDN="publish-sub-stream-to-cdn",d.PublishMixStreamToCDN="publish-mix-stream-to-cdn",d))(R||{}),$=(i=>(i.Main="main",i.Sub="sub",i))($||{});var F={IT_AUDIO_VIDEO:0,IT_PICTURE:2,IT_CANVAS:3,IT_PURE_AUDIO:4,IT_PURE_VIDEO:5};var E=class{constructor(e,i){S(this,"_core");S(this,"_room");S(this,"_log");S(this,"_params");S(this,"_publishGivenCDNData",null);this._core=e,this._room=e.room,this._log=i}get isPublishingGivenCDN(){return!!this._params}async startPublishGivenCDN(e){if(this._log.info(`[CDNStreaming] startPublishGivenCDN() current: ${JSON.stringify(this._params)}, params: ${JSON.stringify(e)}`),this.isPublishingGivenCDN){let{appId:i,bizId:d,url:u}=this._params||{};if(i===e.appId&&d===e.bizId&&u===e.url)return;await this.stopPublishGivenCDN()}this._params=e,this._publishGivenCDNData={pushRequestTime:Date.now(),pushAppId:e.appId,pushBizId:e.bizId,pushCdnUrl:e.url,pushStreamType:this.convertStreamType(e==null?void 0:e.publishMode),pushStreamId:e.streamId};try{let i=await this._room.sendStartPublishCDN(this._publishGivenCDNData,!1),{code:d,message:u}=i.data;if(d===0)this._log.info("[CDNStreaming] server success: start given cdn.");else throw this.resetGivenCDN(),this._log.error(`[CDNStreaming] server failed: start given cdn errCode: ${d} errMsg: ${u} options: ${JSON.stringify(e)}`),new Error(`[CDNStreaming] server failed: start given cdn errCode: ${d} errMsg: ${u}`)}catch(i){throw this.resetGivenCDN(),i}}async stopPublishGivenCDN(){if(this._log.info("[CDNStreaming] stopPublishGivenCDN"),!this.isPublishingGivenCDN||!this._publishGivenCDNData){this.resetGivenCDN();return}let{pushAppId:e,pushBizId:i,pushCdnUrl:d,pushStreamType:u,pushStreamId:c}=this._publishGivenCDNData,m={pushRequestTime:Date.now(),pushAppId:e,pushBizId:i,pushCdnUrl:d,pushStreamType:u,pushStreamId:c},h=await this._room.sendStopPublishCDN(m,!1),{code:b,message:_}=h.data;if(b===0)this._log.info("[CDNStreaming] server success: stop given cdn."),this.resetGivenCDN();else throw this._log.error(`[CDNStreaming] server failed: stop given cdn errCode: ${b} errMsg: ${_} data: ${JSON.stringify(m)}`),new Error(`[CDNStreaming] server failed: stop given cdn errCode: ${b} errMsg: ${_}`)}resetGivenCDN(){this._publishGivenCDNData=null,this._params=void 0}convertStreamType(e){return e==="publish-sub-stream-to-cdn"?"aux":"main"}};var x=class{constructor(e,i){S(this,"_core");S(this,"_room");S(this,"_log");S(this,"_config",null);S(this,"_data",null);S(this,"_givenCDNManager");this._core=e,this._room=e.room,this._log=i,this.reset()}get isMixing(){return!!this._data}get isStarted(){return!!this._config}get hasCustomCDN(){var e,i,d;return((e=this._config)==null?void 0:e.target.appId)&&((i=this._config)==null?void 0:i.target.bizId)&&((d=this._config)==null?void 0:d.target.url)}async startMixTranscode(e){if(this._log.info(`startMixTranscode: ${JSON.stringify(e)}`),this._config=e,this.installEvents(),!!this._core.room.isJoined)try{let i=this.getInputParam(e),d=this.getOutputParam(e),u=this.getOutputSessionId({config:e,roomId:this._room.roomId,userId:this._room.userId});this.isMixing&&this._data&&u!==this._data.outputSessionId&&(this._log.info("[CDNStreaming] streamId changed, auto stop mixing before start"),await this.doStopMixTranscode()),await this.doStartMixTranscode({outputSessionId:u,inputParam:i,outputParam:d});let{appId:c,bizId:m,url:h,streamId:b=""}=e.target;c&&m&&h&&(this._givenCDNManager||(this._givenCDNManager=new E(this._core,this._log)),await this._givenCDNManager.startPublishGivenCDN({publishMode:e.target.publishMode,appId:c,bizId:m,url:h,streamId:b}))}catch(i){throw this.reset(),i}}async doStartMixTranscode({outputSessionId:e,inputParam:i,outputParam:d}){let u={roomId:String(this._room.roomId),mcuRequestTime:Date.now(),outputSessionId:e,inputParam:i,outputParam:d};this._log.info(`[CDNStreaming] doStartMixTranscode: ${JSON.stringify(u)}`);let c=await this._room.sendStartMixTranscode(u),{code:m}=c.data,{message:h}=c.data;if(m===0)this._log.info("[CDNStreaming] server success: start mix"),this._data=u;else throw m===-102083&&(h=`Please enable relayed-push in ${this._core.constants.CLOUD_CONSOLE_URL} and try later, refer to ${this._core.constants.DOC_URL}tutorial-26-advanced-publish-cdn-stream.html`),this._log.error(`[CDNStreaming] server failed: start mix errCode: ${m} errMsg: ${h}`),new Error(`[CDNStreaming] server failed: start mix errCode: ${m} errMsg: ${h}`)}async stopMixTranscode(){this._log.info("[CDNStreaming] stopMixTranscode");try{this.isStarted&&this.isMixing&&(await this.doStopMixTranscode(),this._config&&this.hasCustomCDN&&this._givenCDNManager&&await this._givenCDNManager.stopPublishGivenCDN())}catch(e){throw e}this.reset()}async doStopMixTranscode(){let e={mcuRequestTime:Date.now(),outputSessionId:this._data.outputSessionId,streamType:this._data.outputParam.streamType};this._log.info(`[CDNStreaming] doStopMixTranscode: ${JSON.stringify(e)}`);let i=await this._room.sendStopMixTranscode(e),{code:d,message:u}=i.data;if(d===0)this._log.info("[CDNStreaming] server success: stop mix"),this.reset();else throw this._log.error(`[CDNStreaming] server failed: stop mix errCode: ${d} errMsg: ${u}`),new Error(`[CDNStreaming] server failed: stop mix errCode: ${d} errMsg: ${u}`)}reset(){this._config=null,this._data=null,this.uninstallEvents()}installEvents(){this._core.room.on("joined",this.handleRoomJoined,this),this._core.room.on("left",this.handleRoomLeft,this)}uninstallEvents(){this._core.room.off("joined",this.handleRoomJoined,this),this._core.room.off("left",this.handleRoomLeft,this)}async handleRoomJoined(){this._log.info(`[CDNStreaming] handleJoined: ${JSON.stringify(this._config)}`),this.isStarted&&this._config&&await this.startMixTranscode(this._config)}async handleRoomLeft(){this._log.info(`[CDNStreaming] handleRoomLeft: ${JSON.stringify(this._config)}`),this._data=null}getOutputSessionId({config:e,userId:i,roomId:d}){return this._core.utils.isString(e.target.streamId)&&e.target.streamId.length>0?e.target.streamId:(0,te.default)(`${d}_${i}_main`)}getStringRoomId(e,i){return e?String(e):i}getInputParam(e){let{mix:i={}}=e,{audioMixUserList:d=[],videoLayoutList:u=[]}=i,c=u.map(m=>({userId:m.fixedVideoUser.userId,roomId:this.getStringRoomId(m.fixedVideoUser.roomId,m.fixedVideoUser.strRoomId)||this._core.room.roomId,width:m.width||0,height:m.height||0,locationX:m.locationX||0,locationY:m.locationY||0,zOrder:m.zOrder||1,streamType:m.fixedVideoStreamType==="sub"?1:0,inputType:F.IT_PURE_VIDEO,renderMode:m.fillMode||0}));return d.forEach(m=>{let h=c.findIndex(b=>b.userId===m.userId&&b.roomId===this.getStringRoomId(m.roomId,m.strRoomId));h!==-1?c[h].inputType=F.IT_AUDIO_VIDEO:c.push({userId:m.userId,roomId:m.roomId||m.strRoomId||this._core.room.roomId,inputType:F.IT_PURE_AUDIO})}),c}getOutputParam(e){let i=e.target.streamId||"",{encoding:d={},mix:u={}}=e;return{streamId:i,streamType:i.length>0?1:0,width:this._core.utils.isUndefined(d.videoWidth)?640:d.videoWidth,height:this._core.utils.isUndefined(d.videoHeight)?480:d.videoHeight,videoBps:d.videoBitrate||0,fps:d.videoFramerate||15,gop:d.videoGOP||2,audioSampleRate:d.audioSampleRate||48e3,audioBps:d.audioBitrate||64,audioChannels:d.audioChannels||1,backgroundColor:u.backgroundColor||0,backgroundImg:u.backgroundImage||"",extraInfo:"",videoCodec:2,audioCodec:0}}};var K=Q(W(),1);var v=class{constructor(e,i){S(this,"_room");S(this,"_core");S(this,"_log");S(this,"_paramsForTencentCDN");S(this,"_initParamsForTencentCDN",{isPublished:!1,isStarted:!1});this._core=e,this._room=e.room,this._log=i,this._paramsForTencentCDN=new Map([["publish-main-stream-to-cdn",this._initParamsForTencentCDN],["publish-sub-stream-to-cdn",this._initParamsForTencentCDN]])}installEvents(){this._core.innerEmitter.on("104",this.handlePublished,this),this._core.room.on("left",this.handleRoomLeft,this)}uninstallEvents(){this._core.innerEmitter.off("104",this.handlePublished,this),this._core.room.off("left",this.handleRoomLeft,this)}async handlePublished({track:e}){var u;if(e.room!==this._room||(this._log.info(`[CDNStreaming] handlePublished: mediaType ${e.mediaType}, roomID ${(u=e==null?void 0:e.room)==null?void 0:u.roomId}`),e.mediaType===1))return;let i=e.mediaType===4?"publish-main-stream-to-cdn":"publish-sub-stream-to-cdn",d=this._paramsForTencentCDN.get(i)||null;d!=null&&d.target&&d.isStarted&&await this.startPublishTencentCDN(d.target)}async handleRoomLeft(){this._log.info("[CDNStreaming] handleRoomLeft"),this.changeDataStatus("publish-main-stream-to-cdn",{isPublished:!1}),this.changeDataStatus("publish-sub-stream-to-cdn",{isPublished:!1})}isStreamPublished(e){return e==="publish-main-stream-to-cdn"&&!this._room.isMainStreamPublished?(this._log.info("[CDNStreaming] Main stream has not already published, will auto reStart after published."),!1):e==="publish-sub-stream-to-cdn"&&!this._room.isAuxStreamPublished?(this._log.info("[CDNStreaming] Sub has not already published, will auto reStart after published."),!1):!0}changeDataStatus(e,i){let d=this._paramsForTencentCDN.get(e),u=I(I({},d),i);this._paramsForTencentCDN.set(e,u)}async startPublishTencentCDN(e){if(this._log.info(`[CDNStreaming] startPublishTencentCDN ${JSON.stringify(e)}`),this.installEvents(),this.changeDataStatus(e.publishMode,{target:e,isStarted:!0}),!this.isStreamPublished(e.publishMode))return;let i=e.streamId||"",d=this.generatePublishCDNStreamId(i,e.publishMode),u=this.generatePublishCDNSessionId(e.publishMode),c=e.publishMode==="publish-sub-stream-to-cdn"?1:0,m={requestTime:Date.now(),sessionId:u,streamId:d,streamType:c};await this.doStartPublishTencentCDN(m,e.publishMode);let{appId:h,bizId:b,url:_}=e;if(h&&b&&_){let T=this._paramsForTencentCDN.get(e.publishMode)||this._initParamsForTencentCDN;T!=null&&T.givenCDNManager||(T.givenCDNManager=new E(this._core,this._log),this._paramsForTencentCDN.set(e.publishMode,T)),await T.givenCDNManager.startPublishGivenCDN({publishMode:e.publishMode,appId:h,bizId:b,url:_,streamId:d})}}async doStartPublishTencentCDN(e,i){this._log.info(`[CDNStreaming] doStartPublishTencentCDN: ${JSON.stringify(e)}`);let d=6,u=500,c=0;for(;;){let m=await this._room.sendStartPublishCDN(e,!0),{code:h}=m.data,{message:b}=m.data;if(h===0){this._log.info("[CDNStreaming] server success: start tencent cdn"),this.changeDataStatus(i,{isPublished:!0});break}else if(h===-10006&&c<d)this._log.warn(`[CDNStreaming] doStartPublishTencentCDN: retry...${c+1}/6, reason: ${b}`),c+=1,await new Promise(_=>setTimeout(_,u));else throw this.changeDataStatus(i,{isPublished:!1}),h===-102083&&(b=`Please enable relayed-push in ${this._core.constants.CLOUD_CONSOLE_URL} and try later, refer to ${this._core.constants.DOC_URL}tutorial-26-advanced-publish-cdn-stream.html`),this._log.error(`[CDNStreaming] server failed: start tencent cdn errCode: ${h} errMsg: ${b}`),new Error(`[CDNStreaming] server failed: start tencent cdn errCode: ${h} errMsg: ${b}`)}}async stopPublishTencentCDN(e){this._log.info(`[CDNStreaming] doStartPublishTencentCDN: ${JSON.stringify(e)}`);let i=this._paramsForTencentCDN.get(e)||this._initParamsForTencentCDN;if(i.isPublished){let{target:d}=i;d!=null&&d.bizId&&d.appId&&d.url&&(i!=null&&i.givenCDNManager)&&await(i==null?void 0:i.givenCDNManager.stopPublishGivenCDN()),await this.doStopPublishTencentCDN(e)}this._paramsForTencentCDN.set(e,this._initParamsForTencentCDN)}async doStopPublishTencentCDN(e){let i={requestTime:Date.now(),sessionId:(0,K.default)(`${this._room.roomId}_${this._room.userId}_${this.convertPublishModeToStreamType(e)}`)};this._log.info(`[CDNStreaming] doStopPublishTencentCDN: ${JSON.stringify(i)}`);let d=await this._room.sendStopPublishCDN(i,!0),{code:u}=d.data,{message:c}=d.data;if(u===0)this._log.info("[CDNStreaming] server success: stop tencent cdn"),this._paramsForTencentCDN.set(e,this._initParamsForTencentCDN),this.reset(e);else throw u===-102069&&(this._paramsForTencentCDN.set(e,this._initParamsForTencentCDN),c=`can not stop in auto relayed-push mode ${c}`),this._log.error(`[CDNStreaming] server failed: stop tencent cdn errCode: ${u} errMsg: ${c}`),new Error(`[CDNStreaming] server failed: stop tencent cdn errCode: ${u} errMsg: ${c}`)}reset(e){this.uninstallEvents(),this._paramsForTencentCDN.set(e,this._initParamsForTencentCDN)}generatePublishCDNStreamId(e,i){if(e===""){let d=`${this._room.roomId}_${this._room.userId}_${this.convertPublishModeToStreamType(i)}`;return/^[A-Za-z\d_-]*$/.test(d)||(d=(0,K.default)(d)),`${this._room.sdkAppId}_${d}`}return e}convertPublishModeToStreamType(e){return e==="publish-main-stream-to-cdn"?"main":"aux"}generatePublishCDNSessionId(e){return(0,K.default)(`${this._room.roomId}_${this._room.userId}_${this.convertPublishModeToStreamType(e)}`)}};var re=l=>typeof l=="string";var P;function _e(l,e,i,d){if(!/^[A-Za-z\d_-]*$/.test(l)){let{RtcError:c,ErrorCode:m,ErrorCodeDictionary:h}=P;throw new c({code:m.INVALID_PARAMETER,extraCode:h.INVALID_STREAM_ID,messageParams:{key:"streamId"}})}}function fe(l,e,i,d){let{RtcError:u,ErrorCode:c,ErrorCodeDictionary:m}=P;if(re(l))throw new u({code:c.INVALID_PARAMETER,extraCode:m.INVALID_ROOM_ID_INTEGER_STRING,fnName:i,messageParams:{key:"roomId"}});if(l===void 0)return;if(!(/^[1-9]\d*$/.test(String(l))&&l<4294967295))throw new u({code:c.INVALID_PARAMETER,extraCode:m.INVALID_ROOM_ID_INTEGER,fnName:i,messageParams:{key:"roomId"}})}function Ie(l,e,i,d){let{RtcError:u,ErrorCode:c,ErrorCodeDictionary:m}=P;if(!/^[A-Za-z\d\s!#$%&()+\-:;<=.>?@[\]^_{}|~,]{1,64}$/.test(l))throw new u({code:c.INVALID_PARAMETER,extraCode:m.INVALID_ROOM_ID_STRING,fnName:i,messageParams:{key:"strRoomId"}})}var O={type:"number",notLessThanZero:!0},ie={type:"object",required:!0,properties:{userId:{required:!0,type:"string"},roomId:{type:["string","number"],validate:fe},strRoomId:{type:"string",validate:Ie}}},ae={required:!0,properties:{publishMode:{required:!0,values:["publish-main-stream-to-cdn","publish-mix-stream-to-cdn","publish-sub-stream-to-cdn"]},streamId:{required:!1,type:"string",validate:_e},appId:{type:"number",allowEmpty:!1},bizId:{type:"number",allowEmpty:!1},url:{type:"string",allowEmpty:!1}}},oe={required:!1,type:"object",properties:{videoWidth:O,videoHeight:O,videoBitrate:Y(I({},O),{allowEmpty:!1}),videoFramerate:{type:"number",validate(l,e,i,d){if(l<=0||l>30){let{RtcError:u,ErrorCode:c}=P;throw new u({code:c.INVALID_PARAMETER,message:"Invalid parameter mixConfig -> videoFramerate, the value must be between (0, 30]."})}}},videoGOP:{type:"number",validate(l,e,i,d){if(l<1||l>8){let{RtcError:u,ErrorCode:c}=P;throw new u({code:c.INVALID_PARAMETER,message:"Invalid parameter mixConfig -> videoGOP, the value must be between [1, 8]."})}}},audioSampleRate:O,audioBitrate:{type:"number",validate(l,e,i,d){if(l<32||l>192){let{RtcError:u,ErrorCode:c}=P;throw new u({code:c.INVALID_PARAMETER,message:"Invalid parameter mixConfig -> audioBitrate, the value must be between [32, 192]."})}}},audioChannels:{type:"number",values:[1,2]}}},se={required:!1,type:"object",properties:{backgroundColor:{type:"number"},backgroundImage:{type:"string"},audioMixUserList:{type:"array",arrayItem:I({},ie)},videoLayoutList:{type:"array",required:!0,arrayItem:{type:"object",properties:{fixedVideoUser:I({},ie),fixedVideoStreamType:{type:"string",required:!0,values:["main","sub"]},fillMode:{type:"number",values:[0,1,2,4]},zOrder:{type:"number",required:!0,validate(l,e,i,d){if(l<1||l>15){let{RtcError:u,ErrorCode:c}=P;throw new u({code:c.INVALID_PARAMETER,message:"Invalid parameter mix -> videoLayoutList -> zOrder, the value must be between [1, 15]."})}}},width:O,height:O,locationX:O,locationY:O}}}}};function ne(l){return P=l.errorModule,{name:"CDNStreamingOptions",type:"object",required:!0,allowEmpty:!1,properties:{target:I({},ae),encoding:I({},oe),mix:I({},se)},validate(e,i,d,u){var b,_;let{publishMode:c}=e.target,{encoding:m,mix:h}=e;if(c==="publish-mix-stream-to-cdn"){let{RtcError:T,ErrorCode:y,ErrorCodeDictionary:G}=l.errorModule;if(!m)throw new T({code:y.INVALID_PARAMETER,extraCode:G.INVALID_PARAMETER_REQUIRED,fnName:d,messageParams:{key:"encoding"}});if(!h)throw new T({code:y.INVALID_PARAMETER,extraCode:G.INVALID_PARAMETER_REQUIRED,fnName:d,messageParams:{key:"mix"}});if(h&&h.videoLayoutList){let U=0,N=0,M=[];if(h.videoLayoutList.forEach((A,V)=>{M.push(A.fixedVideoUser.userId),A.width+A.locationX>U&&(U=A.width+A.locationX),A.height+A.locationY>N&&(N=A.height+A.locationY)}),M.indexOf(l.room.userId)<0)throw new T({code:y.INVALID_PARAMETER,message:"Invalid parameter mix -> videoLayoutList, the value must be include self."});let q=(b=m==null?void 0:m.videoWidth)!=null?b:640,B=(_=m==null?void 0:m.videoHeight)!=null?_:480;if(q<U||B<N)throw new T({code:y.INVALID_PARAMETER,message:"Invalid parameter encoding, the width and height of the mixed video must encompass all the mixed-in video streams."})}}}}}function de(l){return P=l.errorModule,{name:"CDNStreamingOptions",type:"object",required:!0,allowEmpty:!1,properties:{target:I({},ae),encoding:I({},oe),mix:I({},se)}}}function ue(l){return P=l.errorModule,{name:"CDNStreamingOptions",type:"object",required:!0,allowEmpty:!1,properties:{target:{required:!0,properties:{publishMode:{required:!0,values:["publish-main-stream-to-cdn","publish-mix-stream-to-cdn","publish-sub-stream-to-cdn"]}}}}}}var w=0,k=class k{constructor(e){this.core=e;S(this,"_mixTranscodeManager");S(this,"_publishCDNManager");S(this,"_core");S(this,"_modeOptions");S(this,"seq");S(this,"_log");w=w+1,this.seq=w,this._log=e.log.createChild({id:`${this.getAlias()}${w}`}),this._log.info(`[CDNStreaming] created id=${this.getAlias()}${w}`),this._core=e,this._modeOptions=new Map,this._mixTranscodeManager=new x(e,this._log),this._publishCDNManager=new v(e,this._log)}getName(){return k.Name}getAlias(){return"cdn"}getValidateRule(e){switch(e){case"start":return ne(this._core);case"update":return de(this._core);case"stop":return ue(this._core)}}getGroup(e){return e.target.publishMode}async start(e){return this._modeOptions.set(e.target.publishMode,e),await this.doStart(e)}async update(e){let i=this._modeOptions.get(e.target.publishMode);return this._core.utils.deepMerge(i,e),await this.doStart(i)}async stop(e){switch(e.target.publishMode){case"publish-mix-stream-to-cdn":{await this._mixTranscodeManager.stopMixTranscode();break}case"publish-main-stream-to-cdn":case"publish-sub-stream-to-cdn":{await this._publishCDNManager.stopPublishTencentCDN(e.target.publishMode);break}}this._modeOptions.delete(e.target.publishMode)}async doStart(e){switch(this._log.info(`[CDNStreaming] doStart: ${JSON.stringify(e)}`),e.target.publishMode){case"publish-mix-stream-to-cdn":{await this._mixTranscodeManager.startMixTranscode(e);break}case"publish-main-stream-to-cdn":case"publish-sub-stream-to-cdn":{await this._publishCDNManager.startPublishTencentCDN(e.target);break}}}};S(k,"TYPE",{PublishMode:{PublishMainStreamToCDN:"publish-main-stream-to-cdn",PublishSubStreamToCDN:"publish-sub-stream-to-cdn",PublishMixStreamToCDN:"publish-mix-stream-to-cdn"}}),S(k,"Name","CDNStreaming");var J=k;var Ae=J;return De(Pe);})().default;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rtc-plugin/cdn-streaming",
3
- "version": "5.7.0-beta.7",
3
+ "version": "5.7.0",
4
4
  "description": "TRTC Web SDK 5.x CDN streaming plugin",
5
5
  "main": "./cdn-streaming.esm.js",
6
6
  "author": "longyuqi <longyuqi@tencent.com>",
@@ -0,0 +1,13 @@
1
+ export interface BasicBeautyOptions {
2
+ beauty?: number;
3
+ brightness?: number;
4
+ ruddy?: number;
5
+ }
6
+
7
+ export declare class BasicBeauty {
8
+ start(options: BasicBeautyOptions): Promise<void>;
9
+ update(options: BasicBeautyOptions): Promise<void>;
10
+ stop(): Promise<void>;
11
+ }
12
+
13
+ export default BasicBeauty;
@@ -0,0 +1,2 @@
1
+ var nC=Object.defineProperty;var cC=(N,n,h)=>n in N?nC(N,n,{enumerable:!0,configurable:!0,writable:!0,value:h}):N[n]=h;var P=(N,n,h)=>(cC(N,typeof n!="symbol"?n+"":n,h),h);function LA(N){return{name:"BasicBeautyOptions",type:"object",required:!0,allowEmpty:!1,properties:{beauty:{required:!1,type:"number"},brightness:{required:!1,type:"number"},ruddy:{required:!1,type:"number"}},validate(n,h,Q,L){let{RtcError:O,ErrorCode:DA,ErrorCodeDictionary:dA}=N.errorModule;if(N.utils.isOverseaSdkAppId(n.sdkAppId))throw new O({code:DA.INVALID_OPERATION,extraCode:dA.INVALID_OPERATION,message:"This feature is not yet available in your country or region. If you have any questions, you can go to the community for consultation: https://zhiliao.qq.com/s/cWSPGIIM62CC/c3TPGIIM62CQ"})}}}function dg(N){return{name:"StopBasicBeautyOptions",required:!1}}var dC={},DC=(()=>{var N=dC.url;return function(n={}){var h,Q=Object.assign({},n),L,O,DA=new Promise((g,A)=>{L=g,O=A}),dA=!0,uA=!1,TA=Object.assign({},Q),lg=[],yg="./this.program",Gg=(g,A)=>{throw A},F="",hg,Rg,lA;(dA||uA)&&(uA?F=self.location.href:typeof document!="undefined"&&document.currentScript&&(F=document.currentScript.src),N&&(F=N),F.startsWith("blob:")?F="":F=F.substr(0,F.replace(/[?#].*/,"").lastIndexOf("/")+1),hg=g=>{var A=new XMLHttpRequest;return A.open("GET",g,!1),A.send(null),A.responseText},uA&&(lA=g=>{var A=new XMLHttpRequest;return A.open("GET",g,!1),A.responseType="arraybuffer",A.send(null),new Uint8Array(A.response)}),Rg=(g,A,I)=>{var C=new XMLHttpRequest;C.open("GET",g,!0),C.responseType="arraybuffer",C.onload=()=>{if(C.status==200||C.status==0&&C.response){A(C.response);return}I()},C.onerror=I,C.send(null)});var uC=Q.print||console.log.bind(console),yA=Q.printErr||console.error.bind(console);Object.assign(Q,TA),TA=null,Q.arguments&&(lg=Q.arguments),Q.thisProgram&&(yg=Q.thisProgram),Q.quit&&(Gg=Q.quit);var AA;Q.wasmBinary&&(AA=Q.wasmBinary);function wg(g){for(var A=atob(g),I=new Uint8Array(A.length),C=0;C<A.length;++C)I[C]=A.charCodeAt(C);return I}function Ng(g){if(Hg(g))return wg(g.slice(WA.length))}var vA,JA=!1,pg,H,G,W,gA,j,d,KA,PA;function Sg(){var g=vA.buffer;Q.HEAP8=H=new Int8Array(g),Q.HEAP16=W=new Int16Array(g),Q.HEAPU8=G=new Uint8Array(g),Q.HEAPU16=gA=new Uint16Array(g),Q.HEAP32=j=new Int32Array(g),Q.HEAPU32=d=new Uint32Array(g),Q.HEAPF32=KA=new Float32Array(g),Q.HEAPF64=PA=new Float64Array(g)}var OA=[],xA=[],ZA=[],mg=!1;function Ug(){if(Q.preRun)for(typeof Q.preRun=="function"&&(Q.preRun=[Q.preRun]);Q.preRun.length;)Fg(Q.preRun.shift());RA(OA)}function fg(){mg=!0,RA(xA)}function bg(){if(Q.postRun)for(typeof Q.postRun=="function"&&(Q.postRun=[Q.postRun]);Q.postRun.length;)kg(Q.postRun.shift());RA(ZA)}function Fg(g){OA.unshift(g)}function Yg(g){xA.unshift(g)}function kg(g){ZA.unshift(g)}var T=0,GA=null,_=null;function Mg(g){var A;T++,(A=Q.monitorRunDependencies)==null||A.call(Q,T)}function Lg(g){var I;if(T--,(I=Q.monitorRunDependencies)==null||I.call(Q,T),T==0&&(GA!==null&&(clearInterval(GA),GA=null),_)){var A=_;_=null,A()}}function hA(g){var I;(I=Q.onAbort)==null||I.call(Q,g),g="Aborted("+g+")",yA(g),JA=!0,pg=1,g+=". Build with -sASSERTIONS for more info.";var A=new WebAssembly.RuntimeError(g);throw O(A),A}var WA="data:application/octet-stream;base64,",Hg=g=>g.startsWith(WA);function Tg(){var g="data:application/octet-stream;base64,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BSQAAkAgAiADTA0AIARBgMAEcQ0AIAUgASACIANrIgNBgAIgA0GAAkkiARsQIxogAUUEQANAIAAgBUGAAhAcIANBgAJrIgNB/wFLDQALCyAAIAUgAxAcCyAFQYACaiQAC+UDAQV/IwBBEGsiAyQAIAMgACgCACIEQQhrKAIAIgI2AgwgAyAAIAJqNgIEIAMgBEEEaygCADYCCCADKAIIIgQgAUEAEB0hAiADKAIEIQUCQCACBEAgAygCDCEAIwBBQGoiASQAIAFBQGskAEEAIAUgABshAgwBCyMAQUBqIgIkACAAIAVOBEAgAkIANwIcIAJCADcCJCACQgA3AiwgAkIANwIUIAJBADYCECACIAE2AgwgAiAENgIEIAJBADYCPCACQoGAgICAgICAATcCNCACIAA2AgggBCACQQRqIAUgBUEBQQAgBCgCACgCFBEJACAAQQAgAigCHBshBgsgAkFAayQAIAYiAg0AIwBBQGoiAiQAIAJBADYCECACQezIADYCDCACIAA2AgggAiABNgIEQQAhACACQRRqQQBBJxAjGiACQQA2AjwgAkEBOgA7IAQgAkEEaiAFQQFBACAEKAIAKAIYEQgAAkACQAJAIAIoAigOAgABAgsgAigCGEEAIAIoAiRBAUYbQQAgAigCIEEBRhtBACACKAIsQQFGGyEADAELIAIoAhxBAUcEQCACKAIsDQEgAigCIEEBRw0BIAIoAiRBAUcNAQsgAigCFCEACyACQUBrJAAgACECCyADQRBqJAAgAgu0AQEFfyMAQRBrIgYkACAGQQRqIgIQQSMAQRBrIgUkAAJ/IAItAAtBB3YEQCACKAIEDAELIAItAAtB/wBxCyEEA0ACQAJ/IAItAAtBB3YEQCACKAIADAELIAILIQMgBSABOQMAIAICfyADIARBAWogBRBHIgNBAE4EQCADIARNDQIgAwwBCyAEQQF0QQFyCyIEECwMAQsLIAIgAxAsIAAgAhBAIAVBEGokACACEEQgBkEQaiQAC4AEAQN/IAJBgARPBEAgACABIAIQESAADwsgACACaiEDAkAgACABc0EDcUUEQAJAIABBA3FFBEAgACECDAELIAJFBEAgACECDAELIAAhAgNAIAIgAS0AADoAACABQQFqIQEgAkEBaiICQQNxRQ0BIAIgA0kNAAsLAkAgA0F8cSIEQcAASQ0AIAIgBEFAaiIFSw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBU0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgACADQQRrIgRLBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAsLACABIAIgABBFGgvyAgICfwF+AkAgAkUNACAAIAE6AAAgACACaiIDQQFrIAE6AAAgAkEDSQ0AIAAgAToAAiAAIAE6AAEgA0EDayABOgAAIANBAmsgAToAACACQQdJDQAgACABOgADIANBBGsgAToAACACQQlJDQAgAEEAIABrQQNxIgRqIgMgAUH/AXFBgYKECGwiATYCACADIAIgBGtBfHEiBGoiAkEEayABNgIAIARBCUkNACADIAE2AgggAyABNgIEIAJBCGsgATYCACACQQxrIAE2AgAgBEEZSQ0AIAMgATYCGCADIAE2AhQgAyABNgIQIAMgATYCDCACQRBrIAE2AgAgAkEUayABNgIAIAJBGGsgATYCACACQRxrIAE2AgAgBCADQQRxQRhyIgRrIgJBIEkNACABrUKBgICAEH4hBSADIARqIQEDQCABIAU3AxggASAFNwMQIAEgBTcDCCABIAU3AwAgAUEgaiEBIAJBIGsiAkEfSw0ACwsgAAsSACABQQF0QYDHAGpBAiAAEEULBQAQaQALiAECAX4FfwJAIABCgICAgBBUBEAgACECDAELA0AgAUEBayIBIAAgAEIKgCICQgp+fadBMHI6AAAgAEL/////nwFWIQYgAiEAIAYNAAsLIAJCAFIEQCACpyEDA0AgAUEBayIBIAMgA0EKbiIEQQps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IAAoAghBgICAgHhyNgIIIARBEGokAAwBCxAlAAsgACABNgIECyABAn8gAC0AC0EHdgRAIAAoAgAMAQsgAAsiAmogBRBDIAAgASAFaiIAEDAgBkEAOgAPIAAgAmogBi0ADzoAAAsgBkEQaiQADwsCfyAALQALQQd2BEAgACgCAAwBCyAACyEEIwBBEGsiAiQAAn8gAC0AC0EHdgRAIAAoAgQMAQsgAC0ACwsaIAAgARAwIAJBADoADyABIARqIAItAA86AAAgAkEQaiQACz0BAX8jAEEQayICJAAgAkEAOgAPA0AgAQRAIAAgAi0ADzoAACABQQFrIQEgAEEBaiEADAELCyACQRBqJAALGgAgAC0AC0EHdgRAIAAoAggaIAAoAgAQGAsL5gEBBX8jAEEQayIFJAAjAEEgayIDJAAjAEEQayIEJAAgBCAANgIMIAQgACABajYCCCADIAQoAgw2AhggAyAEKAIINgIcIARBEGokACADKAIYIQQgAygCHCEGIwBBEGsiASQAIAEgBjYCDCACIAQgBiAEayIEEDUgASACIARqNgIIIAMgASgCDDYCECADIAEoAgg2AhQgAUEQaiQAIAMgACADKAIQIABrajYCDCADIAIgAygCFCACa2o2AgggBSADKAIMNgIIIAUgAygCCDYCDCADQSBqJAAgBSgCDCEHIAVBEGokACAHC/MCAQV/IwBBEGsiByQAIAIgAUF/c0H3////B2pNBEACfyAALQALQQd2BEAgACgCAAwBCyAACyEIIAdBBGoiCSABQfP///8DSQR/IAcgAUEBdDYCDCAHIAEgAmo2AgQjAEEQayICJAAgCSgCACAHQQxqIgooAgBJIQsgAkEQaiQAIAogCSALGygCACICQQtPBH8gAkEIakF4cSICIAJBAWsiAiACQQtGGwVBCgtBAWoFQff///8HCxAvIAcoAgQhAiAHKAIIGiAEBEAgAiAIIAQQIgsgBQRAIAIgBGogBiAFECILIAMgBGshBiADIARHBEAgAiAEaiAFaiAEIAhqIAYQIgsgAUEKRwRAIAgQGAsgACACNgIAIAAgACgCCEGAgICAeHEgBygCCEH/////B3FyNgIIIAAgACgCCEGAgICAeHI2AgggACAEIAVqIAZqIgA2AgQgB0EAOgAMIAAgAmogBy0ADDoAACAHQRBqJAAPCxAlAAvHAwEFfyMAQRBrIgUkACAFIAI2AgwjAEGgAWsiAyQAIAMgACADQZ4BaiABGyIENgKUASADIAFBAWsiAEEAIAAgAU0bNgKYASADQQBBkAEQIyIAQX82AkwgAEEbNgIkIABBfzYCUCAAIABBnwFqNgIsIAAgAEGUAWo2AlQgBEEAOgAAQQAhAyMAQdABayIBJAAgASACNgLMASABQaABaiICQQBBKBAjGiABIAEoAswBNgLIAQJAQQAgAUHIAWogAUHQAGogAhBMQQBIBEBBfyECDAELIAAoAkxBAEghByAAIAAoAgAiBkFfcTYCAAJ/AkACQCAAKAIwRQRAIABB0AA2AjAgAEEANgIcIABCADcDECAAKAIsIQMgACABNgIsDAELIAAoAhANAQtBfyAAEE8NARoLIAAgAUHIAWogAUHQAGogAUGgAWoQTAshAiADBEAgAEEAQQAgACgCJBEDABogAEEANgIwIAAgAzYCLCAAQQA2AhwgACgCFCEDIABCADcDECACQX8gAxshAgsgACAAKAIAIgMgBkEgcXI2AgBBfyACIANBIHEbIQIgBw0ACyABQdABaiQAIABBoAFqJAAgBUEQaiQAIAILngUCBn4EfyABIAEoAgBBB2pBeHEiAUEQajYCACAAIQsgASkDACEDIAEpAwghByMAQSBrIggkACAHQv///////z+DIQQCfiAHQjCIQv//AYMiBaciCkGB+ABrQf0PTQRAIARCBIYgA0I8iIQhAiAKQYD4AGutIQUCQCADQv//////////D4MiA0KBgICAgICAgAhaBEAgAkIBfCECDAELIANCgICAgICAgIAIUg0AIAJCAYMgAnwhAgtCACACIAJC/////////wdWIgAbIQIgAK0gBXwMAQsCQCADIASEUA0AIAVC//8BUg0AIARCBIYgA0I8iIRCgICAgICAgASEIQJC/w8MAQtC/w8gCkH+hwFLDQAaQgBBgPgAQYH4ACAFUCIBGyIAIAprIglB8ABKDQAaIAMhAiAEIARCgICAgICAwACEIAEbIgYhBAJAQYABIAlrIgFBwABxBEAgAyABQUBqrYYhBEIAIQIMAQsgAUUNACAEIAGtIgWGIAJBwAAgAWutiIQhBCACIAWGIQILIAggAjcDECAIIAQ3AxgCQCAJQcAAcQRAIAYgCUFAaq2IIQNCACEGDAELIAlF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AgQgAEHM0AA2AgAgAkEQaiQAC2ACAX8BfCMAQRBrIgIkACACQQA2AgwgASgCBEGszAAgAkEMahAJIQMgAigCDCIBBEAgARABCyAAAn8gA5lEAAAAAAAA4EFjBEAgA6oMAQtBgICAgHgLNgI8IAJBEGokAAs3AQF/IwBBEGsiAiQAIAIgASgCPDYCCCAAQazMACACQQhqEAg2AgQgAEHM0AA2AgAgAkEQaiQACwvGRhAAQYAIC5Qic2V0QmVhdXR5AC0rICAgMFgweAAtMFgrMFggMFgtMHgrMHggMHgAdW5zaWduZWQgc2hvcnQAdW5zaWduZWQgaW50AGluaXQAZmxvYXQAdWludDY0X3QAYmx1clJhZGl1cwB2ZWN0b3IAbWlycm9yAGF0dGFjaFNoYWRlcgBkZWxldGVTaGFkZXIAY3JlYXRlU2hhZGVyAGNvbXBpbGVTaGFkZXIAdW5zaWduZWQgY2hhcgBzdGQ6OmV4Y2VwdGlvbgBuYW4AbGlua1Byb2dyYW0AZGVsZXRlUHJvZ3JhbQBjcmVhdGVQcm9ncmFtAGJvb2wAc2V0V2F0ZXJNYXJrAHN0b3BXYXRlck1hcmsAdW5zaWduZWQgbG9uZwBzdGQ6OndzdHJpbmcAYmFzaWNfc3RyaW5nAHN0ZDo6c3RyaW5nAHN0ZDo6dTE2c3RyaW5nAHN0ZDo6dTMyc3RyaW5nAGluZgAlZgBjbG9zZQBkb3VibGUAdmJNb2RlAHNoYWRlclNvdXJjZQB2b2lkAHNhbXBsZUNvbG9yICs9IHRleHR1cmUoZnJhbWUsIGJsdXJDb29yZGluYXRlc1sATkFOAElORgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxmbG9hdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dWludDhfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MTZfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50MTZfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dWludDY0X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDY0X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaWduZWQgY2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZz4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgbG9uZz4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8ZG91YmxlPgB2ZWMyIGMgPSB2X3RleENvb3JkOwB2ZWMyIGMgPSB2ZWMyKDEuMCAtIHZfdGV4Q29vcmQueCwgdl90ZXhDb29yZC55KTsAQWxsSW4xAC4ALjAsAC4wKSpvKSoAKG51bGwpACkqby55KTsgICAgdmVjMiBjb29yZDIgPSB2ZWMyKGZsb2F0KAAgICAgYyA9IHZlYzIodl90ZXhDb29yZC54LCAxLjAgLSB2X3RleENvb3JkLnkpOyAgICB2ZWMyIGNvb3JkMSA9IHZlYzIoZmxvYXQoACksIChjLnkgLWNvb3JkMS55KSAvIG8ueSAvIGZsb2F0KAApKm8ueSk7ICAgIGlmIChjLnggPiBjb29yZDEueCAmJiBjLnggPCBjb29yZDIueCAmJiBjLnkgPiBjb29yZDEueSAmJiBjLnkgPCBjb29yZDIueSkgeyAgICAgIHZlYzQgd2F0ZXJDb2xvciA9IHRleHR1cmUod2F0ZXJNYXJrLCB2ZWMyKChjLnggLSBjb29yZDEueCkgIC8gby54IC8gZmxvYXQoACkgKiBvLngsIGZsb2F0KAApOyAgICAgdmVjMyBzbW9vdGhDb2xvciA9IG91dENvbG9yLnJnYiArIChvdXRDb2xvci5yZ2ItdmVjMyhoaWdoUGFzcykpKmFscGhhKjAuMTsgICAgIHNtb290aENvbG9yID0gY2xhbXAocG93KHNtb290aENvbG9yLCB2ZWMzKAApOyAgICBuZXdDb2xvci5yZ2IgPSB2ZWMzKG5ld0NvbG9yLnJnYiArIHZlYzMoAGcrPUcoYyx2ZWMyKAAgICAgdmVjMiBvZmZzZXQgPSB2ZWMyKABdID0gdl90ZXhDb29yZC54eSArIG9mZnNldCAqIHZlYzIoADsgACkpLCB2ZWMzKDAuMCksIHZlYzMoMS4wKSk7ICAgIHZlYzMgc2NyZWVuID0gdmVjMygxLjApIC0gKHZlYzMoMS4wKS1zbW9vdGhDb2xvcikgKiAodmVjMygxLjApLW91dENvbG9yLnJnYik7ICAgICB2ZWMzIGxpZ2h0ZW4gPSBtYXgoc21vb3RoQ29sb3IsIG91dENvbG9yLnJnYik7ICAgICB2ZWMzIHNvZnRMaWdodCA9IDIuMCAqIG91dENvbG9yLnJnYipzbW9vdGhDb2xvciArIG91dENvbG9yLnJnYipvdXRDb2xvci5yZ2IgLSAyLjAgKiBvdXRDb2xvci5yZ2Iqb3V0Q29sb3IucmdiICogc21vb3RoQ29sb3I7ICAgICB2ZWM0IG5ld0NvbG9yID0gb3V0Q29sb3I7ICAgICBuZXdDb2xvci5yZ2IgPSBtaXgobWl4KG1peChuZXdDb2xvci5yZ2IsIHNjcmVlbiwgYWxwaGEpLCBsaWdodGVuLCBhbHBoYSksIHNvZnRMaWdodCwgACk7ICAgIGNvbnN0IG1hdDMgc2F0dXJhdGVNYXRyaXggPSBtYXQzKDEuMTEwMiwtMC4wNTk4LC0wLjA2MSwtMC4wNzc0LDEuMDgyNiwtMC4xMTg2LC0wLjAyMjgsLTAuMDIyOCwxLjE3NzIpOyAgICB2ZWMzIHNhdENvbG9yID0gbmV3Q29sb3IucmdiICogc2F0dXJhdGVNYXRyaXg7ICAgIG5ld0NvbG9yLnJnYiA9IG1peChuZXdDb2xvci5yZ2IsIHNhdENvbG9yLCAAICAgIHNhbXBsZUNvbG9yID0gc2FtcGxlQ29sb3IgLyA2Mi4wOyAgICAgZmxvYXQgaGlnaFBhc3MgPSBvdXRDb2xvci5nIC0gc2FtcGxlQ29sb3IgKyAwLjU7ICAgICBmb3IoaW50IGkgPSAwOyBpIDwgNTsgaSsrKSB7ICAgICAgIGlmIChoaWdoUGFzcyA8PSAwLjUpIHsgICAgICAgICBoaWdoUGFzcyA9IGhpZ2hQYXNzICogaGlnaFBhc3MgKiAyLjA7ICAgICAgIH0gZWxzZSB7ICAgICAgICAgaGlnaFBhc3MgPSAxLjAgLSAoKDEuMCAtIGhpZ2hQYXNzKSooMS4wIC0gaGlnaFBhc3MpICogMi4wKTsgICAgICAgfSAgICAgfSAgICAgY29uc3QgaGlnaHAgdmVjMyBXID0gdmVjMygwLjI5OSwwLjU4NywwLjExNCk7ICAgIGZsb2F0IGx1bWluYW5jZSA9IGRvdChvdXRDb2xvci5yZ2IsIFcpOyAgICAgZmxvYXQgYWxwaGEgPSBwb3cobHVtaW5hbmNlLCAAXSkuZyAqIAApKTsgICAgb3V0Q29sb3IgPSBtaXgob3V0Q29sb3IsIG5ld0NvbG9yLCAxLjApOyAgIAApKSk7ICAgICAgb3V0Q29sb3IgPSBtaXgob3V0Q29sb3Isd2F0ZXJDb2xvciwgIHdhdGVyQ29sb3IuYSk7ICAgIH0gICAgACk7ICAgIHZlYzIgYmx1ckNvb3JkaW5hdGVzWzI0XTsgICAgACAgICBmbG9hdCBzYW1wbGVDb2xvciA9IG91dENvbG9yLmcgKiAyMi4wOyAgICAgACN2ZXJzaW9uIDMwMCBlcwogICAgcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwogICAgdW5pZm9ybSBzYW1wbGVyMkQgZnJhbWU7CiAgICB1bmlmb3JtIHNhbXBsZXIyRCBtYXNrOwogICAgdW5pZm9ybSBzYW1wbGVyMkQgYmc7CiAgICB1bmlmb3JtIHNhbXBsZXIyRCB3YXRlck1hcms7CiAgICB1bmlmb3JtIHNhbXBsZXIyRCBsYXN0TWFzazsKICAgIGluIHZlYzIgdl90ZXhDb29yZDsKICAgIG91dCB2ZWM0IG91dENvbG9yOwogICAgdmVjNCBHKHZlYzIgYyx2ZWMyIHMpewogICAgICByZXR1cm4gdGV4dHVyZShmcmFtZSx0ZXh0dXJlKG1hc2ssYytzKS5hPjAuMz9jOmMrcyk7CiAgICB9CiAgICB2b2lkIG1haW4oKSB7CiAgICAgIAAKICAgIHZlYzQgZyA9IHZlYzQoMC4wKTsKICAgIAAKICAgICAgYy55ID0gMS4wIC0gYy55OwogICAgICB2ZWM0IHNyY19jb2xvciA9IHRleHR1cmUoZnJhbWUsIGMpOwogICAgICBmbG9hdCBhID0gdGV4dHVyZShtYXNrLCBjKS5hOwogICAgICBhID0gYTwwLjU/Mi4wKmEqYToxLjAtMi4wKigxLjAtYSkqKDEuMC1hKTsKICAgICAgLy8gZmxvYXQgYTIgPSB0ZXh0dXJlKGxhc3RNYXNrLCBjKS5hOwogICAgICAvLyBhMiA9IGEyPDAuNT8yLjAqYTIqYTI6MS4wLTIuMCooMS4wLWEyKSooMS4wLWEyKTsKICAgICAgLy8gZmxvYXQgZGVsdGEgPSBhIC0gYTI7CiAgICAgIC8vIGlmIChkZWx0YSA8IDAuMjUgJiYgZGVsdGEgPiAtMC4yNSkKICAgICAgLy8gewogICAgICAvLyAgICAgYSA9IGEgKyAwLjUqZGVsdGE7CiAgICAgIC8vIH0KICAgICAgCiAgICAgIHZlYzIgbyA9IDEuMCAvIHZlYzIodGV4dHVyZVNpemUoZnJhbWUsIDApKTsKICAgIAAKICAgICAgb3V0Q29sb3IgPSBnOwogIAAjdmVyc2lvbiAzMDAgZXMKaW4gdmVjMiBhX3Bvc2l0aW9uOwppbiB2ZWMyIGFfdGV4Q29vcmQ7Cm91dCB2ZWMyIHZfdGV4Q29vcmQ7CnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQoYV9wb3NpdGlvbi54LCBhX3Bvc2l0aW9uLnksIDAsIDEpOwogIHZfdGV4Q29vcmQgPSBhX3RleENvb3JkOwp9CgBvdXRDb2xvciA9IHNyY19jb2xvcjsKAG91dENvbG9yID0gbWl4KHRleHR1cmUoYmcsIGMpLHNyY19jb2xvcixhKTsKAG91dENvbG9yID0gbWl4KHZlYzQoMC4wLDEuMCwwLjAsMS4wKSxzcmNfY29sb3IsYSk7CgA2QWxsSW4xAJAmAABwFAAAUDZBbGxJbjEAAAAAFCcAAIAUAAAAAAAAeBQAAFBLNkFsbEluMQAAABQnAACcFAAAAQAAAHgUAABwcAB2AHZwAIwUAADcFAAATjEwZW1zY3JpcHRlbjN2YWxFAACQJgAAyBQAAHBwcAB2cHBwAAAAAMwlAACMFAAAgCYAAIAmAACAJgAAgCYAAIAmAAB2cHBkZGRkZABBoCoLyAjMJQAAjBQAAIAmAACAJgAAgCYAAIAmAAB2cHBkZGRkAMwlAACMFAAAdnBwAMwlAADcFAAA3BQAAIwUAADcFAAALCYAAMwlAADcFAAAsBUAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAACQJgAAcBUAANwUAADMJQAA3BQAANwUAABOU3QzX18yMTJiYXNpY19zdHJpbmdJaE5TXzExY2hhcl90cmFpdHNJaEVFTlNfOWFsbG9jYXRvckloRUVFRQAAkCYAAMgVAABOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQAAkCYAABAWAABOU3QzX18yMTJiYXNpY19zdHJpbmdJRHNOU18xMWNoYXJfdHJhaXRzSURzRUVOU185YWxsb2NhdG9ySURzRUVFRQAAAJAmAABYFgAATlN0M19fMjEyYmFzaWNfc3RyaW5nSURpTlNfMTFjaGFyX3RyYWl0c0lEaUVFTlNfOWFsbG9jYXRvcklEaUVFRUUAAACQJgAApBYAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWNFRQAAkCYAAPAWAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lhRUUAAJAmAAAYFwAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJaEVFAACQJgAAQBcAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SXNFRQAAkCYAAGgXAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUAAJAmAACQFwAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJaUVFAACQJgAAuBcAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWpFRQAAkCYAAOAXAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUAAJAmAAAIGAAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJbUVFAACQJgAAMBgAAE4xMGVtc2NyaXB0ZW4x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";return g}var IA;function vg(g){if(g==IA&&AA)return new Uint8Array(AA);var A=Ng(g);if(A)return A;if(lA)return lA(g);throw"both async and sync fetching of the wasm failed"}function Jg(g){return Promise.resolve().then(()=>vg(g))}function Kg(g,A,I){return Jg(g).then(C=>WebAssembly.instantiate(C,A)).then(I,C=>{yA(`failed to asynchronously prepare wasm: ${C}`),hA(C)})}function Pg(g,A,I,C){return Kg(A,I,C)}function Og(){return{a:oC}}function xg(){var g=Og();function A(C,B){return S=C.exports,vA=S.y,Sg(),gg=S.B,Yg(S.z),Lg("wasm-instantiate"),S}Mg("wasm-instantiate");function I(C){A(C.instance)}if(Q.instantiateWasm)try{return Q.instantiateWasm(g,A)}catch(C){yA(`Module.instantiateWasm callback failed with error: ${C}`),O(C)}return IA||(IA=Tg()),Pg(AA,IA,g,I).catch(O),{}}var RA=g=>{for(;g.length>0;)g.shift()(Q)},lC=Q.noExitRuntime||!0;class Zg{constructor(A){this.excPtr=A,this.ptr=A-24}set_type(A){d[this.ptr+4>>2]=A}get_type(){return d[this.ptr+4>>2]}set_destructor(A){d[this.ptr+8>>2]=A}get_destructor(){return d[this.ptr+8>>2]}set_caught(A){A=A?1:0,H[this.ptr+12]=A}get_caught(){return H[this.ptr+12]!=0}set_rethrown(A){A=A?1:0,H[this.ptr+13]=A}get_rethrown(){return H[this.ptr+13]!=0}init(A,I){this.set_adjusted_ptr(0),this.set_type(A),this.set_destructor(I)}set_adjusted_ptr(A){d[this.ptr+16>>2]=A}get_adjusted_ptr(){return d[this.ptr+16>>2]}get_exception_ptr(){var A=og(this.get_type());if(A)return d[this.excPtr>>2];var I=this.get_adjusted_ptr();return I!==0?I:this.excPtr}}var jA=0,Wg=0,jg=(g,A,I)=>{var C=new Zg(g);throw C.init(A,I),jA=g,Wg++,jA},_g=()=>{hA("")},Vg=(g,A,I,C,B)=>{},zg=()=>{for(var g=new Array(256),A=0;A<256;++A)g[A]=String.fromCharCode(A);_A=g},_A,R=g=>{for(var A="",I=g;G[I];)A+=_A[G[I++]];return A},x={},v={},CA={},Z,o=g=>{throw new Z(g)},VA,BA=g=>{throw new VA(g)},J=(g,A,I)=>{g.forEach(function(e){CA[e]=A});function C(e){var i=I(e);i.length!==g.length&&BA("Mismatched type converter count");for(var a=0;a<g.length;++a)m(g[a],i[a])}var B=new Array(A.length),E=[],r=0;A.forEach((e,i)=>{v.hasOwnProperty(e)?B[i]=v[e]:(E.push(e),x.hasOwnProperty(e)||(x[e]=[]),x[e].push(()=>{B[i]=v[e],++r,r===E.length&&C(B)}))}),E.length===0&&C(B)};function Xg(g,A,I={}){var C=A.name;if(g||o(`type "${C}" must have a positive integer typeid pointer`),v.hasOwnProperty(g)){if(I.ignoreDuplicateRegistrations)return;o(`Cannot register type '${C}' twice`)}if(v[g]=A,delete CA[g],x.hasOwnProperty(g)){var B=x[g];delete x[g],B.forEach(E=>E())}}function m(g,A,I={}){if(!("argPackAdvance"in A))throw new TypeError("registerType registeredInstance requires argPackAdvance");return Xg(g,A,I)}var Y=8,qg=(g,A,I,C)=>{A=R(A),m(g,{name:A,fromWireType:function(B){return!!B},toWireType:function(B,E){return E?I:C},argPackAdvance:Y,readValueFromPointer:function(B){return this.fromWireType(G[B])},destructorFunction:null})},$g=g=>({count:g.count,deleteScheduled:g.deleteScheduled,preservePointerOnDelete:g.preservePointerOnDelete,ptr:g.ptr,ptrType:g.ptrType,smartPtr:g.smartPtr,smartPtrType:g.smartPtrType}),wA=g=>{function A(I){return I.$$.ptrType.registeredClass.name}o(A(g)+" instance already deleted")},NA=!1,zA=g=>{},AI=g=>{g.smartPtr?g.smartPtrType.rawDestructor(g.smartPtr):g.ptrType.registeredClass.rawDestructor(g.ptr)},XA=g=>{g.count.value-=1;var A=g.count.value===0;A&&AI(g)},qA=(g,A,I)=>{if(A===I)return g;if(I.baseClass===void 0)return null;var C=qA(g,A,I.baseClass);return C===null?null:I.downcast(C)},$A={},gI=()=>Object.keys(X).length,II=()=>{var g=[];for(var A in X)X.hasOwnProperty(A)&&g.push(X[A]);return g},V=[],pA=()=>{for(;V.length;){var g=V.pop();g.$$.deleteScheduled=!1,g.delete()}},z,CI=g=>{z=g,V.length&&z&&z(pA)},BI=()=>{Q.getInheritedInstanceCount=gI,Q.getLiveInheritedInstances=II,Q.flushPendingDeletes=pA,Q.setDelayFunction=CI},X={},eI=(g,A)=>{for(A===void 0&&o("ptr should not be undefined");g.baseClass;)A=g.upcast(A),g=g.baseClass;return A},QI=(g,A)=>(A=eI(g,A),X[A]),eA=(g,A)=>{(!A.ptrType||!A.ptr)&&BA("makeClassHandle requires ptr and ptrType");var I=!!A.smartPtrType,C=!!A.smartPtr;return I!==C&&BA("Both smartPtrType and smartPtr must be specified"),A.count={value:1},q(Object.create(g,{$$:{value:A,writable:!0}}))};function EI(g){var A=this.getPointee(g);if(!A)return this.destructor(g),null;var I=QI(this.registeredClass,A);if(I!==void 0){if(I.$$.count.value===0)return I.$$.ptr=A,I.$$.smartPtr=g,I.clone();var C=I.clone();return this.destructor(g),C}function B(){return this.isSmartPointer?eA(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:A,smartPtrType:this,smartPtr:g}):eA(this.registeredClass.instancePrototype,{ptrType:this,ptr:g})}var E=this.registeredClass.getActualType(A),r=$A[E];if(!r)return B.call(this);var e;this.isConst?e=r.constPointerType:e=r.pointerType;var i=qA(A,this.registeredClass,e.registeredClass);return i===null?B.call(this):this.isSmartPointer?eA(e.registeredClass.instancePrototype,{ptrType:e,ptr:i,smartPtrType:this,smartPtr:g}):eA(e.registeredClass.instancePrototype,{ptrType:e,ptr:i})}var q=g=>typeof FinalizationRegistry=="undefined"?(q=A=>A,g):(NA=new FinalizationRegistry(A=>{XA(A.$$)}),q=A=>{var I=A.$$,C=!!I.smartPtr;if(C){var B={$$:I};NA.register(A,B,A)}return A},zA=A=>NA.unregister(A),q(g)),rI=()=>{Object.assign(QA.prototype,{isAliasOf(g){if(!(this instanceof QA)||!(g instanceof QA))return!1;var A=this.$$.ptrType.registeredClass,I=this.$$.ptr;g.$$=g.$$;for(var C=g.$$.ptrType.registeredClass,B=g.$$.ptr;A.baseClass;)I=A.upcast(I),A=A.baseClass;for(;C.baseClass;)B=C.upcast(B),C=C.baseClass;return A===C&&I===B},clone(){if(this.$$.ptr||wA(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var g=q(Object.create(Object.getPrototypeOf(this),{$$:{value:$g(this.$$)}}));return g.$$.count.value+=1,g.$$.deleteScheduled=!1,g},delete(){this.$$.ptr||wA(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&o("Object already scheduled for deletion"),zA(this),XA(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)},isDeleted(){return!this.$$.ptr},deleteLater(){return this.$$.ptr||wA(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&o("Object already scheduled for deletion"),V.push(this),V.length===1&&z&&z(pA),this.$$.deleteScheduled=!0,this}})};function QA(){}var EA=(g,A)=>Object.defineProperty(A,"name",{value:g}),Ag=(g,A,I)=>{if(g[A].overloadTable===void 0){var C=g[A];g[A]=function(...B){return g[A].overloadTable.hasOwnProperty(B.length)||o(`Function '${I}' called with an invalid number of arguments (${B.length}) - expects one of (${g[A].overloadTable})!`),g[A].overloadTable[B.length].apply(this,B)},g[A].overloadTable=[],g[A].overloadTable[C.argCount]=C}},iI=(g,A,I)=>{Q.hasOwnProperty(g)?((I===void 0||Q[g].overloadTable!==void 0&&Q[g].overloadTable[I]!==void 0)&&o(`Cannot register public name '${g}' twice`),Ag(Q,g,g),Q.hasOwnProperty(I)&&o(`Cannot register multiple overloads of a function with the same number of arguments (${I})!`),Q[g].overloadTable[I]=A):(Q[g]=A,I!==void 0&&(Q[g].numArguments=I))},tI=48,aI=57,oI=g=>{if(g===void 0)return"_unknown";g=g.replace(/[^a-zA-Z0-9_]/g,"$");var A=g.charCodeAt(0);return A>=tI&&A<=aI?`_${g}`:g};function sI(g,A,I,C,B,E,r,e){this.name=g,this.constructor=A,this.instancePrototype=I,this.rawDestructor=C,this.baseClass=B,this.getActualType=E,this.upcast=r,this.downcast=e,this.pureVirtualFunctions=[]}var rA=(g,A,I)=>{for(;A!==I;)A.upcast||o(`Expected null or instance of ${I.name}, got an instance of ${A.name}`),g=A.upcast(g),A=A.baseClass;return g};function nI(g,A){if(A===null)return this.isReference&&o(`null is not a valid ${this.name}`),0;A.$$||o(`Cannot pass "${fA(A)}" as a ${this.name}`),A.$$.ptr||o(`Cannot pass deleted object as a pointer of type ${this.name}`);var I=A.$$.ptrType.registeredClass,C=rA(A.$$.ptr,I,this.registeredClass);return C}function cI(g,A){var I;if(A===null)return this.isReference&&o(`null is not a valid ${this.name}`),this.isSmartPointer?(I=this.rawConstructor(),g!==null&&g.push(this.rawDestructor,I),I):0;(!A||!A.$$)&&o(`Cannot pass "${fA(A)}" as a ${this.name}`),A.$$.ptr||o(`Cannot pass deleted object as a pointer of type ${this.name}`),!this.isConst&&A.$$.ptrType.isConst&&o(`Cannot convert argument of type ${A.$$.smartPtrType?A.$$.smartPtrType.name:A.$$.ptrType.name} to parameter type ${this.name}`);var C=A.$$.ptrType.registeredClass;if(I=rA(A.$$.ptr,C,this.registeredClass),this.isSmartPointer)switch(A.$$.smartPtr===void 0&&o("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:A.$$.smartPtrType===this?I=A.$$.smartPtr:o(`Cannot convert argument of type ${A.$$.smartPtrType?A.$$.smartPtrType.name:A.$$.ptrType.name} to parameter type ${this.name}`);break;case 1:I=A.$$.smartPtr;break;case 2:if(A.$$.smartPtrType===this)I=A.$$.smartPtr;else{var B=A.clone();I=this.rawShare(I,M.toHandle(()=>B.delete())),g!==null&&g.push(this.rawDestructor,I)}break;default:o("Unsupporting sharing policy")}return I}function DI(g,A){if(A===null)return this.isReference&&o(`null is not a valid ${this.name}`),0;A.$$||o(`Cannot pass "${fA(A)}" as a ${this.name}`),A.$$.ptr||o(`Cannot pass deleted object as a pointer of type ${this.name}`),A.$$.ptrType.isConst&&o(`Cannot convert argument of type ${A.$$.ptrType.name} to parameter type ${this.name}`);var I=A.$$.ptrType.registeredClass,C=rA(A.$$.ptr,I,this.registeredClass);return C}function iA(g){return this.fromWireType(d[g>>2])}var dI=()=>{Object.assign(tA.prototype,{getPointee(g){return this.rawGetPointee&&(g=this.rawGetPointee(g)),g},destructor(g){var A;(A=this.rawDestructor)==null||A.call(this,g)},argPackAdvance:Y,readValueFromPointer:iA,fromWireType:EI})};function tA(g,A,I,C,B,E,r,e,i,a,t){this.name=g,this.registeredClass=A,this.isReference=I,this.isConst=C,this.isSmartPointer=B,this.pointeeType=E,this.sharingPolicy=r,this.rawGetPointee=e,this.rawConstructor=i,this.rawShare=a,this.rawDestructor=t,!B&&A.baseClass===void 0?C?(this.toWireType=nI,this.destructorFunction=null):(this.toWireType=DI,this.destructorFunction=null):this.toWireType=cI}var uI=(g,A,I)=>{Q.hasOwnProperty(g)||BA("Replacing nonexistent public symbol"),Q[g].overloadTable!==void 0&&I!==void 0?Q[g].overloadTable[I]=A:(Q[g]=A,Q[g].argCount=I)},lI=(g,A,I)=>{g=g.replace(/p/g,"i");var C=Q["dynCall_"+g];return C(A,...I)},aA=[],gg,Ig=g=>{var A=aA[g];return A||(g>=aA.length&&(aA.length=g+1),aA[g]=A=gg.get(g)),A},yI=(g,A,I=[])=>{if(g.includes("j"))return lI(g,A,I);var C=Ig(A)(...I);return C},GI=(g,A)=>(...I)=>yI(g,A,I),k=(g,A)=>{g=R(g);function I(){return g.includes("j")?GI(g,A):Ig(A)}var C=I();return typeof C!="function"&&o(`unknown function pointer with signature ${g}: ${A}`),C},hI=(g,A)=>{var I=EA(A,function(C){this.name=A,this.message=C;var B=new Error(C).stack;B!==void 0&&(this.stack=this.toString()+`
2
+ `+B.replace(/^Error(:[^\n]*)?\n/,""))});return I.prototype=Object.create(g.prototype),I.prototype.constructor=I,I.prototype.toString=function(){return this.message===void 0?this.name:`${this.name}: ${this.message}`},I},Cg,Bg=g=>{var A=ag(g),I=R(A);return f(A),I},$=(g,A)=>{var I=[],C={};function B(E){if(!C[E]&&!v[E]){if(CA[E]){CA[E].forEach(B);return}I.push(E),C[E]=!0}}throw A.forEach(B),new Cg(`${g}: `+I.map(Bg).join([", "]))},RI=(g,A,I,C,B,E,r,e,i,a,t,s,c)=>{t=R(t),E=k(B,E),e&&(e=k(r,e)),a&&(a=k(i,a)),c=k(s,c);var D=oI(t);iI(D,function(){$(`Cannot construct ${t} due to unbound types`,[C])}),J([g,A,I],C?[C]:[],u=>{var ng,cg;u=u[0];var p,w;C?(p=u.registeredClass,w=p.instancePrototype):w=QA.prototype;var l=EA(t,function(...MA){if(Object.getPrototypeOf(this)!==K)throw new Z("Use 'new' to construct "+t);if(y.constructor_body===void 0)throw new Z(t+" has no accessible constructor");var Dg=y.constructor_body[MA.length];if(Dg===void 0)throw new Z(`Tried to invoke ctor of ${t} with invalid number of parameters (${MA.length}) - expected (${Object.keys(y.constructor_body).toString()}) parameters instead!`);return Dg.apply(this,MA)}),K=Object.create(w,{constructor:{value:l}});l.prototype=K;var y=new sI(t,l,K,c,p,E,e,a);y.baseClass&&((cg=(ng=y.baseClass).__derivedClasses)!=null||(ng.__derivedClasses=[]),y.baseClass.__derivedClasses.push(y));var kA=new tA(t,y,!0,!1,!1),b=new tA(t+"*",y,!1,!1,!1),sA=new tA(t+" const*",y,!1,!0,!1);return $A[g]={pointerType:b,constPointerType:sA},uI(D,l),[kA,b,sA]})},eg=(g,A)=>{for(var I=[],C=0;C<g;C++)I.push(d[A+C*4>>2]);return I},SA=g=>{for(;g.length;){var A=g.pop(),I=g.pop();I(A)}};function wI(g){for(var A=1;A<g.length;++A)if(g[A]!==null&&g[A].destructorFunction===void 0)return!0;return!1}function Qg(g,A,I,C,B,E){var r=A.length;r<2&&o("argTypes array size mismatch! Must at least get return value and 'this' types!");var e=A[1]!==null&&I!==null,i=wI(A),a=A[0].name!=="void",t=r-2,s=new Array(t),c=[],D=[],u=function(...p){p.length!==t&&o(`function ${g} called with ${p.length} arguments, expected ${t}`),D.length=0;var w;c.length=e?2:1,c[0]=B,e&&(w=A[1].toWireType(D,this),c[1]=w);for(var l=0;l<t;++l)s[l]=A[l+2].toWireType(D,p[l]),c.push(s[l]);var K=C(...c);function y(kA){if(i)SA(D);else for(var b=e?1:2;b<A.length;b++){var sA=b===1?w:s[b-2];A[b].destructorFunction!==null&&A[b].destructorFunction(sA)}if(a)return A[0].fromWireType(kA)}return y(K)};return EA(g,u)}var NI=(g,A,I,C,B,E)=>{var r=eg(A,I);B=k(C,B),J([],[g],e=>{e=e[0];var i=`constructor ${e.name}`;if(e.registeredClass.constructor_body===void 0&&(e.registeredClass.constructor_body=[]),e.registeredClass.constructor_body[A-1]!==void 0)throw new Z(`Cannot register multiple constructors with identical number of parameters (${A-1}) for class '${e.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);return e.registeredClass.constructor_body[A-1]=()=>{$(`Cannot construct ${e.name} due to unbound types`,r)},J([],r,a=>(a.splice(1,0,null),e.registeredClass.constructor_body[A-1]=Qg(i,a,null,B,E),[])),[]})},pI=g=>{g=g.trim();let A=g.indexOf("(");return A!==-1?g.substr(0,A):g},SI=(g,A,I,C,B,E,r,e,i)=>{var a=eg(I,C);A=R(A),A=pI(A),E=k(B,E),J([],[g],t=>{t=t[0];var s=`${t.name}.${A}`;A.startsWith("@@")&&(A=Symbol[A.substring(2)]),e&&t.registeredClass.pureVirtualFunctions.push(A);function c(){$(`Cannot call ${s} due to unbound types`,a)}var D=t.registeredClass.instancePrototype,u=D[A];return u===void 0||u.overloadTable===void 0&&u.className!==t.name&&u.argCount===I-2?(c.argCount=I-2,c.className=t.name,D[A]=c):(Ag(D,A,s),D[A].overloadTable[I-2]=c),J([],a,p=>{var w=Qg(s,p,t,E,r,i);return D[A].overloadTable===void 0?(w.argCount=I-2,D[A]=w):D[A].overloadTable[I-2]=w,[]}),[]})},Eg=(g,A,I)=>(g instanceof Object||o(`${I} with invalid "this": ${g}`),g instanceof A.registeredClass.constructor||o(`${I} incompatible with "this" of type ${g.constructor.name}`),g.$$.ptr||o(`cannot call emscripten binding method ${I} on deleted object`),rA(g.$$.ptr,g.$$.ptrType.registeredClass,A.registeredClass)),mI=(g,A,I,C,B,E,r,e,i,a)=>{A=R(A),B=k(C,B),J([],[g],t=>{t=t[0];var s=`${t.name}.${A}`,c={get(){$(`Cannot access ${s} due to unbound types`,[I,r])},enumerable:!0,configurable:!0};return i?c.set=()=>$(`Cannot access ${s} due to unbound types`,[I,r]):c.set=D=>o(s+" is a read-only property"),Object.defineProperty(t.registeredClass.instancePrototype,A,c),J([],i?[I,r]:[I],D=>{var u=D[0],p={get(){var l=Eg(this,t,s+" getter");return u.fromWireType(B(E,l))},enumerable:!0};if(i){i=k(e,i);var w=D[1];p.set=function(l){var K=Eg(this,t,s+" setter"),y=[];i(a,K,w.toWireType(y,l)),SA(y)}}return Object.defineProperty(t.registeredClass.instancePrototype,A,p),[]}),[]})},mA=[],U=[],UA=g=>{g>9&&--U[g+1]===0&&(U[g]=void 0,mA.push(g))},UI=()=>U.length/2-5-mA.length,fI=()=>{U.push(0,1,void 0,1,null,1,!0,1,!1,1),Q.count_emval_handles=UI},M={toValue:g=>(g||o("Cannot use deleted val. handle = "+g),U[g]),toHandle:g=>{switch(g){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:{let A=mA.pop()||U.length;return U[A]=g,U[A+1]=1,A}}}},bI={name:"emscripten::val",fromWireType:g=>{var A=M.toValue(g);return UA(g),A},toWireType:(g,A)=>M.toHandle(A),argPackAdvance:Y,readValueFromPointer:iA,destructorFunction:null},FI=g=>m(g,bI),fA=g=>{if(g===null)return"null";var A=typeof g;return A==="object"||A==="array"||A==="function"?g.toString():""+g},YI=(g,A)=>{switch(A){case 4:return function(I){return this.fromWireType(KA[I>>2])};case 8:return function(I){return this.fromWireType(PA[I>>3])};default:throw new TypeError(`invalid float width (${A}): ${g}`)}},kI=(g,A,I)=>{A=R(A),m(g,{name:A,fromWireType:C=>C,toWireType:(C,B)=>B,argPackAdvance:Y,readValueFromPointer:YI(A,I),destructorFunction:null})},MI=(g,A,I)=>{switch(A){case 1:return I?C=>H[C]:C=>G[C];case 2:return I?C=>W[C>>1]:C=>gA[C>>1];case 4:return I?C=>j[C>>2]:C=>d[C>>2];default:throw new TypeError(`invalid integer width (${A}): ${g}`)}},LI=(g,A,I,C,B)=>{A=R(A),B===-1&&(B=4294967295);var E=t=>t;if(C===0){var r=32-8*I;E=t=>t<<r>>>r}var e=A.includes("unsigned"),i=(t,s)=>{},a;e?a=function(t,s){return i(s,this.name),s>>>0}:a=function(t,s){return i(s,this.name),s},m(g,{name:A,fromWireType:E,toWireType:a,argPackAdvance:Y,readValueFromPointer:MI(A,I,C!==0),destructorFunction:null})},HI=(g,A,I)=>{var C=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],B=C[A];function E(r){var e=d[r>>2],i=d[r+4>>2];return new B(H.buffer,i,e)}I=R(I),m(g,{name:I,fromWireType:E,argPackAdvance:Y,readValueFromPointer:E},{ignoreDuplicateRegistrations:!0})},TI=(g,A,I,C)=>{if(!(C>0))return 0;for(var B=I,E=I+C-1,r=0;r<g.length;++r){var e=g.charCodeAt(r);if(e>=55296&&e<=57343){var i=g.charCodeAt(++r);e=65536+((e&1023)<<10)|i&1023}if(e<=127){if(I>=E)break;A[I++]=e}else if(e<=2047){if(I+1>=E)break;A[I++]=192|e>>6,A[I++]=128|e&63}else if(e<=65535){if(I+2>=E)break;A[I++]=224|e>>12,A[I++]=128|e>>6&63,A[I++]=128|e&63}else{if(I+3>=E)break;A[I++]=240|e>>18,A[I++]=128|e>>12&63,A[I++]=128|e>>6&63,A[I++]=128|e&63}}return A[I]=0,I-B},vI=(g,A,I)=>TI(g,G,A,I),JI=g=>{for(var A=0,I=0;I<g.length;++I){var C=g.charCodeAt(I);C<=127?A++:C<=2047?A+=2:C>=55296&&C<=57343?(A+=4,++I):A+=3}return A},rg=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0,KI=(g,A,I)=>{for(var C=A+I,B=A;g[B]&&!(B>=C);)++B;if(B-A>16&&g.buffer&&rg)return rg.decode(g.subarray(A,B));for(var E="";A<B;){var r=g[A++];if(!(r&128)){E+=String.fromCharCode(r);continue}var e=g[A++]&63;if((r&224)==192){E+=String.fromCharCode((r&31)<<6|e);continue}var i=g[A++]&63;if((r&240)==224?r=(r&15)<<12|e<<6|i:r=(r&7)<<18|e<<12|i<<6|g[A++]&63,r<65536)E+=String.fromCharCode(r);else{var a=r-65536;E+=String.fromCharCode(55296|a>>10,56320|a&1023)}}return E},PI=(g,A)=>g?KI(G,g,A):"",OI=(g,A)=>{A=R(A);var I=A==="std::string";m(g,{name:A,fromWireType(C){var B=d[C>>2],E=C+4,r;if(I)for(var e=E,i=0;i<=B;++i){var a=E+i;if(i==B||G[a]==0){var t=a-e,s=PI(e,t);r===void 0?r=s:(r+=String.fromCharCode(0),r+=s),e=a+1}}else{for(var c=new Array(B),i=0;i<B;++i)c[i]=String.fromCharCode(G[E+i]);r=c.join("")}return f(C),r},toWireType(C,B){B instanceof ArrayBuffer&&(B=new Uint8Array(B));var E,r=typeof B=="string";r||B instanceof Uint8Array||B instanceof Uint8ClampedArray||B instanceof Int8Array||o("Cannot pass non-string to std::string"),I&&r?E=JI(B):E=B.length;var e=YA(4+E+1),i=e+4;if(d[e>>2]=E,I&&r)vI(B,i,E+1);else if(r)for(var a=0;a<E;++a){var t=B.charCodeAt(a);t>255&&(f(i),o("String has UTF-16 code units that do not fit in 8 bits")),G[i+a]=t}else for(var a=0;a<E;++a)G[i+a]=B[a];return C!==null&&C.push(f,e),e},argPackAdvance:Y,readValueFromPointer:iA,destructorFunction(C){f(C)}})},ig=typeof TextDecoder!="undefined"?new TextDecoder("utf-16le"):void 0,xI=(g,A)=>{for(var I=g,C=I>>1,B=C+A/2;!(C>=B)&&gA[C];)++C;if(I=C<<1,I-g>32&&ig)return ig.decode(G.subarray(g,I));for(var E="",r=0;!(r>=A/2);++r){var e=W[g+r*2>>1];if(e==0)break;E+=String.fromCharCode(e)}return E},ZI=(g,A,I)=>{if(I!=null||(I=2147483647),I<2)return 0;I-=2;for(var C=A,B=I<g.length*2?I/2:g.length,E=0;E<B;++E){var r=g.charCodeAt(E);W[A>>1]=r,A+=2}return W[A>>1]=0,A-C},WI=g=>g.length*2,jI=(g,A)=>{for(var I=0,C="";!(I>=A/4);){var B=j[g+I*4>>2];if(B==0)break;if(++I,B>=65536){var E=B-65536;C+=String.fromCharCode(55296|E>>10,56320|E&1023)}else C+=String.fromCharCode(B)}return C},_I=(g,A,I)=>{if(I!=null||(I=2147483647),I<4)return 0;for(var C=A,B=C+I-4,E=0;E<g.length;++E){var r=g.charCodeAt(E);if(r>=55296&&r<=57343){var e=g.charCodeAt(++E);r=65536+((r&1023)<<10)|e&1023}if(j[A>>2]=r,A+=4,A+4>B)break}return j[A>>2]=0,A-C},VI=g=>{for(var A=0,I=0;I<g.length;++I){var C=g.charCodeAt(I);C>=55296&&C<=57343&&++I,A+=4}return A},zI=(g,A,I)=>{I=R(I);var C,B,E,r;A===2?(C=xI,B=ZI,r=WI,E=e=>gA[e>>1]):A===4&&(C=jI,B=_I,r=VI,E=e=>d[e>>2]),m(g,{name:I,fromWireType:e=>{for(var i=d[e>>2],a,t=e+4,s=0;s<=i;++s){var c=e+4+s*A;if(s==i||E(c)==0){var D=c-t,u=C(t,D);a===void 0?a=u:(a+=String.fromCharCode(0),a+=u),t=c+A}}return f(e),a},toWireType:(e,i)=>{typeof i!="string"&&o(`Cannot pass non-string to C++ string type ${I}`);var a=r(i),t=YA(4+a+A);return d[t>>2]=a/A,B(i,t+4,a+A),e!==null&&e.push(f,t),t},argPackAdvance:Y,readValueFromPointer:iA,destructorFunction(e){f(e)}})},XI=(g,A)=>{A=R(A),m(g,{isVoid:!0,name:A,argPackAdvance:0,fromWireType:()=>{},toWireType:(I,C)=>{}})},qI=(g,A,I)=>G.copyWithin(g,A,A+I),bA=(g,A)=>{var I=v[g];return I===void 0&&o(`${A} has unknown type ${Bg(g)}`),I},tg=(g,A,I)=>{var C=[],B=g.toWireType(C,I);return C.length&&(d[A>>2]=M.toHandle(C)),B},$I=(g,A,I)=>(g=M.toValue(g),A=bA(A,"emval::as"),tg(A,I,g)),AC={},gC=g=>{var A=AC[g];return A===void 0?R(g):A},FA=[],IC=(g,A,I,C,B)=>(g=FA[g],A=M.toValue(A),I=gC(I),g(A,A[I],C,B)),CC=g=>{var A=FA.length;return FA.push(g),A},BC=(g,A)=>{for(var I=new Array(g),C=0;C<g;++C)I[C]=bA(d[A+C*4>>2],"parameter "+C);return I},eC=Reflect.construct,QC=(g,A,I)=>{var C=BC(g,A),B=C.shift();g--;var E=new Array(g),r=(i,a,t,s)=>{for(var c=0,D=0;D<g;++D)E[D]=C[D].readValueFromPointer(s+c),c+=C[D].argPackAdvance;var u=I===1?eC(a,E):a.apply(i,E);return tg(B,t,u)},e=`methodCaller<(${C.map(i=>i.name).join(", ")}) => ${B.name}>`;return CC(EA(e,r))},EC=g=>{g>9&&(U[g+1]+=1)},rC=g=>{var A=M.toValue(g);SA(A),UA(g)},iC=(g,A)=>{g=bA(g,"_emval_take_value");var I=g.readValueFromPointer(A);return M.toHandle(I)},tC=g=>{hA("OOM")},aC=g=>{var A=G.length;g>>>=0,tC(g)};zg(),Z=Q.BindingError=class extends Error{constructor(A){super(A),this.name="BindingError"}},VA=Q.InternalError=class extends Error{constructor(A){super(A),this.name="InternalError"}},rI(),BI(),dI(),Cg=Q.UnboundTypeError=hI(Error,"UnboundTypeError"),fI();var oC={v:jg,p:_g,o:Vg,t:qg,x:RI,w:NI,h:SI,k:mI,s:FI,n:kI,g:LI,a:HI,m:OI,l:zI,u:XI,r:qI,j:$I,e:IC,c:UA,f:QC,d:EC,b:rC,i:iC,q:aC},S=xg(),sC=()=>(sC=S.z)(),YA=g=>(YA=S.A)(g),ag=g=>(ag=S.C)(g),f=g=>(f=S.D)(g),og=g=>(og=S.E)(g),yC=Q._vertexShaderSource=10192,oA;_=function g(){oA||sg(),oA||(_=g)};function sg(){if(T>0||(Ug(),T>0))return;function g(){oA||(oA=!0,Q.calledRun=!0,!JA&&(fg(),L(Q),Q.onRuntimeInitialized&&Q.onRuntimeInitialized(),bg()))}Q.setStatus?(Q.setStatus("Running..."),setTimeout(function(){setTimeout(function(){Q.setStatus("")},1),g()},1)):g()}if(Q.preInit)for(typeof Q.preInit=="function"&&(Q.preInit=[Q.preInit]);Q.preInit.length>0;)Q.preInit.pop()();return sg(),h=DA,h}})(),ug=DC;var nA=0,cA=class cA{constructor(n){this.core=n;P(this,"seq");P(this,"_core");P(this,"log");P(this,"beautyParams");nA=nA+1,this.seq=nA,this._core=n,this.log=n.log.createChild({id:`${this.getAlias()}${nA}`}),this.log.info("created")}getName(){return cA.Name}getAlias(){return"bb"}getValidateRule(n){switch(n){case"start":return LA(this._core);case"update":return LA(this._core);case"stop":return dg(this._core)}}getGroup(){return"w"}async start(n){this._core.room.videoManager.Wasm||(this._core.room.videoManager.Wasm=await ug()),this._core.room.videoManager.renderMode="webgl";let h=this._core.utils.isUndefined(n.beauty)?.5:n.beauty,Q=this._core.utils.isUndefined(n.brightness)?.5:n.brightness,L=this._core.utils.isUndefined(n.ruddy)?.5:n.ruddy;return this._core.room.videoManager.setBeautyParams({beauty:h,brightness:Q,ruddy:L})}async update(n){let h=this._core.utils.isUndefined(n.beauty)?.5:n.beauty,Q=this._core.utils.isUndefined(n.brightness)?.5:n.brightness,L=this._core.utils.isUndefined(n.ruddy)?.5:n.ruddy;return this._core.room.videoManager.setBeautyParams({beauty:h,brightness:Q,ruddy:L})}async stop(){return this._core.room.videoManager.renderMode="auto",this._core.room.videoManager.stopBeauty()}destroy(){this._core.room.videoManager.renderMode="auto"}};P(cA,"Name","BasicBeauty");var HA=cA;var FC=HA;export{HA as BasicBeauty,FC as default};