@webex/web-client-media-engine 3.37.0 → 3.38.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/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
  }
@@ -16072,6 +16247,9 @@ SCTP Max Message Size: ${maxMessageSize}`);
16072
16247
  }
16073
16248
  const id = ids[0];
16074
16249
  const codecInfo = codecInfos[0];
16250
+ if (mediaType === exports.MediaType.VideoSlides && selectedPayloadType === undefined) {
16251
+ selectedPayloadType = codecInfo.payloadType;
16252
+ }
16075
16253
  if (!isValidSsrcStreamId(id)) {
16076
16254
  logger.warn(`${mediaType}: The stream ID is not a valid SsrcStreamId: ${JSON.stringify(id)}`);
16077
16255
  return;
@@ -16080,12 +16258,13 @@ SCTP Max Message Size: ${maxMessageSize}`);
16080
16258
  if (streamIdsMatched) {
16081
16259
  const encodingIndex = sendTransceiver.getEncodingIndexForStreamId(id);
16082
16260
  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;
16261
+ const isVideo = mediaFamily === exports.MediaFamily.Video;
16262
+ const codecParams = isVideo && codecInfo ? codecToEncodingParams(codecInfo) : {};
16263
+ if (isVideo && codecInfo && !codecParams) {
16264
+ logger.warn(`${mediaType}: Unsupported codec for ID ${JSON.stringify(id)}`);
16265
+ return;
16088
16266
  }
16267
+ const encodingParams = Object.assign({ maxPayloadBitsPerSecond }, codecParams);
16089
16268
  requestedIdEncodingParamsMap.set(encodingIndex, encodingParams);
16090
16269
  }
16091
16270
  else {
@@ -16096,7 +16275,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
16096
16275
  logger.warn(`${mediaType}: Unable to find matching stream ID for requested ID: ${JSON.stringify(id)}`);
16097
16276
  }
16098
16277
  });
16099
- return sendTransceiver.updateSendParameters(requestedIdEncodingParamsMap);
16278
+ return sendTransceiver.updateSendParameters(requestedIdEncodingParamsMap, selectedPayloadType);
16100
16279
  }
16101
16280
  createDataChannel() {
16102
16281
  const dataChannel = this.pc.createDataChannel('datachannel', {
@@ -16228,7 +16407,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
16228
16407
  static getEncodedTransformId(mediaType, mid) {
16229
16408
  return `INBOUND-${mediaType}-${mid}`;
16230
16409
  }
16231
- createReceiveTransceiver(mediaType, codecParams) {
16410
+ createReceiveTransceiver(mediaType, supportedCodecs, codecParams) {
16232
16411
  const rtcRtpTransceiver = this.pc.addTransceiver(mediaTypeToTrackKind(mediaType), {
16233
16412
  direction: 'recvonly',
16234
16413
  });
@@ -16240,6 +16419,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
16240
16419
  mid,
16241
16420
  mediaType,
16242
16421
  munger,
16422
+ supportedCodecs,
16243
16423
  });
16244
16424
  if (doAudioLevelMonitoring) {
16245
16425
  try {
@@ -16278,11 +16458,12 @@ SCTP Max Message Size: ${maxMessageSize}`);
16278
16458
  return new Promise((createReceiveSlotsResolve) => {
16279
16459
  this.offerAnswerQueue.push(() => __awaiter(this, void 0, void 0, function* () {
16280
16460
  const createdReceiveOnlyTransceivers = [];
16461
+ const supportedCodecs = this.getSupportedCodecs(mediaType);
16281
16462
  const codecParams = mediaTypeToTrackKind(mediaType) === exports.MediaStreamTrackKind.Video
16282
16463
  ? this.getCustomReceiveVideoCodecParams(mediaType)
16283
16464
  : undefined;
16284
16465
  for (let i = 0; i < count; i++) {
16285
- const recvOnlyTransceiver = this.createReceiveTransceiver(mediaType, codecParams);
16466
+ const recvOnlyTransceiver = this.createReceiveTransceiver(mediaType, supportedCodecs, codecParams);
16286
16467
  createdReceiveOnlyTransceivers.push(recvOnlyTransceiver);
16287
16468
  }
16288
16469
  if (this.pc.getRemoteDescription()) {
@@ -16785,6 +16966,7 @@ class StreamRequest {
16785
16966
 
16786
16967
  const { DeviceKind } = media;
16787
16968
 
16969
+ exports.AV1Codec = AV1Codec;
16788
16970
  exports.ActiveSpeakerInfo = ActiveSpeakerInfo;
16789
16971
  exports.CodecInfo = CodecInfo$1;
16790
16972
  exports.DeviceKind = DeviceKind;
@@ -16807,6 +16989,7 @@ exports.WcmeError = WcmeError;
16807
16989
  exports.WebRtcCoreLogger = Logger$2;
16808
16990
  exports.WebrtcCoreError = WebrtcCoreError;
16809
16991
  exports.areReceiveSlotIdsEqual = areReceiveSlotIdsEqual;
16992
+ exports.codecToEncodingParams = codecToEncodingParams;
16810
16993
  exports.createCameraAndMicrophoneStreams = createCameraAndMicrophoneStreams;
16811
16994
  exports.createCameraStream = createCameraStream;
16812
16995
  exports.createDisplayMedia = createDisplayMedia;
@@ -16816,12 +16999,15 @@ exports.createMicrophoneStream = createMicrophoneStream;
16816
16999
  exports.getAudioInputDevices = getAudioInputDevices;
16817
17000
  exports.getAudioOutputDevices = getAudioOutputDevices;
16818
17001
  exports.getDevices = getDevices;
17002
+ exports.getFrameSizeForPicSize = getFrameSizeForPicSize;
16819
17003
  exports.getLogLevel = getLogLevel;
16820
17004
  exports.getMediaContent = getMediaContent;
16821
17005
  exports.getMediaFamily = getMediaFamily;
16822
17006
  exports.getMediaType = getMediaType;
16823
17007
  exports.getRecommendedMaxBitrateForFrameSize = getRecommendedMaxBitrateForFrameSize;
17008
+ exports.getRecommendedMaxBitrateForPicSize = getRecommendedMaxBitrateForPicSize;
16824
17009
  exports.getVideoInputDevices = getVideoInputDevices;
17010
+ exports.isEncodingCodecSupported = isEncodingCodecSupported;
16825
17011
  exports.logErrorAndThrow = logErrorAndThrow;
16826
17012
  exports.setLogHandler = setLogHandler;
16827
17013
  exports.setLogLevel = setLogLevel;