Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

trtc-sdk-v5

Package Overview
Dependencies
Maintainers
9
Versions
252
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

trtc-sdk-v5 - npm Package Compare versions

Comparing version 5.1.4-beta.3 to 5.2.0-beta.1

2

package.json
{
"name": "trtc-sdk-v5",
"version": "5.1.4-beta.3",
"version": "5.2.0-beta.1",
"description": "Tencent Cloud RTC SDK for Web",

@@ -5,0 +5,0 @@ "main": "trtc.js",

@@ -1,1 +0,1 @@

var ne=Object.create;var H=Object.defineProperty,ue=Object.defineProperties,de=Object.getOwnPropertyDescriptor,me=Object.getOwnPropertyDescriptors,le=Object.getOwnPropertyNames,q=Object.getOwnPropertySymbols,he=Object.getPrototypeOf,X=Object.prototype.hasOwnProperty,ce=Object.prototype.propertyIsEnumerable;var $=(l,e,i)=>e in l?H(l,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):l[e]=i,I=(l,e)=>{for(var i in e||(e={}))X.call(e,i)&&$(l,i,e[i]);if(q)for(var i of q(e))ce.call(e,i)&&$(l,i,e[i]);return l},W=(l,e)=>ue(l,me(e));var pe=(l,e)=>()=>(e||l((e={exports:{}}).exports,e),e.exports);var ge=(l,e,i,u)=>{if(e&&typeof e=="object"||typeof e=="function")for(let d of le(e))!X.call(l,d)&&d!==i&&H(l,d,{get:()=>e[d],enumerable:!(u=de(e,d))||u.enumerable});return l};var z=(l,e,i)=>(i=l!=null?ne(he(l)):{},ge(e||!l||!l.__esModule?H(i,"default",{value:l,enumerable:!0}):i,l));var b=(l,e,i)=>($(l,typeof e!="symbol"?e+"":e,i),i);var V=pe((j,x)=>{(function(l){"use strict";function e(t,h){var r=(t&65535)+(h&65535),g=(t>>16)+(h>>16)+(r>>16);return g<<16|r&65535}function i(t,h){return t<<h|t>>>32-h}function u(t,h,r,g,T,C){return e(i(e(e(h,t),e(g,C)),T),r)}function d(t,h,r,g,T,C,f){return u(h&r|~h&g,t,h,T,C,f)}function c(t,h,r,g,T,C,f){return u(h&g|r&~g,t,h,T,C,f)}function m(t,h,r,g,T,C,f){return u(h^r^g,t,h,T,C,f)}function p(t,h,r,g,T,C,f){return u(r^(h|~g),t,h,T,C,f)}function S(t,h){t[h>>5]|=128<<h%32,t[(h+64>>>9<<4)+14]=h;var r,g,T,C,f,o=1732584193,a=-271733879,s=-1732584194,n=271733878;for(r=0;r<t.length;r+=16)g=o,T=a,C=s,f=n,o=d(o,a,s,n,t[r],7,-680876936),n=d(n,o,a,s,t[r+1],12,-389564586),s=d(s,n,o,a,t[r+2],17,606105819),a=d(a,s,n,o,t[r+3],22,-1044525330),o=d(o,a,s,n,t[r+4],7,-176418897),n=d(n,o,a,s,t[r+5],12,1200080426),s=d(s,n,o,a,t[r+6],17,-1473231341),a=d(a,s,n,o,t[r+7],22,-45705983),o=d(o,a,s,n,t[r+8],7,1770035416),n=d(n,o,a,s,t[r+9],12,-1958414417),s=d(s,n,o,a,t[r+10],17,-42063),a=d(a,s,n,o,t[r+11],22,-1990404162),o=d(o,a,s,n,t[r+12],7,1804603682),n=d(n,o,a,s,t[r+13],12,-40341101),s=d(s,n,o,a,t[r+14],17,-1502002290),a=d(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=p(o,a,s,n,t[r],6,-198630844),n=p(n,o,a,s,t[r+7],10,1126891415),s=p(s,n,o,a,t[r+14],15,-1416354905),a=p(a,s,n,o,t[r+5],21,-57434055),o=p(o,a,s,n,t[r+12],6,1700485571),n=p(n,o,a,s,t[r+3],10,-1894986606),s=p(s,n,o,a,t[r+10],15,-1051523),a=p(a,s,n,o,t[r+1],21,-2054922799),o=p(o,a,s,n,t[r+8],6,1873313359),n=p(n,o,a,s,t[r+15],10,-30611744),s=p(s,n,o,a,t[r+6],15,-1560198380),a=p(a,s,n,o,t[r+13],21,1309151649),o=p(o,a,s,n,t[r+4],6,-145523070),n=p(n,o,a,s,t[r+11],10,-1120210379),s=p(s,n,o,a,t[r+2],15,718787259),a=p(a,s,n,o,t[r+9],21,-343485551),o=e(o,g),a=e(a,T),s=e(s,C),n=e(n,f);return[o,a,s,n]}function _(t){var h,r="",g=t.length*32;for(h=0;h<g;h+=8)r+=String.fromCharCode(t[h>>5]>>>h%32&255);return r}function D(t){var h,r=[];for(r[(t.length>>2)-1]=void 0,h=0;h<r.length;h+=1)r[h]=0;var g=t.length*8;for(h=0;h<g;h+=8)r[h>>5]|=(t.charCodeAt(h/8)&255)<<h%32;return r}function M(t){return _(S(D(t),t.length*8))}function U(t,h){var r,g=D(t),T=[],C=[],f;for(T[15]=C[15]=void 0,g.length>16&&(g=S(g,t.length*8)),r=0;r<16;r+=1)T[r]=g[r]^909522486,C[r]=g[r]^1549556828;return f=S(T.concat(D(h)),512+h.length*8),_(S(C.concat(f),512+128))}function E(t){var h="0123456789abcdef",r="",g,T;for(T=0;T<t.length;T+=1)g=t.charCodeAt(T),r+=h.charAt(g>>>4&15)+h.charAt(g&15);return r}function R(t){return unescape(encodeURIComponent(t))}function P(t){return M(R(t))}function F(t){return E(P(t))}function J(t,h){return U(R(t),R(h))}function se(t,h){return E(J(t,h))}function B(t,h,r){return h?r?J(h,t):se(h,t):r?P(t):F(t)}typeof define=="function"&&define.amd?define(function(){return B}):typeof x=="object"&&x.exports?x.exports=B:l.md5=B})(j)});var Y=z(V(),1);var A=(u=>(u.PublishMainStreamToCDN="publish-main-stream-to-cdn",u.PublishSubStreamToCDN="publish-sub-stream-to-cdn",u.PublishMixStreamToCDN="publish-mix-stream-to-cdn",u))(A||{}),K=(i=>(i.Main="main",i.Sub="sub",i))(K||{});var v={IT_AUDIO_VIDEO:0,IT_PICTURE:2,IT_CANVAS:3,IT_PURE_AUDIO:4,IT_PURE_VIDEO:5};var N=class{constructor(e){b(this,"_room");b(this,"_log");b(this,"_paramsForGivenCDN");b(this,"_publishGivenCDNData",null);b(this,"_isPublishingGivenCDN",!1);this._room=e.room,this._log=e.log,this._paramsForGivenCDN=new Map([["publish-main-stream-to-cdn",null],["publish-sub-stream-to-cdn",null],["publish-mix-stream-to-cdn",null]])}async startPublishGivenCDN(e){this._log.info(`startPublishGivenCDN() ${JSON.stringify(e)}`),this._paramsForGivenCDN.set(e.publishMode,e);let i={pushRequestTime:Date.now(),pushAppId:e.appId,pushBizId:e.bizId,pushCdnUrl:e.url,pushStreamType:this.convertStreamType(e==null?void 0:e.publishMode),pushStreamId:e.streamId};this._publishGivenCDNData=i;try{this._isPublishingGivenCDN&&await this.stopPublishGivenCDN();let u=await this._room.sendStartPublishCDN(i,!1),{code:d,message:c}=u.data;if(d===0)this._isPublishingGivenCDN=!0;else throw this.resetGivenCDN(),this._log.error(`startPublishGivenCDN failed, errCode: ${d}, errMsg: ${c}`),new Error(`startPublishGivenCDN failed, errCode: ${d} errMsg: ${c}`)}catch(u){throw this.resetGivenCDN(),u}}async stopPublishGivenCDN(){if(this._log.info(`stopPublishGivenCDN: ${JSON.stringify(this._publishGivenCDNData)}`),!this._isPublishingGivenCDN||!this._publishGivenCDNData){this.resetGivenCDN();return}let{pushAppId:e,pushBizId:i,pushCdnUrl:u,pushStreamType:d,pushStreamId:c}=this._publishGivenCDNData,m={pushRequestTime:Date.now(),pushAppId:e,pushBizId:i,pushCdnUrl:u,pushStreamType:d,pushStreamId:c},p=await this._room.sendStopPublishCDN(m,!1),{code:S,message:_}=p.data;if(S===0)this.resetGivenCDN();else throw this._log.error(`stopPublishGivenCDN failed, errCode: ${S} errMsg: ${_}`),new Error(`stopPublishGivenCDN failed, errCode: ${S} errMsg: ${_}`)}resetGivenCDN(){this._publishGivenCDNData=null,this._isPublishingGivenCDN=!1}convertStreamType(e){return e==="publish-main-stream-to-cdn"?"main":"aux"}};var L=class{constructor(e,i){b(this,"_core");b(this,"_room");b(this,"cdnLog");b(this,"_config",null);b(this,"_data",null);b(this,"_givenCDNManager");this._core=e,this._room=e.room,this.cdnLog=i,this.reset()}get isMixing(){return!!this._data}get isStarted(){return!!this._config}get hasCustomCDN(){var e,i,u;return((e=this._config)==null?void 0:e.target.appId)&&((i=this._config)==null?void 0:i.target.bizId)&&((u=this._config)==null?void 0:u.target.url)}async startMixTranscode(e){if(this.cdnLog.info(`startMixTranscode: ${e}`),this._config=e,this.installEvents(),!!this._core.room.isJoined)try{let i=this.getInputParam(e),u=this.getOutputParam(e),d=this.getOutputSessionId({config:e,roomId:this._room.roomId,userId:this._room.userId});this.isMixing&&this._data&&d!==this._data.outputSessionId&&(this.cdnLog.info("startMixTranscode() streamId changed, stop mixing before start"),await this.doStopMixTranscode()),await this.doStartMixTranscode({outputSessionId:d,inputParam:i,outputParam:u});let{appId:c,bizId:m,url:p,streamId:S=""}=this._config.target;c&&m&&p&&(this._givenCDNManager||(this._givenCDNManager=new N(this._core)),await this._givenCDNManager.startPublishGivenCDN({publishMode:e.target.publishMode,appId:c,bizId:m,url:p,streamId:S}))}catch(i){throw this.reset(),i}}async doStartMixTranscode({outputSessionId:e,inputParam:i,outputParam:u}){let d={roomId:String(this._room.roomId),mcuRequestTime:Date.now(),outputSessionId:e,inputParam:i,outputParam:u};this.cdnLog.info(`doStartMixTranscode: ${JSON.stringify(d)}`);let c=await this._room.sendStartMixTranscode(d),{code:m}=c.data,{message:p}=c.data;if(m===0)this._data=d;else throw m===-102083&&(p=`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.cdnLog.error(`startMixTranscode failed, errCode: ${m} errMsg: ${p}`),new Error(`startMixTranscode failed, errCode: ${m} errMsg: ${p}`)}async stopMixTranscode(){this.cdnLog.info(`stopMixTranscode: ${this.isMixing}`);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.cdnLog.info(`doStopMixTranscode: ${JSON.stringify(e)}`);let i=await this._room.sendStopMixTranscode(e),{code:u,message:d}=i.data;if(u===0)this.reset();else throw this.cdnLog.error(`stopMixTranscode failed, errCode: ${u} errMsg: ${d}`),new Error(`stopMixTranscode failed, errCode: ${u} errMsg: ${d}`)}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.cdnLog.info(`handleJoined() ${JSON.stringify(this._config)}`),this.isStarted&&this._config&&await this.startMixTranscode(this._config)}async handleRoomLeft(){this.cdnLog.info(`handleJoined() ${JSON.stringify(this._config)}`),this._data=null}getOutputSessionId({config:e,userId:i,roomId:u}){return this._core.utils.isString(e.target.streamId)&&e.target.streamId.length>0?e.target.streamId:(0,Y.default)(`${u}_${i}_main`)}getStringRoomId(e,i){return e?String(e):i}getInputParam(e){let{mix:i={}}=e,{audioMixUserList:u=[],videoLayoutList:d=[]}=i,c=d.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:v.IT_PURE_VIDEO,renderMode:m.fillMode||0}));return u.forEach(m=>{let p=c.findIndex(S=>S.userId===m.userId&&S.room===this.getStringRoomId(m.roomId,m.strRoomId));p!==-1?c[p].inputType=v.IT_AUDIO_VIDEO:c.push({userId:m.userId,roomId:m.roomId||m.strRoomId,inputType:v.IT_PURE_AUDIO})}),c}getOutputParam(e){let i=e.target.streamId||"",{encoding:u={},mix:d={}}=e;return{streamId:i,streamType:i.length>0?1:0,width:this._core.utils.isUndefined(u.videoWidth)?640:u.videoWidth,height:this._core.utils.isUndefined(u.videoHeight)?480:u.videoHeight,videoBps:u.videoBitrate||0,fps:u.videoFramerate||15,gop:u.videoGOP||2,audioSampleRate:u.audioSampleRate||48e3,audioBps:u.audioBitrate||64,audioChannels:u.audioChannels||1,backgroundColor:d.backgroundColor||0,backgroundImg:d.backgroundImage||"",extraInfo:"",videoCodec:2,audioCodec:0}}};var w=z(V(),1);var y=class{constructor(e,i){b(this,"_core");b(this,"_room");b(this,"cdnLog");b(this,"_paramsForTencentCDN");b(this,"_initParamsForTencentCDN",{isPublished:!1,isStarted:!1});this._core=e,this._room=e.room,this.cdnLog=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 d;this.cdnLog.info(`handlePublished: mediaType ${e.mediaType}, roomID ${(d=e==null?void 0:e.room)==null?void 0:d.roomId}`);let i=e.mediaType===4?"publish-main-stream-to-cdn":"publish-sub-stream-to-cdn",u=this._paramsForTencentCDN.get(i)||null;u!=null&&u.target&&u.isStarted&&await this.startPublishTencentCDN(u.target)}async 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.cdnLog.info("Main stream has not already published, will auto reStart after published."),!1):e==="publish-sub-stream-to-cdn"&&!this._room.isAuxStreamPublished?(this.cdnLog.info("Sub has not already published, will auto reStart after published."),!1):!0}changeDataStatus(e,i){let u=this._paramsForTencentCDN.get(e),d=I(I({},u),i);this._paramsForTencentCDN.set(e,d)}async startPublishTencentCDN(e){if(this.cdnLog.info(`startPublishTencentCDN ${JSON.stringify(e)}`),this.installEvents(),this.changeDataStatus(e.publishMode,{target:e,isStarted:!0}),!this.isStreamPublished(e.publishMode))return;let i=e.streamId||"",u=this.generatePublishCDNStreamId(i,e.publishMode),d=this.generatePublishCDNSessionId(e.publishMode),c=e.publishMode==="publish-sub-stream-to-cdn"?1:0,m={requestTime:Date.now(),sessionId:d,streamId:u,streamType:c};await this.doStartPublishTencentCDN(m,e.publishMode);let{appId:p,bizId:S,url:_}=e;if(p&&S&&_){let D=this._paramsForTencentCDN.get(e.publishMode)||this._initParamsForTencentCDN;D!=null&&D.givenCDNManager||(D.givenCDNManager=new N(this._core),this._paramsForTencentCDN.set(e.publishMode,D)),await D.givenCDNManager.startPublishGivenCDN({publishMode:e.publishMode,appId:p,bizId:S,url:_,streamId:u})}}async doStartPublishTencentCDN(e,i){this.cdnLog.info(`doStartPublishTencentCDN: ${JSON.stringify(e)}`);try{let c=0;for(;;){let m=await this._room.sendStartPublishCDN(e,!0),{code:p}=m.data,{message:S}=m.data;if(p===0){this.cdnLog.info(`doStartPublishTencentCDN: success ${JSON.stringify(m)}`),this.changeDataStatus(i,{isPublished:!0});break}else if(p===-10006&&c<6)this.cdnLog.warn(`doStartPublishTencentCDN: retry...${c+1}/6, reason: ${S}`),c+=1,await new Promise(_=>setTimeout(_,500));else throw this.changeDataStatus(i,{isPublished:!1}),p===-102083&&(S=`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`),new Error(`startPublishTencentCDN failed, errCode: ${p} errMsg: ${S}`)}}catch(u){throw this.cdnLog.error(`startPublishTencentCDN failed, error: ${u}`),this.changeDataStatus(i,{isPublished:!1}),u}}async stopPublishTencentCDN(e){let i=this._paramsForTencentCDN.get(e)||this._initParamsForTencentCDN;if(i.isPublished){let{target:u}=i;u!=null&&u.bizId&&u.appId&&u.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,w.default)(`${this._room.roomId}_${this._room.userId}_${this.convertPublishModeToStreamType(e)}`)};this.cdnLog.info(`stopPublishTencentCDN: ${JSON.stringify(i)}`);let u=await this._room.sendStopPublishCDN(i,!0),{code:d,message:c}=u.data;if(d===0)this._paramsForTencentCDN.set(e,this._initParamsForTencentCDN),this.reset(e);else if(d===-102069)this.cdnLog.error("stopPublishTencentCDN failed, can not stopPublishTencentCDN in auto relayed-push mode"),this._paramsForTencentCDN.set(e,this._initParamsForTencentCDN);else throw this.cdnLog.error(`stopPublishTencentCDN failed, errCode: ${d} errMsg: ${c}`),new Error(`stopPublishTencentCDN failed, errCode: ${d} errMsg: ${c}`)}reset(e){this.uninstallEvents(),this._paramsForTencentCDN.set(e,this._initParamsForTencentCDN)}generatePublishCDNStreamId(e,i){if(e===""){let u=`${this._room.roomId}_${this._room.userId}_${this.convertPublishModeToStreamType(i)}`;return/^[A-Za-z\d_-]*$/.test(u)||(u=(0,w.default)(u)),`${this._room.sdkAppId}_${u}`}return e}convertPublishModeToStreamType(e){return e==="publish-main-stream-to-cdn"?"main":"aux"}generatePublishCDNSessionId(e){return(0,w.default)(`${this._room.roomId}_${this._room.userId}_${this.convertPublishModeToStreamType(e)}`)}};var Z=l=>typeof l=="string";function Se(l,e,i,u){if(!/^[A-Za-z\d_-]*$/.test(l))throw new Error("Invalid parameter streamId.")}function Te(l,e,i,u){if(Z(l))throw new Error("roomId must be an integer but go a string, use 'parseInt' to convert it or use 'strRoomId' instead.");if(l===void 0)return;if(!(/^[1-9]\d*$/.test(String(l))&&l<4294967295))throw new Error("roomId must be an integer between [1, 4294967294].")}function Ce(l,e,i,u){if(!/^[A-Za-z\d\s!#$%&()+\-:;<=.>?@[\]^_{}|~,]{1,64}$/.test(l))throw new Error("strRoomId must be a valid string.")}var O={type:"number",notLessThanZero:!0},Q={type:"object",required:!0,properties:{userId:{required:!0,type:"string"},roomId:{type:["string","number"],validate:Te},strRoomId:{type:"string",validate:Ce}}},ee={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:Se},appId:{type:"number",allowEmpty:!1},bizId:{type:"number",allowEmpty:!1},url:{type:"string",allowEmpty:!1}}},te={required:!1,type:"object",properties:{videoWidth:O,videoHeight:O,videoBitrate:W(I({},O),{allowEmpty:!1}),videoFramerate:{type:"number",validate(l,e,i,u){if(l<=0||l>30)throw new Error("Invalid parameter mixConfig -> videoFramerate, the value must be between (0, 30].")}},videoGOP:{type:"number",validate(l,e,i,u){if(l<1||l>8)throw new Error("Invalid parameter mixConfig -> videoGOP, the value must be between [1, 8].")}},audioSampleRate:O,audioBitrate:{type:"number",validate(l,e,i,u){if(l<32||l>192)throw new Error("Invalid parameter mixConfig -> audioBitrate, the value must be between [32, 192].")}},audioChannels:{type:"number",values:[1,2]}}},re={required:!1,type:"object",properties:{backgroundColor:{type:"number"},backgroundImage:{type:"string"},audioMixUserList:{type:"array",arrayItem:I({},Q)},videoLayoutList:{type:"array",required:!0,arrayItem:{type:"object",properties:{fixedVideoUser:I({},Q),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,u){if(l<1||l>15)throw new Error("Invalid parameter mix -> videoLayoutList -> zOrder, the value must be between [1, 15].")}},width:O,height:O,locationX:O,locationY:O}}}}};function ie(l){return{name:"CDNStreamingOptions",type:"object",required:!0,allowEmpty:!1,properties:{target:I({},ee),encoding:I({},te),mix:I({},re)},validate(e,i,u,d){var S,_;let{publishMode:c}=e.target,{encoding:m,mix:p}=e;if(c==="publish-mix-stream-to-cdn"){if(!m||!p)throw new Error("Invalid parameter mix & encoding, the value must be not empty.");if(p&&p.videoLayoutList){let D=0,M=0,U=[];if(p.videoLayoutList.forEach((P,F)=>{U.push(P.fixedVideoUser.userId),P.width+P.locationX>D&&(D=P.width+P.locationX),P.height+P.locationY>M&&(M=P.height+P.locationY)}),U.indexOf(l.room.userId)<0)throw new Error("Invalid parameter mix -> videoLayoutList, the value must be include self.");let E=(S=m==null?void 0:m.videoWidth)!=null?S:640,R=(_=m==null?void 0:m.videoHeight)!=null?_:480;if(E<D||R<M)throw new Error("Invalid parameter encoding, the width and height of the mixed video must encompass all the mixed-in video streams.")}}}}}function oe(l){return{name:"CDNStreamingOptions",type:"object",required:!0,allowEmpty:!1,properties:{target:I({},ee),encoding:I({},te),mix:I({},re)}}}function ae(l){return{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 G=0,k=class{constructor(e){this.core=e;b(this,"_mixTranscodeManager");b(this,"_publishCDNManager");b(this,"_core");b(this,"cdnLog");b(this,"_modeOptions");b(this,"seq");G=G+1,this.seq=G,this.cdnLog=e.log.createChild({id:`${this.getAlias()}${G}`}),this._core=e,this.cdnLog.info("CDNStreaming created"),this._modeOptions=new Map,this._mixTranscodeManager=new L(e,this.cdnLog),this._publishCDNManager=new y(e,this.cdnLog)}getName(){return"CDNStreaming"}getAlias(){return"cdn"}getValidateRule(e){switch(e){case"start":return ie(this._core);case"update":return oe(this._core);case"stop":return ae(this._core)}}getGroup(e){return e.target.publishMode}async start(e){return this.cdnLog.info(`Plugin CDNStreaming start: ${JSON.stringify(e)}`),this._modeOptions.set(e.target.publishMode,e),await this.doStart(e)}async update(e){this.cdnLog.info(`Plugin CDNStreaming update: ${JSON.stringify(e)}`);let i=this._modeOptions.get(e.target.publishMode);return this._core.utils.deepMerge(i,e),await this.doStart(i)}async stop(e){switch(this.cdnLog.info(`Plugin CDNStreaming stop: ${JSON.stringify(e)}`),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.cdnLog.info(`Plugin 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}}}};b(k,"TYPE",{PublishMode:{PublishMainStreamToCDN:"publish-main-stream-to-cdn",PublishSubStreamToCDN:"publish-sub-stream-to-cdn",PublishMixStreamToCDN:"publish-mix-stream-to-cdn"}});var tt=k;export{k as CDNStreaming,A as PublishMode,K as TRTCStreamType,tt as default};
var ne=Object.create;var H=Object.defineProperty,ue=Object.defineProperties,de=Object.getOwnPropertyDescriptor,me=Object.getOwnPropertyDescriptors,le=Object.getOwnPropertyNames,q=Object.getOwnPropertySymbols,he=Object.getPrototypeOf,X=Object.prototype.hasOwnProperty,ce=Object.prototype.propertyIsEnumerable;var $=(l,e,i)=>e in l?H(l,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):l[e]=i,I=(l,e)=>{for(var i in e||(e={}))X.call(e,i)&&$(l,i,e[i]);if(q)for(var i of q(e))ce.call(e,i)&&$(l,i,e[i]);return l},W=(l,e)=>ue(l,me(e));var pe=(l,e)=>()=>(e||l((e={exports:{}}).exports,e),e.exports);var ge=(l,e,i,u)=>{if(e&&typeof e=="object"||typeof e=="function")for(let d of le(e))!X.call(l,d)&&d!==i&&H(l,d,{get:()=>e[d],enumerable:!(u=de(e,d))||u.enumerable});return l};var z=(l,e,i)=>(i=l!=null?ne(he(l)):{},ge(e||!l||!l.__esModule?H(i,"default",{value:l,enumerable:!0}):i,l));var b=(l,e,i)=>($(l,typeof e!="symbol"?e+"":e,i),i);var V=pe((j,x)=>{(function(l){"use strict";function e(t,h){var r=(t&65535)+(h&65535),g=(t>>16)+(h>>16)+(r>>16);return g<<16|r&65535}function i(t,h){return t<<h|t>>>32-h}function u(t,h,r,g,T,C){return e(i(e(e(h,t),e(g,C)),T),r)}function d(t,h,r,g,T,C,f){return u(h&r|~h&g,t,h,T,C,f)}function c(t,h,r,g,T,C,f){return u(h&g|r&~g,t,h,T,C,f)}function m(t,h,r,g,T,C,f){return u(h^r^g,t,h,T,C,f)}function p(t,h,r,g,T,C,f){return u(r^(h|~g),t,h,T,C,f)}function S(t,h){t[h>>5]|=128<<h%32,t[(h+64>>>9<<4)+14]=h;var r,g,T,C,f,o=1732584193,a=-271733879,s=-1732584194,n=271733878;for(r=0;r<t.length;r+=16)g=o,T=a,C=s,f=n,o=d(o,a,s,n,t[r],7,-680876936),n=d(n,o,a,s,t[r+1],12,-389564586),s=d(s,n,o,a,t[r+2],17,606105819),a=d(a,s,n,o,t[r+3],22,-1044525330),o=d(o,a,s,n,t[r+4],7,-176418897),n=d(n,o,a,s,t[r+5],12,1200080426),s=d(s,n,o,a,t[r+6],17,-1473231341),a=d(a,s,n,o,t[r+7],22,-45705983),o=d(o,a,s,n,t[r+8],7,1770035416),n=d(n,o,a,s,t[r+9],12,-1958414417),s=d(s,n,o,a,t[r+10],17,-42063),a=d(a,s,n,o,t[r+11],22,-1990404162),o=d(o,a,s,n,t[r+12],7,1804603682),n=d(n,o,a,s,t[r+13],12,-40341101),s=d(s,n,o,a,t[r+14],17,-1502002290),a=d(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=p(o,a,s,n,t[r],6,-198630844),n=p(n,o,a,s,t[r+7],10,1126891415),s=p(s,n,o,a,t[r+14],15,-1416354905),a=p(a,s,n,o,t[r+5],21,-57434055),o=p(o,a,s,n,t[r+12],6,1700485571),n=p(n,o,a,s,t[r+3],10,-1894986606),s=p(s,n,o,a,t[r+10],15,-1051523),a=p(a,s,n,o,t[r+1],21,-2054922799),o=p(o,a,s,n,t[r+8],6,1873313359),n=p(n,o,a,s,t[r+15],10,-30611744),s=p(s,n,o,a,t[r+6],15,-1560198380),a=p(a,s,n,o,t[r+13],21,1309151649),o=p(o,a,s,n,t[r+4],6,-145523070),n=p(n,o,a,s,t[r+11],10,-1120210379),s=p(s,n,o,a,t[r+2],15,718787259),a=p(a,s,n,o,t[r+9],21,-343485551),o=e(o,g),a=e(a,T),s=e(s,C),n=e(n,f);return[o,a,s,n]}function _(t){var h,r="",g=t.length*32;for(h=0;h<g;h+=8)r+=String.fromCharCode(t[h>>5]>>>h%32&255);return r}function D(t){var h,r=[];for(r[(t.length>>2)-1]=void 0,h=0;h<r.length;h+=1)r[h]=0;var g=t.length*8;for(h=0;h<g;h+=8)r[h>>5]|=(t.charCodeAt(h/8)&255)<<h%32;return r}function A(t){return _(S(D(t),t.length*8))}function U(t,h){var r,g=D(t),T=[],C=[],f;for(T[15]=C[15]=void 0,g.length>16&&(g=S(g,t.length*8)),r=0;r<16;r+=1)T[r]=g[r]^909522486,C[r]=g[r]^1549556828;return f=S(T.concat(D(h)),512+h.length*8),_(S(C.concat(f),512+128))}function E(t){var h="0123456789abcdef",r="",g,T;for(T=0;T<t.length;T+=1)g=t.charCodeAt(T),r+=h.charAt(g>>>4&15)+h.charAt(g&15);return r}function R(t){return unescape(encodeURIComponent(t))}function P(t){return A(R(t))}function F(t){return E(P(t))}function J(t,h){return U(R(t),R(h))}function se(t,h){return E(J(t,h))}function B(t,h,r){return h?r?J(h,t):se(h,t):r?P(t):F(t)}typeof define=="function"&&define.amd?define(function(){return B}):typeof x=="object"&&x.exports?x.exports=B:l.md5=B})(j)});var Y=z(V(),1);var N=(u=>(u.PublishMainStreamToCDN="publish-main-stream-to-cdn",u.PublishSubStreamToCDN="publish-sub-stream-to-cdn",u.PublishMixStreamToCDN="publish-mix-stream-to-cdn",u))(N||{}),K=(i=>(i.Main="main",i.Sub="sub",i))(K||{});var v={IT_AUDIO_VIDEO:0,IT_PICTURE:2,IT_CANVAS:3,IT_PURE_AUDIO:4,IT_PURE_VIDEO:5};var M=class{constructor(e){b(this,"_room");b(this,"_log");b(this,"_paramsForGivenCDN");b(this,"_publishGivenCDNData",null);b(this,"_isPublishingGivenCDN",!1);this._room=e.room,this._log=e.log,this._paramsForGivenCDN=new Map([["publish-main-stream-to-cdn",null],["publish-sub-stream-to-cdn",null],["publish-mix-stream-to-cdn",null]])}async startPublishGivenCDN(e){this._log.info(`startPublishGivenCDN() ${JSON.stringify(e)}`),this._paramsForGivenCDN.set(e.publishMode,e);let i={pushRequestTime:Date.now(),pushAppId:e.appId,pushBizId:e.bizId,pushCdnUrl:e.url,pushStreamType:this.convertStreamType(e==null?void 0:e.publishMode),pushStreamId:e.streamId};this._publishGivenCDNData=i;try{this._isPublishingGivenCDN&&await this.stopPublishGivenCDN();let u=await this._room.sendStartPublishCDN(i,!1),{code:d,message:c}=u.data;if(d===0)this._isPublishingGivenCDN=!0;else throw this.resetGivenCDN(),this._log.error(`startPublishGivenCDN failed, errCode: ${d}, errMsg: ${c}`),new Error(`startPublishGivenCDN failed, errCode: ${d} errMsg: ${c}`)}catch(u){throw this.resetGivenCDN(),u}}async stopPublishGivenCDN(){if(this._log.info(`stopPublishGivenCDN: ${JSON.stringify(this._publishGivenCDNData)}`),!this._isPublishingGivenCDN||!this._publishGivenCDNData){this.resetGivenCDN();return}let{pushAppId:e,pushBizId:i,pushCdnUrl:u,pushStreamType:d,pushStreamId:c}=this._publishGivenCDNData,m={pushRequestTime:Date.now(),pushAppId:e,pushBizId:i,pushCdnUrl:u,pushStreamType:d,pushStreamId:c},p=await this._room.sendStopPublishCDN(m,!1),{code:S,message:_}=p.data;if(S===0)this.resetGivenCDN();else throw this._log.error(`stopPublishGivenCDN failed, errCode: ${S} errMsg: ${_}`),new Error(`stopPublishGivenCDN failed, errCode: ${S} errMsg: ${_}`)}resetGivenCDN(){this._publishGivenCDNData=null,this._isPublishingGivenCDN=!1}convertStreamType(e){return e==="publish-main-stream-to-cdn"?"main":"aux"}};var y=class{constructor(e,i){b(this,"_core");b(this,"_room");b(this,"cdnLog");b(this,"_config",null);b(this,"_data",null);b(this,"_givenCDNManager");this._core=e,this._room=e.room,this.cdnLog=i,this.reset()}get isMixing(){return!!this._data}get isStarted(){return!!this._config}get hasCustomCDN(){var e,i,u;return((e=this._config)==null?void 0:e.target.appId)&&((i=this._config)==null?void 0:i.target.bizId)&&((u=this._config)==null?void 0:u.target.url)}async startMixTranscode(e){if(this.cdnLog.info(`startMixTranscode: ${e}`),this._config=e,this.installEvents(),!!this._core.room.isJoined)try{let i=this.getInputParam(e),u=this.getOutputParam(e),d=this.getOutputSessionId({config:e,roomId:this._room.roomId,userId:this._room.userId});this.isMixing&&this._data&&d!==this._data.outputSessionId&&(this.cdnLog.info("startMixTranscode() streamId changed, stop mixing before start"),await this.doStopMixTranscode()),await this.doStartMixTranscode({outputSessionId:d,inputParam:i,outputParam:u});let{appId:c,bizId:m,url:p,streamId:S=""}=this._config.target;c&&m&&p&&(this._givenCDNManager||(this._givenCDNManager=new M(this._core)),await this._givenCDNManager.startPublishGivenCDN({publishMode:e.target.publishMode,appId:c,bizId:m,url:p,streamId:S}))}catch(i){throw this.reset(),i}}async doStartMixTranscode({outputSessionId:e,inputParam:i,outputParam:u}){let d={roomId:String(this._room.roomId),mcuRequestTime:Date.now(),outputSessionId:e,inputParam:i,outputParam:u};this.cdnLog.info(`doStartMixTranscode: ${JSON.stringify(d)}`);let c=await this._room.sendStartMixTranscode(d),{code:m}=c.data,{message:p}=c.data;if(m===0)this._data=d;else throw m===-102083&&(p=`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.cdnLog.error(`startMixTranscode failed, errCode: ${m} errMsg: ${p}`),new Error(`startMixTranscode failed, errCode: ${m} errMsg: ${p}`)}async stopMixTranscode(){this.cdnLog.info(`stopMixTranscode: ${this.isMixing}`);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.cdnLog.info(`doStopMixTranscode: ${JSON.stringify(e)}`);let i=await this._room.sendStopMixTranscode(e),{code:u,message:d}=i.data;if(u===0)this.reset();else throw this.cdnLog.error(`stopMixTranscode failed, errCode: ${u} errMsg: ${d}`),new Error(`stopMixTranscode failed, errCode: ${u} errMsg: ${d}`)}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.cdnLog.info(`handleJoined() ${JSON.stringify(this._config)}`),this.isStarted&&this._config&&await this.startMixTranscode(this._config)}async handleRoomLeft(){this.cdnLog.info(`handleJoined() ${JSON.stringify(this._config)}`),this._data=null}getOutputSessionId({config:e,userId:i,roomId:u}){return this._core.utils.isString(e.target.streamId)&&e.target.streamId.length>0?e.target.streamId:(0,Y.default)(`${u}_${i}_main`)}getStringRoomId(e,i){return e?String(e):i}getInputParam(e){let{mix:i={}}=e,{audioMixUserList:u=[],videoLayoutList:d=[]}=i,c=d.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:v.IT_PURE_VIDEO,renderMode:m.fillMode||0}));return u.forEach(m=>{let p=c.findIndex(S=>S.userId===m.userId&&S.room===this.getStringRoomId(m.roomId,m.strRoomId));p!==-1?c[p].inputType=v.IT_AUDIO_VIDEO:c.push({userId:m.userId,roomId:m.roomId||m.strRoomId,inputType:v.IT_PURE_AUDIO})}),c}getOutputParam(e){let i=e.target.streamId||"",{encoding:u={},mix:d={}}=e;return{streamId:i,streamType:i.length>0?1:0,width:this._core.utils.isUndefined(u.videoWidth)?640:u.videoWidth,height:this._core.utils.isUndefined(u.videoHeight)?480:u.videoHeight,videoBps:u.videoBitrate||0,fps:u.videoFramerate||15,gop:u.videoGOP||2,audioSampleRate:u.audioSampleRate||48e3,audioBps:u.audioBitrate||64,audioChannels:u.audioChannels||1,backgroundColor:d.backgroundColor||0,backgroundImg:d.backgroundImage||"",extraInfo:"",videoCodec:2,audioCodec:0}}};var w=z(V(),1);var L=class{constructor(e,i){b(this,"_core");b(this,"_room");b(this,"cdnLog");b(this,"_paramsForTencentCDN");b(this,"_initParamsForTencentCDN",{isPublished:!1,isStarted:!1});this._core=e,this._room=e.room,this.cdnLog=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 d;this.cdnLog.info(`handlePublished: mediaType ${e.mediaType}, roomID ${(d=e==null?void 0:e.room)==null?void 0:d.roomId}`);let i=e.mediaType===4?"publish-main-stream-to-cdn":"publish-sub-stream-to-cdn",u=this._paramsForTencentCDN.get(i)||null;u!=null&&u.target&&u.isStarted&&await this.startPublishTencentCDN(u.target)}async 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.cdnLog.info("Main stream has not already published, will auto reStart after published."),!1):e==="publish-sub-stream-to-cdn"&&!this._room.isAuxStreamPublished?(this.cdnLog.info("Sub has not already published, will auto reStart after published."),!1):!0}changeDataStatus(e,i){let u=this._paramsForTencentCDN.get(e),d=I(I({},u),i);this._paramsForTencentCDN.set(e,d)}async startPublishTencentCDN(e){if(this.cdnLog.info(`startPublishTencentCDN ${JSON.stringify(e)}`),this.installEvents(),this.changeDataStatus(e.publishMode,{target:e,isStarted:!0}),!this.isStreamPublished(e.publishMode))return;let i=e.streamId||"",u=this.generatePublishCDNStreamId(i,e.publishMode),d=this.generatePublishCDNSessionId(e.publishMode),c=e.publishMode==="publish-sub-stream-to-cdn"?1:0,m={requestTime:Date.now(),sessionId:d,streamId:u,streamType:c};await this.doStartPublishTencentCDN(m,e.publishMode);let{appId:p,bizId:S,url:_}=e;if(p&&S&&_){let D=this._paramsForTencentCDN.get(e.publishMode)||this._initParamsForTencentCDN;D!=null&&D.givenCDNManager||(D.givenCDNManager=new M(this._core),this._paramsForTencentCDN.set(e.publishMode,D)),await D.givenCDNManager.startPublishGivenCDN({publishMode:e.publishMode,appId:p,bizId:S,url:_,streamId:u})}}async doStartPublishTencentCDN(e,i){this.cdnLog.info(`doStartPublishTencentCDN: ${JSON.stringify(e)}`);try{let c=0;for(;;){let m=await this._room.sendStartPublishCDN(e,!0),{code:p}=m.data,{message:S}=m.data;if(p===0){this.cdnLog.info(`doStartPublishTencentCDN: success ${JSON.stringify(m)}`),this.changeDataStatus(i,{isPublished:!0});break}else if(p===-10006&&c<6)this.cdnLog.warn(`doStartPublishTencentCDN: retry...${c+1}/6, reason: ${S}`),c+=1,await new Promise(_=>setTimeout(_,500));else throw this.changeDataStatus(i,{isPublished:!1}),p===-102083&&(S=`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`),new Error(`startPublishTencentCDN failed, errCode: ${p} errMsg: ${S}`)}}catch(u){throw this.cdnLog.error(`startPublishTencentCDN failed, error: ${u}`),this.changeDataStatus(i,{isPublished:!1}),u}}async stopPublishTencentCDN(e){let i=this._paramsForTencentCDN.get(e)||this._initParamsForTencentCDN;if(i.isPublished){let{target:u}=i;u!=null&&u.bizId&&u.appId&&u.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,w.default)(`${this._room.roomId}_${this._room.userId}_${this.convertPublishModeToStreamType(e)}`)};this.cdnLog.info(`stopPublishTencentCDN: ${JSON.stringify(i)}`);let u=await this._room.sendStopPublishCDN(i,!0),{code:d,message:c}=u.data;if(d===0)this._paramsForTencentCDN.set(e,this._initParamsForTencentCDN),this.reset(e);else if(d===-102069)this.cdnLog.error("stopPublishTencentCDN failed, can not stopPublishTencentCDN in auto relayed-push mode"),this._paramsForTencentCDN.set(e,this._initParamsForTencentCDN);else throw this.cdnLog.error(`stopPublishTencentCDN failed, errCode: ${d} errMsg: ${c}`),new Error(`stopPublishTencentCDN failed, errCode: ${d} errMsg: ${c}`)}reset(e){this.uninstallEvents(),this._paramsForTencentCDN.set(e,this._initParamsForTencentCDN)}generatePublishCDNStreamId(e,i){if(e===""){let u=`${this._room.roomId}_${this._room.userId}_${this.convertPublishModeToStreamType(i)}`;return/^[A-Za-z\d_-]*$/.test(u)||(u=(0,w.default)(u)),`${this._room.sdkAppId}_${u}`}return e}convertPublishModeToStreamType(e){return e==="publish-main-stream-to-cdn"?"main":"aux"}generatePublishCDNSessionId(e){return(0,w.default)(`${this._room.roomId}_${this._room.userId}_${this.convertPublishModeToStreamType(e)}`)}};var Z=l=>typeof l=="string";function Se(l,e,i,u){if(!/^[A-Za-z\d_-]*$/.test(l))throw new Error("Invalid parameter streamId.")}function Te(l,e,i,u){if(Z(l))throw new Error("roomId must be an integer but go a string, use 'parseInt' to convert it or use 'strRoomId' instead.");if(l===void 0)return;if(!(/^[1-9]\d*$/.test(String(l))&&l<4294967295))throw new Error("roomId must be an integer between [1, 4294967294].")}function Ce(l,e,i,u){if(!/^[A-Za-z\d\s!#$%&()+\-:;<=.>?@[\]^_{}|~,]{1,64}$/.test(l))throw new Error("strRoomId must be a valid string.")}var O={type:"number",notLessThanZero:!0},Q={type:"object",required:!0,properties:{userId:{required:!0,type:"string"},roomId:{type:["string","number"],validate:Te},strRoomId:{type:"string",validate:Ce}}},ee={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:Se},appId:{type:"number",allowEmpty:!1},bizId:{type:"number",allowEmpty:!1},url:{type:"string",allowEmpty:!1}}},te={required:!1,type:"object",properties:{videoWidth:O,videoHeight:O,videoBitrate:W(I({},O),{allowEmpty:!1}),videoFramerate:{type:"number",validate(l,e,i,u){if(l<=0||l>30)throw new Error("Invalid parameter mixConfig -> videoFramerate, the value must be between (0, 30].")}},videoGOP:{type:"number",validate(l,e,i,u){if(l<1||l>8)throw new Error("Invalid parameter mixConfig -> videoGOP, the value must be between [1, 8].")}},audioSampleRate:O,audioBitrate:{type:"number",validate(l,e,i,u){if(l<32||l>192)throw new Error("Invalid parameter mixConfig -> audioBitrate, the value must be between [32, 192].")}},audioChannels:{type:"number",values:[1,2]}}},re={required:!1,type:"object",properties:{backgroundColor:{type:"number"},backgroundImage:{type:"string"},audioMixUserList:{type:"array",arrayItem:I({},Q)},videoLayoutList:{type:"array",required:!0,arrayItem:{type:"object",properties:{fixedVideoUser:I({},Q),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,u){if(l<1||l>15)throw new Error("Invalid parameter mix -> videoLayoutList -> zOrder, the value must be between [1, 15].")}},width:O,height:O,locationX:O,locationY:O}}}}};function ie(l){return{name:"CDNStreamingOptions",type:"object",required:!0,allowEmpty:!1,properties:{target:I({},ee),encoding:I({},te),mix:I({},re)},validate(e,i,u,d){var S,_;let{publishMode:c}=e.target,{encoding:m,mix:p}=e;if(c==="publish-mix-stream-to-cdn"){if(!m||!p)throw new Error("Invalid parameter mix & encoding, the value must be not empty.");if(p&&p.videoLayoutList){let D=0,A=0,U=[];if(p.videoLayoutList.forEach((P,F)=>{U.push(P.fixedVideoUser.userId),P.width+P.locationX>D&&(D=P.width+P.locationX),P.height+P.locationY>A&&(A=P.height+P.locationY)}),U.indexOf(l.room.userId)<0)throw new Error("Invalid parameter mix -> videoLayoutList, the value must be include self.");let E=(S=m==null?void 0:m.videoWidth)!=null?S:640,R=(_=m==null?void 0:m.videoHeight)!=null?_:480;if(E<D||R<A)throw new Error("Invalid parameter encoding, the width and height of the mixed video must encompass all the mixed-in video streams.")}}}}}function oe(l){return{name:"CDNStreamingOptions",type:"object",required:!0,allowEmpty:!1,properties:{target:I({},ee),encoding:I({},te),mix:I({},re)}}}function ae(l){return{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 G=0,k=class{constructor(e){this.core=e;b(this,"_mixTranscodeManager");b(this,"_publishCDNManager");b(this,"_core");b(this,"cdnLog");b(this,"_modeOptions");b(this,"seq");G=G+1,this.seq=G,this.cdnLog=e.log.createChild({id:`${this.getAlias()}${G}`}),this._core=e,this.cdnLog.info("CDNStreaming created"),this._modeOptions=new Map,this._mixTranscodeManager=new y(e,this.cdnLog),this._publishCDNManager=new L(e,this.cdnLog)}getName(){return"CDNStreaming"}getAlias(){return"cdn"}getValidateRule(e){switch(e){case"start":return ie(this._core);case"update":return oe(this._core);case"stop":return ae(this._core)}}getGroup(e){return e.target.publishMode}async start(e){return this.cdnLog.info(`Plugin CDNStreaming start: ${JSON.stringify(e)}`),this._modeOptions.set(e.target.publishMode,e),await this.doStart(e)}async update(e){this.cdnLog.info(`Plugin CDNStreaming update: ${JSON.stringify(e)}`);let i=this._modeOptions.get(e.target.publishMode);return this._core.utils.deepMerge(i,e),await this.doStart(i)}async stop(e){switch(this.cdnLog.info(`Plugin CDNStreaming stop: ${JSON.stringify(e)}`),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.cdnLog.info(`Plugin 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}}}};b(k,"TYPE",{PublishMode:{PublishMainStreamToCDN:"publish-main-stream-to-cdn",PublishSubStreamToCDN:"publish-sub-stream-to-cdn",PublishMixStreamToCDN:"publish-mix-stream-to-cdn"}});var tt=k;export{k as CDNStreaming,N as PublishMode,K as TRTCStreamType,tt as default};

@@ -1,1 +0,1 @@

"use strict";var CDNStreaming=(()=>{var ue=Object.create;var L=Object.defineProperty,de=Object.defineProperties,me=Object.getOwnPropertyDescriptor,le=Object.getOwnPropertyDescriptors,he=Object.getOwnPropertyNames,q=Object.getOwnPropertySymbols,ce=Object.getPrototypeOf,X=Object.prototype.hasOwnProperty,pe=Object.prototype.propertyIsEnumerable;var V=(d,e,i)=>e in d?L(d,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):d[e]=i,I=(d,e)=>{for(var i in e||(e={}))X.call(e,i)&&V(d,i,e[i]);if(q)for(var i of q(e))pe.call(e,i)&&V(d,i,e[i]);return d},W=(d,e)=>de(d,le(e));var ge=(d,e)=>()=>(e||d((e={exports:{}}).exports,e),e.exports),be=(d,e)=>{for(var i in e)L(d,i,{get:e[i],enumerable:!0})},z=(d,e,i,u)=>{if(e&&typeof e=="object"||typeof e=="function")for(let m of he(e))!X.call(d,m)&&m!==i&&L(d,m,{get:()=>e[m],enumerable:!(u=me(e,m))||u.enumerable});return d};var j=(d,e,i)=>(i=d!=null?ue(ce(d)):{},z(e||!d||!d.__esModule?L(i,"default",{value:d,enumerable:!0}):i,d)),Se=d=>z(L({},"__esModule",{value:!0}),d);var b=(d,e,i)=>(V(d,typeof e!="symbol"?e+"":e,i),i);var K=ge((Y,w)=>{(function(d){"use strict";function e(t,h){var r=(t&65535)+(h&65535),g=(t>>16)+(h>>16)+(r>>16);return g<<16|r&65535}function i(t,h){return t<<h|t>>>32-h}function u(t,h,r,g,T,C){return e(i(e(e(h,t),e(g,C)),T),r)}function m(t,h,r,g,T,C,f){return u(h&r|~h&g,t,h,T,C,f)}function c(t,h,r,g,T,C,f){return u(h&g|r&~g,t,h,T,C,f)}function l(t,h,r,g,T,C,f){return u(h^r^g,t,h,T,C,f)}function p(t,h,r,g,T,C,f){return u(r^(h|~g),t,h,T,C,f)}function S(t,h){t[h>>5]|=128<<h%32,t[(h+64>>>9<<4)+14]=h;var r,g,T,C,f,o=1732584193,a=-271733879,s=-1732584194,n=271733878;for(r=0;r<t.length;r+=16)g=o,T=a,C=s,f=n,o=m(o,a,s,n,t[r],7,-680876936),n=m(n,o,a,s,t[r+1],12,-389564586),s=m(s,n,o,a,t[r+2],17,606105819),a=m(a,s,n,o,t[r+3],22,-1044525330),o=m(o,a,s,n,t[r+4],7,-176418897),n=m(n,o,a,s,t[r+5],12,1200080426),s=m(s,n,o,a,t[r+6],17,-1473231341),a=m(a,s,n,o,t[r+7],22,-45705983),o=m(o,a,s,n,t[r+8],7,1770035416),n=m(n,o,a,s,t[r+9],12,-1958414417),s=m(s,n,o,a,t[r+10],17,-42063),a=m(a,s,n,o,t[r+11],22,-1990404162),o=m(o,a,s,n,t[r+12],7,1804603682),n=m(n,o,a,s,t[r+13],12,-40341101),s=m(s,n,o,a,t[r+14],17,-1502002290),a=m(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=l(o,a,s,n,t[r+5],4,-378558),n=l(n,o,a,s,t[r+8],11,-2022574463),s=l(s,n,o,a,t[r+11],16,1839030562),a=l(a,s,n,o,t[r+14],23,-35309556),o=l(o,a,s,n,t[r+1],4,-1530992060),n=l(n,o,a,s,t[r+4],11,1272893353),s=l(s,n,o,a,t[r+7],16,-155497632),a=l(a,s,n,o,t[r+10],23,-1094730640),o=l(o,a,s,n,t[r+13],4,681279174),n=l(n,o,a,s,t[r],11,-358537222),s=l(s,n,o,a,t[r+3],16,-722521979),a=l(a,s,n,o,t[r+6],23,76029189),o=l(o,a,s,n,t[r+9],4,-640364487),n=l(n,o,a,s,t[r+12],11,-421815835),s=l(s,n,o,a,t[r+15],16,530742520),a=l(a,s,n,o,t[r+2],23,-995338651),o=p(o,a,s,n,t[r],6,-198630844),n=p(n,o,a,s,t[r+7],10,1126891415),s=p(s,n,o,a,t[r+14],15,-1416354905),a=p(a,s,n,o,t[r+5],21,-57434055),o=p(o,a,s,n,t[r+12],6,1700485571),n=p(n,o,a,s,t[r+3],10,-1894986606),s=p(s,n,o,a,t[r+10],15,-1051523),a=p(a,s,n,o,t[r+1],21,-2054922799),o=p(o,a,s,n,t[r+8],6,1873313359),n=p(n,o,a,s,t[r+15],10,-30611744),s=p(s,n,o,a,t[r+6],15,-1560198380),a=p(a,s,n,o,t[r+13],21,1309151649),o=p(o,a,s,n,t[r+4],6,-145523070),n=p(n,o,a,s,t[r+11],10,-1120210379),s=p(s,n,o,a,t[r+2],15,718787259),a=p(a,s,n,o,t[r+9],21,-343485551),o=e(o,g),a=e(a,T),s=e(s,C),n=e(n,f);return[o,a,s,n]}function _(t){var h,r="",g=t.length*32;for(h=0;h<g;h+=8)r+=String.fromCharCode(t[h>>5]>>>h%32&255);return r}function D(t){var h,r=[];for(r[(t.length>>2)-1]=void 0,h=0;h<r.length;h+=1)r[h]=0;var g=t.length*8;for(h=0;h<g;h+=8)r[h>>5]|=(t.charCodeAt(h/8)&255)<<h%32;return r}function M(t){return _(S(D(t),t.length*8))}function x(t,h){var r,g=D(t),T=[],C=[],f;for(T[15]=C[15]=void 0,g.length>16&&(g=S(g,t.length*8)),r=0;r<16;r+=1)T[r]=g[r]^909522486,C[r]=g[r]^1549556828;return f=S(T.concat(D(h)),512+h.length*8),_(S(C.concat(f),512+128))}function v(t){var h="0123456789abcdef",r="",g,T;for(T=0;T<t.length;T+=1)g=t.charCodeAt(T),r+=h.charAt(g>>>4&15)+h.charAt(g&15);return r}function R(t){return unescape(encodeURIComponent(t))}function P(t){return M(R(t))}function F(t){return v(P(t))}function J(t,h){return x(R(t),R(h))}function ne(t,h){return v(J(t,h))}function H(t,h,r){return h?r?J(h,t):ne(h,t):r?P(t):F(t)}typeof define=="function"&&define.amd?define(function(){return H}):typeof w=="object"&&w.exports?w.exports=H:d.md5=H})(Y)});var Ie={};be(Ie,{CDNStreaming:()=>E,PublishMode:()=>N,TRTCStreamType:()=>G,default:()=>fe});var Z=j(K(),1);var N=(u=>(u.PublishMainStreamToCDN="publish-main-stream-to-cdn",u.PublishSubStreamToCDN="publish-sub-stream-to-cdn",u.PublishMixStreamToCDN="publish-mix-stream-to-cdn",u))(N||{}),G=(i=>(i.Main="main",i.Sub="sub",i))(G||{});var k={IT_AUDIO_VIDEO:0,IT_PICTURE:2,IT_CANVAS:3,IT_PURE_AUDIO:4,IT_PURE_VIDEO:5};var A=class{constructor(e){b(this,"_room");b(this,"_log");b(this,"_paramsForGivenCDN");b(this,"_publishGivenCDNData",null);b(this,"_isPublishingGivenCDN",!1);this._room=e.room,this._log=e.log,this._paramsForGivenCDN=new Map([["publish-main-stream-to-cdn",null],["publish-sub-stream-to-cdn",null],["publish-mix-stream-to-cdn",null]])}async startPublishGivenCDN(e){this._log.info(`startPublishGivenCDN() ${JSON.stringify(e)}`),this._paramsForGivenCDN.set(e.publishMode,e);let i={pushRequestTime:Date.now(),pushAppId:e.appId,pushBizId:e.bizId,pushCdnUrl:e.url,pushStreamType:this.convertStreamType(e==null?void 0:e.publishMode),pushStreamId:e.streamId};this._publishGivenCDNData=i;try{this._isPublishingGivenCDN&&await this.stopPublishGivenCDN();let u=await this._room.sendStartPublishCDN(i,!1),{code:m,message:c}=u.data;if(m===0)this._isPublishingGivenCDN=!0;else throw this.resetGivenCDN(),this._log.error(`startPublishGivenCDN failed, errCode: ${m}, errMsg: ${c}`),new Error(`startPublishGivenCDN failed, errCode: ${m} errMsg: ${c}`)}catch(u){throw this.resetGivenCDN(),u}}async stopPublishGivenCDN(){if(this._log.info(`stopPublishGivenCDN: ${JSON.stringify(this._publishGivenCDNData)}`),!this._isPublishingGivenCDN||!this._publishGivenCDNData){this.resetGivenCDN();return}let{pushAppId:e,pushBizId:i,pushCdnUrl:u,pushStreamType:m,pushStreamId:c}=this._publishGivenCDNData,l={pushRequestTime:Date.now(),pushAppId:e,pushBizId:i,pushCdnUrl:u,pushStreamType:m,pushStreamId:c},p=await this._room.sendStopPublishCDN(l,!1),{code:S,message:_}=p.data;if(S===0)this.resetGivenCDN();else throw this._log.error(`stopPublishGivenCDN failed, errCode: ${S} errMsg: ${_}`),new Error(`stopPublishGivenCDN failed, errCode: ${S} errMsg: ${_}`)}resetGivenCDN(){this._publishGivenCDNData=null,this._isPublishingGivenCDN=!1}convertStreamType(e){return e==="publish-main-stream-to-cdn"?"main":"aux"}};var y=class{constructor(e,i){b(this,"_core");b(this,"_room");b(this,"cdnLog");b(this,"_config",null);b(this,"_data",null);b(this,"_givenCDNManager");this._core=e,this._room=e.room,this.cdnLog=i,this.reset()}get isMixing(){return!!this._data}get isStarted(){return!!this._config}get hasCustomCDN(){var e,i,u;return((e=this._config)==null?void 0:e.target.appId)&&((i=this._config)==null?void 0:i.target.bizId)&&((u=this._config)==null?void 0:u.target.url)}async startMixTranscode(e){if(this.cdnLog.info(`startMixTranscode: ${e}`),this._config=e,this.installEvents(),!!this._core.room.isJoined)try{let i=this.getInputParam(e),u=this.getOutputParam(e),m=this.getOutputSessionId({config:e,roomId:this._room.roomId,userId:this._room.userId});this.isMixing&&this._data&&m!==this._data.outputSessionId&&(this.cdnLog.info("startMixTranscode() streamId changed, stop mixing before start"),await this.doStopMixTranscode()),await this.doStartMixTranscode({outputSessionId:m,inputParam:i,outputParam:u});let{appId:c,bizId:l,url:p,streamId:S=""}=this._config.target;c&&l&&p&&(this._givenCDNManager||(this._givenCDNManager=new A(this._core)),await this._givenCDNManager.startPublishGivenCDN({publishMode:e.target.publishMode,appId:c,bizId:l,url:p,streamId:S}))}catch(i){throw this.reset(),i}}async doStartMixTranscode({outputSessionId:e,inputParam:i,outputParam:u}){let m={roomId:String(this._room.roomId),mcuRequestTime:Date.now(),outputSessionId:e,inputParam:i,outputParam:u};this.cdnLog.info(`doStartMixTranscode: ${JSON.stringify(m)}`);let c=await this._room.sendStartMixTranscode(m),{code:l}=c.data,{message:p}=c.data;if(l===0)this._data=m;else throw l===-102083&&(p=`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.cdnLog.error(`startMixTranscode failed, errCode: ${l} errMsg: ${p}`),new Error(`startMixTranscode failed, errCode: ${l} errMsg: ${p}`)}async stopMixTranscode(){this.cdnLog.info(`stopMixTranscode: ${this.isMixing}`);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.cdnLog.info(`doStopMixTranscode: ${JSON.stringify(e)}`);let i=await this._room.sendStopMixTranscode(e),{code:u,message:m}=i.data;if(u===0)this.reset();else throw this.cdnLog.error(`stopMixTranscode failed, errCode: ${u} errMsg: ${m}`),new Error(`stopMixTranscode failed, errCode: ${u} errMsg: ${m}`)}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.cdnLog.info(`handleJoined() ${JSON.stringify(this._config)}`),this.isStarted&&this._config&&await this.startMixTranscode(this._config)}async handleRoomLeft(){this.cdnLog.info(`handleJoined() ${JSON.stringify(this._config)}`),this._data=null}getOutputSessionId({config:e,userId:i,roomId:u}){return this._core.utils.isString(e.target.streamId)&&e.target.streamId.length>0?e.target.streamId:(0,Z.default)(`${u}_${i}_main`)}getStringRoomId(e,i){return e?String(e):i}getInputParam(e){let{mix:i={}}=e,{audioMixUserList:u=[],videoLayoutList:m=[]}=i,c=m.map(l=>({userId:l.fixedVideoUser.userId,roomId:this.getStringRoomId(l.fixedVideoUser.roomId,l.fixedVideoUser.strRoomId)||this._core.room.roomId,width:l.width||0,height:l.height||0,locationX:l.locationX||0,locationY:l.locationY||0,zOrder:l.zOrder||1,streamType:l.fixedVideoStreamType==="sub"?1:0,inputType:k.IT_PURE_VIDEO,renderMode:l.fillMode||0}));return u.forEach(l=>{let p=c.findIndex(S=>S.userId===l.userId&&S.room===this.getStringRoomId(l.roomId,l.strRoomId));p!==-1?c[p].inputType=k.IT_AUDIO_VIDEO:c.push({userId:l.userId,roomId:l.roomId||l.strRoomId,inputType:k.IT_PURE_AUDIO})}),c}getOutputParam(e){let i=e.target.streamId||"",{encoding:u={},mix:m={}}=e;return{streamId:i,streamType:i.length>0?1:0,width:this._core.utils.isUndefined(u.videoWidth)?640:u.videoWidth,height:this._core.utils.isUndefined(u.videoHeight)?480:u.videoHeight,videoBps:u.videoBitrate||0,fps:u.videoFramerate||15,gop:u.videoGOP||2,audioSampleRate:u.audioSampleRate||48e3,audioBps:u.audioBitrate||64,audioChannels:u.audioChannels||1,backgroundColor:m.backgroundColor||0,backgroundImg:m.backgroundImage||"",extraInfo:"",videoCodec:2,audioCodec:0}}};var B=j(K(),1);var U=class{constructor(e,i){b(this,"_core");b(this,"_room");b(this,"cdnLog");b(this,"_paramsForTencentCDN");b(this,"_initParamsForTencentCDN",{isPublished:!1,isStarted:!1});this._core=e,this._room=e.room,this.cdnLog=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 m;this.cdnLog.info(`handlePublished: mediaType ${e.mediaType}, roomID ${(m=e==null?void 0:e.room)==null?void 0:m.roomId}`);let i=e.mediaType===4?"publish-main-stream-to-cdn":"publish-sub-stream-to-cdn",u=this._paramsForTencentCDN.get(i)||null;u!=null&&u.target&&u.isStarted&&await this.startPublishTencentCDN(u.target)}async 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.cdnLog.info("Main stream has not already published, will auto reStart after published."),!1):e==="publish-sub-stream-to-cdn"&&!this._room.isAuxStreamPublished?(this.cdnLog.info("Sub has not already published, will auto reStart after published."),!1):!0}changeDataStatus(e,i){let u=this._paramsForTencentCDN.get(e),m=I(I({},u),i);this._paramsForTencentCDN.set(e,m)}async startPublishTencentCDN(e){if(this.cdnLog.info(`startPublishTencentCDN ${JSON.stringify(e)}`),this.installEvents(),this.changeDataStatus(e.publishMode,{target:e,isStarted:!0}),!this.isStreamPublished(e.publishMode))return;let i=e.streamId||"",u=this.generatePublishCDNStreamId(i,e.publishMode),m=this.generatePublishCDNSessionId(e.publishMode),c=e.publishMode==="publish-sub-stream-to-cdn"?1:0,l={requestTime:Date.now(),sessionId:m,streamId:u,streamType:c};await this.doStartPublishTencentCDN(l,e.publishMode);let{appId:p,bizId:S,url:_}=e;if(p&&S&&_){let D=this._paramsForTencentCDN.get(e.publishMode)||this._initParamsForTencentCDN;D!=null&&D.givenCDNManager||(D.givenCDNManager=new A(this._core),this._paramsForTencentCDN.set(e.publishMode,D)),await D.givenCDNManager.startPublishGivenCDN({publishMode:e.publishMode,appId:p,bizId:S,url:_,streamId:u})}}async doStartPublishTencentCDN(e,i){this.cdnLog.info(`doStartPublishTencentCDN: ${JSON.stringify(e)}`);try{let c=0;for(;;){let l=await this._room.sendStartPublishCDN(e,!0),{code:p}=l.data,{message:S}=l.data;if(p===0){this.cdnLog.info(`doStartPublishTencentCDN: success ${JSON.stringify(l)}`),this.changeDataStatus(i,{isPublished:!0});break}else if(p===-10006&&c<6)this.cdnLog.warn(`doStartPublishTencentCDN: retry...${c+1}/6, reason: ${S}`),c+=1,await new Promise(_=>setTimeout(_,500));else throw this.changeDataStatus(i,{isPublished:!1}),p===-102083&&(S=`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`),new Error(`startPublishTencentCDN failed, errCode: ${p} errMsg: ${S}`)}}catch(u){throw this.cdnLog.error(`startPublishTencentCDN failed, error: ${u}`),this.changeDataStatus(i,{isPublished:!1}),u}}async stopPublishTencentCDN(e){let i=this._paramsForTencentCDN.get(e)||this._initParamsForTencentCDN;if(i.isPublished){let{target:u}=i;u!=null&&u.bizId&&u.appId&&u.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,B.default)(`${this._room.roomId}_${this._room.userId}_${this.convertPublishModeToStreamType(e)}`)};this.cdnLog.info(`stopPublishTencentCDN: ${JSON.stringify(i)}`);let u=await this._room.sendStopPublishCDN(i,!0),{code:m,message:c}=u.data;if(m===0)this._paramsForTencentCDN.set(e,this._initParamsForTencentCDN),this.reset(e);else if(m===-102069)this.cdnLog.error("stopPublishTencentCDN failed, can not stopPublishTencentCDN in auto relayed-push mode"),this._paramsForTencentCDN.set(e,this._initParamsForTencentCDN);else throw this.cdnLog.error(`stopPublishTencentCDN failed, errCode: ${m} errMsg: ${c}`),new Error(`stopPublishTencentCDN failed, errCode: ${m} errMsg: ${c}`)}reset(e){this.uninstallEvents(),this._paramsForTencentCDN.set(e,this._initParamsForTencentCDN)}generatePublishCDNStreamId(e,i){if(e===""){let u=`${this._room.roomId}_${this._room.userId}_${this.convertPublishModeToStreamType(i)}`;return/^[A-Za-z\d_-]*$/.test(u)||(u=(0,B.default)(u)),`${this._room.sdkAppId}_${u}`}return e}convertPublishModeToStreamType(e){return e==="publish-main-stream-to-cdn"?"main":"aux"}generatePublishCDNSessionId(e){return(0,B.default)(`${this._room.roomId}_${this._room.userId}_${this.convertPublishModeToStreamType(e)}`)}};var Q=d=>typeof d=="string";function Ce(d,e,i,u){if(!/^[A-Za-z\d_-]*$/.test(d))throw new Error("Invalid parameter streamId.")}function De(d,e,i,u){if(Q(d))throw new Error("roomId must be an integer but go a string, use 'parseInt' to convert it or use 'strRoomId' instead.");if(d===void 0)return;if(!(/^[1-9]\d*$/.test(String(d))&&d<4294967295))throw new Error("roomId must be an integer between [1, 4294967294].")}function _e(d,e,i,u){if(!/^[A-Za-z\d\s!#$%&()+\-:;<=.>?@[\]^_{}|~,]{1,64}$/.test(d))throw new Error("strRoomId must be a valid string.")}var O={type:"number",notLessThanZero:!0},ee={type:"object",required:!0,properties:{userId:{required:!0,type:"string"},roomId:{type:["string","number"],validate:De},strRoomId:{type:"string",validate:_e}}},te={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:Ce},appId:{type:"number",allowEmpty:!1},bizId:{type:"number",allowEmpty:!1},url:{type:"string",allowEmpty:!1}}},re={required:!1,type:"object",properties:{videoWidth:O,videoHeight:O,videoBitrate:W(I({},O),{allowEmpty:!1}),videoFramerate:{type:"number",validate(d,e,i,u){if(d<=0||d>30)throw new Error("Invalid parameter mixConfig -> videoFramerate, the value must be between (0, 30].")}},videoGOP:{type:"number",validate(d,e,i,u){if(d<1||d>8)throw new Error("Invalid parameter mixConfig -> videoGOP, the value must be between [1, 8].")}},audioSampleRate:O,audioBitrate:{type:"number",validate(d,e,i,u){if(d<32||d>192)throw new Error("Invalid parameter mixConfig -> audioBitrate, the value must be between [32, 192].")}},audioChannels:{type:"number",values:[1,2]}}},ie={required:!1,type:"object",properties:{backgroundColor:{type:"number"},backgroundImage:{type:"string"},audioMixUserList:{type:"array",arrayItem:I({},ee)},videoLayoutList:{type:"array",required:!0,arrayItem:{type:"object",properties:{fixedVideoUser:I({},ee),fixedVideoStreamType:{type:"string",required:!0,values:["main","sub"]},fillMode:{type:"number",values:[0,1,2,4]},zOrder:{type:"number",required:!0,validate(d,e,i,u){if(d<1||d>15)throw new Error("Invalid parameter mix -> videoLayoutList -> zOrder, the value must be between [1, 15].")}},width:O,height:O,locationX:O,locationY:O}}}}};function oe(d){return{name:"CDNStreamingOptions",type:"object",required:!0,allowEmpty:!1,properties:{target:I({},te),encoding:I({},re),mix:I({},ie)},validate(e,i,u,m){var S,_;let{publishMode:c}=e.target,{encoding:l,mix:p}=e;if(c==="publish-mix-stream-to-cdn"){if(!l||!p)throw new Error("Invalid parameter mix & encoding, the value must be not empty.");if(p&&p.videoLayoutList){let D=0,M=0,x=[];if(p.videoLayoutList.forEach((P,F)=>{x.push(P.fixedVideoUser.userId),P.width+P.locationX>D&&(D=P.width+P.locationX),P.height+P.locationY>M&&(M=P.height+P.locationY)}),x.indexOf(d.room.userId)<0)throw new Error("Invalid parameter mix -> videoLayoutList, the value must be include self.");let v=(S=l==null?void 0:l.videoWidth)!=null?S:640,R=(_=l==null?void 0:l.videoHeight)!=null?_:480;if(v<D||R<M)throw new Error("Invalid parameter encoding, the width and height of the mixed video must encompass all the mixed-in video streams.")}}}}}function ae(d){return{name:"CDNStreamingOptions",type:"object",required:!0,allowEmpty:!1,properties:{target:I({},te),encoding:I({},re),mix:I({},ie)}}}function se(d){return{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 $=0,E=class{constructor(e){this.core=e;b(this,"_mixTranscodeManager");b(this,"_publishCDNManager");b(this,"_core");b(this,"cdnLog");b(this,"_modeOptions");b(this,"seq");$=$+1,this.seq=$,this.cdnLog=e.log.createChild({id:`${this.getAlias()}${$}`}),this._core=e,this.cdnLog.info("CDNStreaming created"),this._modeOptions=new Map,this._mixTranscodeManager=new y(e,this.cdnLog),this._publishCDNManager=new U(e,this.cdnLog)}getName(){return"CDNStreaming"}getAlias(){return"cdn"}getValidateRule(e){switch(e){case"start":return oe(this._core);case"update":return ae(this._core);case"stop":return se(this._core)}}getGroup(e){return e.target.publishMode}async start(e){return this.cdnLog.info(`Plugin CDNStreaming start: ${JSON.stringify(e)}`),this._modeOptions.set(e.target.publishMode,e),await this.doStart(e)}async update(e){this.cdnLog.info(`Plugin CDNStreaming update: ${JSON.stringify(e)}`);let i=this._modeOptions.get(e.target.publishMode);return this._core.utils.deepMerge(i,e),await this.doStart(i)}async stop(e){switch(this.cdnLog.info(`Plugin CDNStreaming stop: ${JSON.stringify(e)}`),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.cdnLog.info(`Plugin 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}}}};b(E,"TYPE",{PublishMode:{PublishMainStreamToCDN:"publish-main-stream-to-cdn",PublishSubStreamToCDN:"publish-sub-stream-to-cdn",PublishMixStreamToCDN:"publish-mix-stream-to-cdn"}});var fe=E;return Se(Ie);})().default;
"use strict";var CDNStreaming=(()=>{var ue=Object.create;var y=Object.defineProperty,de=Object.defineProperties,me=Object.getOwnPropertyDescriptor,le=Object.getOwnPropertyDescriptors,he=Object.getOwnPropertyNames,q=Object.getOwnPropertySymbols,ce=Object.getPrototypeOf,X=Object.prototype.hasOwnProperty,pe=Object.prototype.propertyIsEnumerable;var V=(d,e,i)=>e in d?y(d,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):d[e]=i,I=(d,e)=>{for(var i in e||(e={}))X.call(e,i)&&V(d,i,e[i]);if(q)for(var i of q(e))pe.call(e,i)&&V(d,i,e[i]);return d},W=(d,e)=>de(d,le(e));var ge=(d,e)=>()=>(e||d((e={exports:{}}).exports,e),e.exports),be=(d,e)=>{for(var i in e)y(d,i,{get:e[i],enumerable:!0})},z=(d,e,i,u)=>{if(e&&typeof e=="object"||typeof e=="function")for(let m of he(e))!X.call(d,m)&&m!==i&&y(d,m,{get:()=>e[m],enumerable:!(u=me(e,m))||u.enumerable});return d};var j=(d,e,i)=>(i=d!=null?ue(ce(d)):{},z(e||!d||!d.__esModule?y(i,"default",{value:d,enumerable:!0}):i,d)),Se=d=>z(y({},"__esModule",{value:!0}),d);var b=(d,e,i)=>(V(d,typeof e!="symbol"?e+"":e,i),i);var K=ge((Y,w)=>{(function(d){"use strict";function e(t,h){var r=(t&65535)+(h&65535),g=(t>>16)+(h>>16)+(r>>16);return g<<16|r&65535}function i(t,h){return t<<h|t>>>32-h}function u(t,h,r,g,T,C){return e(i(e(e(h,t),e(g,C)),T),r)}function m(t,h,r,g,T,C,f){return u(h&r|~h&g,t,h,T,C,f)}function c(t,h,r,g,T,C,f){return u(h&g|r&~g,t,h,T,C,f)}function l(t,h,r,g,T,C,f){return u(h^r^g,t,h,T,C,f)}function p(t,h,r,g,T,C,f){return u(r^(h|~g),t,h,T,C,f)}function S(t,h){t[h>>5]|=128<<h%32,t[(h+64>>>9<<4)+14]=h;var r,g,T,C,f,o=1732584193,a=-271733879,s=-1732584194,n=271733878;for(r=0;r<t.length;r+=16)g=o,T=a,C=s,f=n,o=m(o,a,s,n,t[r],7,-680876936),n=m(n,o,a,s,t[r+1],12,-389564586),s=m(s,n,o,a,t[r+2],17,606105819),a=m(a,s,n,o,t[r+3],22,-1044525330),o=m(o,a,s,n,t[r+4],7,-176418897),n=m(n,o,a,s,t[r+5],12,1200080426),s=m(s,n,o,a,t[r+6],17,-1473231341),a=m(a,s,n,o,t[r+7],22,-45705983),o=m(o,a,s,n,t[r+8],7,1770035416),n=m(n,o,a,s,t[r+9],12,-1958414417),s=m(s,n,o,a,t[r+10],17,-42063),a=m(a,s,n,o,t[r+11],22,-1990404162),o=m(o,a,s,n,t[r+12],7,1804603682),n=m(n,o,a,s,t[r+13],12,-40341101),s=m(s,n,o,a,t[r+14],17,-1502002290),a=m(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=l(o,a,s,n,t[r+5],4,-378558),n=l(n,o,a,s,t[r+8],11,-2022574463),s=l(s,n,o,a,t[r+11],16,1839030562),a=l(a,s,n,o,t[r+14],23,-35309556),o=l(o,a,s,n,t[r+1],4,-1530992060),n=l(n,o,a,s,t[r+4],11,1272893353),s=l(s,n,o,a,t[r+7],16,-155497632),a=l(a,s,n,o,t[r+10],23,-1094730640),o=l(o,a,s,n,t[r+13],4,681279174),n=l(n,o,a,s,t[r],11,-358537222),s=l(s,n,o,a,t[r+3],16,-722521979),a=l(a,s,n,o,t[r+6],23,76029189),o=l(o,a,s,n,t[r+9],4,-640364487),n=l(n,o,a,s,t[r+12],11,-421815835),s=l(s,n,o,a,t[r+15],16,530742520),a=l(a,s,n,o,t[r+2],23,-995338651),o=p(o,a,s,n,t[r],6,-198630844),n=p(n,o,a,s,t[r+7],10,1126891415),s=p(s,n,o,a,t[r+14],15,-1416354905),a=p(a,s,n,o,t[r+5],21,-57434055),o=p(o,a,s,n,t[r+12],6,1700485571),n=p(n,o,a,s,t[r+3],10,-1894986606),s=p(s,n,o,a,t[r+10],15,-1051523),a=p(a,s,n,o,t[r+1],21,-2054922799),o=p(o,a,s,n,t[r+8],6,1873313359),n=p(n,o,a,s,t[r+15],10,-30611744),s=p(s,n,o,a,t[r+6],15,-1560198380),a=p(a,s,n,o,t[r+13],21,1309151649),o=p(o,a,s,n,t[r+4],6,-145523070),n=p(n,o,a,s,t[r+11],10,-1120210379),s=p(s,n,o,a,t[r+2],15,718787259),a=p(a,s,n,o,t[r+9],21,-343485551),o=e(o,g),a=e(a,T),s=e(s,C),n=e(n,f);return[o,a,s,n]}function _(t){var h,r="",g=t.length*32;for(h=0;h<g;h+=8)r+=String.fromCharCode(t[h>>5]>>>h%32&255);return r}function D(t){var h,r=[];for(r[(t.length>>2)-1]=void 0,h=0;h<r.length;h+=1)r[h]=0;var g=t.length*8;for(h=0;h<g;h+=8)r[h>>5]|=(t.charCodeAt(h/8)&255)<<h%32;return r}function A(t){return _(S(D(t),t.length*8))}function x(t,h){var r,g=D(t),T=[],C=[],f;for(T[15]=C[15]=void 0,g.length>16&&(g=S(g,t.length*8)),r=0;r<16;r+=1)T[r]=g[r]^909522486,C[r]=g[r]^1549556828;return f=S(T.concat(D(h)),512+h.length*8),_(S(C.concat(f),512+128))}function v(t){var h="0123456789abcdef",r="",g,T;for(T=0;T<t.length;T+=1)g=t.charCodeAt(T),r+=h.charAt(g>>>4&15)+h.charAt(g&15);return r}function R(t){return unescape(encodeURIComponent(t))}function P(t){return A(R(t))}function F(t){return v(P(t))}function J(t,h){return x(R(t),R(h))}function ne(t,h){return v(J(t,h))}function H(t,h,r){return h?r?J(h,t):ne(h,t):r?P(t):F(t)}typeof define=="function"&&define.amd?define(function(){return H}):typeof w=="object"&&w.exports?w.exports=H:d.md5=H})(Y)});var Ie={};be(Ie,{CDNStreaming:()=>E,PublishMode:()=>M,TRTCStreamType:()=>G,default:()=>fe});var Z=j(K(),1);var M=(u=>(u.PublishMainStreamToCDN="publish-main-stream-to-cdn",u.PublishSubStreamToCDN="publish-sub-stream-to-cdn",u.PublishMixStreamToCDN="publish-mix-stream-to-cdn",u))(M||{}),G=(i=>(i.Main="main",i.Sub="sub",i))(G||{});var k={IT_AUDIO_VIDEO:0,IT_PICTURE:2,IT_CANVAS:3,IT_PURE_AUDIO:4,IT_PURE_VIDEO:5};var N=class{constructor(e){b(this,"_room");b(this,"_log");b(this,"_paramsForGivenCDN");b(this,"_publishGivenCDNData",null);b(this,"_isPublishingGivenCDN",!1);this._room=e.room,this._log=e.log,this._paramsForGivenCDN=new Map([["publish-main-stream-to-cdn",null],["publish-sub-stream-to-cdn",null],["publish-mix-stream-to-cdn",null]])}async startPublishGivenCDN(e){this._log.info(`startPublishGivenCDN() ${JSON.stringify(e)}`),this._paramsForGivenCDN.set(e.publishMode,e);let i={pushRequestTime:Date.now(),pushAppId:e.appId,pushBizId:e.bizId,pushCdnUrl:e.url,pushStreamType:this.convertStreamType(e==null?void 0:e.publishMode),pushStreamId:e.streamId};this._publishGivenCDNData=i;try{this._isPublishingGivenCDN&&await this.stopPublishGivenCDN();let u=await this._room.sendStartPublishCDN(i,!1),{code:m,message:c}=u.data;if(m===0)this._isPublishingGivenCDN=!0;else throw this.resetGivenCDN(),this._log.error(`startPublishGivenCDN failed, errCode: ${m}, errMsg: ${c}`),new Error(`startPublishGivenCDN failed, errCode: ${m} errMsg: ${c}`)}catch(u){throw this.resetGivenCDN(),u}}async stopPublishGivenCDN(){if(this._log.info(`stopPublishGivenCDN: ${JSON.stringify(this._publishGivenCDNData)}`),!this._isPublishingGivenCDN||!this._publishGivenCDNData){this.resetGivenCDN();return}let{pushAppId:e,pushBizId:i,pushCdnUrl:u,pushStreamType:m,pushStreamId:c}=this._publishGivenCDNData,l={pushRequestTime:Date.now(),pushAppId:e,pushBizId:i,pushCdnUrl:u,pushStreamType:m,pushStreamId:c},p=await this._room.sendStopPublishCDN(l,!1),{code:S,message:_}=p.data;if(S===0)this.resetGivenCDN();else throw this._log.error(`stopPublishGivenCDN failed, errCode: ${S} errMsg: ${_}`),new Error(`stopPublishGivenCDN failed, errCode: ${S} errMsg: ${_}`)}resetGivenCDN(){this._publishGivenCDNData=null,this._isPublishingGivenCDN=!1}convertStreamType(e){return e==="publish-main-stream-to-cdn"?"main":"aux"}};var L=class{constructor(e,i){b(this,"_core");b(this,"_room");b(this,"cdnLog");b(this,"_config",null);b(this,"_data",null);b(this,"_givenCDNManager");this._core=e,this._room=e.room,this.cdnLog=i,this.reset()}get isMixing(){return!!this._data}get isStarted(){return!!this._config}get hasCustomCDN(){var e,i,u;return((e=this._config)==null?void 0:e.target.appId)&&((i=this._config)==null?void 0:i.target.bizId)&&((u=this._config)==null?void 0:u.target.url)}async startMixTranscode(e){if(this.cdnLog.info(`startMixTranscode: ${e}`),this._config=e,this.installEvents(),!!this._core.room.isJoined)try{let i=this.getInputParam(e),u=this.getOutputParam(e),m=this.getOutputSessionId({config:e,roomId:this._room.roomId,userId:this._room.userId});this.isMixing&&this._data&&m!==this._data.outputSessionId&&(this.cdnLog.info("startMixTranscode() streamId changed, stop mixing before start"),await this.doStopMixTranscode()),await this.doStartMixTranscode({outputSessionId:m,inputParam:i,outputParam:u});let{appId:c,bizId:l,url:p,streamId:S=""}=this._config.target;c&&l&&p&&(this._givenCDNManager||(this._givenCDNManager=new N(this._core)),await this._givenCDNManager.startPublishGivenCDN({publishMode:e.target.publishMode,appId:c,bizId:l,url:p,streamId:S}))}catch(i){throw this.reset(),i}}async doStartMixTranscode({outputSessionId:e,inputParam:i,outputParam:u}){let m={roomId:String(this._room.roomId),mcuRequestTime:Date.now(),outputSessionId:e,inputParam:i,outputParam:u};this.cdnLog.info(`doStartMixTranscode: ${JSON.stringify(m)}`);let c=await this._room.sendStartMixTranscode(m),{code:l}=c.data,{message:p}=c.data;if(l===0)this._data=m;else throw l===-102083&&(p=`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.cdnLog.error(`startMixTranscode failed, errCode: ${l} errMsg: ${p}`),new Error(`startMixTranscode failed, errCode: ${l} errMsg: ${p}`)}async stopMixTranscode(){this.cdnLog.info(`stopMixTranscode: ${this.isMixing}`);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.cdnLog.info(`doStopMixTranscode: ${JSON.stringify(e)}`);let i=await this._room.sendStopMixTranscode(e),{code:u,message:m}=i.data;if(u===0)this.reset();else throw this.cdnLog.error(`stopMixTranscode failed, errCode: ${u} errMsg: ${m}`),new Error(`stopMixTranscode failed, errCode: ${u} errMsg: ${m}`)}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.cdnLog.info(`handleJoined() ${JSON.stringify(this._config)}`),this.isStarted&&this._config&&await this.startMixTranscode(this._config)}async handleRoomLeft(){this.cdnLog.info(`handleJoined() ${JSON.stringify(this._config)}`),this._data=null}getOutputSessionId({config:e,userId:i,roomId:u}){return this._core.utils.isString(e.target.streamId)&&e.target.streamId.length>0?e.target.streamId:(0,Z.default)(`${u}_${i}_main`)}getStringRoomId(e,i){return e?String(e):i}getInputParam(e){let{mix:i={}}=e,{audioMixUserList:u=[],videoLayoutList:m=[]}=i,c=m.map(l=>({userId:l.fixedVideoUser.userId,roomId:this.getStringRoomId(l.fixedVideoUser.roomId,l.fixedVideoUser.strRoomId)||this._core.room.roomId,width:l.width||0,height:l.height||0,locationX:l.locationX||0,locationY:l.locationY||0,zOrder:l.zOrder||1,streamType:l.fixedVideoStreamType==="sub"?1:0,inputType:k.IT_PURE_VIDEO,renderMode:l.fillMode||0}));return u.forEach(l=>{let p=c.findIndex(S=>S.userId===l.userId&&S.room===this.getStringRoomId(l.roomId,l.strRoomId));p!==-1?c[p].inputType=k.IT_AUDIO_VIDEO:c.push({userId:l.userId,roomId:l.roomId||l.strRoomId,inputType:k.IT_PURE_AUDIO})}),c}getOutputParam(e){let i=e.target.streamId||"",{encoding:u={},mix:m={}}=e;return{streamId:i,streamType:i.length>0?1:0,width:this._core.utils.isUndefined(u.videoWidth)?640:u.videoWidth,height:this._core.utils.isUndefined(u.videoHeight)?480:u.videoHeight,videoBps:u.videoBitrate||0,fps:u.videoFramerate||15,gop:u.videoGOP||2,audioSampleRate:u.audioSampleRate||48e3,audioBps:u.audioBitrate||64,audioChannels:u.audioChannels||1,backgroundColor:m.backgroundColor||0,backgroundImg:m.backgroundImage||"",extraInfo:"",videoCodec:2,audioCodec:0}}};var B=j(K(),1);var U=class{constructor(e,i){b(this,"_core");b(this,"_room");b(this,"cdnLog");b(this,"_paramsForTencentCDN");b(this,"_initParamsForTencentCDN",{isPublished:!1,isStarted:!1});this._core=e,this._room=e.room,this.cdnLog=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 m;this.cdnLog.info(`handlePublished: mediaType ${e.mediaType}, roomID ${(m=e==null?void 0:e.room)==null?void 0:m.roomId}`);let i=e.mediaType===4?"publish-main-stream-to-cdn":"publish-sub-stream-to-cdn",u=this._paramsForTencentCDN.get(i)||null;u!=null&&u.target&&u.isStarted&&await this.startPublishTencentCDN(u.target)}async 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.cdnLog.info("Main stream has not already published, will auto reStart after published."),!1):e==="publish-sub-stream-to-cdn"&&!this._room.isAuxStreamPublished?(this.cdnLog.info("Sub has not already published, will auto reStart after published."),!1):!0}changeDataStatus(e,i){let u=this._paramsForTencentCDN.get(e),m=I(I({},u),i);this._paramsForTencentCDN.set(e,m)}async startPublishTencentCDN(e){if(this.cdnLog.info(`startPublishTencentCDN ${JSON.stringify(e)}`),this.installEvents(),this.changeDataStatus(e.publishMode,{target:e,isStarted:!0}),!this.isStreamPublished(e.publishMode))return;let i=e.streamId||"",u=this.generatePublishCDNStreamId(i,e.publishMode),m=this.generatePublishCDNSessionId(e.publishMode),c=e.publishMode==="publish-sub-stream-to-cdn"?1:0,l={requestTime:Date.now(),sessionId:m,streamId:u,streamType:c};await this.doStartPublishTencentCDN(l,e.publishMode);let{appId:p,bizId:S,url:_}=e;if(p&&S&&_){let D=this._paramsForTencentCDN.get(e.publishMode)||this._initParamsForTencentCDN;D!=null&&D.givenCDNManager||(D.givenCDNManager=new N(this._core),this._paramsForTencentCDN.set(e.publishMode,D)),await D.givenCDNManager.startPublishGivenCDN({publishMode:e.publishMode,appId:p,bizId:S,url:_,streamId:u})}}async doStartPublishTencentCDN(e,i){this.cdnLog.info(`doStartPublishTencentCDN: ${JSON.stringify(e)}`);try{let c=0;for(;;){let l=await this._room.sendStartPublishCDN(e,!0),{code:p}=l.data,{message:S}=l.data;if(p===0){this.cdnLog.info(`doStartPublishTencentCDN: success ${JSON.stringify(l)}`),this.changeDataStatus(i,{isPublished:!0});break}else if(p===-10006&&c<6)this.cdnLog.warn(`doStartPublishTencentCDN: retry...${c+1}/6, reason: ${S}`),c+=1,await new Promise(_=>setTimeout(_,500));else throw this.changeDataStatus(i,{isPublished:!1}),p===-102083&&(S=`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`),new Error(`startPublishTencentCDN failed, errCode: ${p} errMsg: ${S}`)}}catch(u){throw this.cdnLog.error(`startPublishTencentCDN failed, error: ${u}`),this.changeDataStatus(i,{isPublished:!1}),u}}async stopPublishTencentCDN(e){let i=this._paramsForTencentCDN.get(e)||this._initParamsForTencentCDN;if(i.isPublished){let{target:u}=i;u!=null&&u.bizId&&u.appId&&u.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,B.default)(`${this._room.roomId}_${this._room.userId}_${this.convertPublishModeToStreamType(e)}`)};this.cdnLog.info(`stopPublishTencentCDN: ${JSON.stringify(i)}`);let u=await this._room.sendStopPublishCDN(i,!0),{code:m,message:c}=u.data;if(m===0)this._paramsForTencentCDN.set(e,this._initParamsForTencentCDN),this.reset(e);else if(m===-102069)this.cdnLog.error("stopPublishTencentCDN failed, can not stopPublishTencentCDN in auto relayed-push mode"),this._paramsForTencentCDN.set(e,this._initParamsForTencentCDN);else throw this.cdnLog.error(`stopPublishTencentCDN failed, errCode: ${m} errMsg: ${c}`),new Error(`stopPublishTencentCDN failed, errCode: ${m} errMsg: ${c}`)}reset(e){this.uninstallEvents(),this._paramsForTencentCDN.set(e,this._initParamsForTencentCDN)}generatePublishCDNStreamId(e,i){if(e===""){let u=`${this._room.roomId}_${this._room.userId}_${this.convertPublishModeToStreamType(i)}`;return/^[A-Za-z\d_-]*$/.test(u)||(u=(0,B.default)(u)),`${this._room.sdkAppId}_${u}`}return e}convertPublishModeToStreamType(e){return e==="publish-main-stream-to-cdn"?"main":"aux"}generatePublishCDNSessionId(e){return(0,B.default)(`${this._room.roomId}_${this._room.userId}_${this.convertPublishModeToStreamType(e)}`)}};var Q=d=>typeof d=="string";function Ce(d,e,i,u){if(!/^[A-Za-z\d_-]*$/.test(d))throw new Error("Invalid parameter streamId.")}function De(d,e,i,u){if(Q(d))throw new Error("roomId must be an integer but go a string, use 'parseInt' to convert it or use 'strRoomId' instead.");if(d===void 0)return;if(!(/^[1-9]\d*$/.test(String(d))&&d<4294967295))throw new Error("roomId must be an integer between [1, 4294967294].")}function _e(d,e,i,u){if(!/^[A-Za-z\d\s!#$%&()+\-:;<=.>?@[\]^_{}|~,]{1,64}$/.test(d))throw new Error("strRoomId must be a valid string.")}var O={type:"number",notLessThanZero:!0},ee={type:"object",required:!0,properties:{userId:{required:!0,type:"string"},roomId:{type:["string","number"],validate:De},strRoomId:{type:"string",validate:_e}}},te={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:Ce},appId:{type:"number",allowEmpty:!1},bizId:{type:"number",allowEmpty:!1},url:{type:"string",allowEmpty:!1}}},re={required:!1,type:"object",properties:{videoWidth:O,videoHeight:O,videoBitrate:W(I({},O),{allowEmpty:!1}),videoFramerate:{type:"number",validate(d,e,i,u){if(d<=0||d>30)throw new Error("Invalid parameter mixConfig -> videoFramerate, the value must be between (0, 30].")}},videoGOP:{type:"number",validate(d,e,i,u){if(d<1||d>8)throw new Error("Invalid parameter mixConfig -> videoGOP, the value must be between [1, 8].")}},audioSampleRate:O,audioBitrate:{type:"number",validate(d,e,i,u){if(d<32||d>192)throw new Error("Invalid parameter mixConfig -> audioBitrate, the value must be between [32, 192].")}},audioChannels:{type:"number",values:[1,2]}}},ie={required:!1,type:"object",properties:{backgroundColor:{type:"number"},backgroundImage:{type:"string"},audioMixUserList:{type:"array",arrayItem:I({},ee)},videoLayoutList:{type:"array",required:!0,arrayItem:{type:"object",properties:{fixedVideoUser:I({},ee),fixedVideoStreamType:{type:"string",required:!0,values:["main","sub"]},fillMode:{type:"number",values:[0,1,2,4]},zOrder:{type:"number",required:!0,validate(d,e,i,u){if(d<1||d>15)throw new Error("Invalid parameter mix -> videoLayoutList -> zOrder, the value must be between [1, 15].")}},width:O,height:O,locationX:O,locationY:O}}}}};function oe(d){return{name:"CDNStreamingOptions",type:"object",required:!0,allowEmpty:!1,properties:{target:I({},te),encoding:I({},re),mix:I({},ie)},validate(e,i,u,m){var S,_;let{publishMode:c}=e.target,{encoding:l,mix:p}=e;if(c==="publish-mix-stream-to-cdn"){if(!l||!p)throw new Error("Invalid parameter mix & encoding, the value must be not empty.");if(p&&p.videoLayoutList){let D=0,A=0,x=[];if(p.videoLayoutList.forEach((P,F)=>{x.push(P.fixedVideoUser.userId),P.width+P.locationX>D&&(D=P.width+P.locationX),P.height+P.locationY>A&&(A=P.height+P.locationY)}),x.indexOf(d.room.userId)<0)throw new Error("Invalid parameter mix -> videoLayoutList, the value must be include self.");let v=(S=l==null?void 0:l.videoWidth)!=null?S:640,R=(_=l==null?void 0:l.videoHeight)!=null?_:480;if(v<D||R<A)throw new Error("Invalid parameter encoding, the width and height of the mixed video must encompass all the mixed-in video streams.")}}}}}function ae(d){return{name:"CDNStreamingOptions",type:"object",required:!0,allowEmpty:!1,properties:{target:I({},te),encoding:I({},re),mix:I({},ie)}}}function se(d){return{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 $=0,E=class{constructor(e){this.core=e;b(this,"_mixTranscodeManager");b(this,"_publishCDNManager");b(this,"_core");b(this,"cdnLog");b(this,"_modeOptions");b(this,"seq");$=$+1,this.seq=$,this.cdnLog=e.log.createChild({id:`${this.getAlias()}${$}`}),this._core=e,this.cdnLog.info("CDNStreaming created"),this._modeOptions=new Map,this._mixTranscodeManager=new L(e,this.cdnLog),this._publishCDNManager=new U(e,this.cdnLog)}getName(){return"CDNStreaming"}getAlias(){return"cdn"}getValidateRule(e){switch(e){case"start":return oe(this._core);case"update":return ae(this._core);case"stop":return se(this._core)}}getGroup(e){return e.target.publishMode}async start(e){return this.cdnLog.info(`Plugin CDNStreaming start: ${JSON.stringify(e)}`),this._modeOptions.set(e.target.publishMode,e),await this.doStart(e)}async update(e){this.cdnLog.info(`Plugin CDNStreaming update: ${JSON.stringify(e)}`);let i=this._modeOptions.get(e.target.publishMode);return this._core.utils.deepMerge(i,e),await this.doStart(i)}async stop(e){switch(this.cdnLog.info(`Plugin CDNStreaming stop: ${JSON.stringify(e)}`),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.cdnLog.info(`Plugin 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}}}};b(E,"TYPE",{PublishMode:{PublishMainStreamToCDN:"publish-main-stream-to-cdn",PublishSubStreamToCDN:"publish-sub-stream-to-cdn",PublishMixStreamToCDN:"publish-mix-stream-to-cdn"}});var fe=E;return Se(Ie);})().default;
{
"name": "@rtc-plugin/cdn-streaming",
"version": "5.1.3",
"version": "5.2.0-beta.1",
"description": "TRTC Web SDK 5.x CDN streaming plugin",

@@ -5,0 +5,0 @@ "main": "./cdn-streaming.esm.js",

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc