@webex/web-client-media-engine 3.37.1 → 3.38.1

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/cjs/index.js CHANGED
@@ -7158,6 +7158,17 @@ function isValidActiveSpeakerNotificationMsg(msg) {
7158
7158
  const maybeActiveSpeakerNotificationMsg = msg;
7159
7159
  return Boolean(maybeActiveSpeakerNotificationMsg.seqNum && maybeActiveSpeakerNotificationMsg.csis);
7160
7160
  }
7161
+
7162
+ class AV1Codec {
7163
+ constructor(levelIdx, tier, maxWidth, maxHeight, maxPicSize, maxDecodeRate) {
7164
+ this.levelIdx = levelIdx;
7165
+ this.tier = tier;
7166
+ this.maxWidth = maxWidth;
7167
+ this.maxHeight = maxHeight;
7168
+ this.maxPicSize = maxPicSize;
7169
+ this.maxDecodeRate = maxDecodeRate;
7170
+ }
7171
+ }
7161
7172
  function isValidAV1Codec(msg) {
7162
7173
  if (typeof msg !== 'object' || msg === null) {
7163
7174
  return false;
@@ -7773,6 +7784,203 @@ class JmpSession extends events$3.EventEmitter {
7773
7784
  }
7774
7785
  }
7775
7786
 
7787
+ var commonjsGlobal$1 = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
7788
+
7789
+ function getDefaultExportFromCjs (x) {
7790
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
7791
+ }
7792
+
7793
+ var es5 = {exports: {}};
7794
+
7795
+ (function (module, exports) {
7796
+ !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;}})}));
7797
+ }(es5));
7798
+
7799
+ var Bowser = /*@__PURE__*/getDefaultExportFromCjs(es5.exports);
7800
+
7801
+ var BrowserName;
7802
+ (function (BrowserName) {
7803
+ BrowserName["CHROME"] = "Chrome";
7804
+ BrowserName["FIREFOX"] = "Firefox";
7805
+ BrowserName["EDGE"] = "Microsoft Edge";
7806
+ BrowserName["SAFARI"] = "Safari";
7807
+ })(BrowserName || (BrowserName = {}));
7808
+ var OSName;
7809
+ (function (OSName) {
7810
+ OSName["WINDOWS"] = "Windows";
7811
+ OSName["MAC"] = "macOS";
7812
+ OSName["LINUX"] = "Linux";
7813
+ })(OSName || (OSName = {}));
7814
+ class BrowserInfo {
7815
+ static getBrowserDetails() {
7816
+ return this.browser.getBrowser();
7817
+ }
7818
+ static getOSDetails() {
7819
+ return this.browser.getOS();
7820
+ }
7821
+ static getPlatformDetails() {
7822
+ return this.browser.getPlatform();
7823
+ }
7824
+ static getEngineDetails() {
7825
+ return this.browser.getEngine();
7826
+ }
7827
+ static isChrome() {
7828
+ return this.browser.getBrowserName() === BrowserName.CHROME;
7829
+ }
7830
+ static isFirefox() {
7831
+ return this.browser.getBrowserName() === BrowserName.FIREFOX;
7832
+ }
7833
+ static isEdge() {
7834
+ return this.browser.getBrowserName() === BrowserName.EDGE;
7835
+ }
7836
+ static isSafari() {
7837
+ return this.browser.getBrowserName() === BrowserName.SAFARI;
7838
+ }
7839
+ static isWindows() {
7840
+ return this.browser.getOSName() === OSName.WINDOWS;
7841
+ }
7842
+ static isMac() {
7843
+ return this.browser.getOSName() === OSName.MAC;
7844
+ }
7845
+ static isLinux() {
7846
+ return this.browser.getOSName() === OSName.LINUX;
7847
+ }
7848
+ static isVersionGreaterThan(version) {
7849
+ const browserName = this.browser.getBrowserName();
7850
+ const checkTree = { [browserName]: `>${version}` };
7851
+ return this.browser.satisfies(checkTree);
7852
+ }
7853
+ static isVersionGreaterThanOrEqualTo(version) {
7854
+ const browserName = this.browser.getBrowserName();
7855
+ const checkTree = { [browserName]: `>=${version}` };
7856
+ return this.browser.satisfies(checkTree);
7857
+ }
7858
+ static isVersionLessThan(version) {
7859
+ const browserName = this.browser.getBrowserName();
7860
+ const checkTree = { [browserName]: `<${version}` };
7861
+ return this.browser.satisfies(checkTree);
7862
+ }
7863
+ static isVersionLessThanOrEqualTo(version) {
7864
+ const browserName = this.browser.getBrowserName();
7865
+ const checkTree = { [browserName]: `<=${version}` };
7866
+ return this.browser.satisfies(checkTree);
7867
+ }
7868
+ static isSubVersionOf(version) {
7869
+ const browserName = this.browser.getBrowserName();
7870
+ const checkTree = { [browserName]: `~${version}` };
7871
+ return this.browser.satisfies(checkTree);
7872
+ }
7873
+ }
7874
+ BrowserInfo.browser = Bowser.getParser(window.navigator.userAgent);
7875
+
7876
+ class CpuInfo {
7877
+ static getNumLogicalCores() {
7878
+ return navigator.hardwareConcurrency;
7879
+ }
7880
+ }
7881
+
7882
+ var SystemInfoEvents;
7883
+ (function (SystemInfoEvents) {
7884
+ SystemInfoEvents["CpuPressureStateChange"] = "cpu-pressure-state-change";
7885
+ })(SystemInfoEvents || (SystemInfoEvents = {}));
7886
+ class PressureObserverHelper extends events$3.EventEmitter {
7887
+ constructor() {
7888
+ super();
7889
+ this.lastCpuPressure = undefined;
7890
+ if (PressureObserverHelper.isPressureObserverSupported()) {
7891
+ this.observer = new PressureObserver(this.handleStateChange.bind(this));
7892
+ if (this.observer) {
7893
+ this.observer.observe('cpu');
7894
+ }
7895
+ }
7896
+ }
7897
+ handleStateChange(records) {
7898
+ records.forEach((record) => {
7899
+ if (record.source === 'cpu' && record.state !== this.lastCpuPressure) {
7900
+ this.lastCpuPressure = record.state;
7901
+ this.emit(SystemInfoEvents.CpuPressureStateChange, record.state);
7902
+ }
7903
+ });
7904
+ }
7905
+ getCpuPressure() {
7906
+ return this.lastCpuPressure;
7907
+ }
7908
+ static isPressureObserverSupported() {
7909
+ return 'PressureObserver' in window;
7910
+ }
7911
+ }
7912
+ new PressureObserverHelper();
7913
+
7914
+ var CapabilityState;
7915
+ (function (CapabilityState) {
7916
+ CapabilityState["NOT_CAPABLE"] = "not capable";
7917
+ CapabilityState["CAPABLE"] = "capable";
7918
+ CapabilityState["UNKNOWN"] = "unknown";
7919
+ })(CapabilityState || (CapabilityState = {}));
7920
+ class WebCapabilities {
7921
+ static isCapableOfBackgroundNoiseRemoval() {
7922
+ const numCores = CpuInfo.getNumLogicalCores();
7923
+ if (numCores === undefined) {
7924
+ return CapabilityState.UNKNOWN;
7925
+ }
7926
+ if (numCores < 2) {
7927
+ return CapabilityState.NOT_CAPABLE;
7928
+ }
7929
+ return CapabilityState.CAPABLE;
7930
+ }
7931
+ static isCapableOfVirtualBackground() {
7932
+ const numCores = CpuInfo.getNumLogicalCores();
7933
+ if (numCores === undefined) {
7934
+ return CapabilityState.UNKNOWN;
7935
+ }
7936
+ if (numCores < 2) {
7937
+ return CapabilityState.NOT_CAPABLE;
7938
+ }
7939
+ return CapabilityState.CAPABLE;
7940
+ }
7941
+ static isCapableOfReceiving1080pVideo() {
7942
+ const numCores = CpuInfo.getNumLogicalCores();
7943
+ if (numCores === undefined) {
7944
+ return CapabilityState.UNKNOWN;
7945
+ }
7946
+ if (numCores < 2) {
7947
+ return CapabilityState.NOT_CAPABLE;
7948
+ }
7949
+ return CapabilityState.CAPABLE;
7950
+ }
7951
+ static isCapableOfSending1080pVideo() {
7952
+ const numCores = CpuInfo.getNumLogicalCores();
7953
+ if (numCores === undefined) {
7954
+ return CapabilityState.UNKNOWN;
7955
+ }
7956
+ if (numCores < 8) {
7957
+ return CapabilityState.NOT_CAPABLE;
7958
+ }
7959
+ return CapabilityState.CAPABLE;
7960
+ }
7961
+ static isCapableOfReceivingVideoCodec(mimeType) {
7962
+ var _a;
7963
+ const codecs = ((_a = RTCRtpReceiver.getCapabilities('video')) === null || _a === void 0 ? void 0 : _a.codecs) || [];
7964
+ return codecs.some((codec) => codec.mimeType === mimeType)
7965
+ ? CapabilityState.CAPABLE
7966
+ : CapabilityState.NOT_CAPABLE;
7967
+ }
7968
+ static supportsEncodedStreamTransforms() {
7969
+ return window.RTCRtpScriptTransform &&
7970
+ window.RTCRtpSender &&
7971
+ 'transform' in RTCRtpSender.prototype &&
7972
+ window.RTCRtpReceiver &&
7973
+ 'transform' in RTCRtpReceiver.prototype
7974
+ ? CapabilityState.CAPABLE
7975
+ : CapabilityState.NOT_CAPABLE;
7976
+ }
7977
+ static supportsRTCPeerConnection() {
7978
+ return typeof RTCPeerConnection === 'function'
7979
+ ? CapabilityState.CAPABLE
7980
+ : CapabilityState.NOT_CAPABLE;
7981
+ }
7982
+ }
7983
+
7776
7984
  exports.WcmeErrorType = void 0;
7777
7985
  (function (WcmeErrorType) {
7778
7986
  WcmeErrorType["CREATE_OFFER_FAILED"] = "CREATE_OFFER_FAILED";
@@ -7788,6 +7996,7 @@ exports.WcmeErrorType = void 0;
7788
7996
  WcmeErrorType["SET_SOURCE_STATE_OVERRIDE_FAILED"] = "SET_SOURCE_STATE_OVERRIDE_FAILED";
7789
7997
  WcmeErrorType["DATA_CHANNEL_SEND_FAILED"] = "DATA_CHANNEL_SEND_FAILED";
7790
7998
  WcmeErrorType["RENEW_PEER_CONNECTION_FAILED"] = "RENEW_PEER_CONNECTION_FAILED";
7999
+ WcmeErrorType["INVALID_CODEC_PARAMS"] = "INVALID_CODEC_PARAMS";
7791
8000
  WcmeErrorType["UNSUPPORTED_CONFIG"] = "UNSUPPORTED_CONFIG";
7792
8001
  })(exports.WcmeErrorType || (exports.WcmeErrorType = {}));
7793
8002
  class WcmeError {
@@ -7797,7 +8006,7 @@ class WcmeError {
7797
8006
  }
7798
8007
  }
7799
8008
 
7800
- var commonjsGlobal$1 = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
8009
+ var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
7801
8010
 
7802
8011
  var logger$1 = {exports: {}};
7803
8012
 
@@ -8078,7 +8287,7 @@ var logger$1 = {exports: {}};
8078
8287
 
8079
8288
  global.Logger = Logger;
8080
8289
  }
8081
- }(commonjsGlobal$1));
8290
+ }(commonjsGlobal));
8082
8291
  }(logger$1));
8083
8292
 
8084
8293
  var Logger = logger$1.exports;
@@ -8114,6 +8323,7 @@ exports.MediaCodecMimeType = void 0;
8114
8323
  const defaultMaxVideoEncodeFrameSize = 8160;
8115
8324
  const defaultMaxVideoEncodeMbps = 244800;
8116
8325
  const defaultStartBitrateKbps = 3000;
8326
+ const macroBlockSize = 16 * 16;
8117
8327
  exports.RecommendedOpusBitrates = void 0;
8118
8328
  (function (RecommendedOpusBitrates) {
8119
8329
  RecommendedOpusBitrates[RecommendedOpusBitrates["NB"] = 12000] = "NB";
@@ -8132,6 +8342,15 @@ const maxFrameSizeToMaxBitrateMap = new Map([
8132
8342
  [3600, 2500000],
8133
8343
  [8160, 4000000],
8134
8344
  ]);
8345
+ const minSupportedMaxPicSize = 147456;
8346
+ const maxPicSizeToMaxBitrateMap = new Map([
8347
+ [147456, 1.5 * 1000000],
8348
+ [278784, 3.0 * 1000000],
8349
+ [665856, 6.0 * 1000000],
8350
+ [1065024, 10.0 * 1000000],
8351
+ [2359296, 12.0 * 1000000],
8352
+ [8912896, 30.0 * 1000000],
8353
+ ]);
8135
8354
  const defaultVideoMainRtxTime = '300';
8136
8355
  const defaultVideoSlidesRtxTime = '1000';
8137
8356
  function areProfileLevelIdsCompatible(senderProfileLevelId, receiverProfileLevelId, levelAsymmetryAllowed) {
@@ -8180,6 +8399,51 @@ function areCodecsCompatible(senderCodec, receiverCodec) {
8180
8399
  return true;
8181
8400
  });
8182
8401
  }
8402
+ function isVideoEncodingParams(encodingParams) {
8403
+ if (!encodingParams) {
8404
+ return false;
8405
+ }
8406
+ return 'maxWidth' in encodingParams || 'maxHeight' in encodingParams;
8407
+ }
8408
+ function isH264EncodingParams(encodingParams) {
8409
+ if (!encodingParams) {
8410
+ return false;
8411
+ }
8412
+ return 'maxFs' in encodingParams || 'maxFps' in encodingParams || 'maxMbps' in encodingParams;
8413
+ }
8414
+ function isAV1EncodingParams(encodingParams) {
8415
+ if (!encodingParams) {
8416
+ return false;
8417
+ }
8418
+ return ('levelIdx' in encodingParams ||
8419
+ 'tier' in encodingParams ||
8420
+ 'maxPicSize' in encodingParams ||
8421
+ 'maxDecodeRate' in encodingParams);
8422
+ }
8423
+ function codecToEncodingParams(codecInfo) {
8424
+ if (codecInfo.av1) {
8425
+ const { av1 } = codecInfo;
8426
+ return {
8427
+ levelIdx: av1.levelIdx,
8428
+ tier: av1.tier,
8429
+ maxWidth: av1.maxWidth,
8430
+ maxHeight: av1.maxHeight,
8431
+ maxPicSize: av1.maxPicSize,
8432
+ maxDecodeRate: av1.maxDecodeRate,
8433
+ };
8434
+ }
8435
+ if (codecInfo.h264) {
8436
+ const { h264 } = codecInfo;
8437
+ return {
8438
+ maxFs: h264.maxFs,
8439
+ maxFps: h264.maxFps,
8440
+ maxMbps: h264.maxMbps,
8441
+ maxWidth: h264.maxWidth,
8442
+ maxHeight: h264.maxHeight,
8443
+ };
8444
+ }
8445
+ return undefined;
8446
+ }
8183
8447
  function gcd(a, b) {
8184
8448
  return b === 0 ? a : gcd(b, a % b);
8185
8449
  }
@@ -8187,7 +8451,6 @@ function getFrameHeightByMaxFs(sourceAspectRatio, requestedMaxFs) {
8187
8451
  const _gcd = gcd(sourceAspectRatio[0], sourceAspectRatio[1]);
8188
8452
  const minNumberRatiosForWidth = sourceAspectRatio[0] / _gcd;
8189
8453
  const minNumberRatiosForHeight = sourceAspectRatio[1] / _gcd;
8190
- const macroBlockSize = 16 * 16;
8191
8454
  const minRatioNumberByMaxFs = Math.sqrt((requestedMaxFs * macroBlockSize) / (minNumberRatiosForWidth * minNumberRatiosForHeight));
8192
8455
  const roundedMinRatioNumberByMaxFs = Math.max(Math.floor(minRatioNumberByMaxFs), 1.0);
8193
8456
  return roundedMinRatioNumberByMaxFs * minNumberRatiosForHeight;
@@ -8206,10 +8469,10 @@ function getRecommendedMaxBitrateForFrameSize(requestedMaxFs) {
8206
8469
  if (requestedMaxFs < 60) {
8207
8470
  logErrorAndThrow(exports.WcmeErrorType.GET_MAX_BITRATE_FAILED, `Requested max video frame size cannot be less than 60.`);
8208
8471
  }
8209
- const expectedHeight = [...maxFrameSizeToMaxBitrateMap.keys()]
8472
+ const matchingFrameSize = [...maxFrameSizeToMaxBitrateMap.keys()]
8210
8473
  .sort((a, b) => b - a)
8211
- .find((h) => requestedMaxFs >= h);
8212
- return maxFrameSizeToMaxBitrateMap.get(expectedHeight);
8474
+ .find((maxFs) => requestedMaxFs >= maxFs);
8475
+ return maxFrameSizeToMaxBitrateMap.get(matchingFrameSize);
8213
8476
  }
8214
8477
  function setCodecParameters(allCodecParameters, codecMimeType, newParameters) {
8215
8478
  if (!allCodecParameters.has(codecMimeType)) {
@@ -8228,6 +8491,43 @@ function markCodecParametersForDeletion(allCodecParameters, codecMimeTypeToUpdat
8228
8491
  codecParameters.forEach((param) => {
8229
8492
  currentParameters[param] = undefined;
8230
8493
  });
8494
+ }
8495
+ function getRecommendedMaxBitrateForPicSize(requestedMaxPicSize) {
8496
+ if (requestedMaxPicSize < minSupportedMaxPicSize) {
8497
+ logErrorAndThrow(exports.WcmeErrorType.GET_MAX_BITRATE_FAILED, `Requested max video picture size cannot be less than ${minSupportedMaxPicSize}.`);
8498
+ }
8499
+ const expectedHeight = [...maxPicSizeToMaxBitrateMap.keys()]
8500
+ .sort((a, b) => b - a)
8501
+ .find((h) => requestedMaxPicSize >= h);
8502
+ return maxPicSizeToMaxBitrateMap.get(expectedHeight);
8503
+ }
8504
+ function getFrameSizeForPicSize(maxPicSize) {
8505
+ if (!maxPicSize) {
8506
+ return undefined;
8507
+ }
8508
+ return Math.ceil(maxPicSize / macroBlockSize);
8509
+ }
8510
+ function isEncodingCodecSupported() {
8511
+ return (((BrowserInfo.isChrome() || BrowserInfo.isEdge()) &&
8512
+ BrowserInfo.isVersionGreaterThanOrEqualTo('140')) ||
8513
+ (BrowserInfo.isFirefox() && BrowserInfo.isVersionGreaterThanOrEqualTo('145')));
8514
+ }
8515
+ function getSupportedAudioCodecs() {
8516
+ return [exports.MediaCodecMimeType.OPUS];
8517
+ }
8518
+ function getSupportedVideoCodecs(options = {
8519
+ includeAV1: false,
8520
+ }) {
8521
+ const supportedCodecs = [exports.MediaCodecMimeType.H264, exports.MediaCodecMimeType.RTX];
8522
+ if (options.includeAV1) {
8523
+ if (isEncodingCodecSupported()) {
8524
+ supportedCodecs.push(exports.MediaCodecMimeType.AV1);
8525
+ }
8526
+ else {
8527
+ logger.warn('AV1 codec was requested but browser does not support encoding.codec');
8528
+ }
8529
+ }
8530
+ return supportedCodecs;
8231
8531
  }
8232
8532
 
8233
8533
  /******************************************************************************
@@ -10051,10 +10351,6 @@ function retainCodecs(av, predicate) {
10051
10351
  });
10052
10352
  return filtered;
10053
10353
  }
10054
- function retainCodecsByCodecName(av, allowedCodecNames) {
10055
- const allowedLowerCase = allowedCodecNames.map((s) => s.toLowerCase());
10056
- return retainCodecs(av, (codecInfo) => !!codecInfo.name && allowedLowerCase.includes(codecInfo.name.toLowerCase()));
10057
- }
10058
10354
  function retainCandidates(sdpOrMedia, predicate) {
10059
10355
  const mediaDescriptions = sdpOrMedia instanceof Sdp ? sdpOrMedia.media : [sdpOrMedia];
10060
10356
  let filtered = false;
@@ -10078,191 +10374,6 @@ function hasCodec(codecName, mLine) {
10078
10374
  return [...mLine.codecs.values()].some((ci) => { var _a; return ((_a = ci.name) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === codecName.toLowerCase(); });
10079
10375
  }
10080
10376
 
10081
- var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
10082
-
10083
- function getDefaultExportFromCjs (x) {
10084
- return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
10085
- }
10086
-
10087
- var es5 = {exports: {}};
10088
-
10089
- (function (module, exports) {
10090
- !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;}})}));
10091
- }(es5));
10092
-
10093
- var Bowser = /*@__PURE__*/getDefaultExportFromCjs(es5.exports);
10094
-
10095
- var BrowserName;
10096
- (function (BrowserName) {
10097
- BrowserName["CHROME"] = "Chrome";
10098
- BrowserName["FIREFOX"] = "Firefox";
10099
- BrowserName["EDGE"] = "Microsoft Edge";
10100
- BrowserName["SAFARI"] = "Safari";
10101
- })(BrowserName || (BrowserName = {}));
10102
- var OSName;
10103
- (function (OSName) {
10104
- OSName["WINDOWS"] = "Windows";
10105
- OSName["MAC"] = "macOS";
10106
- OSName["LINUX"] = "Linux";
10107
- })(OSName || (OSName = {}));
10108
- class BrowserInfo {
10109
- static getBrowserDetails() {
10110
- return this.browser.getBrowser();
10111
- }
10112
- static getOSDetails() {
10113
- return this.browser.getOS();
10114
- }
10115
- static getPlatformDetails() {
10116
- return this.browser.getPlatform();
10117
- }
10118
- static getEngineDetails() {
10119
- return this.browser.getEngine();
10120
- }
10121
- static isChrome() {
10122
- return this.browser.getBrowserName() === BrowserName.CHROME;
10123
- }
10124
- static isFirefox() {
10125
- return this.browser.getBrowserName() === BrowserName.FIREFOX;
10126
- }
10127
- static isEdge() {
10128
- return this.browser.getBrowserName() === BrowserName.EDGE;
10129
- }
10130
- static isSafari() {
10131
- return this.browser.getBrowserName() === BrowserName.SAFARI;
10132
- }
10133
- static isWindows() {
10134
- return this.browser.getOSName() === OSName.WINDOWS;
10135
- }
10136
- static isMac() {
10137
- return this.browser.getOSName() === OSName.MAC;
10138
- }
10139
- static isLinux() {
10140
- return this.browser.getOSName() === OSName.LINUX;
10141
- }
10142
- static isVersionGreaterThan(version) {
10143
- const browserName = this.browser.getBrowserName();
10144
- const checkTree = { [browserName]: `>${version}` };
10145
- return this.browser.satisfies(checkTree);
10146
- }
10147
- static isVersionGreaterThanOrEqualTo(version) {
10148
- const browserName = this.browser.getBrowserName();
10149
- const checkTree = { [browserName]: `>=${version}` };
10150
- return this.browser.satisfies(checkTree);
10151
- }
10152
- static isVersionLessThan(version) {
10153
- const browserName = this.browser.getBrowserName();
10154
- const checkTree = { [browserName]: `<${version}` };
10155
- return this.browser.satisfies(checkTree);
10156
- }
10157
- static isVersionLessThanOrEqualTo(version) {
10158
- const browserName = this.browser.getBrowserName();
10159
- const checkTree = { [browserName]: `<=${version}` };
10160
- return this.browser.satisfies(checkTree);
10161
- }
10162
- static isSubVersionOf(version) {
10163
- const browserName = this.browser.getBrowserName();
10164
- const checkTree = { [browserName]: `~${version}` };
10165
- return this.browser.satisfies(checkTree);
10166
- }
10167
- }
10168
- BrowserInfo.browser = Bowser.getParser(window.navigator.userAgent);
10169
-
10170
- class CpuInfo {
10171
- static getNumLogicalCores() {
10172
- return navigator.hardwareConcurrency;
10173
- }
10174
- }
10175
-
10176
- var SystemInfoEvents;
10177
- (function (SystemInfoEvents) {
10178
- SystemInfoEvents["CpuPressureStateChange"] = "cpu-pressure-state-change";
10179
- })(SystemInfoEvents || (SystemInfoEvents = {}));
10180
- class PressureObserverHelper extends events$3.EventEmitter {
10181
- constructor() {
10182
- super();
10183
- this.lastCpuPressure = undefined;
10184
- if (PressureObserverHelper.isPressureObserverSupported()) {
10185
- this.observer = new PressureObserver(this.handleStateChange.bind(this));
10186
- if (this.observer) {
10187
- this.observer.observe('cpu');
10188
- }
10189
- }
10190
- }
10191
- handleStateChange(records) {
10192
- records.forEach((record) => {
10193
- if (record.source === 'cpu' && record.state !== this.lastCpuPressure) {
10194
- this.lastCpuPressure = record.state;
10195
- this.emit(SystemInfoEvents.CpuPressureStateChange, record.state);
10196
- }
10197
- });
10198
- }
10199
- getCpuPressure() {
10200
- return this.lastCpuPressure;
10201
- }
10202
- static isPressureObserverSupported() {
10203
- return 'PressureObserver' in window;
10204
- }
10205
- }
10206
- new PressureObserverHelper();
10207
-
10208
- var CapabilityState;
10209
- (function (CapabilityState) {
10210
- CapabilityState["NOT_CAPABLE"] = "not capable";
10211
- CapabilityState["CAPABLE"] = "capable";
10212
- CapabilityState["UNKNOWN"] = "unknown";
10213
- })(CapabilityState || (CapabilityState = {}));
10214
- class WebCapabilities {
10215
- static isCapableOfBackgroundNoiseRemoval() {
10216
- const numCores = CpuInfo.getNumLogicalCores();
10217
- if (numCores === undefined) {
10218
- return CapabilityState.UNKNOWN;
10219
- }
10220
- if (numCores < 2) {
10221
- return CapabilityState.NOT_CAPABLE;
10222
- }
10223
- return CapabilityState.CAPABLE;
10224
- }
10225
- static isCapableOfVirtualBackground() {
10226
- const numCores = CpuInfo.getNumLogicalCores();
10227
- if (numCores === undefined) {
10228
- return CapabilityState.UNKNOWN;
10229
- }
10230
- if (numCores < 2) {
10231
- return CapabilityState.NOT_CAPABLE;
10232
- }
10233
- return CapabilityState.CAPABLE;
10234
- }
10235
- static isCapableOfReceiving1080pVideo() {
10236
- const numCores = CpuInfo.getNumLogicalCores();
10237
- if (numCores === undefined) {
10238
- return CapabilityState.UNKNOWN;
10239
- }
10240
- if (numCores < 2) {
10241
- return CapabilityState.NOT_CAPABLE;
10242
- }
10243
- return CapabilityState.CAPABLE;
10244
- }
10245
- static isCapableOfSending1080pVideo() {
10246
- const numCores = CpuInfo.getNumLogicalCores();
10247
- if (numCores === undefined) {
10248
- return CapabilityState.UNKNOWN;
10249
- }
10250
- if (numCores < 8) {
10251
- return CapabilityState.NOT_CAPABLE;
10252
- }
10253
- return CapabilityState.CAPABLE;
10254
- }
10255
- static supportsEncodedStreamTransforms() {
10256
- return window.RTCRtpScriptTransform &&
10257
- window.RTCRtpSender &&
10258
- 'transform' in RTCRtpSender.prototype &&
10259
- window.RTCRtpReceiver &&
10260
- 'transform' in RTCRtpReceiver.prototype
10261
- ? CapabilityState.CAPABLE
10262
- : CapabilityState.NOT_CAPABLE;
10263
- }
10264
- }
10265
-
10266
10377
  const simulcastMaxFrameSizes = {
10267
10378
  0: '240',
10268
10379
  1: '2304',
@@ -10461,6 +10572,9 @@ function addVlaExtension(mediaDescription) {
10461
10572
  mediaDescription.addExtension({ uri: vlaExtensionUri });
10462
10573
  }
10463
10574
  }
10575
+ function getCodecName(codecMimeType) {
10576
+ return codecMimeType.split('/')[1].toLowerCase();
10577
+ }
10464
10578
  function setFormatParameters(mediaDescription, codecMimeType, paramsMap) {
10465
10579
  const codecName = codecMimeType.split('/')[1].toLowerCase();
10466
10580
  Object.entries(paramsMap).forEach(([param, value]) => {
@@ -10478,6 +10592,10 @@ function setFormatParameters(mediaDescription, codecMimeType, paramsMap) {
10478
10592
  }
10479
10593
  function hasIceCandidates(sdp) {
10480
10594
  return sdp.media.some((media) => media.iceInfo.candidates.length);
10595
+ }
10596
+ function retainCodecsByMimeType(mediaDescription, allowedMimeTypes) {
10597
+ const codecNames = allowedMimeTypes.map((mimeType) => getCodecName(mimeType));
10598
+ retainCodecs(mediaDescription, (codecInfo) => !!codecInfo.name && codecNames.includes(codecInfo.name.toLowerCase()));
10481
10599
  }
10482
10600
 
10483
10601
  function generateSsrc() {
@@ -10494,7 +10612,7 @@ class EgressSdpMunger {
10494
10612
  }
10495
10613
  mungeLocalDescription(mediaDescription, options) {
10496
10614
  var _a;
10497
- retainCodecsByCodecName(mediaDescription, ['h264', 'opus', 'rtx']);
10615
+ retainCodecsByMimeType(mediaDescription, options.supportedCodecs);
10498
10616
  if (options.forceSoftwareEncoder) {
10499
10617
  const isH264Cbp = (codecInfo) => {
10500
10618
  var _a;
@@ -11124,7 +11242,7 @@ class IngressSdpMunger {
11124
11242
  return Object.assign({ ssrc: this.ssrc }, (this.rtxSsrc ? { rtxSsrc: this.rtxSsrc } : {}));
11125
11243
  }
11126
11244
  mungeLocalDescription(mediaDescription, options) {
11127
- retainCodecsByCodecName(mediaDescription, ['h264', 'opus', 'rtx']);
11245
+ retainCodecsByMimeType(mediaDescription, options.supportedCodecs);
11128
11246
  if (mediaDescription.codecs.size === 0) {
11129
11247
  logErrorAndThrow(exports.WcmeErrorType.SDP_MUNGE_MISSING_CODECS, `No codecs present in m-line with MID ${mediaDescription.mid} after filtering.`);
11130
11248
  }
@@ -11382,6 +11500,7 @@ class ReceiveOnlyTransceiver extends Transceiver {
11382
11500
  this.metadata = { isActiveSpeaker: false };
11383
11501
  this.getEncodedStreamMetadataCallback = () => Promise.resolve(undefined);
11384
11502
  this.munger = config.munger;
11503
+ this.supportedCodecs = config.supportedCodecs;
11385
11504
  this._receiveSlot = new ReceiveSlot(() => {
11386
11505
  if (!this._rtcRtpTransceiver.mid) {
11387
11506
  return null;
@@ -11437,6 +11556,7 @@ class ReceiveOnlyTransceiver extends Transceiver {
11437
11556
  mungeLocalDescription(mediaDescription) {
11438
11557
  this.munger.mungeLocalDescription(mediaDescription, {
11439
11558
  twccDisabled: this.twccDisabled,
11559
+ supportedCodecs: this.supportedCodecs,
11440
11560
  });
11441
11561
  }
11442
11562
  mungeRemoteDescription(mediaDescription) {
@@ -11449,14 +11569,22 @@ class ReceiveOnlyTransceiver extends Transceiver {
11449
11569
  this.munger.reset();
11450
11570
  }
11451
11571
  handleRequested(streamRequest) {
11452
- var _a, _b, _c, _d;
11453
11572
  if (!this.receiveSlot._isRequested) {
11454
11573
  this.receiveSlot._isRequested = true;
11455
11574
  this.metadata.lastRequestedUpdateTimestamp = getCurrentTimestamp();
11456
11575
  }
11457
11576
  this.metadata.requestedBitrate = streamRequest.maxPayloadBitsPerSecond;
11458
- this.metadata.requestedFrameSize = (_b = (_a = streamRequest.codecInfos[0]) === null || _a === void 0 ? void 0 : _a.h264) === null || _b === void 0 ? void 0 : _b.maxFs;
11459
- this.metadata.requestedFrameRate = (_d = (_c = streamRequest.codecInfos[0]) === null || _c === void 0 ? void 0 : _c.h264) === null || _d === void 0 ? void 0 : _d.maxFps;
11577
+ const firstCodecInfo = streamRequest.codecInfos[0];
11578
+ if (firstCodecInfo === null || firstCodecInfo === void 0 ? void 0 : firstCodecInfo.h264) {
11579
+ this.metadata.requestedFrameSize = firstCodecInfo.h264.maxFs;
11580
+ this.metadata.requestedFrameRate = firstCodecInfo.h264.maxFps;
11581
+ }
11582
+ else if (firstCodecInfo === null || firstCodecInfo === void 0 ? void 0 : firstCodecInfo.av1) {
11583
+ this.metadata.requestedFrameSize = getFrameSizeForPicSize(firstCodecInfo.av1.maxPicSize);
11584
+ if (firstCodecInfo.av1.maxPicSize > 0 && firstCodecInfo.av1.maxDecodeRate > 0) {
11585
+ this.metadata.requestedFrameRate = Math.round(firstCodecInfo.av1.maxDecodeRate / firstCodecInfo.av1.maxPicSize);
11586
+ }
11587
+ }
11460
11588
  }
11461
11589
  handleUnrequested() {
11462
11590
  if (this.receiveSlot._isRequested) {
@@ -15211,6 +15339,7 @@ class SendOnlyTransceiver extends Transceiver {
15211
15339
  this.munger = config.munger;
15212
15340
  this.csi = config.csi;
15213
15341
  this.direction = 'sendrecv';
15342
+ this.supportedCodecs = config.supportedCodecs;
15214
15343
  this.handleTrackChange = this.handleTrackChange.bind(this);
15215
15344
  this.handleStreamConstraintsChange = this.handleStreamConstraintsChange.bind(this);
15216
15345
  this.handleStreamMuteStateChange = this.handleStreamMuteStateChange.bind(this);
@@ -15240,7 +15369,7 @@ class SendOnlyTransceiver extends Transceiver {
15240
15369
  }
15241
15370
  handleStreamConstraintsChange() {
15242
15371
  return __awaiter(this, void 0, void 0, function* () {
15243
- yield this.updateSendParameters(this.requestedIdEncodingParamsMap);
15372
+ yield this.updateSendParameters(this.requestedIdEncodingParamsMap, this.selectedPayloadType);
15244
15373
  });
15245
15374
  }
15246
15375
  handleStreamMuteStateChange() {
@@ -15333,7 +15462,12 @@ class SendOnlyTransceiver extends Transceiver {
15333
15462
  const encodingIndex = this.getEncodingIndexForStreamId(senderId);
15334
15463
  const encodingParams = this.requestedIdEncodingParamsMap.get(encodingIndex);
15335
15464
  stats.requestedBitrate = encodingParams === null || encodingParams === void 0 ? void 0 : encodingParams.maxPayloadBitsPerSecond;
15336
- stats.requestedFrameSize = encodingParams === null || encodingParams === void 0 ? void 0 : encodingParams.maxFs;
15465
+ if (isAV1EncodingParams(encodingParams)) {
15466
+ stats.requestedFrameSize = getFrameSizeForPicSize(encodingParams === null || encodingParams === void 0 ? void 0 : encodingParams.maxPicSize);
15467
+ }
15468
+ else if (isH264EncodingParams(encodingParams)) {
15469
+ stats.requestedFrameSize = encodingParams === null || encodingParams === void 0 ? void 0 : encodingParams.maxFs;
15470
+ }
15337
15471
  stats.isRequested = !!encodingParams;
15338
15472
  stats.lastRequestedUpdateTimestamp =
15339
15473
  this.metadata.lastRequestedUpdateTimestampsMap.get(encodingIndex);
@@ -15372,23 +15506,49 @@ class SendOnlyTransceiver extends Transceiver {
15372
15506
  return statsMap;
15373
15507
  });
15374
15508
  }
15375
- updateSendParameters(requestedIdEncodingParamsMap) {
15509
+ updateSendParameters(requestedIdEncodingParamsMap, payloadType) {
15376
15510
  return __awaiter(this, void 0, void 0, function* () {
15377
15511
  return this.updateSendParametersQueue.push(() => __awaiter(this, void 0, void 0, function* () {
15378
15512
  const sendParameters = this.sender.getParameters();
15513
+ const selectedCodec = sendParameters.codecs.find((codec) => codec.payloadType === payloadType);
15514
+ const shouldUpdateSelectedCodec = this.mediaType === exports.MediaType.VideoSlides &&
15515
+ !!selectedCodec &&
15516
+ this.selectedPayloadType !== selectedCodec.payloadType;
15379
15517
  sendParameters.encodings.forEach((encoding, index) => {
15380
15518
  var _a, _b;
15381
15519
  const encodingParams = requestedIdEncodingParamsMap.get(index);
15382
15520
  encoding.active = !!encodingParams;
15521
+ if (shouldUpdateSelectedCodec) {
15522
+ if (isEncodingCodecSupported()) {
15523
+ const isCodecCapable = selectedCodec &&
15524
+ WebCapabilities.isCapableOfReceivingVideoCodec(selectedCodec.mimeType) ===
15525
+ CapabilityState.CAPABLE;
15526
+ if (!isCodecCapable) {
15527
+ logErrorAndThrow(exports.WcmeErrorType.INVALID_CODEC_PARAMS, `Codec ${selectedCodec === null || selectedCodec === void 0 ? void 0 : selectedCodec.mimeType} is not supported by the browser.`);
15528
+ }
15529
+ encoding.codec = selectedCodec;
15530
+ }
15531
+ }
15383
15532
  if (encodingParams) {
15384
- const { maxPayloadBitsPerSecond, maxFs, maxWidth, maxHeight } = encodingParams;
15385
- 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);
15533
+ const { maxPayloadBitsPerSecond } = encodingParams;
15534
+ if (getMediaFamily(this.mediaType) === exports.MediaFamily.Video &&
15535
+ isVideoEncodingParams(encodingParams)) {
15536
+ let frameSize;
15537
+ const { maxWidth, maxHeight } = encodingParams;
15538
+ if (isAV1EncodingParams(encodingParams)) {
15539
+ frameSize = getFrameSizeForPicSize(encodingParams.maxPicSize);
15540
+ }
15541
+ else if (isH264EncodingParams(encodingParams)) {
15542
+ frameSize = encodingParams.maxFs;
15543
+ }
15544
+ 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);
15545
+ if (scaleDownRatio !== undefined && scaleDownRatio >= 1.0) {
15546
+ encoding.scaleResolutionDownBy = scaleDownRatio;
15547
+ }
15548
+ }
15386
15549
  if (maxPayloadBitsPerSecond !== undefined && maxPayloadBitsPerSecond >= 0) {
15387
15550
  encoding.maxBitrate = maxPayloadBitsPerSecond;
15388
15551
  }
15389
- if (scaleDownRatio !== undefined && scaleDownRatio >= 1.0) {
15390
- encoding.scaleResolutionDownBy = scaleDownRatio;
15391
- }
15392
15552
  }
15393
15553
  });
15394
15554
  yield this.sender.setParameters(sendParameters);
@@ -15407,6 +15567,7 @@ class SendOnlyTransceiver extends Transceiver {
15407
15567
  const oldRequested = this.requested;
15408
15568
  const newRequested = requestedIdEncodingParamsMap.size > 0;
15409
15569
  this.requestedIdEncodingParamsMap = requestedIdEncodingParamsMap;
15570
+ this.selectedPayloadType = payloadType;
15410
15571
  if (oldRequested !== newRequested) {
15411
15572
  yield this.replaceSenderSource(newRequested ? this.publishedStream : null);
15412
15573
  }
@@ -15425,6 +15586,7 @@ class SendOnlyTransceiver extends Transceiver {
15425
15586
  forceSoftwareEncoder: this.mediaType === exports.MediaType.VideoSlides &&
15426
15587
  (BrowserInfo.isWindows() || BrowserInfo.isMac()) &&
15427
15588
  (BrowserInfo.isChrome() || BrowserInfo.isEdge()),
15589
+ supportedCodecs: this.supportedCodecs,
15428
15590
  });
15429
15591
  }
15430
15592
  mungeLocalDescriptionForRemoteServer(mediaDescription, mungeOptions = { injectDummyCandidates: true }) {
@@ -15773,6 +15935,7 @@ const defaultMultistreamConnectionOptions = {
15773
15935
  preferredStartingBitrateKbps: defaultStartBitrateKbps,
15774
15936
  metricsCallback: () => { },
15775
15937
  enableInboundAudioLevelMonitoring: false,
15938
+ enableAV1SlidesSupport: false,
15776
15939
  };
15777
15940
  let staticIdCounter = 0;
15778
15941
  class MultistreamConnection extends EventEmitter$2 {
@@ -15801,10 +15964,13 @@ class MultistreamConnection extends EventEmitter$2 {
15801
15964
  const videoMainEncodingOptions = this.getVideoEncodingOptions(exports.MediaContent.Main);
15802
15965
  const videoSlidesEncodingOptions = this.getVideoEncodingOptions(exports.MediaContent.Slides);
15803
15966
  const sendVideoCodecParams = this.getCustomSendVideoCodecParams();
15804
- this.createSendTransceiver(exports.MediaType.VideoMain, mainSceneId, videoMainEncodingOptions, sendVideoCodecParams);
15805
- this.createSendTransceiver(exports.MediaType.AudioMain, mainSceneId);
15806
- this.createSendTransceiver(exports.MediaType.VideoSlides, slidesSceneId, videoSlidesEncodingOptions, sendVideoCodecParams);
15807
- this.createSendTransceiver(exports.MediaType.AudioSlides, slidesSceneId);
15967
+ const supportedVideoCodecs = this.getSupportedCodecs(exports.MediaType.VideoMain);
15968
+ const supportedVideoSlidesCodecs = this.getSupportedCodecs(exports.MediaType.VideoSlides);
15969
+ const supportedAudioCodecs = this.getSupportedCodecs(exports.MediaType.AudioMain);
15970
+ this.createSendTransceiver(exports.MediaType.VideoMain, mainSceneId, supportedVideoCodecs, videoMainEncodingOptions, sendVideoCodecParams);
15971
+ this.createSendTransceiver(exports.MediaType.AudioMain, mainSceneId, supportedAudioCodecs);
15972
+ this.createSendTransceiver(exports.MediaType.VideoSlides, slidesSceneId, supportedVideoSlidesCodecs, videoSlidesEncodingOptions, sendVideoCodecParams);
15973
+ this.createSendTransceiver(exports.MediaType.AudioSlides, slidesSceneId, supportedAudioCodecs);
15808
15974
  }
15809
15975
  startWorkerIfNeeded() {
15810
15976
  if (this.options.enableInboundAudioLevelMonitoring) {
@@ -15900,7 +16066,15 @@ class MultistreamConnection extends EventEmitter$2 {
15900
16066
  },
15901
16067
  };
15902
16068
  }
15903
- createSendTransceiver(mediaType, sceneId, sendEncodingsOptions, codecParams) {
16069
+ getSupportedCodecs(mediaType) {
16070
+ if (mediaType === exports.MediaType.VideoMain || mediaType === exports.MediaType.VideoSlides) {
16071
+ return getSupportedVideoCodecs({
16072
+ includeAV1: mediaType === exports.MediaType.VideoSlides && this.options.enableAV1SlidesSupport,
16073
+ });
16074
+ }
16075
+ return getSupportedAudioCodecs();
16076
+ }
16077
+ createSendTransceiver(mediaType, sceneId, supportedCodecs, sendEncodingsOptions, codecParams) {
15904
16078
  let rtcRtpTransceiver;
15905
16079
  try {
15906
16080
  rtcRtpTransceiver = this.pc.addTransceiver(mediaTypeToTrackKind(mediaType), {
@@ -15921,6 +16095,7 @@ class MultistreamConnection extends EventEmitter$2 {
15921
16095
  mediaType,
15922
16096
  munger,
15923
16097
  csi,
16098
+ supportedCodecs,
15924
16099
  });
15925
16100
  if (getMediaFamily(mediaType) === exports.MediaFamily.Video) {
15926
16101
  transceiver.rtxEnabled = true;
@@ -16058,8 +16233,8 @@ SCTP Max Message Size: ${maxMessageSize}`);
16058
16233
  if (rsRequests.length !== requests.length) {
16059
16234
  logger.warn('Ignoring non-receiver-selected requests');
16060
16235
  }
16236
+ let selectedPayloadType;
16061
16237
  rsRequests.forEach(({ ids, policySpecificInfo, codecInfos, maxPayloadBitsPerSecond }) => {
16062
- var _a, _b, _c;
16063
16238
  if (ids.length > 1) {
16064
16239
  logErrorAndThrow(exports.WcmeErrorType.INVALID_STREAM_REQUEST, `Stream request cannot have more than one ID.`);
16065
16240
  }
@@ -16071,7 +16246,17 @@ SCTP Max Message Size: ${maxMessageSize}`);
16071
16246
  return;
16072
16247
  }
16073
16248
  const id = ids[0];
16074
- const codecInfo = codecInfos[0];
16249
+ let codecInfo = codecInfos[0];
16250
+ if (codecInfos.length > 1) {
16251
+ const av1Codec = codecInfos.find((c) => c.av1);
16252
+ if (av1Codec) {
16253
+ codecInfo = av1Codec;
16254
+ logger.info(`Preferring AV1 (payloadType=${codecInfo.payloadType}) over first codec in request`);
16255
+ }
16256
+ }
16257
+ if (mediaType === exports.MediaType.VideoSlides && selectedPayloadType === undefined) {
16258
+ selectedPayloadType = codecInfo.payloadType;
16259
+ }
16075
16260
  if (!isValidSsrcStreamId(id)) {
16076
16261
  logger.warn(`${mediaType}: The stream ID is not a valid SsrcStreamId: ${JSON.stringify(id)}`);
16077
16262
  return;
@@ -16080,12 +16265,13 @@ SCTP Max Message Size: ${maxMessageSize}`);
16080
16265
  if (streamIdsMatched) {
16081
16266
  const encodingIndex = sendTransceiver.getEncodingIndexForStreamId(id);
16082
16267
  if (encodingIndex !== -1) {
16083
- const encodingParams = { maxPayloadBitsPerSecond };
16084
- if (mediaFamily === exports.MediaFamily.Video) {
16085
- encodingParams.maxFs = (_a = codecInfo === null || codecInfo === void 0 ? void 0 : codecInfo.h264) === null || _a === void 0 ? void 0 : _a.maxFs;
16086
- encodingParams.maxWidth = (_b = codecInfo === null || codecInfo === void 0 ? void 0 : codecInfo.h264) === null || _b === void 0 ? void 0 : _b.maxWidth;
16087
- encodingParams.maxHeight = (_c = codecInfo === null || codecInfo === void 0 ? void 0 : codecInfo.h264) === null || _c === void 0 ? void 0 : _c.maxHeight;
16268
+ const isVideo = mediaFamily === exports.MediaFamily.Video;
16269
+ const codecParams = isVideo && codecInfo ? codecToEncodingParams(codecInfo) : {};
16270
+ if (isVideo && codecInfo && !codecParams) {
16271
+ logger.warn(`${mediaType}: Unsupported codec for ID ${JSON.stringify(id)}`);
16272
+ return;
16088
16273
  }
16274
+ const encodingParams = Object.assign({ maxPayloadBitsPerSecond }, codecParams);
16089
16275
  requestedIdEncodingParamsMap.set(encodingIndex, encodingParams);
16090
16276
  }
16091
16277
  else {
@@ -16096,7 +16282,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
16096
16282
  logger.warn(`${mediaType}: Unable to find matching stream ID for requested ID: ${JSON.stringify(id)}`);
16097
16283
  }
16098
16284
  });
16099
- return sendTransceiver.updateSendParameters(requestedIdEncodingParamsMap);
16285
+ return sendTransceiver.updateSendParameters(requestedIdEncodingParamsMap, selectedPayloadType);
16100
16286
  }
16101
16287
  createDataChannel() {
16102
16288
  const dataChannel = this.pc.createDataChannel('datachannel', {
@@ -16228,7 +16414,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
16228
16414
  static getEncodedTransformId(mediaType, mid) {
16229
16415
  return `INBOUND-${mediaType}-${mid}`;
16230
16416
  }
16231
- createReceiveTransceiver(mediaType, codecParams) {
16417
+ createReceiveTransceiver(mediaType, supportedCodecs, codecParams) {
16232
16418
  const rtcRtpTransceiver = this.pc.addTransceiver(mediaTypeToTrackKind(mediaType), {
16233
16419
  direction: 'recvonly',
16234
16420
  });
@@ -16240,6 +16426,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
16240
16426
  mid,
16241
16427
  mediaType,
16242
16428
  munger,
16429
+ supportedCodecs,
16243
16430
  });
16244
16431
  if (doAudioLevelMonitoring) {
16245
16432
  try {
@@ -16278,11 +16465,12 @@ SCTP Max Message Size: ${maxMessageSize}`);
16278
16465
  return new Promise((createReceiveSlotsResolve) => {
16279
16466
  this.offerAnswerQueue.push(() => __awaiter(this, void 0, void 0, function* () {
16280
16467
  const createdReceiveOnlyTransceivers = [];
16468
+ const supportedCodecs = this.getSupportedCodecs(mediaType);
16281
16469
  const codecParams = mediaTypeToTrackKind(mediaType) === exports.MediaStreamTrackKind.Video
16282
16470
  ? this.getCustomReceiveVideoCodecParams(mediaType)
16283
16471
  : undefined;
16284
16472
  for (let i = 0; i < count; i++) {
16285
- const recvOnlyTransceiver = this.createReceiveTransceiver(mediaType, codecParams);
16473
+ const recvOnlyTransceiver = this.createReceiveTransceiver(mediaType, supportedCodecs, codecParams);
16286
16474
  createdReceiveOnlyTransceivers.push(recvOnlyTransceiver);
16287
16475
  }
16288
16476
  if (this.pc.getRemoteDescription()) {
@@ -16785,6 +16973,7 @@ class StreamRequest {
16785
16973
 
16786
16974
  const { DeviceKind } = media;
16787
16975
 
16976
+ exports.AV1Codec = AV1Codec;
16788
16977
  exports.ActiveSpeakerInfo = ActiveSpeakerInfo;
16789
16978
  exports.CodecInfo = CodecInfo$1;
16790
16979
  exports.DeviceKind = DeviceKind;
@@ -16807,6 +16996,7 @@ exports.WcmeError = WcmeError;
16807
16996
  exports.WebRtcCoreLogger = Logger$2;
16808
16997
  exports.WebrtcCoreError = WebrtcCoreError;
16809
16998
  exports.areReceiveSlotIdsEqual = areReceiveSlotIdsEqual;
16999
+ exports.codecToEncodingParams = codecToEncodingParams;
16810
17000
  exports.createCameraAndMicrophoneStreams = createCameraAndMicrophoneStreams;
16811
17001
  exports.createCameraStream = createCameraStream;
16812
17002
  exports.createDisplayMedia = createDisplayMedia;
@@ -16816,12 +17006,15 @@ exports.createMicrophoneStream = createMicrophoneStream;
16816
17006
  exports.getAudioInputDevices = getAudioInputDevices;
16817
17007
  exports.getAudioOutputDevices = getAudioOutputDevices;
16818
17008
  exports.getDevices = getDevices;
17009
+ exports.getFrameSizeForPicSize = getFrameSizeForPicSize;
16819
17010
  exports.getLogLevel = getLogLevel;
16820
17011
  exports.getMediaContent = getMediaContent;
16821
17012
  exports.getMediaFamily = getMediaFamily;
16822
17013
  exports.getMediaType = getMediaType;
16823
17014
  exports.getRecommendedMaxBitrateForFrameSize = getRecommendedMaxBitrateForFrameSize;
17015
+ exports.getRecommendedMaxBitrateForPicSize = getRecommendedMaxBitrateForPicSize;
16824
17016
  exports.getVideoInputDevices = getVideoInputDevices;
17017
+ exports.isEncodingCodecSupported = isEncodingCodecSupported;
16825
17018
  exports.logErrorAndThrow = logErrorAndThrow;
16826
17019
  exports.setLogHandler = setLogHandler;
16827
17020
  exports.setLogLevel = setLogLevel;