@webex/web-client-media-engine 3.37.1 → 3.38.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/dist/esm/index.js CHANGED
@@ -7154,6 +7154,17 @@ function isValidActiveSpeakerNotificationMsg(msg) {
7154
7154
  const maybeActiveSpeakerNotificationMsg = msg;
7155
7155
  return Boolean(maybeActiveSpeakerNotificationMsg.seqNum && maybeActiveSpeakerNotificationMsg.csis);
7156
7156
  }
7157
+
7158
+ class AV1Codec {
7159
+ constructor(levelIdx, tier, maxWidth, maxHeight, maxPicSize, maxDecodeRate) {
7160
+ this.levelIdx = levelIdx;
7161
+ this.tier = tier;
7162
+ this.maxWidth = maxWidth;
7163
+ this.maxHeight = maxHeight;
7164
+ this.maxPicSize = maxPicSize;
7165
+ this.maxDecodeRate = maxDecodeRate;
7166
+ }
7167
+ }
7157
7168
  function isValidAV1Codec(msg) {
7158
7169
  if (typeof msg !== 'object' || msg === null) {
7159
7170
  return false;
@@ -7769,6 +7780,203 @@ class JmpSession extends EventEmitter$5 {
7769
7780
  }
7770
7781
  }
7771
7782
 
7783
+ var commonjsGlobal$1 = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
7784
+
7785
+ function getDefaultExportFromCjs (x) {
7786
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
7787
+ }
7788
+
7789
+ var es5 = {exports: {}};
7790
+
7791
+ (function (module, exports) {
7792
+ !function(e,t){module.exports=t();}(commonjsGlobal$1,(function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n});},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0});},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=90)}({17:function(e,t,r){t.__esModule=!0,t.default=void 0;var n=r(18),i=function(){function e(){}return e.getFirstMatch=function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||""},e.getSecondMatch=function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||""},e.matchAndReturnConst=function(e,t,r){if(e.test(t))return r},e.getWindowsVersionName=function(e){switch(e){case"NT":return "NT";case"XP":return "XP";case"NT 5.0":return "2000";case"NT 5.1":return "XP";case"NT 5.2":return "2003";case"NT 6.0":return "Vista";case"NT 6.1":return "7";case"NT 6.2":return "8";case"NT 6.3":return "8.1";case"NT 10.0":return "10";default:return}},e.getMacOSVersionName=function(e){var t=e.split(".").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),10===t[0])switch(t[1]){case 5:return "Leopard";case 6:return "Snow Leopard";case 7:return "Lion";case 8:return "Mountain Lion";case 9:return "Mavericks";case 10:return "Yosemite";case 11:return "El Capitan";case 12:return "Sierra";case 13:return "High Sierra";case 14:return "Mojave";case 15:return "Catalina";default:return}},e.getAndroidVersionName=function(e){var t=e.split(".").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?"Cupcake":1===t[0]&&t[1]>=6?"Donut":2===t[0]&&t[1]<2?"Eclair":2===t[0]&&2===t[1]?"Froyo":2===t[0]&&t[1]>2?"Gingerbread":3===t[0]?"Honeycomb":4===t[0]&&t[1]<1?"Ice Cream Sandwich":4===t[0]&&t[1]<4?"Jelly Bean":4===t[0]&&t[1]>=4?"KitKat":5===t[0]?"Lollipop":6===t[0]?"Marshmallow":7===t[0]?"Nougat":8===t[0]?"Oreo":9===t[0]?"Pie":void 0},e.getVersionPrecision=function(e){return e.split(".").length},e.compareVersions=function(t,r,n){void 0===n&&(n=!1);var i=e.getVersionPrecision(t),s=e.getVersionPrecision(r),a=Math.max(i,s),o=0,u=e.map([t,r],(function(t){var r=a-e.getVersionPrecision(t),n=t+new Array(r+1).join(".0");return e.map(n.split("."),(function(e){return new Array(20-e.length).join("0")+e})).reverse()}));for(n&&(o=a-Math.min(i,s)),a-=1;a>=o;){if(u[0][a]>u[1][a])return 1;if(u[0][a]===u[1][a]){if(a===o)return 0;a-=1;}else if(u[0][a]<u[1][a])return -1}},e.map=function(e,t){var r,n=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(r=0;r<e.length;r+=1)n.push(t(e[r]));return n},e.find=function(e,t){var r,n;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(r=0,n=e.length;r<n;r+=1){var i=e[r];if(t(i,r))return i}},e.assign=function(e){for(var t,r,n=e,i=arguments.length,s=new Array(i>1?i-1:0),a=1;a<i;a++)s[a-1]=arguments[a];if(Object.assign)return Object.assign.apply(Object,[e].concat(s));var o=function(){var e=s[t];"object"==typeof e&&null!==e&&Object.keys(e).forEach((function(t){n[t]=e[t];}));};for(t=0,r=s.length;t<r;t+=1)o();return e},e.getBrowserAlias=function(e){return n.BROWSER_ALIASES_MAP[e]},e.getBrowserTypeByAlias=function(e){return n.BROWSER_MAP[e]||""},e}();t.default=i,e.exports=t.default;},18:function(e,t,r){t.__esModule=!0,t.ENGINE_MAP=t.OS_MAP=t.PLATFORMS_MAP=t.BROWSER_MAP=t.BROWSER_ALIASES_MAP=void 0;t.BROWSER_ALIASES_MAP={"Amazon Silk":"amazon_silk","Android Browser":"android",Bada:"bada",BlackBerry:"blackberry",Chrome:"chrome",Chromium:"chromium",Electron:"electron",Epiphany:"epiphany",Firefox:"firefox",Focus:"focus",Generic:"generic","Google Search":"google_search",Googlebot:"googlebot","Internet Explorer":"ie","K-Meleon":"k_meleon",Maxthon:"maxthon","Microsoft Edge":"edge","MZ Browser":"mz","NAVER Whale Browser":"naver",Opera:"opera","Opera Coast":"opera_coast",PhantomJS:"phantomjs",Puffin:"puffin",QupZilla:"qupzilla",QQ:"qq",QQLite:"qqlite",Safari:"safari",Sailfish:"sailfish","Samsung Internet for Android":"samsung_internet",SeaMonkey:"seamonkey",Sleipnir:"sleipnir",Swing:"swing",Tizen:"tizen","UC Browser":"uc",Vivaldi:"vivaldi","WebOS Browser":"webos",WeChat:"wechat","Yandex Browser":"yandex",Roku:"roku"};t.BROWSER_MAP={amazon_silk:"Amazon Silk",android:"Android Browser",bada:"Bada",blackberry:"BlackBerry",chrome:"Chrome",chromium:"Chromium",electron:"Electron",epiphany:"Epiphany",firefox:"Firefox",focus:"Focus",generic:"Generic",googlebot:"Googlebot",google_search:"Google Search",ie:"Internet Explorer",k_meleon:"K-Meleon",maxthon:"Maxthon",edge:"Microsoft Edge",mz:"MZ Browser",naver:"NAVER Whale Browser",opera:"Opera",opera_coast:"Opera Coast",phantomjs:"PhantomJS",puffin:"Puffin",qupzilla:"QupZilla",qq:"QQ Browser",qqlite:"QQ Browser Lite",safari:"Safari",sailfish:"Sailfish",samsung_internet:"Samsung Internet for Android",seamonkey:"SeaMonkey",sleipnir:"Sleipnir",swing:"Swing",tizen:"Tizen",uc:"UC Browser",vivaldi:"Vivaldi",webos:"WebOS Browser",wechat:"WeChat",yandex:"Yandex Browser"};t.PLATFORMS_MAP={tablet:"tablet",mobile:"mobile",desktop:"desktop",tv:"tv"};t.OS_MAP={WindowsPhone:"Windows Phone",Windows:"Windows",MacOS:"macOS",iOS:"iOS",Android:"Android",WebOS:"WebOS",BlackBerry:"BlackBerry",Bada:"Bada",Tizen:"Tizen",Linux:"Linux",ChromeOS:"Chrome OS",PlayStation4:"PlayStation 4",Roku:"Roku"};t.ENGINE_MAP={EdgeHTML:"EdgeHTML",Blink:"Blink",Trident:"Trident",Presto:"Presto",Gecko:"Gecko",WebKit:"WebKit"};},90:function(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(91))&&n.__esModule?n:{default:n},s=r(18);function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n);}}var o=function(){function e(){}var t,r,n;return e.getParser=function(e,t){if(void 0===t&&(t=!1),"string"!=typeof e)throw new Error("UserAgent should be a string");return new i.default(e,t)},e.parse=function(e){return new i.default(e).getResult()},t=e,n=[{key:"BROWSER_MAP",get:function(){return s.BROWSER_MAP}},{key:"ENGINE_MAP",get:function(){return s.ENGINE_MAP}},{key:"OS_MAP",get:function(){return s.OS_MAP}},{key:"PLATFORMS_MAP",get:function(){return s.PLATFORMS_MAP}}],(r=null)&&a(t.prototype,r),n&&a(t,n),e}();t.default=o,e.exports=t.default;},91:function(e,t,r){t.__esModule=!0,t.default=void 0;var n=u(r(92)),i=u(r(93)),s=u(r(94)),a=u(r(95)),o=u(r(17));function u(e){return e&&e.__esModule?e:{default:e}}var d=function(){function e(e,t){if(void 0===t&&(t=!1),null==e||""===e)throw new Error("UserAgent parameter can't be empty");this._ua=e,this.parsedResult={},!0!==t&&this.parse();}var t=e.prototype;return t.getUA=function(){return this._ua},t.test=function(e){return e.test(this._ua)},t.parseBrowser=function(){var e=this;this.parsedResult.browser={};var t=o.default.find(n.default,(function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error("Browser's test function is not valid")}));return t&&(this.parsedResult.browser=t.describe(this.getUA())),this.parsedResult.browser},t.getBrowser=function(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser()},t.getBrowserName=function(e){return e?String(this.getBrowser().name).toLowerCase()||"":this.getBrowser().name||""},t.getBrowserVersion=function(){return this.getBrowser().version},t.getOS=function(){return this.parsedResult.os?this.parsedResult.os:this.parseOS()},t.parseOS=function(){var e=this;this.parsedResult.os={};var t=o.default.find(i.default,(function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error("Browser's test function is not valid")}));return t&&(this.parsedResult.os=t.describe(this.getUA())),this.parsedResult.os},t.getOSName=function(e){var t=this.getOS().name;return e?String(t).toLowerCase()||"":t||""},t.getOSVersion=function(){return this.getOS().version},t.getPlatform=function(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform()},t.getPlatformType=function(e){void 0===e&&(e=!1);var t=this.getPlatform().type;return e?String(t).toLowerCase()||"":t||""},t.parsePlatform=function(){var e=this;this.parsedResult.platform={};var t=o.default.find(s.default,(function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error("Browser's test function is not valid")}));return t&&(this.parsedResult.platform=t.describe(this.getUA())),this.parsedResult.platform},t.getEngine=function(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine()},t.getEngineName=function(e){return e?String(this.getEngine().name).toLowerCase()||"":this.getEngine().name||""},t.parseEngine=function(){var e=this;this.parsedResult.engine={};var t=o.default.find(a.default,(function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error("Browser's test function is not valid")}));return t&&(this.parsedResult.engine=t.describe(this.getUA())),this.parsedResult.engine},t.parse=function(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this},t.getResult=function(){return o.default.assign({},this.parsedResult)},t.satisfies=function(e){var t=this,r={},n=0,i={},s=0;if(Object.keys(e).forEach((function(t){var a=e[t];"string"==typeof a?(i[t]=a,s+=1):"object"==typeof a&&(r[t]=a,n+=1);})),n>0){var a=Object.keys(r),u=o.default.find(a,(function(e){return t.isOS(e)}));if(u){var d=this.satisfies(r[u]);if(void 0!==d)return d}var c=o.default.find(a,(function(e){return t.isPlatform(e)}));if(c){var f=this.satisfies(r[c]);if(void 0!==f)return f}}if(s>0){var l=Object.keys(i),h=o.default.find(l,(function(e){return t.isBrowser(e,!0)}));if(void 0!==h)return this.compareVersion(i[h])}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var r=this.getBrowserName().toLowerCase(),n=e.toLowerCase(),i=o.default.getBrowserTypeByAlias(n);return t&&i&&(n=i.toLowerCase()),n===r},t.compareVersion=function(e){var t=[0],r=e,n=!1,i=this.getBrowserVersion();if("string"==typeof i)return ">"===e[0]||"<"===e[0]?(r=e.substr(1),"="===e[1]?(n=!0,r=e.substr(2)):t=[],">"===e[0]?t.push(1):t.push(-1)):"="===e[0]?r=e.substr(1):"~"===e[0]&&(n=!0,r=e.substr(1)),t.indexOf(o.default.compareVersions(i,r,n))>-1},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase()},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase()},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase()},t.is=function(e,t){return void 0===t&&(t=!1),this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e)},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some((function(e){return t.is(e)}))},e}();t.default=d,e.exports=t.default;},92:function(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n};var s=/version\/(\d+(\.?_?\d+)+)/i,a=[{test:[/googlebot/i],describe:function(e){var t={name:"Googlebot"},r=i.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/opera/i],describe:function(e){var t={name:"Opera"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opr\/|opios/i],describe:function(e){var t={name:"Opera"},r=i.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/SamsungBrowser/i],describe:function(e){var t={name:"Samsung Internet for Android"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Whale/i],describe:function(e){var t={name:"NAVER Whale Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MZBrowser/i],describe:function(e){var t={name:"MZ Browser"},r=i.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/focus/i],describe:function(e){var t={name:"Focus"},r=i.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/swing/i],describe:function(e){var t={name:"Swing"},r=i.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/coast/i],describe:function(e){var t={name:"Opera Coast"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe:function(e){var t={name:"Opera Touch"},r=i.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/yabrowser/i],describe:function(e){var t={name:"Yandex Browser"},r=i.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/ucbrowser/i],describe:function(e){var t={name:"UC Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Maxthon|mxios/i],describe:function(e){var t={name:"Maxthon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/epiphany/i],describe:function(e){var t={name:"Epiphany"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/puffin/i],describe:function(e){var t={name:"Puffin"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sleipnir/i],describe:function(e){var t={name:"Sleipnir"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/k-meleon/i],describe:function(e){var t={name:"K-Meleon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/micromessenger/i],describe:function(e){var t={name:"WeChat"},r=i.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/qqbrowser/i],describe:function(e){var t={name:/qqbrowserlite/i.test(e)?"QQ Browser Lite":"QQ Browser"},r=i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/msie|trident/i],describe:function(e){var t={name:"Internet Explorer"},r=i.default.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/\sedg\//i],describe:function(e){var t={name:"Microsoft Edge"},r=i.default.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/edg([ea]|ios)/i],describe:function(e){var t={name:"Microsoft Edge"},r=i.default.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/vivaldi/i],describe:function(e){var t={name:"Vivaldi"},r=i.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/seamonkey/i],describe:function(e){var t={name:"SeaMonkey"},r=i.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sailfish/i],describe:function(e){var t={name:"Sailfish"},r=i.default.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,e);return r&&(t.version=r),t}},{test:[/silk/i],describe:function(e){var t={name:"Amazon Silk"},r=i.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/phantom/i],describe:function(e){var t={name:"PhantomJS"},r=i.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/slimerjs/i],describe:function(e){var t={name:"SlimerJS"},r=i.default.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(e){var t={name:"BlackBerry"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t={name:"WebOS Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/bada/i],describe:function(e){var t={name:"Bada"},r=i.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/tizen/i],describe:function(e){var t={name:"Tizen"},r=i.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/qupzilla/i],describe:function(e){var t={name:"QupZilla"},r=i.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/firefox|iceweasel|fxios/i],describe:function(e){var t={name:"Firefox"},r=i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/electron/i],describe:function(e){var t={name:"Electron"},r=i.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MiuiBrowser/i],describe:function(e){var t={name:"Miui"},r=i.default.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/chromium/i],describe:function(e){var t={name:"Chromium"},r=i.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/chrome|crios|crmo/i],describe:function(e){var t={name:"Chrome"},r=i.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/GSA/i],describe:function(e){var t={name:"Google Search"},r=i.default.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t={name:"Android Browser"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/playstation 4/i],describe:function(e){var t={name:"PlayStation 4"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/safari|applewebkit/i],describe:function(e){var t={name:"Safari"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/.*/i],describe:function(e){var t=-1!==e.search("\\(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return {name:i.default.getFirstMatch(t,e),version:i.default.getSecondMatch(t,e)}}}];t.default=a,e.exports=t.default;},93:function(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/Roku\/DVP/],describe:function(e){var t=i.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,e);return {name:s.OS_MAP.Roku,version:t}}},{test:[/windows phone/i],describe:function(e){var t=i.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.WindowsPhone,version:t}}},{test:[/windows /i],describe:function(e){var t=i.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,e),r=i.default.getWindowsVersionName(t);return {name:s.OS_MAP.Windows,version:t,versionName:r}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(e){var t={name:s.OS_MAP.iOS},r=i.default.getSecondMatch(/(Version\/)(\d[\d.]+)/,e);return r&&(t.version=r),t}},{test:[/macintosh/i],describe:function(e){var t=i.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,e).replace(/[_\s]/g,"."),r=i.default.getMacOSVersionName(t),n={name:s.OS_MAP.MacOS,version:t};return r&&(n.versionName=r),n}},{test:[/(ipod|iphone|ipad)/i],describe:function(e){var t=i.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,e).replace(/[_\s]/g,".");return {name:s.OS_MAP.iOS,version:t}}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t=i.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,e),r=i.default.getAndroidVersionName(t),n={name:s.OS_MAP.Android,version:t};return r&&(n.versionName=r),n}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t=i.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,e),r={name:s.OS_MAP.WebOS};return t&&t.length&&(r.version=t),r}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(e){var t=i.default.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,e)||i.default.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,e)||i.default.getFirstMatch(/\bbb(\d+)/i,e);return {name:s.OS_MAP.BlackBerry,version:t}}},{test:[/bada/i],describe:function(e){var t=i.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.Bada,version:t}}},{test:[/tizen/i],describe:function(e){var t=i.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.Tizen,version:t}}},{test:[/linux/i],describe:function(){return {name:s.OS_MAP.Linux}}},{test:[/CrOS/],describe:function(){return {name:s.OS_MAP.ChromeOS}}},{test:[/PlayStation 4/],describe:function(e){var t=i.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.PlayStation4,version:t}}}];t.default=a,e.exports=t.default;},94:function(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/googlebot/i],describe:function(){return {type:"bot",vendor:"Google"}}},{test:[/huawei/i],describe:function(e){var t=i.default.getFirstMatch(/(can-l01)/i,e)&&"Nova",r={type:s.PLATFORMS_MAP.mobile,vendor:"Huawei"};return t&&(r.model=t),r}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:function(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Nexus"}}},{test:[/ipad/i],describe:function(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/kftt build/i],describe:function(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"}}},{test:[/silk/i],describe:function(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Amazon"}}},{test:[/tablet(?! pc)/i],describe:function(){return {type:s.PLATFORMS_MAP.tablet}}},{test:function(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r},describe:function(e){var t=i.default.getFirstMatch(/(ipod|iphone)/i,e);return {type:s.PLATFORMS_MAP.mobile,vendor:"Apple",model:t}}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:function(){return {type:s.PLATFORMS_MAP.mobile,vendor:"Nexus"}}},{test:[/[^-]mobi/i],describe:function(){return {type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return "blackberry"===e.getBrowserName(!0)},describe:function(){return {type:s.PLATFORMS_MAP.mobile,vendor:"BlackBerry"}}},{test:function(e){return "bada"===e.getBrowserName(!0)},describe:function(){return {type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return "windows phone"===e.getBrowserName()},describe:function(){return {type:s.PLATFORMS_MAP.mobile,vendor:"Microsoft"}}},{test:function(e){var t=Number(String(e.getOSVersion()).split(".")[0]);return "android"===e.getOSName(!0)&&t>=3},describe:function(){return {type:s.PLATFORMS_MAP.tablet}}},{test:function(e){return "android"===e.getOSName(!0)},describe:function(){return {type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return "macos"===e.getOSName(!0)},describe:function(){return {type:s.PLATFORMS_MAP.desktop,vendor:"Apple"}}},{test:function(e){return "windows"===e.getOSName(!0)},describe:function(){return {type:s.PLATFORMS_MAP.desktop}}},{test:function(e){return "linux"===e.getOSName(!0)},describe:function(){return {type:s.PLATFORMS_MAP.desktop}}},{test:function(e){return "playstation 4"===e.getOSName(!0)},describe:function(){return {type:s.PLATFORMS_MAP.tv}}},{test:function(e){return "roku"===e.getOSName(!0)},describe:function(){return {type:s.PLATFORMS_MAP.tv}}}];t.default=a,e.exports=t.default;},95:function(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:function(e){return "microsoft edge"===e.getBrowserName(!0)},describe:function(e){if(/\sedg\//i.test(e))return {name:s.ENGINE_MAP.Blink};var t=i.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,e);return {name:s.ENGINE_MAP.EdgeHTML,version:t}}},{test:[/trident/i],describe:function(e){var t={name:s.ENGINE_MAP.Trident},r=i.default.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){return e.test(/presto/i)},describe:function(e){var t={name:s.ENGINE_MAP.Presto},r=i.default.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r},describe:function(e){var t={name:s.ENGINE_MAP.Gecko},r=i.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(apple)?webkit\/537\.36/i],describe:function(){return {name:s.ENGINE_MAP.Blink}}},{test:[/(apple)?webkit/i],describe:function(e){var t={name:s.ENGINE_MAP.WebKit},r=i.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}}];t.default=a,e.exports=t.default;}})}));
7793
+ }(es5));
7794
+
7795
+ var Bowser = /*@__PURE__*/getDefaultExportFromCjs(es5.exports);
7796
+
7797
+ var BrowserName;
7798
+ (function (BrowserName) {
7799
+ BrowserName["CHROME"] = "Chrome";
7800
+ BrowserName["FIREFOX"] = "Firefox";
7801
+ BrowserName["EDGE"] = "Microsoft Edge";
7802
+ BrowserName["SAFARI"] = "Safari";
7803
+ })(BrowserName || (BrowserName = {}));
7804
+ var OSName;
7805
+ (function (OSName) {
7806
+ OSName["WINDOWS"] = "Windows";
7807
+ OSName["MAC"] = "macOS";
7808
+ OSName["LINUX"] = "Linux";
7809
+ })(OSName || (OSName = {}));
7810
+ class BrowserInfo {
7811
+ static getBrowserDetails() {
7812
+ return this.browser.getBrowser();
7813
+ }
7814
+ static getOSDetails() {
7815
+ return this.browser.getOS();
7816
+ }
7817
+ static getPlatformDetails() {
7818
+ return this.browser.getPlatform();
7819
+ }
7820
+ static getEngineDetails() {
7821
+ return this.browser.getEngine();
7822
+ }
7823
+ static isChrome() {
7824
+ return this.browser.getBrowserName() === BrowserName.CHROME;
7825
+ }
7826
+ static isFirefox() {
7827
+ return this.browser.getBrowserName() === BrowserName.FIREFOX;
7828
+ }
7829
+ static isEdge() {
7830
+ return this.browser.getBrowserName() === BrowserName.EDGE;
7831
+ }
7832
+ static isSafari() {
7833
+ return this.browser.getBrowserName() === BrowserName.SAFARI;
7834
+ }
7835
+ static isWindows() {
7836
+ return this.browser.getOSName() === OSName.WINDOWS;
7837
+ }
7838
+ static isMac() {
7839
+ return this.browser.getOSName() === OSName.MAC;
7840
+ }
7841
+ static isLinux() {
7842
+ return this.browser.getOSName() === OSName.LINUX;
7843
+ }
7844
+ static isVersionGreaterThan(version) {
7845
+ const browserName = this.browser.getBrowserName();
7846
+ const checkTree = { [browserName]: `>${version}` };
7847
+ return this.browser.satisfies(checkTree);
7848
+ }
7849
+ static isVersionGreaterThanOrEqualTo(version) {
7850
+ const browserName = this.browser.getBrowserName();
7851
+ const checkTree = { [browserName]: `>=${version}` };
7852
+ return this.browser.satisfies(checkTree);
7853
+ }
7854
+ static isVersionLessThan(version) {
7855
+ const browserName = this.browser.getBrowserName();
7856
+ const checkTree = { [browserName]: `<${version}` };
7857
+ return this.browser.satisfies(checkTree);
7858
+ }
7859
+ static isVersionLessThanOrEqualTo(version) {
7860
+ const browserName = this.browser.getBrowserName();
7861
+ const checkTree = { [browserName]: `<=${version}` };
7862
+ return this.browser.satisfies(checkTree);
7863
+ }
7864
+ static isSubVersionOf(version) {
7865
+ const browserName = this.browser.getBrowserName();
7866
+ const checkTree = { [browserName]: `~${version}` };
7867
+ return this.browser.satisfies(checkTree);
7868
+ }
7869
+ }
7870
+ BrowserInfo.browser = Bowser.getParser(window.navigator.userAgent);
7871
+
7872
+ class CpuInfo {
7873
+ static getNumLogicalCores() {
7874
+ return navigator.hardwareConcurrency;
7875
+ }
7876
+ }
7877
+
7878
+ var SystemInfoEvents;
7879
+ (function (SystemInfoEvents) {
7880
+ SystemInfoEvents["CpuPressureStateChange"] = "cpu-pressure-state-change";
7881
+ })(SystemInfoEvents || (SystemInfoEvents = {}));
7882
+ class PressureObserverHelper extends EventEmitter$5 {
7883
+ constructor() {
7884
+ super();
7885
+ this.lastCpuPressure = undefined;
7886
+ if (PressureObserverHelper.isPressureObserverSupported()) {
7887
+ this.observer = new PressureObserver(this.handleStateChange.bind(this));
7888
+ if (this.observer) {
7889
+ this.observer.observe('cpu');
7890
+ }
7891
+ }
7892
+ }
7893
+ handleStateChange(records) {
7894
+ records.forEach((record) => {
7895
+ if (record.source === 'cpu' && record.state !== this.lastCpuPressure) {
7896
+ this.lastCpuPressure = record.state;
7897
+ this.emit(SystemInfoEvents.CpuPressureStateChange, record.state);
7898
+ }
7899
+ });
7900
+ }
7901
+ getCpuPressure() {
7902
+ return this.lastCpuPressure;
7903
+ }
7904
+ static isPressureObserverSupported() {
7905
+ return 'PressureObserver' in window;
7906
+ }
7907
+ }
7908
+ new PressureObserverHelper();
7909
+
7910
+ var CapabilityState;
7911
+ (function (CapabilityState) {
7912
+ CapabilityState["NOT_CAPABLE"] = "not capable";
7913
+ CapabilityState["CAPABLE"] = "capable";
7914
+ CapabilityState["UNKNOWN"] = "unknown";
7915
+ })(CapabilityState || (CapabilityState = {}));
7916
+ class WebCapabilities {
7917
+ static isCapableOfBackgroundNoiseRemoval() {
7918
+ const numCores = CpuInfo.getNumLogicalCores();
7919
+ if (numCores === undefined) {
7920
+ return CapabilityState.UNKNOWN;
7921
+ }
7922
+ if (numCores < 2) {
7923
+ return CapabilityState.NOT_CAPABLE;
7924
+ }
7925
+ return CapabilityState.CAPABLE;
7926
+ }
7927
+ static isCapableOfVirtualBackground() {
7928
+ const numCores = CpuInfo.getNumLogicalCores();
7929
+ if (numCores === undefined) {
7930
+ return CapabilityState.UNKNOWN;
7931
+ }
7932
+ if (numCores < 2) {
7933
+ return CapabilityState.NOT_CAPABLE;
7934
+ }
7935
+ return CapabilityState.CAPABLE;
7936
+ }
7937
+ static isCapableOfReceiving1080pVideo() {
7938
+ const numCores = CpuInfo.getNumLogicalCores();
7939
+ if (numCores === undefined) {
7940
+ return CapabilityState.UNKNOWN;
7941
+ }
7942
+ if (numCores < 2) {
7943
+ return CapabilityState.NOT_CAPABLE;
7944
+ }
7945
+ return CapabilityState.CAPABLE;
7946
+ }
7947
+ static isCapableOfSending1080pVideo() {
7948
+ const numCores = CpuInfo.getNumLogicalCores();
7949
+ if (numCores === undefined) {
7950
+ return CapabilityState.UNKNOWN;
7951
+ }
7952
+ if (numCores < 8) {
7953
+ return CapabilityState.NOT_CAPABLE;
7954
+ }
7955
+ return CapabilityState.CAPABLE;
7956
+ }
7957
+ static isCapableOfReceivingVideoCodec(mimeType) {
7958
+ var _a;
7959
+ const codecs = ((_a = RTCRtpReceiver.getCapabilities('video')) === null || _a === void 0 ? void 0 : _a.codecs) || [];
7960
+ return codecs.some((codec) => codec.mimeType === mimeType)
7961
+ ? CapabilityState.CAPABLE
7962
+ : CapabilityState.NOT_CAPABLE;
7963
+ }
7964
+ static supportsEncodedStreamTransforms() {
7965
+ return window.RTCRtpScriptTransform &&
7966
+ window.RTCRtpSender &&
7967
+ 'transform' in RTCRtpSender.prototype &&
7968
+ window.RTCRtpReceiver &&
7969
+ 'transform' in RTCRtpReceiver.prototype
7970
+ ? CapabilityState.CAPABLE
7971
+ : CapabilityState.NOT_CAPABLE;
7972
+ }
7973
+ static supportsRTCPeerConnection() {
7974
+ return typeof RTCPeerConnection === 'function'
7975
+ ? CapabilityState.CAPABLE
7976
+ : CapabilityState.NOT_CAPABLE;
7977
+ }
7978
+ }
7979
+
7772
7980
  var WcmeErrorType;
7773
7981
  (function (WcmeErrorType) {
7774
7982
  WcmeErrorType["CREATE_OFFER_FAILED"] = "CREATE_OFFER_FAILED";
@@ -7784,6 +7992,7 @@ var WcmeErrorType;
7784
7992
  WcmeErrorType["SET_SOURCE_STATE_OVERRIDE_FAILED"] = "SET_SOURCE_STATE_OVERRIDE_FAILED";
7785
7993
  WcmeErrorType["DATA_CHANNEL_SEND_FAILED"] = "DATA_CHANNEL_SEND_FAILED";
7786
7994
  WcmeErrorType["RENEW_PEER_CONNECTION_FAILED"] = "RENEW_PEER_CONNECTION_FAILED";
7995
+ WcmeErrorType["INVALID_CODEC_PARAMS"] = "INVALID_CODEC_PARAMS";
7787
7996
  WcmeErrorType["UNSUPPORTED_CONFIG"] = "UNSUPPORTED_CONFIG";
7788
7997
  })(WcmeErrorType || (WcmeErrorType = {}));
7789
7998
  class WcmeError {
@@ -7793,7 +8002,7 @@ class WcmeError {
7793
8002
  }
7794
8003
  }
7795
8004
 
7796
- var commonjsGlobal$1 = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
8005
+ var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
7797
8006
 
7798
8007
  var logger$1 = {exports: {}};
7799
8008
 
@@ -8074,7 +8283,7 @@ var logger$1 = {exports: {}};
8074
8283
 
8075
8284
  global.Logger = Logger;
8076
8285
  }
8077
- }(commonjsGlobal$1));
8286
+ }(commonjsGlobal));
8078
8287
  }(logger$1));
8079
8288
 
8080
8289
  var Logger = logger$1.exports;
@@ -8110,6 +8319,7 @@ var MediaCodecMimeType;
8110
8319
  const defaultMaxVideoEncodeFrameSize = 8160;
8111
8320
  const defaultMaxVideoEncodeMbps = 244800;
8112
8321
  const defaultStartBitrateKbps = 3000;
8322
+ const macroBlockSize = 16 * 16;
8113
8323
  var RecommendedOpusBitrates;
8114
8324
  (function (RecommendedOpusBitrates) {
8115
8325
  RecommendedOpusBitrates[RecommendedOpusBitrates["NB"] = 12000] = "NB";
@@ -8128,6 +8338,15 @@ const maxFrameSizeToMaxBitrateMap = new Map([
8128
8338
  [3600, 2500000],
8129
8339
  [8160, 4000000],
8130
8340
  ]);
8341
+ const minSupportedMaxPicSize = 147456;
8342
+ const maxPicSizeToMaxBitrateMap = new Map([
8343
+ [147456, 1.5 * 1000000],
8344
+ [278784, 3.0 * 1000000],
8345
+ [665856, 6.0 * 1000000],
8346
+ [1065024, 10.0 * 1000000],
8347
+ [2359296, 12.0 * 1000000],
8348
+ [8912896, 30.0 * 1000000],
8349
+ ]);
8131
8350
  const defaultVideoMainRtxTime = '300';
8132
8351
  const defaultVideoSlidesRtxTime = '1000';
8133
8352
  function areProfileLevelIdsCompatible(senderProfileLevelId, receiverProfileLevelId, levelAsymmetryAllowed) {
@@ -8176,6 +8395,51 @@ function areCodecsCompatible(senderCodec, receiverCodec) {
8176
8395
  return true;
8177
8396
  });
8178
8397
  }
8398
+ function isVideoEncodingParams(encodingParams) {
8399
+ if (!encodingParams) {
8400
+ return false;
8401
+ }
8402
+ return 'maxWidth' in encodingParams || 'maxHeight' in encodingParams;
8403
+ }
8404
+ function isH264EncodingParams(encodingParams) {
8405
+ if (!encodingParams) {
8406
+ return false;
8407
+ }
8408
+ return 'maxFs' in encodingParams || 'maxFps' in encodingParams || 'maxMbps' in encodingParams;
8409
+ }
8410
+ function isAV1EncodingParams(encodingParams) {
8411
+ if (!encodingParams) {
8412
+ return false;
8413
+ }
8414
+ return ('levelIdx' in encodingParams ||
8415
+ 'tier' in encodingParams ||
8416
+ 'maxPicSize' in encodingParams ||
8417
+ 'maxDecodeRate' in encodingParams);
8418
+ }
8419
+ function codecToEncodingParams(codecInfo) {
8420
+ if (codecInfo.av1) {
8421
+ const { av1 } = codecInfo;
8422
+ return {
8423
+ levelIdx: av1.levelIdx,
8424
+ tier: av1.tier,
8425
+ maxWidth: av1.maxWidth,
8426
+ maxHeight: av1.maxHeight,
8427
+ maxPicSize: av1.maxPicSize,
8428
+ maxDecodeRate: av1.maxDecodeRate,
8429
+ };
8430
+ }
8431
+ if (codecInfo.h264) {
8432
+ const { h264 } = codecInfo;
8433
+ return {
8434
+ maxFs: h264.maxFs,
8435
+ maxFps: h264.maxFps,
8436
+ maxMbps: h264.maxMbps,
8437
+ maxWidth: h264.maxWidth,
8438
+ maxHeight: h264.maxHeight,
8439
+ };
8440
+ }
8441
+ return undefined;
8442
+ }
8179
8443
  function gcd(a, b) {
8180
8444
  return b === 0 ? a : gcd(b, a % b);
8181
8445
  }
@@ -8183,7 +8447,6 @@ function getFrameHeightByMaxFs(sourceAspectRatio, requestedMaxFs) {
8183
8447
  const _gcd = gcd(sourceAspectRatio[0], sourceAspectRatio[1]);
8184
8448
  const minNumberRatiosForWidth = sourceAspectRatio[0] / _gcd;
8185
8449
  const minNumberRatiosForHeight = sourceAspectRatio[1] / _gcd;
8186
- const macroBlockSize = 16 * 16;
8187
8450
  const minRatioNumberByMaxFs = Math.sqrt((requestedMaxFs * macroBlockSize) / (minNumberRatiosForWidth * minNumberRatiosForHeight));
8188
8451
  const roundedMinRatioNumberByMaxFs = Math.max(Math.floor(minRatioNumberByMaxFs), 1.0);
8189
8452
  return roundedMinRatioNumberByMaxFs * minNumberRatiosForHeight;
@@ -8202,10 +8465,10 @@ function getRecommendedMaxBitrateForFrameSize(requestedMaxFs) {
8202
8465
  if (requestedMaxFs < 60) {
8203
8466
  logErrorAndThrow(WcmeErrorType.GET_MAX_BITRATE_FAILED, `Requested max video frame size cannot be less than 60.`);
8204
8467
  }
8205
- const expectedHeight = [...maxFrameSizeToMaxBitrateMap.keys()]
8468
+ const matchingFrameSize = [...maxFrameSizeToMaxBitrateMap.keys()]
8206
8469
  .sort((a, b) => b - a)
8207
- .find((h) => requestedMaxFs >= h);
8208
- return maxFrameSizeToMaxBitrateMap.get(expectedHeight);
8470
+ .find((maxFs) => requestedMaxFs >= maxFs);
8471
+ return maxFrameSizeToMaxBitrateMap.get(matchingFrameSize);
8209
8472
  }
8210
8473
  function setCodecParameters(allCodecParameters, codecMimeType, newParameters) {
8211
8474
  if (!allCodecParameters.has(codecMimeType)) {
@@ -8224,6 +8487,43 @@ function markCodecParametersForDeletion(allCodecParameters, codecMimeTypeToUpdat
8224
8487
  codecParameters.forEach((param) => {
8225
8488
  currentParameters[param] = undefined;
8226
8489
  });
8490
+ }
8491
+ function getRecommendedMaxBitrateForPicSize(requestedMaxPicSize) {
8492
+ if (requestedMaxPicSize < minSupportedMaxPicSize) {
8493
+ logErrorAndThrow(WcmeErrorType.GET_MAX_BITRATE_FAILED, `Requested max video picture size cannot be less than ${minSupportedMaxPicSize}.`);
8494
+ }
8495
+ const expectedHeight = [...maxPicSizeToMaxBitrateMap.keys()]
8496
+ .sort((a, b) => b - a)
8497
+ .find((h) => requestedMaxPicSize >= h);
8498
+ return maxPicSizeToMaxBitrateMap.get(expectedHeight);
8499
+ }
8500
+ function getFrameSizeForPicSize(maxPicSize) {
8501
+ if (!maxPicSize) {
8502
+ return undefined;
8503
+ }
8504
+ return Math.ceil(maxPicSize / macroBlockSize);
8505
+ }
8506
+ function isEncodingCodecSupported() {
8507
+ return (((BrowserInfo.isChrome() || BrowserInfo.isEdge()) &&
8508
+ BrowserInfo.isVersionGreaterThanOrEqualTo('140')) ||
8509
+ (BrowserInfo.isFirefox() && BrowserInfo.isVersionGreaterThanOrEqualTo('145')));
8510
+ }
8511
+ function getSupportedAudioCodecs() {
8512
+ return [MediaCodecMimeType.OPUS];
8513
+ }
8514
+ function getSupportedVideoCodecs(options = {
8515
+ includeAV1: false,
8516
+ }) {
8517
+ const supportedCodecs = [MediaCodecMimeType.H264, MediaCodecMimeType.RTX];
8518
+ if (options.includeAV1) {
8519
+ if (isEncodingCodecSupported()) {
8520
+ supportedCodecs.push(MediaCodecMimeType.AV1);
8521
+ }
8522
+ else {
8523
+ logger.warn('AV1 codec was requested but browser does not support encoding.codec');
8524
+ }
8525
+ }
8526
+ return supportedCodecs;
8227
8527
  }
8228
8528
 
8229
8529
  /******************************************************************************
@@ -10047,10 +10347,6 @@ function retainCodecs(av, predicate) {
10047
10347
  });
10048
10348
  return filtered;
10049
10349
  }
10050
- function retainCodecsByCodecName(av, allowedCodecNames) {
10051
- const allowedLowerCase = allowedCodecNames.map((s) => s.toLowerCase());
10052
- return retainCodecs(av, (codecInfo) => !!codecInfo.name && allowedLowerCase.includes(codecInfo.name.toLowerCase()));
10053
- }
10054
10350
  function retainCandidates(sdpOrMedia, predicate) {
10055
10351
  const mediaDescriptions = sdpOrMedia instanceof Sdp ? sdpOrMedia.media : [sdpOrMedia];
10056
10352
  let filtered = false;
@@ -10074,191 +10370,6 @@ function hasCodec(codecName, mLine) {
10074
10370
  return [...mLine.codecs.values()].some((ci) => { var _a; return ((_a = ci.name) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === codecName.toLowerCase(); });
10075
10371
  }
10076
10372
 
10077
- var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
10078
-
10079
- function getDefaultExportFromCjs (x) {
10080
- return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
10081
- }
10082
-
10083
- var es5 = {exports: {}};
10084
-
10085
- (function (module, exports) {
10086
- !function(e,t){module.exports=t();}(commonjsGlobal,(function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n});},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0});},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=90)}({17:function(e,t,r){t.__esModule=!0,t.default=void 0;var n=r(18),i=function(){function e(){}return e.getFirstMatch=function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||""},e.getSecondMatch=function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||""},e.matchAndReturnConst=function(e,t,r){if(e.test(t))return r},e.getWindowsVersionName=function(e){switch(e){case"NT":return "NT";case"XP":return "XP";case"NT 5.0":return "2000";case"NT 5.1":return "XP";case"NT 5.2":return "2003";case"NT 6.0":return "Vista";case"NT 6.1":return "7";case"NT 6.2":return "8";case"NT 6.3":return "8.1";case"NT 10.0":return "10";default:return}},e.getMacOSVersionName=function(e){var t=e.split(".").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),10===t[0])switch(t[1]){case 5:return "Leopard";case 6:return "Snow Leopard";case 7:return "Lion";case 8:return "Mountain Lion";case 9:return "Mavericks";case 10:return "Yosemite";case 11:return "El Capitan";case 12:return "Sierra";case 13:return "High Sierra";case 14:return "Mojave";case 15:return "Catalina";default:return}},e.getAndroidVersionName=function(e){var t=e.split(".").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?"Cupcake":1===t[0]&&t[1]>=6?"Donut":2===t[0]&&t[1]<2?"Eclair":2===t[0]&&2===t[1]?"Froyo":2===t[0]&&t[1]>2?"Gingerbread":3===t[0]?"Honeycomb":4===t[0]&&t[1]<1?"Ice Cream Sandwich":4===t[0]&&t[1]<4?"Jelly Bean":4===t[0]&&t[1]>=4?"KitKat":5===t[0]?"Lollipop":6===t[0]?"Marshmallow":7===t[0]?"Nougat":8===t[0]?"Oreo":9===t[0]?"Pie":void 0},e.getVersionPrecision=function(e){return e.split(".").length},e.compareVersions=function(t,r,n){void 0===n&&(n=!1);var i=e.getVersionPrecision(t),s=e.getVersionPrecision(r),a=Math.max(i,s),o=0,u=e.map([t,r],(function(t){var r=a-e.getVersionPrecision(t),n=t+new Array(r+1).join(".0");return e.map(n.split("."),(function(e){return new Array(20-e.length).join("0")+e})).reverse()}));for(n&&(o=a-Math.min(i,s)),a-=1;a>=o;){if(u[0][a]>u[1][a])return 1;if(u[0][a]===u[1][a]){if(a===o)return 0;a-=1;}else if(u[0][a]<u[1][a])return -1}},e.map=function(e,t){var r,n=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(r=0;r<e.length;r+=1)n.push(t(e[r]));return n},e.find=function(e,t){var r,n;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(r=0,n=e.length;r<n;r+=1){var i=e[r];if(t(i,r))return i}},e.assign=function(e){for(var t,r,n=e,i=arguments.length,s=new Array(i>1?i-1:0),a=1;a<i;a++)s[a-1]=arguments[a];if(Object.assign)return Object.assign.apply(Object,[e].concat(s));var o=function(){var e=s[t];"object"==typeof e&&null!==e&&Object.keys(e).forEach((function(t){n[t]=e[t];}));};for(t=0,r=s.length;t<r;t+=1)o();return e},e.getBrowserAlias=function(e){return n.BROWSER_ALIASES_MAP[e]},e.getBrowserTypeByAlias=function(e){return n.BROWSER_MAP[e]||""},e}();t.default=i,e.exports=t.default;},18:function(e,t,r){t.__esModule=!0,t.ENGINE_MAP=t.OS_MAP=t.PLATFORMS_MAP=t.BROWSER_MAP=t.BROWSER_ALIASES_MAP=void 0;t.BROWSER_ALIASES_MAP={"Amazon Silk":"amazon_silk","Android Browser":"android",Bada:"bada",BlackBerry:"blackberry",Chrome:"chrome",Chromium:"chromium",Electron:"electron",Epiphany:"epiphany",Firefox:"firefox",Focus:"focus",Generic:"generic","Google Search":"google_search",Googlebot:"googlebot","Internet Explorer":"ie","K-Meleon":"k_meleon",Maxthon:"maxthon","Microsoft Edge":"edge","MZ Browser":"mz","NAVER Whale Browser":"naver",Opera:"opera","Opera Coast":"opera_coast",PhantomJS:"phantomjs",Puffin:"puffin",QupZilla:"qupzilla",QQ:"qq",QQLite:"qqlite",Safari:"safari",Sailfish:"sailfish","Samsung Internet for Android":"samsung_internet",SeaMonkey:"seamonkey",Sleipnir:"sleipnir",Swing:"swing",Tizen:"tizen","UC Browser":"uc",Vivaldi:"vivaldi","WebOS Browser":"webos",WeChat:"wechat","Yandex Browser":"yandex",Roku:"roku"};t.BROWSER_MAP={amazon_silk:"Amazon Silk",android:"Android Browser",bada:"Bada",blackberry:"BlackBerry",chrome:"Chrome",chromium:"Chromium",electron:"Electron",epiphany:"Epiphany",firefox:"Firefox",focus:"Focus",generic:"Generic",googlebot:"Googlebot",google_search:"Google Search",ie:"Internet Explorer",k_meleon:"K-Meleon",maxthon:"Maxthon",edge:"Microsoft Edge",mz:"MZ Browser",naver:"NAVER Whale Browser",opera:"Opera",opera_coast:"Opera Coast",phantomjs:"PhantomJS",puffin:"Puffin",qupzilla:"QupZilla",qq:"QQ Browser",qqlite:"QQ Browser Lite",safari:"Safari",sailfish:"Sailfish",samsung_internet:"Samsung Internet for Android",seamonkey:"SeaMonkey",sleipnir:"Sleipnir",swing:"Swing",tizen:"Tizen",uc:"UC Browser",vivaldi:"Vivaldi",webos:"WebOS Browser",wechat:"WeChat",yandex:"Yandex Browser"};t.PLATFORMS_MAP={tablet:"tablet",mobile:"mobile",desktop:"desktop",tv:"tv"};t.OS_MAP={WindowsPhone:"Windows Phone",Windows:"Windows",MacOS:"macOS",iOS:"iOS",Android:"Android",WebOS:"WebOS",BlackBerry:"BlackBerry",Bada:"Bada",Tizen:"Tizen",Linux:"Linux",ChromeOS:"Chrome OS",PlayStation4:"PlayStation 4",Roku:"Roku"};t.ENGINE_MAP={EdgeHTML:"EdgeHTML",Blink:"Blink",Trident:"Trident",Presto:"Presto",Gecko:"Gecko",WebKit:"WebKit"};},90:function(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(91))&&n.__esModule?n:{default:n},s=r(18);function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n);}}var o=function(){function e(){}var t,r,n;return e.getParser=function(e,t){if(void 0===t&&(t=!1),"string"!=typeof e)throw new Error("UserAgent should be a string");return new i.default(e,t)},e.parse=function(e){return new i.default(e).getResult()},t=e,n=[{key:"BROWSER_MAP",get:function(){return s.BROWSER_MAP}},{key:"ENGINE_MAP",get:function(){return s.ENGINE_MAP}},{key:"OS_MAP",get:function(){return s.OS_MAP}},{key:"PLATFORMS_MAP",get:function(){return s.PLATFORMS_MAP}}],(r=null)&&a(t.prototype,r),n&&a(t,n),e}();t.default=o,e.exports=t.default;},91:function(e,t,r){t.__esModule=!0,t.default=void 0;var n=u(r(92)),i=u(r(93)),s=u(r(94)),a=u(r(95)),o=u(r(17));function u(e){return e&&e.__esModule?e:{default:e}}var d=function(){function e(e,t){if(void 0===t&&(t=!1),null==e||""===e)throw new Error("UserAgent parameter can't be empty");this._ua=e,this.parsedResult={},!0!==t&&this.parse();}var t=e.prototype;return t.getUA=function(){return this._ua},t.test=function(e){return e.test(this._ua)},t.parseBrowser=function(){var e=this;this.parsedResult.browser={};var t=o.default.find(n.default,(function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error("Browser's test function is not valid")}));return t&&(this.parsedResult.browser=t.describe(this.getUA())),this.parsedResult.browser},t.getBrowser=function(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser()},t.getBrowserName=function(e){return e?String(this.getBrowser().name).toLowerCase()||"":this.getBrowser().name||""},t.getBrowserVersion=function(){return this.getBrowser().version},t.getOS=function(){return this.parsedResult.os?this.parsedResult.os:this.parseOS()},t.parseOS=function(){var e=this;this.parsedResult.os={};var t=o.default.find(i.default,(function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error("Browser's test function is not valid")}));return t&&(this.parsedResult.os=t.describe(this.getUA())),this.parsedResult.os},t.getOSName=function(e){var t=this.getOS().name;return e?String(t).toLowerCase()||"":t||""},t.getOSVersion=function(){return this.getOS().version},t.getPlatform=function(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform()},t.getPlatformType=function(e){void 0===e&&(e=!1);var t=this.getPlatform().type;return e?String(t).toLowerCase()||"":t||""},t.parsePlatform=function(){var e=this;this.parsedResult.platform={};var t=o.default.find(s.default,(function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error("Browser's test function is not valid")}));return t&&(this.parsedResult.platform=t.describe(this.getUA())),this.parsedResult.platform},t.getEngine=function(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine()},t.getEngineName=function(e){return e?String(this.getEngine().name).toLowerCase()||"":this.getEngine().name||""},t.parseEngine=function(){var e=this;this.parsedResult.engine={};var t=o.default.find(a.default,(function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error("Browser's test function is not valid")}));return t&&(this.parsedResult.engine=t.describe(this.getUA())),this.parsedResult.engine},t.parse=function(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this},t.getResult=function(){return o.default.assign({},this.parsedResult)},t.satisfies=function(e){var t=this,r={},n=0,i={},s=0;if(Object.keys(e).forEach((function(t){var a=e[t];"string"==typeof a?(i[t]=a,s+=1):"object"==typeof a&&(r[t]=a,n+=1);})),n>0){var a=Object.keys(r),u=o.default.find(a,(function(e){return t.isOS(e)}));if(u){var d=this.satisfies(r[u]);if(void 0!==d)return d}var c=o.default.find(a,(function(e){return t.isPlatform(e)}));if(c){var f=this.satisfies(r[c]);if(void 0!==f)return f}}if(s>0){var l=Object.keys(i),h=o.default.find(l,(function(e){return t.isBrowser(e,!0)}));if(void 0!==h)return this.compareVersion(i[h])}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var r=this.getBrowserName().toLowerCase(),n=e.toLowerCase(),i=o.default.getBrowserTypeByAlias(n);return t&&i&&(n=i.toLowerCase()),n===r},t.compareVersion=function(e){var t=[0],r=e,n=!1,i=this.getBrowserVersion();if("string"==typeof i)return ">"===e[0]||"<"===e[0]?(r=e.substr(1),"="===e[1]?(n=!0,r=e.substr(2)):t=[],">"===e[0]?t.push(1):t.push(-1)):"="===e[0]?r=e.substr(1):"~"===e[0]&&(n=!0,r=e.substr(1)),t.indexOf(o.default.compareVersions(i,r,n))>-1},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase()},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase()},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase()},t.is=function(e,t){return void 0===t&&(t=!1),this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e)},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some((function(e){return t.is(e)}))},e}();t.default=d,e.exports=t.default;},92:function(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n};var s=/version\/(\d+(\.?_?\d+)+)/i,a=[{test:[/googlebot/i],describe:function(e){var t={name:"Googlebot"},r=i.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/opera/i],describe:function(e){var t={name:"Opera"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opr\/|opios/i],describe:function(e){var t={name:"Opera"},r=i.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/SamsungBrowser/i],describe:function(e){var t={name:"Samsung Internet for Android"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Whale/i],describe:function(e){var t={name:"NAVER Whale Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MZBrowser/i],describe:function(e){var t={name:"MZ Browser"},r=i.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/focus/i],describe:function(e){var t={name:"Focus"},r=i.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/swing/i],describe:function(e){var t={name:"Swing"},r=i.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/coast/i],describe:function(e){var t={name:"Opera Coast"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe:function(e){var t={name:"Opera Touch"},r=i.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/yabrowser/i],describe:function(e){var t={name:"Yandex Browser"},r=i.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/ucbrowser/i],describe:function(e){var t={name:"UC Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Maxthon|mxios/i],describe:function(e){var t={name:"Maxthon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/epiphany/i],describe:function(e){var t={name:"Epiphany"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/puffin/i],describe:function(e){var t={name:"Puffin"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sleipnir/i],describe:function(e){var t={name:"Sleipnir"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/k-meleon/i],describe:function(e){var t={name:"K-Meleon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/micromessenger/i],describe:function(e){var t={name:"WeChat"},r=i.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/qqbrowser/i],describe:function(e){var t={name:/qqbrowserlite/i.test(e)?"QQ Browser Lite":"QQ Browser"},r=i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/msie|trident/i],describe:function(e){var t={name:"Internet Explorer"},r=i.default.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/\sedg\//i],describe:function(e){var t={name:"Microsoft Edge"},r=i.default.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/edg([ea]|ios)/i],describe:function(e){var t={name:"Microsoft Edge"},r=i.default.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/vivaldi/i],describe:function(e){var t={name:"Vivaldi"},r=i.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/seamonkey/i],describe:function(e){var t={name:"SeaMonkey"},r=i.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sailfish/i],describe:function(e){var t={name:"Sailfish"},r=i.default.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,e);return r&&(t.version=r),t}},{test:[/silk/i],describe:function(e){var t={name:"Amazon Silk"},r=i.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/phantom/i],describe:function(e){var t={name:"PhantomJS"},r=i.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/slimerjs/i],describe:function(e){var t={name:"SlimerJS"},r=i.default.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(e){var t={name:"BlackBerry"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t={name:"WebOS Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/bada/i],describe:function(e){var t={name:"Bada"},r=i.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/tizen/i],describe:function(e){var t={name:"Tizen"},r=i.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/qupzilla/i],describe:function(e){var t={name:"QupZilla"},r=i.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/firefox|iceweasel|fxios/i],describe:function(e){var t={name:"Firefox"},r=i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/electron/i],describe:function(e){var t={name:"Electron"},r=i.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MiuiBrowser/i],describe:function(e){var t={name:"Miui"},r=i.default.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/chromium/i],describe:function(e){var t={name:"Chromium"},r=i.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/chrome|crios|crmo/i],describe:function(e){var t={name:"Chrome"},r=i.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/GSA/i],describe:function(e){var t={name:"Google Search"},r=i.default.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t={name:"Android Browser"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/playstation 4/i],describe:function(e){var t={name:"PlayStation 4"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/safari|applewebkit/i],describe:function(e){var t={name:"Safari"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/.*/i],describe:function(e){var t=-1!==e.search("\\(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return {name:i.default.getFirstMatch(t,e),version:i.default.getSecondMatch(t,e)}}}];t.default=a,e.exports=t.default;},93:function(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/Roku\/DVP/],describe:function(e){var t=i.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,e);return {name:s.OS_MAP.Roku,version:t}}},{test:[/windows phone/i],describe:function(e){var t=i.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.WindowsPhone,version:t}}},{test:[/windows /i],describe:function(e){var t=i.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,e),r=i.default.getWindowsVersionName(t);return {name:s.OS_MAP.Windows,version:t,versionName:r}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(e){var t={name:s.OS_MAP.iOS},r=i.default.getSecondMatch(/(Version\/)(\d[\d.]+)/,e);return r&&(t.version=r),t}},{test:[/macintosh/i],describe:function(e){var t=i.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,e).replace(/[_\s]/g,"."),r=i.default.getMacOSVersionName(t),n={name:s.OS_MAP.MacOS,version:t};return r&&(n.versionName=r),n}},{test:[/(ipod|iphone|ipad)/i],describe:function(e){var t=i.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,e).replace(/[_\s]/g,".");return {name:s.OS_MAP.iOS,version:t}}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t=i.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,e),r=i.default.getAndroidVersionName(t),n={name:s.OS_MAP.Android,version:t};return r&&(n.versionName=r),n}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t=i.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,e),r={name:s.OS_MAP.WebOS};return t&&t.length&&(r.version=t),r}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(e){var t=i.default.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,e)||i.default.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,e)||i.default.getFirstMatch(/\bbb(\d+)/i,e);return {name:s.OS_MAP.BlackBerry,version:t}}},{test:[/bada/i],describe:function(e){var t=i.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.Bada,version:t}}},{test:[/tizen/i],describe:function(e){var t=i.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.Tizen,version:t}}},{test:[/linux/i],describe:function(){return {name:s.OS_MAP.Linux}}},{test:[/CrOS/],describe:function(){return {name:s.OS_MAP.ChromeOS}}},{test:[/PlayStation 4/],describe:function(e){var t=i.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.PlayStation4,version:t}}}];t.default=a,e.exports=t.default;},94:function(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/googlebot/i],describe:function(){return {type:"bot",vendor:"Google"}}},{test:[/huawei/i],describe:function(e){var t=i.default.getFirstMatch(/(can-l01)/i,e)&&"Nova",r={type:s.PLATFORMS_MAP.mobile,vendor:"Huawei"};return t&&(r.model=t),r}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:function(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Nexus"}}},{test:[/ipad/i],describe:function(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/kftt build/i],describe:function(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"}}},{test:[/silk/i],describe:function(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Amazon"}}},{test:[/tablet(?! pc)/i],describe:function(){return {type:s.PLATFORMS_MAP.tablet}}},{test:function(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r},describe:function(e){var t=i.default.getFirstMatch(/(ipod|iphone)/i,e);return {type:s.PLATFORMS_MAP.mobile,vendor:"Apple",model:t}}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:function(){return {type:s.PLATFORMS_MAP.mobile,vendor:"Nexus"}}},{test:[/[^-]mobi/i],describe:function(){return {type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return "blackberry"===e.getBrowserName(!0)},describe:function(){return {type:s.PLATFORMS_MAP.mobile,vendor:"BlackBerry"}}},{test:function(e){return "bada"===e.getBrowserName(!0)},describe:function(){return {type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return "windows phone"===e.getBrowserName()},describe:function(){return {type:s.PLATFORMS_MAP.mobile,vendor:"Microsoft"}}},{test:function(e){var t=Number(String(e.getOSVersion()).split(".")[0]);return "android"===e.getOSName(!0)&&t>=3},describe:function(){return {type:s.PLATFORMS_MAP.tablet}}},{test:function(e){return "android"===e.getOSName(!0)},describe:function(){return {type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return "macos"===e.getOSName(!0)},describe:function(){return {type:s.PLATFORMS_MAP.desktop,vendor:"Apple"}}},{test:function(e){return "windows"===e.getOSName(!0)},describe:function(){return {type:s.PLATFORMS_MAP.desktop}}},{test:function(e){return "linux"===e.getOSName(!0)},describe:function(){return {type:s.PLATFORMS_MAP.desktop}}},{test:function(e){return "playstation 4"===e.getOSName(!0)},describe:function(){return {type:s.PLATFORMS_MAP.tv}}},{test:function(e){return "roku"===e.getOSName(!0)},describe:function(){return {type:s.PLATFORMS_MAP.tv}}}];t.default=a,e.exports=t.default;},95:function(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:function(e){return "microsoft edge"===e.getBrowserName(!0)},describe:function(e){if(/\sedg\//i.test(e))return {name:s.ENGINE_MAP.Blink};var t=i.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,e);return {name:s.ENGINE_MAP.EdgeHTML,version:t}}},{test:[/trident/i],describe:function(e){var t={name:s.ENGINE_MAP.Trident},r=i.default.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){return e.test(/presto/i)},describe:function(e){var t={name:s.ENGINE_MAP.Presto},r=i.default.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r},describe:function(e){var t={name:s.ENGINE_MAP.Gecko},r=i.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(apple)?webkit\/537\.36/i],describe:function(){return {name:s.ENGINE_MAP.Blink}}},{test:[/(apple)?webkit/i],describe:function(e){var t={name:s.ENGINE_MAP.WebKit},r=i.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}}];t.default=a,e.exports=t.default;}})}));
10087
- }(es5));
10088
-
10089
- var Bowser = /*@__PURE__*/getDefaultExportFromCjs(es5.exports);
10090
-
10091
- var BrowserName;
10092
- (function (BrowserName) {
10093
- BrowserName["CHROME"] = "Chrome";
10094
- BrowserName["FIREFOX"] = "Firefox";
10095
- BrowserName["EDGE"] = "Microsoft Edge";
10096
- BrowserName["SAFARI"] = "Safari";
10097
- })(BrowserName || (BrowserName = {}));
10098
- var OSName;
10099
- (function (OSName) {
10100
- OSName["WINDOWS"] = "Windows";
10101
- OSName["MAC"] = "macOS";
10102
- OSName["LINUX"] = "Linux";
10103
- })(OSName || (OSName = {}));
10104
- class BrowserInfo {
10105
- static getBrowserDetails() {
10106
- return this.browser.getBrowser();
10107
- }
10108
- static getOSDetails() {
10109
- return this.browser.getOS();
10110
- }
10111
- static getPlatformDetails() {
10112
- return this.browser.getPlatform();
10113
- }
10114
- static getEngineDetails() {
10115
- return this.browser.getEngine();
10116
- }
10117
- static isChrome() {
10118
- return this.browser.getBrowserName() === BrowserName.CHROME;
10119
- }
10120
- static isFirefox() {
10121
- return this.browser.getBrowserName() === BrowserName.FIREFOX;
10122
- }
10123
- static isEdge() {
10124
- return this.browser.getBrowserName() === BrowserName.EDGE;
10125
- }
10126
- static isSafari() {
10127
- return this.browser.getBrowserName() === BrowserName.SAFARI;
10128
- }
10129
- static isWindows() {
10130
- return this.browser.getOSName() === OSName.WINDOWS;
10131
- }
10132
- static isMac() {
10133
- return this.browser.getOSName() === OSName.MAC;
10134
- }
10135
- static isLinux() {
10136
- return this.browser.getOSName() === OSName.LINUX;
10137
- }
10138
- static isVersionGreaterThan(version) {
10139
- const browserName = this.browser.getBrowserName();
10140
- const checkTree = { [browserName]: `>${version}` };
10141
- return this.browser.satisfies(checkTree);
10142
- }
10143
- static isVersionGreaterThanOrEqualTo(version) {
10144
- const browserName = this.browser.getBrowserName();
10145
- const checkTree = { [browserName]: `>=${version}` };
10146
- return this.browser.satisfies(checkTree);
10147
- }
10148
- static isVersionLessThan(version) {
10149
- const browserName = this.browser.getBrowserName();
10150
- const checkTree = { [browserName]: `<${version}` };
10151
- return this.browser.satisfies(checkTree);
10152
- }
10153
- static isVersionLessThanOrEqualTo(version) {
10154
- const browserName = this.browser.getBrowserName();
10155
- const checkTree = { [browserName]: `<=${version}` };
10156
- return this.browser.satisfies(checkTree);
10157
- }
10158
- static isSubVersionOf(version) {
10159
- const browserName = this.browser.getBrowserName();
10160
- const checkTree = { [browserName]: `~${version}` };
10161
- return this.browser.satisfies(checkTree);
10162
- }
10163
- }
10164
- BrowserInfo.browser = Bowser.getParser(window.navigator.userAgent);
10165
-
10166
- class CpuInfo {
10167
- static getNumLogicalCores() {
10168
- return navigator.hardwareConcurrency;
10169
- }
10170
- }
10171
-
10172
- var SystemInfoEvents;
10173
- (function (SystemInfoEvents) {
10174
- SystemInfoEvents["CpuPressureStateChange"] = "cpu-pressure-state-change";
10175
- })(SystemInfoEvents || (SystemInfoEvents = {}));
10176
- class PressureObserverHelper extends EventEmitter$5 {
10177
- constructor() {
10178
- super();
10179
- this.lastCpuPressure = undefined;
10180
- if (PressureObserverHelper.isPressureObserverSupported()) {
10181
- this.observer = new PressureObserver(this.handleStateChange.bind(this));
10182
- if (this.observer) {
10183
- this.observer.observe('cpu');
10184
- }
10185
- }
10186
- }
10187
- handleStateChange(records) {
10188
- records.forEach((record) => {
10189
- if (record.source === 'cpu' && record.state !== this.lastCpuPressure) {
10190
- this.lastCpuPressure = record.state;
10191
- this.emit(SystemInfoEvents.CpuPressureStateChange, record.state);
10192
- }
10193
- });
10194
- }
10195
- getCpuPressure() {
10196
- return this.lastCpuPressure;
10197
- }
10198
- static isPressureObserverSupported() {
10199
- return 'PressureObserver' in window;
10200
- }
10201
- }
10202
- new PressureObserverHelper();
10203
-
10204
- var CapabilityState;
10205
- (function (CapabilityState) {
10206
- CapabilityState["NOT_CAPABLE"] = "not capable";
10207
- CapabilityState["CAPABLE"] = "capable";
10208
- CapabilityState["UNKNOWN"] = "unknown";
10209
- })(CapabilityState || (CapabilityState = {}));
10210
- class WebCapabilities {
10211
- static isCapableOfBackgroundNoiseRemoval() {
10212
- const numCores = CpuInfo.getNumLogicalCores();
10213
- if (numCores === undefined) {
10214
- return CapabilityState.UNKNOWN;
10215
- }
10216
- if (numCores < 2) {
10217
- return CapabilityState.NOT_CAPABLE;
10218
- }
10219
- return CapabilityState.CAPABLE;
10220
- }
10221
- static isCapableOfVirtualBackground() {
10222
- const numCores = CpuInfo.getNumLogicalCores();
10223
- if (numCores === undefined) {
10224
- return CapabilityState.UNKNOWN;
10225
- }
10226
- if (numCores < 2) {
10227
- return CapabilityState.NOT_CAPABLE;
10228
- }
10229
- return CapabilityState.CAPABLE;
10230
- }
10231
- static isCapableOfReceiving1080pVideo() {
10232
- const numCores = CpuInfo.getNumLogicalCores();
10233
- if (numCores === undefined) {
10234
- return CapabilityState.UNKNOWN;
10235
- }
10236
- if (numCores < 2) {
10237
- return CapabilityState.NOT_CAPABLE;
10238
- }
10239
- return CapabilityState.CAPABLE;
10240
- }
10241
- static isCapableOfSending1080pVideo() {
10242
- const numCores = CpuInfo.getNumLogicalCores();
10243
- if (numCores === undefined) {
10244
- return CapabilityState.UNKNOWN;
10245
- }
10246
- if (numCores < 8) {
10247
- return CapabilityState.NOT_CAPABLE;
10248
- }
10249
- return CapabilityState.CAPABLE;
10250
- }
10251
- static supportsEncodedStreamTransforms() {
10252
- return window.RTCRtpScriptTransform &&
10253
- window.RTCRtpSender &&
10254
- 'transform' in RTCRtpSender.prototype &&
10255
- window.RTCRtpReceiver &&
10256
- 'transform' in RTCRtpReceiver.prototype
10257
- ? CapabilityState.CAPABLE
10258
- : CapabilityState.NOT_CAPABLE;
10259
- }
10260
- }
10261
-
10262
10373
  const simulcastMaxFrameSizes = {
10263
10374
  0: '240',
10264
10375
  1: '2304',
@@ -10457,6 +10568,9 @@ function addVlaExtension(mediaDescription) {
10457
10568
  mediaDescription.addExtension({ uri: vlaExtensionUri });
10458
10569
  }
10459
10570
  }
10571
+ function getCodecName(codecMimeType) {
10572
+ return codecMimeType.split('/')[1].toLowerCase();
10573
+ }
10460
10574
  function setFormatParameters(mediaDescription, codecMimeType, paramsMap) {
10461
10575
  const codecName = codecMimeType.split('/')[1].toLowerCase();
10462
10576
  Object.entries(paramsMap).forEach(([param, value]) => {
@@ -10474,6 +10588,10 @@ function setFormatParameters(mediaDescription, codecMimeType, paramsMap) {
10474
10588
  }
10475
10589
  function hasIceCandidates(sdp) {
10476
10590
  return sdp.media.some((media) => media.iceInfo.candidates.length);
10591
+ }
10592
+ function retainCodecsByMimeType(mediaDescription, allowedMimeTypes) {
10593
+ const codecNames = allowedMimeTypes.map((mimeType) => getCodecName(mimeType));
10594
+ retainCodecs(mediaDescription, (codecInfo) => !!codecInfo.name && codecNames.includes(codecInfo.name.toLowerCase()));
10477
10595
  }
10478
10596
 
10479
10597
  function generateSsrc() {
@@ -10490,7 +10608,7 @@ class EgressSdpMunger {
10490
10608
  }
10491
10609
  mungeLocalDescription(mediaDescription, options) {
10492
10610
  var _a;
10493
- retainCodecsByCodecName(mediaDescription, ['h264', 'opus', 'rtx']);
10611
+ retainCodecsByMimeType(mediaDescription, options.supportedCodecs);
10494
10612
  if (options.forceSoftwareEncoder) {
10495
10613
  const isH264Cbp = (codecInfo) => {
10496
10614
  var _a;
@@ -11120,7 +11238,7 @@ class IngressSdpMunger {
11120
11238
  return Object.assign({ ssrc: this.ssrc }, (this.rtxSsrc ? { rtxSsrc: this.rtxSsrc } : {}));
11121
11239
  }
11122
11240
  mungeLocalDescription(mediaDescription, options) {
11123
- retainCodecsByCodecName(mediaDescription, ['h264', 'opus', 'rtx']);
11241
+ retainCodecsByMimeType(mediaDescription, options.supportedCodecs);
11124
11242
  if (mediaDescription.codecs.size === 0) {
11125
11243
  logErrorAndThrow(WcmeErrorType.SDP_MUNGE_MISSING_CODECS, `No codecs present in m-line with MID ${mediaDescription.mid} after filtering.`);
11126
11244
  }
@@ -11378,6 +11496,7 @@ class ReceiveOnlyTransceiver extends Transceiver {
11378
11496
  this.metadata = { isActiveSpeaker: false };
11379
11497
  this.getEncodedStreamMetadataCallback = () => Promise.resolve(undefined);
11380
11498
  this.munger = config.munger;
11499
+ this.supportedCodecs = config.supportedCodecs;
11381
11500
  this._receiveSlot = new ReceiveSlot(() => {
11382
11501
  if (!this._rtcRtpTransceiver.mid) {
11383
11502
  return null;
@@ -11433,6 +11552,7 @@ class ReceiveOnlyTransceiver extends Transceiver {
11433
11552
  mungeLocalDescription(mediaDescription) {
11434
11553
  this.munger.mungeLocalDescription(mediaDescription, {
11435
11554
  twccDisabled: this.twccDisabled,
11555
+ supportedCodecs: this.supportedCodecs,
11436
11556
  });
11437
11557
  }
11438
11558
  mungeRemoteDescription(mediaDescription) {
@@ -11445,14 +11565,22 @@ class ReceiveOnlyTransceiver extends Transceiver {
11445
11565
  this.munger.reset();
11446
11566
  }
11447
11567
  handleRequested(streamRequest) {
11448
- var _a, _b, _c, _d;
11449
11568
  if (!this.receiveSlot._isRequested) {
11450
11569
  this.receiveSlot._isRequested = true;
11451
11570
  this.metadata.lastRequestedUpdateTimestamp = getCurrentTimestamp();
11452
11571
  }
11453
11572
  this.metadata.requestedBitrate = streamRequest.maxPayloadBitsPerSecond;
11454
- this.metadata.requestedFrameSize = (_b = (_a = streamRequest.codecInfos[0]) === null || _a === void 0 ? void 0 : _a.h264) === null || _b === void 0 ? void 0 : _b.maxFs;
11455
- this.metadata.requestedFrameRate = (_d = (_c = streamRequest.codecInfos[0]) === null || _c === void 0 ? void 0 : _c.h264) === null || _d === void 0 ? void 0 : _d.maxFps;
11573
+ const firstCodecInfo = streamRequest.codecInfos[0];
11574
+ if (firstCodecInfo === null || firstCodecInfo === void 0 ? void 0 : firstCodecInfo.h264) {
11575
+ this.metadata.requestedFrameSize = firstCodecInfo.h264.maxFs;
11576
+ this.metadata.requestedFrameRate = firstCodecInfo.h264.maxFps;
11577
+ }
11578
+ else if (firstCodecInfo === null || firstCodecInfo === void 0 ? void 0 : firstCodecInfo.av1) {
11579
+ this.metadata.requestedFrameSize = getFrameSizeForPicSize(firstCodecInfo.av1.maxPicSize);
11580
+ if (firstCodecInfo.av1.maxPicSize > 0 && firstCodecInfo.av1.maxDecodeRate > 0) {
11581
+ this.metadata.requestedFrameRate = Math.round(firstCodecInfo.av1.maxDecodeRate / firstCodecInfo.av1.maxPicSize);
11582
+ }
11583
+ }
11456
11584
  }
11457
11585
  handleUnrequested() {
11458
11586
  if (this.receiveSlot._isRequested) {
@@ -15207,6 +15335,7 @@ class SendOnlyTransceiver extends Transceiver {
15207
15335
  this.munger = config.munger;
15208
15336
  this.csi = config.csi;
15209
15337
  this.direction = 'sendrecv';
15338
+ this.supportedCodecs = config.supportedCodecs;
15210
15339
  this.handleTrackChange = this.handleTrackChange.bind(this);
15211
15340
  this.handleStreamConstraintsChange = this.handleStreamConstraintsChange.bind(this);
15212
15341
  this.handleStreamMuteStateChange = this.handleStreamMuteStateChange.bind(this);
@@ -15236,7 +15365,7 @@ class SendOnlyTransceiver extends Transceiver {
15236
15365
  }
15237
15366
  handleStreamConstraintsChange() {
15238
15367
  return __awaiter(this, void 0, void 0, function* () {
15239
- yield this.updateSendParameters(this.requestedIdEncodingParamsMap);
15368
+ yield this.updateSendParameters(this.requestedIdEncodingParamsMap, this.selectedPayloadType);
15240
15369
  });
15241
15370
  }
15242
15371
  handleStreamMuteStateChange() {
@@ -15329,7 +15458,12 @@ class SendOnlyTransceiver extends Transceiver {
15329
15458
  const encodingIndex = this.getEncodingIndexForStreamId(senderId);
15330
15459
  const encodingParams = this.requestedIdEncodingParamsMap.get(encodingIndex);
15331
15460
  stats.requestedBitrate = encodingParams === null || encodingParams === void 0 ? void 0 : encodingParams.maxPayloadBitsPerSecond;
15332
- stats.requestedFrameSize = encodingParams === null || encodingParams === void 0 ? void 0 : encodingParams.maxFs;
15461
+ if (isAV1EncodingParams(encodingParams)) {
15462
+ stats.requestedFrameSize = getFrameSizeForPicSize(encodingParams === null || encodingParams === void 0 ? void 0 : encodingParams.maxPicSize);
15463
+ }
15464
+ else if (isH264EncodingParams(encodingParams)) {
15465
+ stats.requestedFrameSize = encodingParams === null || encodingParams === void 0 ? void 0 : encodingParams.maxFs;
15466
+ }
15333
15467
  stats.isRequested = !!encodingParams;
15334
15468
  stats.lastRequestedUpdateTimestamp =
15335
15469
  this.metadata.lastRequestedUpdateTimestampsMap.get(encodingIndex);
@@ -15368,23 +15502,49 @@ class SendOnlyTransceiver extends Transceiver {
15368
15502
  return statsMap;
15369
15503
  });
15370
15504
  }
15371
- updateSendParameters(requestedIdEncodingParamsMap) {
15505
+ updateSendParameters(requestedIdEncodingParamsMap, payloadType) {
15372
15506
  return __awaiter(this, void 0, void 0, function* () {
15373
15507
  return this.updateSendParametersQueue.push(() => __awaiter(this, void 0, void 0, function* () {
15374
15508
  const sendParameters = this.sender.getParameters();
15509
+ const selectedCodec = sendParameters.codecs.find((codec) => codec.payloadType === payloadType);
15510
+ const shouldUpdateSelectedCodec = this.mediaType === MediaType.VideoSlides &&
15511
+ !!selectedCodec &&
15512
+ this.selectedPayloadType !== selectedCodec.payloadType;
15375
15513
  sendParameters.encodings.forEach((encoding, index) => {
15376
15514
  var _a, _b;
15377
15515
  const encodingParams = requestedIdEncodingParamsMap.get(index);
15378
15516
  encoding.active = !!encodingParams;
15517
+ if (shouldUpdateSelectedCodec) {
15518
+ if (isEncodingCodecSupported()) {
15519
+ const isCodecCapable = selectedCodec &&
15520
+ WebCapabilities.isCapableOfReceivingVideoCodec(selectedCodec.mimeType) ===
15521
+ CapabilityState.CAPABLE;
15522
+ if (!isCodecCapable) {
15523
+ logErrorAndThrow(WcmeErrorType.INVALID_CODEC_PARAMS, `Codec ${selectedCodec === null || selectedCodec === void 0 ? void 0 : selectedCodec.mimeType} is not supported by the browser.`);
15524
+ }
15525
+ encoding.codec = selectedCodec;
15526
+ }
15527
+ }
15379
15528
  if (encodingParams) {
15380
- const { maxPayloadBitsPerSecond, maxFs, maxWidth, maxHeight } = encodingParams;
15381
- const scaleDownRatio = getScaleDownRatio((_a = this.publishedStream) === null || _a === void 0 ? void 0 : _a.getSettings().width, (_b = this.publishedStream) === null || _b === void 0 ? void 0 : _b.getSettings().height, maxFs, maxWidth, maxHeight);
15529
+ const { maxPayloadBitsPerSecond } = encodingParams;
15530
+ if (getMediaFamily(this.mediaType) === MediaFamily.Video &&
15531
+ isVideoEncodingParams(encodingParams)) {
15532
+ let frameSize;
15533
+ const { maxWidth, maxHeight } = encodingParams;
15534
+ if (isAV1EncodingParams(encodingParams)) {
15535
+ frameSize = getFrameSizeForPicSize(encodingParams.maxPicSize);
15536
+ }
15537
+ else if (isH264EncodingParams(encodingParams)) {
15538
+ frameSize = encodingParams.maxFs;
15539
+ }
15540
+ const scaleDownRatio = getScaleDownRatio((_a = this.publishedStream) === null || _a === void 0 ? void 0 : _a.getSettings().width, (_b = this.publishedStream) === null || _b === void 0 ? void 0 : _b.getSettings().height, frameSize, maxWidth, maxHeight);
15541
+ if (scaleDownRatio !== undefined && scaleDownRatio >= 1.0) {
15542
+ encoding.scaleResolutionDownBy = scaleDownRatio;
15543
+ }
15544
+ }
15382
15545
  if (maxPayloadBitsPerSecond !== undefined && maxPayloadBitsPerSecond >= 0) {
15383
15546
  encoding.maxBitrate = maxPayloadBitsPerSecond;
15384
15547
  }
15385
- if (scaleDownRatio !== undefined && scaleDownRatio >= 1.0) {
15386
- encoding.scaleResolutionDownBy = scaleDownRatio;
15387
- }
15388
15548
  }
15389
15549
  });
15390
15550
  yield this.sender.setParameters(sendParameters);
@@ -15403,6 +15563,7 @@ class SendOnlyTransceiver extends Transceiver {
15403
15563
  const oldRequested = this.requested;
15404
15564
  const newRequested = requestedIdEncodingParamsMap.size > 0;
15405
15565
  this.requestedIdEncodingParamsMap = requestedIdEncodingParamsMap;
15566
+ this.selectedPayloadType = payloadType;
15406
15567
  if (oldRequested !== newRequested) {
15407
15568
  yield this.replaceSenderSource(newRequested ? this.publishedStream : null);
15408
15569
  }
@@ -15421,6 +15582,7 @@ class SendOnlyTransceiver extends Transceiver {
15421
15582
  forceSoftwareEncoder: this.mediaType === MediaType.VideoSlides &&
15422
15583
  (BrowserInfo.isWindows() || BrowserInfo.isMac()) &&
15423
15584
  (BrowserInfo.isChrome() || BrowserInfo.isEdge()),
15585
+ supportedCodecs: this.supportedCodecs,
15424
15586
  });
15425
15587
  }
15426
15588
  mungeLocalDescriptionForRemoteServer(mediaDescription, mungeOptions = { injectDummyCandidates: true }) {
@@ -15769,6 +15931,7 @@ const defaultMultistreamConnectionOptions = {
15769
15931
  preferredStartingBitrateKbps: defaultStartBitrateKbps,
15770
15932
  metricsCallback: () => { },
15771
15933
  enableInboundAudioLevelMonitoring: false,
15934
+ enableAV1SlidesSupport: false,
15772
15935
  };
15773
15936
  let staticIdCounter = 0;
15774
15937
  class MultistreamConnection extends EventEmitter$2 {
@@ -15797,10 +15960,13 @@ class MultistreamConnection extends EventEmitter$2 {
15797
15960
  const videoMainEncodingOptions = this.getVideoEncodingOptions(MediaContent.Main);
15798
15961
  const videoSlidesEncodingOptions = this.getVideoEncodingOptions(MediaContent.Slides);
15799
15962
  const sendVideoCodecParams = this.getCustomSendVideoCodecParams();
15800
- this.createSendTransceiver(MediaType.VideoMain, mainSceneId, videoMainEncodingOptions, sendVideoCodecParams);
15801
- this.createSendTransceiver(MediaType.AudioMain, mainSceneId);
15802
- this.createSendTransceiver(MediaType.VideoSlides, slidesSceneId, videoSlidesEncodingOptions, sendVideoCodecParams);
15803
- this.createSendTransceiver(MediaType.AudioSlides, slidesSceneId);
15963
+ const supportedVideoCodecs = this.getSupportedCodecs(MediaType.VideoMain);
15964
+ const supportedVideoSlidesCodecs = this.getSupportedCodecs(MediaType.VideoSlides);
15965
+ const supportedAudioCodecs = this.getSupportedCodecs(MediaType.AudioMain);
15966
+ this.createSendTransceiver(MediaType.VideoMain, mainSceneId, supportedVideoCodecs, videoMainEncodingOptions, sendVideoCodecParams);
15967
+ this.createSendTransceiver(MediaType.AudioMain, mainSceneId, supportedAudioCodecs);
15968
+ this.createSendTransceiver(MediaType.VideoSlides, slidesSceneId, supportedVideoSlidesCodecs, videoSlidesEncodingOptions, sendVideoCodecParams);
15969
+ this.createSendTransceiver(MediaType.AudioSlides, slidesSceneId, supportedAudioCodecs);
15804
15970
  }
15805
15971
  startWorkerIfNeeded() {
15806
15972
  if (this.options.enableInboundAudioLevelMonitoring) {
@@ -15896,7 +16062,15 @@ class MultistreamConnection extends EventEmitter$2 {
15896
16062
  },
15897
16063
  };
15898
16064
  }
15899
- createSendTransceiver(mediaType, sceneId, sendEncodingsOptions, codecParams) {
16065
+ getSupportedCodecs(mediaType) {
16066
+ if (mediaType === MediaType.VideoMain || mediaType === MediaType.VideoSlides) {
16067
+ return getSupportedVideoCodecs({
16068
+ includeAV1: mediaType === MediaType.VideoSlides && this.options.enableAV1SlidesSupport,
16069
+ });
16070
+ }
16071
+ return getSupportedAudioCodecs();
16072
+ }
16073
+ createSendTransceiver(mediaType, sceneId, supportedCodecs, sendEncodingsOptions, codecParams) {
15900
16074
  let rtcRtpTransceiver;
15901
16075
  try {
15902
16076
  rtcRtpTransceiver = this.pc.addTransceiver(mediaTypeToTrackKind(mediaType), {
@@ -15917,6 +16091,7 @@ class MultistreamConnection extends EventEmitter$2 {
15917
16091
  mediaType,
15918
16092
  munger,
15919
16093
  csi,
16094
+ supportedCodecs,
15920
16095
  });
15921
16096
  if (getMediaFamily(mediaType) === MediaFamily.Video) {
15922
16097
  transceiver.rtxEnabled = true;
@@ -16054,8 +16229,8 @@ SCTP Max Message Size: ${maxMessageSize}`);
16054
16229
  if (rsRequests.length !== requests.length) {
16055
16230
  logger.warn('Ignoring non-receiver-selected requests');
16056
16231
  }
16232
+ let selectedPayloadType;
16057
16233
  rsRequests.forEach(({ ids, policySpecificInfo, codecInfos, maxPayloadBitsPerSecond }) => {
16058
- var _a, _b, _c;
16059
16234
  if (ids.length > 1) {
16060
16235
  logErrorAndThrow(WcmeErrorType.INVALID_STREAM_REQUEST, `Stream request cannot have more than one ID.`);
16061
16236
  }
@@ -16068,6 +16243,9 @@ SCTP Max Message Size: ${maxMessageSize}`);
16068
16243
  }
16069
16244
  const id = ids[0];
16070
16245
  const codecInfo = codecInfos[0];
16246
+ if (mediaType === MediaType.VideoSlides && selectedPayloadType === undefined) {
16247
+ selectedPayloadType = codecInfo.payloadType;
16248
+ }
16071
16249
  if (!isValidSsrcStreamId(id)) {
16072
16250
  logger.warn(`${mediaType}: The stream ID is not a valid SsrcStreamId: ${JSON.stringify(id)}`);
16073
16251
  return;
@@ -16076,12 +16254,13 @@ SCTP Max Message Size: ${maxMessageSize}`);
16076
16254
  if (streamIdsMatched) {
16077
16255
  const encodingIndex = sendTransceiver.getEncodingIndexForStreamId(id);
16078
16256
  if (encodingIndex !== -1) {
16079
- const encodingParams = { maxPayloadBitsPerSecond };
16080
- if (mediaFamily === MediaFamily.Video) {
16081
- encodingParams.maxFs = (_a = codecInfo === null || codecInfo === void 0 ? void 0 : codecInfo.h264) === null || _a === void 0 ? void 0 : _a.maxFs;
16082
- encodingParams.maxWidth = (_b = codecInfo === null || codecInfo === void 0 ? void 0 : codecInfo.h264) === null || _b === void 0 ? void 0 : _b.maxWidth;
16083
- encodingParams.maxHeight = (_c = codecInfo === null || codecInfo === void 0 ? void 0 : codecInfo.h264) === null || _c === void 0 ? void 0 : _c.maxHeight;
16257
+ const isVideo = mediaFamily === MediaFamily.Video;
16258
+ const codecParams = isVideo && codecInfo ? codecToEncodingParams(codecInfo) : {};
16259
+ if (isVideo && codecInfo && !codecParams) {
16260
+ logger.warn(`${mediaType}: Unsupported codec for ID ${JSON.stringify(id)}`);
16261
+ return;
16084
16262
  }
16263
+ const encodingParams = Object.assign({ maxPayloadBitsPerSecond }, codecParams);
16085
16264
  requestedIdEncodingParamsMap.set(encodingIndex, encodingParams);
16086
16265
  }
16087
16266
  else {
@@ -16092,7 +16271,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
16092
16271
  logger.warn(`${mediaType}: Unable to find matching stream ID for requested ID: ${JSON.stringify(id)}`);
16093
16272
  }
16094
16273
  });
16095
- return sendTransceiver.updateSendParameters(requestedIdEncodingParamsMap);
16274
+ return sendTransceiver.updateSendParameters(requestedIdEncodingParamsMap, selectedPayloadType);
16096
16275
  }
16097
16276
  createDataChannel() {
16098
16277
  const dataChannel = this.pc.createDataChannel('datachannel', {
@@ -16224,7 +16403,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
16224
16403
  static getEncodedTransformId(mediaType, mid) {
16225
16404
  return `INBOUND-${mediaType}-${mid}`;
16226
16405
  }
16227
- createReceiveTransceiver(mediaType, codecParams) {
16406
+ createReceiveTransceiver(mediaType, supportedCodecs, codecParams) {
16228
16407
  const rtcRtpTransceiver = this.pc.addTransceiver(mediaTypeToTrackKind(mediaType), {
16229
16408
  direction: 'recvonly',
16230
16409
  });
@@ -16236,6 +16415,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
16236
16415
  mid,
16237
16416
  mediaType,
16238
16417
  munger,
16418
+ supportedCodecs,
16239
16419
  });
16240
16420
  if (doAudioLevelMonitoring) {
16241
16421
  try {
@@ -16274,11 +16454,12 @@ SCTP Max Message Size: ${maxMessageSize}`);
16274
16454
  return new Promise((createReceiveSlotsResolve) => {
16275
16455
  this.offerAnswerQueue.push(() => __awaiter(this, void 0, void 0, function* () {
16276
16456
  const createdReceiveOnlyTransceivers = [];
16457
+ const supportedCodecs = this.getSupportedCodecs(mediaType);
16277
16458
  const codecParams = mediaTypeToTrackKind(mediaType) === MediaStreamTrackKind.Video
16278
16459
  ? this.getCustomReceiveVideoCodecParams(mediaType)
16279
16460
  : undefined;
16280
16461
  for (let i = 0; i < count; i++) {
16281
- const recvOnlyTransceiver = this.createReceiveTransceiver(mediaType, codecParams);
16462
+ const recvOnlyTransceiver = this.createReceiveTransceiver(mediaType, supportedCodecs, codecParams);
16282
16463
  createdReceiveOnlyTransceivers.push(recvOnlyTransceiver);
16283
16464
  }
16284
16465
  if (this.pc.getRemoteDescription()) {
@@ -16781,5 +16962,5 @@ class StreamRequest {
16781
16962
 
16782
16963
  const { DeviceKind } = media;
16783
16964
 
16784
- export { ActiveSpeakerInfo, CodecInfo$1 as CodecInfo, ConnectionState, DeviceKind, H264Codec, Logger$1 as JMPLogger, LocalCameraStream, LocalDisplayStream, LocalMicrophoneStream, LocalStream, LocalStreamEventNames, LocalSystemAudioStream, Logger, MediaCodecMimeType, MediaContent, MediaFamily, MediaStreamTrackKind, MediaType, MultistreamConnection, MultistreamConnectionEventNames, PeerConnection, Policy, ReceiveSlot, ReceiveSlotEvents, ReceiverSelectedInfo, RecommendedOpusBitrates, RemoteMediaState, RemoteStream, RemoteStreamEventNames, SendSlot, StreamEventNames, StreamRequest, WcmeError, WcmeErrorType, Logger$2 as WebRtcCoreLogger, WebrtcCoreError, WebrtcCoreErrorType, areReceiveSlotIdsEqual, createCameraAndMicrophoneStreams, createCameraStream, createDisplayMedia, createDisplayStream, createDisplayStreamWithAudio, createMicrophoneStream, getAudioInputDevices, getAudioOutputDevices, getDevices, getLogLevel, getMediaContent, getMediaFamily, getMediaType, getRecommendedMaxBitrateForFrameSize, getVideoInputDevices, logErrorAndThrow, setLogHandler, setLogLevel, setOnDeviceChangeHandler };
16965
+ export { AV1Codec, ActiveSpeakerInfo, CodecInfo$1 as CodecInfo, ConnectionState, DeviceKind, H264Codec, Logger$1 as JMPLogger, LocalCameraStream, LocalDisplayStream, LocalMicrophoneStream, LocalStream, LocalStreamEventNames, LocalSystemAudioStream, Logger, MediaCodecMimeType, MediaContent, MediaFamily, MediaStreamTrackKind, MediaType, MultistreamConnection, MultistreamConnectionEventNames, PeerConnection, Policy, ReceiveSlot, ReceiveSlotEvents, ReceiverSelectedInfo, RecommendedOpusBitrates, RemoteMediaState, RemoteStream, RemoteStreamEventNames, SendSlot, StreamEventNames, StreamRequest, WcmeError, WcmeErrorType, Logger$2 as WebRtcCoreLogger, WebrtcCoreError, WebrtcCoreErrorType, areReceiveSlotIdsEqual, codecToEncodingParams, createCameraAndMicrophoneStreams, createCameraStream, createDisplayMedia, createDisplayStream, createDisplayStreamWithAudio, createMicrophoneStream, getAudioInputDevices, getAudioOutputDevices, getDevices, getFrameSizeForPicSize, getLogLevel, getMediaContent, getMediaFamily, getMediaType, getRecommendedMaxBitrateForFrameSize, getRecommendedMaxBitrateForPicSize, getVideoInputDevices, isEncodingCodecSupported, logErrorAndThrow, setLogHandler, setLogLevel, setOnDeviceChangeHandler };
16785
16966
  //# sourceMappingURL=index.js.map