agora的web rtc的sdk库,基于3.0.1进行的一些临时额外处理

AgoraRTCSDK.min.js 545KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676106771067810679106801068110682106831068410685106861068710688106891069010691106921069310694106951069610697106981069910700107011070210703107041070510706107071070810709107101071110712107131071410715107161071710718107191072010721107221072310724107251072610727107281072910730107311073210733107341073510736107371073810739107401074110742107431074410745107461074710748107491075010751107521075310754107551075610757107581075910760107611076210763107641076510766107671076810769107701077110772107731077410775107761077710778107791078010781107821078310784107851078610787107881078910790107911079210793107941079510796107971079810799108001080110802108031080410805108061080710808108091081010811108121081310814108151081610817108181081910820108211082210823108241082510826108271082810829108301083110832108331083410835108361083710838108391084010841108421084310844108451084610847108481084910850108511085210853108541085510856108571085810859108601086110862108631086410865108661086710868108691087010871108721087310874108751087610877108781087910880108811088210883108841088510886108871088810889108901089110892108931089410895108961089710898108991090010901109021090310904109051090610907109081090910910109111091210913109141091510916109171091810919109201092110922109231092410925109261092710928109291093010931109321093310934109351093610937109381093910940109411094210943109441094510946109471094810949109501095110952109531095410955109561095710958109591096010961109621096310964109651096610967109681096910970109711097210973109741097510976109771097810979109801098110982109831098410985109861098710988109891099010991109921099310994109951099610997109981099911000110011100211003110041100511006110071100811009110101101111012110131101411015110161101711018110191102011021110221102311024110251102611027110281102911030110311103211033110341103511036110371103811039110401104111042110431104411045110461104711048110491105011051110521105311054110551105611057110581105911060110611106211063110641106511066110671106811069110701107111072110731107411075110761107711078110791108011081110821108311084110851108611087110881108911090110911109211093110941109511096110971109811099111001110111102111031110411105111061110711108111091111011111111121111311114111151111611117111181111911120111211112211123111241112511126111271112811129111301113111132111331113411135111361113711138111391114011141111421114311144111451114611147111481114911150111511115211153111541115511156111571115811159111601116111162111631116411165111661116711168111691117011171111721117311174111751117611177111781117911180111811118211183111841118511186111871118811189111901119111192111931119411195111961119711198111991120011201112021120311204112051120611207112081120911210112111121211213112141121511216112171121811219112201122111222112231122411225112261122711228112291123011231112321123311234112351123611237112381123911240112411124211243112441124511246112471124811249112501125111252112531125411255112561125711258112591126011261112621126311264112651126611267112681126911270112711127211273112741127511276112771127811279112801128111282112831128411285112861128711288112891129011291112921129311294112951129611297112981129911300113011130211303113041130511306113071130811309113101131111312113131131411315113161131711318113191132011321113221132311324113251132611327113281132911330113311133211333113341133511336113371133811339113401134111342113431134411345113461134711348113491135011351113521135311354113551135611357113581135911360113611136211363113641136511366113671136811369113701137111372113731137411375113761137711378113791138011381113821138311384113851138611387113881138911390113911139211393113941139511396113971139811399114001140111402114031140411405114061140711408114091141011411114121141311414114151141611417114181141911420114211142211423114241142511426114271142811429114301143111432114331143411435114361143711438114391144011441114421144311444114451144611447114481144911450114511145211453114541145511456114571145811459114601146111462114631146411465114661146711468114691147011471114721147311474114751147611477114781147911480114811148211483114841148511486114871148811489114901149111492114931149411495114961149711498114991150011501115021150311504115051150611507115081150911510115111151211513115141151511516115171151811519115201152111522115231152411525115261152711528115291153011531115321153311534115351153611537115381153911540115411154211543115441154511546115471154811549115501155111552115531155411555115561155711558115591156011561115621156311564115651156611567115681156911570115711157211573115741157511576115771157811579115801158111582115831158411585115861158711588115891159011591115921159311594115951159611597115981159911600116011160211603116041160511606116071160811609116101161111612116131161411615116161161711618116191162011621116221162311624116251162611627116281162911630116311163211633116341163511636116371163811639116401164111642116431164411645116461164711648116491165011651116521165311654116551165611657116581165911660116611166211663116641166511666116671166811669116701167111672116731167411675116761167711678116791168011681116821168311684116851168611687116881168911690116911169211693116941169511696116971169811699117001170111702117031170411705117061170711708117091171011711117121171311714117151171611717117181171911720117211172211723117241172511726117271172811729117301173111732117331173411735117361173711738117391174011741117421174311744117451174611747117481174911750117511175211753117541175511756117571175811759117601176111762117631176411765117661176711768117691177011771117721177311774117751177611777117781177911780117811178211783117841178511786117871178811789117901179111792117931179411795117961179711798117991180011801118021180311804118051180611807118081180911810118111181211813118141181511816118171181811819118201182111822118231182411825118261182711828118291183011831118321183311834118351183611837118381183911840118411184211843118441184511846118471184811849118501185111852118531185411855118561185711858118591186011861118621186311864118651186611867118681186911870118711187211873118741187511876118771187811879118801188111882118831188411885118861188711888118891189011891118921189311894118951189611897118981189911900119011190211903119041190511906119071190811909119101191111912119131191411915119161191711918119191192011921119221192311924119251192611927119281192911930119311193211933119341193511936119371193811939119401194111942119431194411945119461194711948119491195011951119521195311954119551195611957119581195911960119611196211963119641196511966119671196811969119701197111972119731197411975119761197711978119791198011981119821198311984119851198611987119881198911990119911199211993119941199511996119971199811999120001200112002120031200412005120061200712008120091201012011120121201312014120151201612017120181201912020120211202212023120241202512026120271202812029120301203112032120331203412035120361203712038120391204012041120421204312044120451204612047120481204912050120511205212053120541205512056120571205812059120601206112062120631206412065120661206712068120691207012071120721207312074120751207612077120781207912080120811208212083120841208512086120871208812089120901209112092120931209412095120961209712098120991210012101121021210312104121051210612107121081210912110121111211212113121141211512116121171211812119121201212112122121231212412125
  1. /*! AgoraRTC|BUILD v3.0.1-0-g1c6a636 */
  2. !
  3. function(e, t) {
  4. "object" == typeof exports && "object" == typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define("AgoraRTC", [], t) : "object" == typeof exports ? exports.AgoraRTC = t() : e.AgoraRTC = t()
  5. }(window, function() {
  6. return function(e) {
  7. var t = {};
  8. function n(i) {
  9. if (t[i]) return t[i].exports;
  10. var a = t[i] = {
  11. i: i,
  12. l: !1,
  13. exports: {}
  14. };
  15. return e[i].call(a.exports, a, a.exports, n), a.l = !0, a.exports
  16. }
  17. return n.m = e, n.c = t, n.d = function(e, t, i) {
  18. n.o(e, t) || Object.defineProperty(e, t, {
  19. enumerable: !0,
  20. get: i
  21. })
  22. }, n.r = function(e) {
  23. "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {
  24. value: "Module"
  25. }), Object.defineProperty(e, "__esModule", {
  26. value: !0
  27. })
  28. }, n.t = function(e, t) {
  29. if (1 & t && (e = n(e)), 8 & t) return e;
  30. if (4 & t && "object" == typeof e && e && e.__esModule) return e;
  31. var i = Object.create(null);
  32. if (n.r(i), Object.defineProperty(i, "default", {
  33. enumerable: !0,
  34. value: e
  35. }), 2 & t && "string" != typeof e) for (var a in e) n.d(i, a, function(t) {
  36. return e[t]
  37. }.bind(null, a));
  38. return i
  39. }, n.n = function(e) {
  40. var t = e && e.__esModule ?
  41. function() {
  42. return e.
  43. default
  44. } : function() {
  45. return e
  46. };
  47. return n.d(t, "a", t), t
  48. }, n.o = function(e, t) {
  49. return Object.prototype.hasOwnProperty.call(e, t)
  50. }, n.p = "", n(n.s = 36)
  51. }([function(e, t, n) {
  52. "use strict";
  53. n.r(t);
  54. var i = n(9),
  55. a = n.n(i),
  56. r = n(10),
  57. o = n(3),
  58. s = n(2),
  59. c = 0,
  60. d = "free",
  61. u = [],
  62. l = [],
  63. p = 0;
  64. setInterval(function() {
  65. Object(o.getParameter)("UPLOAD_LOG") && f.info("console log upload")
  66. }, 9e5);
  67. var f = function() {
  68. var e, t, n, i, f, m, g = "https://".concat(Object(o.getParameter)("LOG_UPLOAD_SERVER"), "/upload/v1"),
  69. v = ["DEBUG", "INFO", "WARNING", "ERROR", "NONE"],
  70. S = 0,
  71. h = function e(t) {
  72. d = "uploading", setTimeout(function() {
  73. !
  74. function(e, t, n) {
  75. var i;
  76. Array.isArray(e) || (e = [e]), e = e.map(function(e) {
  77. return {
  78. log_item_id: c++,
  79. log_level: e.log_level,
  80. payload_str: e.payload
  81. }
  82. }), i = {
  83. sdk_version: o.VERSION,
  84. process_id: Object(s.a)(),
  85. payload: JSON.stringify(e)
  86. };
  87. try {
  88. Object(r.post)(g, i, function(e) {
  89. "OK" === e ? t && t(e) : n && n(e)
  90. }, function(e) {
  91. n && n(e)
  92. }, {
  93. withCredentials: !0
  94. })
  95. } catch (e) {
  96. n && n(e)
  97. }
  98. }(t, function() {
  99. p = 0, 0 !== u.length ? (l = u.length < 10 ? u.splice(0, u.length) : u.splice(0, 10), e(l)) : d = "free"
  100. }, function() {
  101. setTimeout(function() {
  102. e(l)
  103. }, p++ < 2 ? 200 : 1e4)
  104. })
  105. }, 3e3)
  106. };
  107. t = function() {
  108. for (var t = [0], n = 0; n < arguments.length; n++) t.push(arguments[n]);
  109. e.apply(this, t)
  110. }, n = function() {
  111. for (var t = [1], n = 0; n < arguments.length; n++) t.push(arguments[n]);
  112. e.apply(this, t)
  113. }, i = function() {
  114. for (var t = [2], n = 0; n < arguments.length; n++) t.push(arguments[n]);
  115. e.apply(this, t)
  116. }, f = function() {
  117. for (var t = [3], n = 0; n < arguments.length; n++) t.push(arguments[n]);
  118. e.apply(this, t)
  119. };
  120. var _ = {};
  121. return m = function(e) {
  122. _[e] || (i.apply(void 0, arguments), _[e] = !0)
  123. }, {
  124. DEBUG: 0,
  125. INFO: 1,
  126. WARNING: 2,
  127. ERROR: 3,
  128. NONE: 4,
  129. enableLogUpload: function() {
  130. Object(o.setParameter)("UPLOAD_LOG", !0)
  131. },
  132. disableLogUpload: function() {
  133. Object(o.setParameter)("UPLOAD_LOG", !1)
  134. },
  135. setProxyServer: function(e) {
  136. g = e ? "https://".concat(e, "/ls/?h=").concat(Object(o.getParameter)("LOG_UPLOAD_SERVER"), "&p=443&d=upload/v1") : "https://".concat(Object(o.getParameter)("LOG_UPLOAD_SERVER"), "/upload/v1")
  137. },
  138. setLogLevel: function(e) {
  139. e > 4 ? e = 4 : e < 0 && (e = 0), S = e
  140. },
  141. log: e = function() {
  142. var e, t = arguments[0],
  143. n = arguments;
  144. if (n[0] = (e = new Date).toTimeString().split(" ")[0] + ":" + e.getMilliseconds() + " Agora-SDK [" + (v[t] || "DEFAULT") + "]:", function(e, t) {
  145. if (Object(o.getParameter)("UPLOAD_LOG")) try {
  146. t = Array.prototype.slice.call(t);
  147. var n = "";
  148. t.forEach(function(e) {
  149. "object" === a()(e) && (e = JSON.stringify(e)), n = n + e + " "
  150. }), u.push({
  151. payload: n,
  152. log_level: e
  153. }), "free" === d && (l = u.length < 10 ? u.splice(0, u.length) : u.splice(0, 10), h(l))
  154. } catch (e) {}
  155. }(t, n), !(t < S)) switch (t) {
  156. case 0:
  157. case 1:
  158. console.log.apply(console, n);
  159. break;
  160. case 2:
  161. console.warn.apply(console, n);
  162. break;
  163. case 3:
  164. console.error.apply(console, n);
  165. break;
  166. default:
  167. return void console.log.apply(console, n)
  168. }
  169. },
  170. debug: t,
  171. info: n,
  172. warning: i,
  173. deprecate: m,
  174. error: f
  175. }
  176. }();
  177. t.
  178. default = f
  179. }, function(e, t, n) {
  180. "use strict";
  181. n.r(t), n.d(t, "checkValidObject", function() {
  182. return o
  183. }), n.d(t, "checkValidString", function() {
  184. return s
  185. }), n.d(t, "checkValidNumber", function() {
  186. return c
  187. }), n.d(t, "checkValidFloatNumber", function() {
  188. return d
  189. }), n.d(t, "checkValidBoolean", function() {
  190. return u
  191. }), n.d(t, "checkValidEnum", function() {
  192. return r
  193. }), n.d(t, "isValidString", function() {
  194. return l
  195. }), n.d(t, "isValidNumber", function() {
  196. return p
  197. }), n.d(t, "isValidBoolean", function() {
  198. return m
  199. }), n.d(t, "isASCII", function() {
  200. return S
  201. }), n.d(t, "isInteger", function() {
  202. return h
  203. }), n.d(t, "isNumber", function() {
  204. return _
  205. }), n.d(t, "isString", function() {
  206. return E
  207. }), n.d(t, "isArray", function() {
  208. return I
  209. }), n.d(t, "isEmpty", function() {
  210. return T
  211. }), n.d(t, "isValidToken", function() {
  212. return g
  213. }), n.d(t, "isValidChannelName", function() {
  214. return v
  215. });
  216. var i = n(9),
  217. a = n.n(i),
  218. r = function(e, t, n) {
  219. for (var i = 0; i < n.length; i++) if (e === n[i]) return !0;
  220. throw new Error("".concat(t, " can only be set as ").concat(JSON.stringify(n)))
  221. },
  222. o = function(e, t) {
  223. if (!e) throw new Error("Invalid param: ".concat(t || "param", " cannot be empty"));
  224. if ("object" !== a()(e)) throw new Error("".concat(t || "This paramter", " is of the object type"));
  225. return !0
  226. },
  227. s = function(e, t, n, i, a) {
  228. if (T(n) && (n = 1), i = i || 255, T(a) && (a = !0), T(e)) throw new Error("".concat(t || "param", " cannot be empty"));
  229. if (!l(e, n, i, a)) throw new Error("Invalid ".concat(t || "string param", ": Length of the string: [").concat(n, ",").concat(i, "].").concat(a ? " ASCII characters only." : ""))
  230. },
  231. c = function(e, t, n, i) {
  232. if (T(n) && (n = 1), i = i || 1e4, T(e)) throw new Error("".concat(t || "param", " cannot be empty"));
  233. if (!p(e, n, i)) throw new Error("Invalid ".concat(t || "number param", ": The value range is [").concat(n, ",").concat(i, "]. integer only"))
  234. },
  235. d = function(e, t, n, i) {
  236. if (null == e) throw new Error("".concat(t || "param", " cannot be null"));
  237. if (T(n) && (n = 0), i = i || 1e4, T(e)) throw new Error("".concat(t || "param", " cannot be empty"));
  238. if (!f(e, n, i)) throw new Error("Invalid ".concat(t || "number param", ": The value range is [").concat(n, ",").concat(i, "]."))
  239. },
  240. u = function(e, t) {
  241. if (T(e)) throw new Error("".concat(t || "param", " cannot be empty"));
  242. if (!m(e)) throw new Error("Invalid ".concat(t || "boolean param", ": The value is of the boolean type."))
  243. },
  244. l = function(e, t, n, i) {
  245. return t || (t = 0), n || (n = Number.MAX_SAFE_INTEGER), T(i) && (i = !0), E(e) && (!i || S(e)) && e.length >= t && e.length <= n
  246. },
  247. p = function(e, t, n) {
  248. return h(e) && e >= t && e <= n
  249. },
  250. f = function(e, t, n) {
  251. return _(e) && e >= t && e <= n
  252. },
  253. m = function(e) {
  254. return "boolean" == typeof e
  255. },
  256. g = function(e) {
  257. return l(e, 1, 2047)
  258. },
  259. v = function(e) {
  260. return E(e) && /^[a-zA-Z0-9 \!\#\$\%\&\(\)\+\-\:\;\<\=\.\>\?\@\[\]\^\_\{\}\|\~\,]{1,64}$/.test(e)
  261. },
  262. S = function(e) {
  263. if ("string" == typeof e) {
  264. for (var t = 0; t < e.length; t++) {
  265. var n = e.charCodeAt(t);
  266. if (n < 0 || n > 255) return !1
  267. }
  268. return !0
  269. }
  270. },
  271. h = function(e) {
  272. return "number" == typeof e && e % 1 == 0
  273. },
  274. _ = function(e) {
  275. return "number" == typeof e
  276. },
  277. E = function(e) {
  278. return "string" == typeof e
  279. },
  280. I = function(e) {
  281. return e instanceof Array
  282. },
  283. T = function(e) {
  284. return null == e
  285. }
  286. }, function(e, t, n) {
  287. "use strict";
  288. var i = n(14),
  289. a = n.n(i),
  290. r = n(6),
  291. o = n.n(r),
  292. s = n(3),
  293. c = n(0),
  294. d = n(10),
  295. u = n(16),
  296. l = n.n(u);
  297. n.d(t, "b", function() {
  298. return g
  299. }), n.d(t, "a", function() {
  300. return m
  301. });
  302. var p = {
  303. eventType: null,
  304. sid: null,
  305. lts: null,
  306. success: null,
  307. cname: null,
  308. uid: null,
  309. peer: null,
  310. cid: null,
  311. elapse: null,
  312. extend: null,
  313. vid: 0
  314. },
  315. f = null,
  316. m = function() {
  317. return f || (f = "process-" + l()(), c.
  318. default.info("processId: " + f)), f
  319. },
  320. g = function() {
  321. var e = {
  322. list: {}
  323. };
  324. e.url = Object(d.shouldUseHttps)() ? "https://".concat(Object(s.getParameter)("EVENT_REPORT_DOMAIN"), ":6443/events/message") : "http://".concat(Object(s.getParameter)("EVENT_REPORT_DOMAIN"), ":6080/events/message"), e.urlBackup = Object(d.shouldUseHttps)() ? "https://".concat(Object(s.getParameter)("EVENT_REPORT_BACKUP_DOMAIN"), ":6443/events/message") : "http://".concat(Object(s.getParameter)("EVENT_REPORT_BACKUP_DOMAIN"), ":6080/events/message"), e.setProxyServer = function(t) {
  325. t ? (e.url = Object(d.shouldUseHttps)() ? "https://".concat(t, "/rs/?h=").concat(Object(s.getParameter)("EVENT_REPORT_DOMAIN"), "&p=6443&d=events/message") : "http://".concat(t, "/rs/?h=").concat(Object(s.getParameter)("EVENT_REPORT_DOMAIN"), "&p=6080&d=events/message"), e.urlBackup = Object(d.shouldUseHttps)() ? "https://".concat(t, "/rs/?h=").concat(Object(s.getParameter)("EVENT_REPORT_BACKUP_DOMAIN"), "&p=6443&d=events/message") : "http://".concat(t, "/rs/?h=").concat(Object(s.getParameter)("EVENT_REPORT_BACKUP_DOMAIN"), "&p=6080&d=events/message"), c.
  326. default.debug("reportProxyServerURL: ".concat(e.url)), c.
  327. default.debug("reportProxyServerBackupURL: ".concat(e.urlBackup))) : (e.url = Object(d.shouldUseHttps)() ? "https://".concat(Object(s.getParameter)("EVENT_REPORT_DOMAIN"), ":6443/events/message") : "http://".concat(Object(s.getParameter)("EVENT_REPORT_DOMAIN"), ":6080/events/message"), e.urlBackup = Object(d.shouldUseHttps)() ? "https://".concat(Object(s.getParameter)("EVENT_REPORT_BACKUP_DOMAIN"), ":6443/events/message") : "http://".concat(Object(s.getParameter)("EVENT_REPORT_BACKUP_DOMAIN"), ":6080/events/message"))
  328. }, e.sessionInit = function(t, n) {
  329. var i = o()({}, p);
  330. i.startTime = +new Date, i.sid = t, i.cname = n.cname, e.list[t] = i;
  331. var a = o()({}, {
  332. willUploadConsoleLog: Object(s.getParameter)("UPLOAD_LOG")
  333. }, n.extend),
  334. r = o()({}, i);
  335. r.eventType = "session_init", r.appid = n.appid, r.browser = navigator.userAgent, r.build = s.BUILD, r.lts = +new Date, r.elapse = r.lts - r.startTime, r.extend = JSON.stringify(a), r.mode = n.mode, r.process = m(), r.success = n.succ, r.version = s.VERSION, delete r.startTime, e.send({
  336. type: "io.agora.pb.Wrtc.Session",
  337. data: r
  338. }), e._flushInvokeReport(t)
  339. }, e.joinChooseServer = function(t, n, i) {
  340. if (e.list[t]) {
  341. n.uid && (e.list[t].uid = parseInt(n.uid)), n.cid && (e.list[t].cid = parseInt(n.cid));
  342. var a = o()({}, e.list[t]);
  343. a.eventType = "join_choose_server";
  344. var r = n.lts;
  345. a.lts = Date.now(), a.eventElapse = a.lts - r, a.chooseServerAddr = n.csAddr, a.errorCode = n.ec, a.elapse = a.lts - a.startTime, a.success = n.succ, a.chooseServerAddrList = JSON.stringify(n.serverList), delete a.startTime, e.send({
  346. type: "io.agora.pb.Wrtc.JoinChooseServer",
  347. data: a
  348. })
  349. }
  350. }, e.reqUserAccount = function(t, n) {
  351. n.vid && (e.list[t].vid = n.vid);
  352. var i = o()({}, e.list[t]),
  353. a = n.lts;
  354. i.eventType = "req_user_account", i.lts = Date.now(), i.success = n.success, i.serverAddress = n.serverAddress, i.stringUid = n.stringUid, i.uid = n.uid, i.errorCode = n.errorCode, i.elapse = i.lts - i.startTime, i.eventElapse = i.lts - a, i.extend = "string" == typeof n.extend ? n.extend : JSON.stringify(n.extend), delete i.startTime, e.send({
  355. type: "io.agora.pb.Wrtc.ReqUserAccount",
  356. data: i
  357. })
  358. }, e.joinGateway = function(t, n) {
  359. n.vid && (e.list[t].vid = n.vid);
  360. var i = o()({}, e.list[t]),
  361. a = n.lts;
  362. i.eventType = "join_gateway", i.lts = Date.now(), i.gatewayAddr = n.addr, i.success = n.succ, i.errorCode = n.ec, i.elapse = i.lts - i.startTime, i.eventElapse = i.lts - a, delete i.startTime, e.send({
  363. type: "io.agora.pb.Wrtc.JoinGateway",
  364. data: i
  365. })
  366. }, e.publish = function(t, n) {
  367. var i = o()({}, e.list[t]);
  368. i.eventType = "publish";
  369. var a = n.lts;
  370. i.lts = Date.now(), i.eventElapse = i.lts - a, i.elapse = i.lts - i.startTime, i.success = n.succ, i.errorCode = n.ec, n.videoName && (i.videoName = n.videoName), n.audioName && (i.audioName = n.audioName), n.screenName && (i.screenName = n.screenName), delete i.startTime, e.send({
  371. type: "io.agora.pb.Wrtc.Publish",
  372. data: i
  373. }), e._flushInvokeReport(t)
  374. }, e.subscribe = function(t, n) {
  375. var i = o()({}, e.list[t]);
  376. i.eventType = "subscribe";
  377. var a = n.lts;
  378. i.lts = Date.now(), i.eventElapse = i.lts - a, i.elapse = i.lts - i.startTime, i.errorCode = n.ec, i.success = n.succ, isFinite(n.peerid) ? i.peer = n.peerid : i.peerSuid = "" + n.peerid, "boolean" == typeof n.video && (i.video = n.video), "boolean" == typeof n.audio && (i.audio = n.audio), delete i.startTime, e.send({
  379. type: "io.agora.pb.Wrtc.Subscribe",
  380. data: i
  381. }), e._flushInvokeReport(t)
  382. }, e.firstRemoteFrame = function(t, n) {
  383. var i = o()({}, e.list[t]);
  384. i.eventType = "first_remote_frame";
  385. var a = n.lts;
  386. i.lts = Date.now(), i.eventElapse = i.lts - a, i.elapse = i.lts - i.startTime, i.width = n.width, i.height = n.height, i.success = n.succ, i.errorCode = n.ec, isFinite(n.peerid) ? i.peer = n.peerid : i.peerSuid = "" + n.peerid, delete i.startTime, e.send({
  387. type: "io.agora.pb.Wrtc.FirstFrame",
  388. data: i
  389. })
  390. }, e.streamSwitch = function(t, n) {
  391. var i = o()({}, e.list[t]);
  392. i.eventType = "stream_switch", i.lts = Date.now(), i.isDual = n.isdual, i.elapse = i.lts - i.startTime, i.success = i.succ, delete i.startTime, e.send({
  393. type: "io.agora.pb.Wrtc.StreamSwitch",
  394. data: i
  395. })
  396. }, e.audioSendingStopped = function(t, n) {
  397. var i = o()({}, e.list[t]);
  398. i.eventType = "audio_sending_stopped", i.lts = Date.now(), i.elapse = i.lts - i.startTime, i.reason = n.reason, i.success = n.succ, delete i.startTime, e.send({
  399. type: "io.agora.pb.Wrtc.AudioSendingStopped",
  400. data: i
  401. })
  402. }, e.videoSendingStopped = function(t, n) {
  403. var i = o()({}, e.list[t]);
  404. i.eventType = "video_sending_stopped", i.lts = Date.now(), i.elapse = i.lts - i.startTime, i.reson = n.reason, i.success = n.succ, delete i.startTime, e.send({
  405. type: "io.agora.pb.Wrtc.VideoSendingStopped",
  406. data: i
  407. })
  408. }, e.requestProxyAppCenter = function(t, n) {
  409. var i = o()({}, e.list[t]),
  410. a = n.lts;
  411. i.eventType = "request_proxy_appcenter", i.lts = Date.now(), i.eventElapse = i.lts - a, i.elapse = i.lts - i.startTime, i.extend = n.extend + "", i.APAddr = n.APAddr, i.workerManagerList = n.workerManagerList, i.response = n.response, i.errorCode = n.ec, i.success = n.succ, delete i.startTime, e.send({
  412. type: "io.agora.pb.Wrtc.RequestProxyAppCenter",
  413. data: i
  414. })
  415. }, e.requestProxyWorkerManager = function(t, n) {
  416. var i = o()({}, e.list[t]),
  417. a = n.lts;
  418. i.eventType = "request_proxy_worker_manager", i.lts = Date.now(), i.eventElapse = i.lts - a, i.elapse = i.lts - i.startTime, i.extend = n.extend, i.workerManagerAddr = n.workerManagerAddr, i.response = n.response, i.errorCode = n.ec, i.success = n.succ, delete i.startTime, e.send({
  419. type: "io.agora.pb.Wrtc.RequestProxyWorkerManager",
  420. data: i
  421. })
  422. };
  423. var t = 0;
  424. return e.reportApiInvoke = function(e, n) {
  425. var i = n.tag,
  426. r = n.name,
  427. o = n.getStates,
  428. d = n.options,
  429. u = n.timeout,
  430. l = void 0 === u ? 6e4 : u,
  431. p = n.callback,
  432. f = n.reportResult,
  433. m = void 0 === f || f,
  434. v = Date.now(),
  435. S = 0,
  436. h = t++,
  437. _ = function() {
  438. return a()({
  439. tag: i,
  440. invokeId: h,
  441. sid: e,
  442. name: r,
  443. apiInvokeTime: v,
  444. options: d
  445. }, o && {
  446. states: (t = o(), Object.keys(t).reduce(function(e, n) {
  447. var i = e;
  448. return null != t[n] && (i[n] = t[n]), i
  449. }, {}))
  450. });
  451. var t
  452. },
  453. E = !! Object(s.getParameter)("SHOW_REPORT_INVOKER_LOG");
  454. E && c.
  455. default.info("".concat(r, " start"));
  456. var I = setTimeout(function() {
  457. g._sendApiInvoke(a()({}, _(), {
  458. error: "API_INVOKE_TIMEOUT",
  459. success: !1
  460. }))
  461. }, l);
  462. return function(e, t) {
  463. if (clearTimeout(I), ++S > 1 && (e = "EXECUTOR_INVOKE_".concat(S)), e) return g._sendApiInvoke(a()({}, _(), {
  464. success: !1,
  465. error: e
  466. }, o && {
  467. states: o()
  468. })), E && c.
  469. default.info("".concat(r, " onFailure"), e), p && p(e);
  470. g._sendApiInvoke(a()({}, _(), {
  471. success: !0
  472. }, m && {
  473. result: t
  474. }, o && {
  475. states: o()
  476. })), E && c.
  477. default.info("".concat(r, " onSuccess")), p && p(null, t)
  478. }
  479. }, e._cachedItems = [], e._cacheInvokeReport = function(t) {
  480. t.lts || (t.lts = Date.now()), e._cachedItems.push(t), e._cachedItems.length > 50 && e._cachedItems.shift()
  481. }, e._flushInvokeReport = function(t) {
  482. if (e._cachedItems.length) {
  483. var n = e._cachedItems;
  484. e._cachedItems = [], c.
  485. default.debug("Flush cached event reporting:", n.length), n.forEach(function(n, i) {
  486. n.sid = t, setTimeout(function() {
  487. e._sendApiInvoke(n)
  488. }, 5e3 + 500 * i)
  489. })
  490. }
  491. }, e._sendApiInvoke = function(t) {
  492. var n = t.tag,
  493. i = t.invokeId,
  494. r = t.sid,
  495. o = t.name,
  496. c = t.result,
  497. d = t.states,
  498. u = t.options,
  499. l = t.error,
  500. p = t.success,
  501. f = t.apiInvokeTime,
  502. m = t.lts,
  503. g = Object(s.getParameter)("NOT_REPORT_EVENT");
  504. if (!(n && g instanceof Array && -1 !== g.indexOf(n))) if (e.list[r]) {
  505. var v = e.list[r],
  506. S = v.startTime,
  507. h = v.cname,
  508. _ = v.uid,
  509. E = v.cid,
  510. I = (m = m || Date.now()) - S,
  511. T = m - f,
  512. y = "";
  513. if (u) try {
  514. y = JSON.stringify(u)
  515. } catch (e) {
  516. y = u.toString()
  517. }
  518. var b = a()({
  519. invokeId: i,
  520. sid: r,
  521. cname: h,
  522. cid: E,
  523. lts: m,
  524. uid: _,
  525. success: p,
  526. elapse: I,
  527. apiName: o,
  528. execElapse: T
  529. }, void 0 !== u && {
  530. options: y
  531. }, void 0 !== d && {
  532. execStates: JSON.stringify(d)
  533. }, void 0 !== l && {
  534. errorCode: JSON.stringify(l)
  535. }, void 0 !== c && {
  536. execResult: JSON.stringify(c)
  537. });
  538. e.send({
  539. type: "io.agora.pb.Wrtc.ApiInvoke",
  540. data: b
  541. })
  542. } else e._cacheInvokeReport(arguments[0])
  543. }, e._send = function(t) {
  544. try {
  545. var n = [];
  546. t && t.data && t.data.apiName ? n.push(["apiName", "" + t.data.apiName]) : t && t.data && t.data.eventType && n.push(["eventType", t.data.eventType]);
  547. var i = n.map(function(e) {
  548. return "".concat(e[0], "=").concat(encodeURIComponent(e[1]))
  549. }).join("&"),
  550. a = -1 === e.url.indexOf("?") ? "".concat(e.url, "?").concat(i) : e.url;
  551. Object(d.post)(a, t, null, function(n) {
  552. var a = -1 === e.urlBackup.indexOf("?") ? "".concat(e.urlBackup, "?").concat(i) : e.urlBackup;
  553. Object(d.post)(a, t, null, function(e) {}, {
  554. timeout: 1e4
  555. })
  556. }, {
  557. timeout: 1e4
  558. })
  559. } catch (e) {}
  560. }, e.sendCache = [], e.sendTimer = null, e.send = function(t) {
  561. if (e.sendCache.push(t), null === e.sendTimer) {
  562. return function t() {
  563. e.sendTimer = setTimeout(function() {
  564. if (0 !== e.sendCache.length) return e._send(e.sendCache.shift()), t();
  565. e.sendTimer = null
  566. }, Object(s.getParameter)("EVENT_REPORT_SEND_INTERVAL"))
  567. }()
  568. }
  569. }, e
  570. }()
  571. }, function(e, t, n) {
  572. "use strict";
  573. Object.defineProperty(t, "__esModule", {
  574. value: !0
  575. });
  576. t.BUILD = "v3.0.1-0-g1c6a636";
  577. t.VERSION = "3.0.0";
  578. t.SUPPORT_RESOLUTION_LIST = {
  579. "90p_1": [160, 90, null, null, null, null],
  580. "120p_1": [160, 120, 15, 15, 30, 65],
  581. "120p_3": [120, 120, 15, 15, 30, 50],
  582. "120p_4": [212, 120, null, null, null, null],
  583. "180p_1": [320, 180, 15, 15, 30, 140],
  584. "180p_3": [180, 180, 15, 15, 30, 100],
  585. "180p_4": [240, 180, 15, 15, 30, 120],
  586. "240p_1": [320, 240, 15, 15, 40, 200],
  587. "240p_3": [240, 240, 15, 15, 40, 140],
  588. "240p_4": [424, 240, 15, 15, 40, 220],
  589. "360p_1": [640, 360, 15, 15, 80, 400],
  590. "360p_3": [360, 360, 15, 15, 80, 260],
  591. "360p_4": [640, 360, 30, 30, 80, 600],
  592. "360p_6": [360, 360, 30, 30, 80, 400],
  593. "360p_7": [480, 360, 15, 15, 80, 320],
  594. "360p_8": [480, 360, 30, 30, 80, 490],
  595. "360p_9": [640, 360, 15, 15, 80, 800],
  596. "360p_10": [640, 360, 24, 24, 80, 800],
  597. "360p_11": [640, 360, 24, 24, 80, 1e3],
  598. "480p_1": [640, 480, 15, 15, 100, 500, 1, 5],
  599. "480p_2": [640, 480, 30, 30, 100, 1e3, 25, 30],
  600. "480p_3": [480, 480, 15, 15, 100, 400],
  601. "480p_4": [640, 480, 30, 30, 100, 750],
  602. "480p_6": [480, 480, 30, 30, 100, 600],
  603. "480p_8": [848, 480, 15, 15, 100, 610],
  604. "480p_9": [848, 480, 30, 30, 100, 930],
  605. "480p_10": [640, 480, 10, 10, 100, 400],
  606. "720p_1": [1280, 720, 15, 15, 120, 1130, 1, 5],
  607. "720p_2": [1280, 720, 30, 30, 120, 2e3, 25, 30],
  608. "720p_3": [1280, 720, 30, 30, 120, 1710],
  609. "720p_5": [960, 720, 15, 15, 120, 910],
  610. "720p_6": [960, 720, 30, 30, 120, 1380],
  611. "1080p_1": [1920, 1080, 15, 15, 120, 2080, 1, 5],
  612. "1080p_2": [1920, 1080, 30, 30, 120, 3e3, 25, 30],
  613. "1080p_3": [1920, 1080, 30, 30, 120, 3150],
  614. "1080p_5": [1920, 1080, 60, 60, 120, 4780],
  615. "1440p_1": [2560, 1440, 30, 30, 120, 4850],
  616. "1440p_2": [2560, 1440, 60, 60, 120, 7350],
  617. "4k_1": [3840, 2160, 30, 30, 120, 8910],
  618. "4k_3": [3840, 2160, 60, 60, 120, 13500]
  619. };
  620. t.AUDIO_PROFILE_SETTINGS = {
  621. speech_low_quality: [!1, !1, !0, !0],
  622. speech_standard: [!1, !1, !0, !1],
  623. music_standard: [!1, !1, !1, !1],
  624. standard_stereo: [!1, !0, !1, !1],
  625. high_quality: [!0, !1, !1, !1],
  626. high_quality_stereo: [!0, !0, !1, !1],
  627. default:
  628. [!1, !1, !1, !1]
  629. };
  630. var i = {
  631. WEBCS_DOMAIN: ["webrtc2-ap-web-1.agora.io", "webrtc2-ap-web-2.agoraio.cn"],
  632. WEBCS_DOMAIN_BACKUP_LIST: ["webrtc2-ap-web-3.agora.io", "webrtc2-ap-web-4.agoraio.cn"],
  633. PROXY_CS: ["ap-proxy-1.agora.io", "ap-proxy-2.agora.io"],
  634. CDS_AP: ["cds-ap-web-1.agora.io", "cds-ap-web-2.agoraio.cn", "cds-ap-web-3.agora.io", "cds-ap-web-4.agoraio.cn"],
  635. ACCOUNT_REGISTER: ["sua-ap-web-1.agora.io", "sua-ap-web-2.agoraio.cn", "sua-ap-web-3.agora.io", "sua-ap-web-4.agoraio.cn"],
  636. UAP_AP: ["uap-ap-web-1.agora.io", "uap-ap-web-2.agoraio.cn", "uap-ap-web-3.agora.io", "uap-ap-web-4.agoraio.cn"],
  637. ACCOUNT_REGISTER_RETRY_TIMEOUT: 1,
  638. ACCOUNT_REGISTER_RETRY_RATIO: 2,
  639. ACCOUNT_REGISTER_RETRY_TIMEOUT_MAX: 6e4,
  640. ACCOUNT_REGISTER_RETRY_COUNT_MAX: 1e5,
  641. AUDIO_CONTEXT: null,
  642. LOG_UPLOAD_SERVER: "logservice.agora.io",
  643. EVENT_REPORT_DOMAIN: "webcollector-1.agora.io",
  644. EVENT_REPORT_BACKUP_DOMAIN: "webcollector-2.agoraio.cn",
  645. WEBCS_BACKUP_CONNECT_TIMEOUT: 6e3,
  646. LIVESTREAMING_ALIGN: !0,
  647. HTTP_CONNECT_TIMEOUT: 5e3,
  648. PLAYER_STATE_DEFER: 2e3,
  649. SIGNAL_REQUEST_TIMEOUT: 1e4,
  650. SIGNAL_REQUEST_WATCH_INTERVAL: 1e3,
  651. REPORT_STATS: !0,
  652. REPORT_STATS_TIMEOUT: 3e3,
  653. UPLOAD_LOG: !1,
  654. NOT_REPORT_EVENT: [],
  655. FILEPATH_LENMAX: 255,
  656. SUBSCRIBE_TCC: !1,
  657. PING_PONG_TIME_OUT: 10,
  658. DUALSTREAM_OPERATION_CHECK: !0,
  659. WEBSOCKET_TIMEOUT_MIN: 1e4,
  660. EVENT_REPORT_SEND_INTERVAL: 1e3,
  661. MEDIA_ELEMENT_EXISTS_DEPTH: 3,
  662. CANDIDATE_TIMEOUT: 2e3,
  663. SHIM_CANDIDATE: !1,
  664. LEAVE_MSG_TIMEOUT: 2e3,
  665. TICKET_RENEW_TIMEOUT: 828e5,
  666. SHOW_REPORT_INVOKER_LOG: !1,
  667. STATS_FILTER: {
  668. transportId: !0,
  669. googTrackId: !0
  670. },
  671. FORCE_TURN: !1,
  672. TURN_ENABLE_TCP: !0,
  673. TURN_ENABLE_UDP: !0,
  674. FORCE_CHANGED_GATEWAY_FLAG: !1,
  675. JOIN_EXTEND: "",
  676. PUB_EXTEND: "",
  677. SUB_EXTEND: "",
  678. CHROME_NEW_STATS: !1,
  679. AP_BACKOFF_MAX_TIME: 8
  680. };
  681. t.setParameter = function(e, t) {
  682. return void 0 !== i[e] && (i[e] = t, !0)
  683. };
  684. t.getParameter = function(e) {
  685. return void 0 !== i[e] ? i[e] : null
  686. }
  687. }, function(e, t, n) {
  688. "use strict";
  689. n.r(t), n.d(t, "APErrorCode", function() {
  690. return i
  691. }), n.d(t, "GatewayErrorCode", function() {
  692. return a
  693. }), n.d(t, "StringUidErrorCode", function() {
  694. return r
  695. }), n.d(t, "JOIN_GS_TRYNEXT_LIST", function() {
  696. return o
  697. }), n.d(t, "JOIN_CS_RETRY_LIST", function() {
  698. return s
  699. }), n.d(t, "INJECT_STREAM_STATUS", function() {
  700. return c
  701. });
  702. var i = {
  703. 101100: "NO_FLAG_SET",
  704. 101101: "FLAG_SET_BUT_EMPTY",
  705. 101102: "INVALID_FALG_SET",
  706. 101203: "NO_SERVICE_AVIABLE",
  707. 0: "OK_CODE",
  708. 5: "INVALID_VENDOR_KEY",
  709. 7: "INVALID_CHANNEL_NAME",
  710. 8: "INTERNAL_ERROR",
  711. 9: "NO_AUTHORIZED",
  712. 10: "DYNAMIC_KEY_TIMEOUT",
  713. 11: "NO_ACTIVE_STATUS",
  714. 13: "DYNAMIC_KEY_EXPIRED",
  715. 14: "STATIC_USE_DYANMIC_KEY",
  716. 15: "DYNAMIC_USE_STATIC_KEY",
  717. 1010100: "NO_FLAG_SET",
  718. 1010101: "FLAG_SET_BUT_EMPTY",
  719. 1010102: "INVALID_FALG_SET",
  720. 1010200: "NO_SERVICE_AVAILABLE",
  721. 1010203: "NO_SERVICE_AVAILABLE_WEBRTC",
  722. 1010205: "NO_SERVICE_AVAILABLE_DISPATCHER",
  723. 1010208: "NO_SERVICE_AVAILABLE_APPCENTER",
  724. 1010211: "NO_SERVICE_AVAILABLE_SUA",
  725. 2010005: "INVALID_VENDOR_KEY",
  726. 2010007: "INVALID_CHANNEL_NAME",
  727. 2010008: "INTERNAL_ERROR",
  728. 2010009: "NO_AUTHORIZED",
  729. 2010010: "DYNAMIC_KEY_TIMEOUT",
  730. 2010011: "NO_ACTIVE_STATUS",
  731. 2010013: "DYNAMIC_KEY_EXPIRED",
  732. 2010014: "STATIC_USE_DYANMIC_KEY",
  733. 2010015: "DYNAMIC_USE_STATIC_KEY"
  734. },
  735. a = {
  736. 2000: "ERR_NO_VOCS_AVAILABLE",
  737. 2001: "ERR_NO_VOS_AVAILABLE",
  738. 2002: "ERR_JOIN_CHANNEL_TIMEOUT",
  739. 2003: "WARN_REPEAT_JOIN",
  740. 2004: "ERR_JOIN_BY_MULTI_IP",
  741. 2011: "ERR_NOT_JOINED",
  742. 2012: "WARN_REPEAT_JOIN",
  743. 2013: "ERR_INVALID_VENDOR_KEY",
  744. 2014: "ERR_INVALID_CHANNEL_NAME",
  745. 2015: "ERR_INVALID_STRINGUID",
  746. 2016: "ERR_TOO_MANY_USERS",
  747. 2017: "ERR_SET_CLIENT_ROLE_TIMEOUT",
  748. 2018: "ERR_SET_CLIENT_ROLE_NO_PERMISSION",
  749. 2019: "ERR_SET_CLIENT_ROLE_ALREADY_IN_USE",
  750. 2020: "ERR_PUBLISH_REQUEST_INVALID",
  751. 2021: "ERR_SUBSCRIBE_REQUEST_INVALID",
  752. 2022: "ERR_NOT_SUPPORTED_MESSAGE",
  753. 2023: "ERR_ILLEAGAL_PLUGIN",
  754. 101: "ERR_INVALID_VENDOR_KEY",
  755. 102: "ERR_INVALID_CHANNEL_NAME",
  756. 103: "WARN_NO_AVAILABLE_CHANNEL",
  757. 104: "WARN_LOOKUP_CHANNEL_TIMEOUT",
  758. 105: "WARN_LOOKUP_CHANNEL_REJECTED",
  759. 106: "WARN_OPEN_CHANNEL_TIMEOUT",
  760. 107: "WARN_OPEN_CHANNEL_REJECTED",
  761. 108: "WARN_REQUEST_DEFERRED",
  762. 109: "ERR_DYNAMIC_KEY_TIMEOUT",
  763. 110: "ERR_NO_AUTHORIZED",
  764. 111: "ERR_VOM_SERVICE_UNAVAILABLE",
  765. 112: "ERR_NO_CHANNEL_AVAILABLE_CODE",
  766. 113: "ERR_TOO_MANY_USERS",
  767. 114: "ERR_MASTER_VOCS_UNAVAILABLE",
  768. 115: "ERR_INTERNAL_ERROR",
  769. 116: "ERR_NO_ACTIVE_STATUS",
  770. 117: "ERR_INVALID_UID",
  771. 118: "ERR_DYNAMIC_KEY_EXPIRED",
  772. 119: "ERR_STATIC_USE_DYANMIC_KE",
  773. 120: "ERR_DYNAMIC_USE_STATIC_KE",
  774. 2: "K_TIMESTAMP_EXPIRED",
  775. 3: "K_CHANNEL_PERMISSION_INVALID",
  776. 4: "K_CERTIFICATE_INVALID",
  777. 5: "K_CHANNEL_NAME_EMPTY",
  778. 6: "K_CHANNEL_NOT_FOUND",
  779. 7: "K_TICKET_INVALID",
  780. 8: "K_CHANNEL_CONFLICTED",
  781. 9: "K_SERVICE_NOT_READY",
  782. 10: "K_SERVICE_TOO_HEAVY",
  783. 14: "K_UID_BANNED",
  784. 15: "K_IP_BANNED",
  785. 16: "K_CHANNEL_BANNED"
  786. },
  787. r = {
  788. 1: "ERROR_ILLEAGAL_APPID",
  789. 2: "ERROR_ILLEAGAL_UID",
  790. 3: "INTERNAL_SERVER_ERROR"
  791. },
  792. o = ["ERR_NO_VOCS_AVAILABLE", "ERR_NO_VOS_AVAILABLE", "ERR_JOIN_CHANNEL_TIMEOUT", "WARN_LOOKUP_CHANNEL_TIMEOUT", "WARN_OPEN_CHANNEL_TIMEOUT", "ERR_VOM_SERVICE_UNAVAILABLE", "ERR_TOO_MANY_USERS", "ERR_MASTER_VOCS_UNAVAILABLE", "ERR_INTERNAL_ERROR"],
  793. s = ["NO_FLAG_SET", "NO_SERVICE_AVIABLE", "FLAG_SET_BUT_EMPTY", "EMPTY_ADDRESS_RESPONSE"],
  794. c = {
  795. INJECT_STREAM_STATUS_START_SUCCESS: 0,
  796. INJECT_STREAM_STATUS_START_ALREADY_EXISTS: 1,
  797. INJECT_STREAM_STATUS_START_UNAUTHORIZED: 2,
  798. INJECT_STREAM_STATUS_START_TIMEDOUT: 3,
  799. INJECT_STREAM_STATUS_START_FAILED: 4,
  800. INJECT_STREAM_STATUS_STOP_SUCCESS: 5,
  801. INJECT_STREAM_STATUS_STOP_NOT_FOUND: 6,
  802. INJECT_STREAM_STATUS_STOP_UNAUTHORIZED: 7,
  803. INJECT_STREAM_STATUS_STOP_TIMEDOUT: 8,
  804. INJECT_STREAM_STATUS_STOP_FAILED: 9,
  805. INJECT_STREAM_STATUS_BROKEN: 10
  806. };
  807. t.
  808. default = {
  809. FAILED: "FAILED",
  810. INVALID_KEY: "INVALID_KEY",
  811. INVALID_CLIENT_MODE: "INVALID_CLIENT_MODE",
  812. INVALID_CLIENT_CODEC: "INVALID_CLIENT_CODEC",
  813. CLIENT_MODE_CODEC_MISMATCH: "CLIENT_MODE_CODEC_MISMATCH",
  814. WEB_API_NOT_SUPPORTED: "WEB_API_NOT_SUPPORTED",
  815. INVALID_PARAMETER: "INVALID_PARAMETER",
  816. NO_TRACK_IN_STREAM: "NO_TRACK_IN_STREAM",
  817. INVALID_OPERATION: "INVALID_OPERATION",
  818. INVALID_LOCAL_STREAM: "INVALID_LOCAL_STREAM",
  819. INVALID_REMOTE_STREAM: "INVALID_REMOTE_STREAM",
  820. INVALID_DYNAMIC_KEY: "INVALID_DYNAMIC_KEY",
  821. DYNAMIC_KEY_TIMEOUT: "DYNAMIC_KEY_TIMEOUT",
  822. NO_VOCS_AVAILABLE: "NO_VOCS_AVAILABLE",
  823. NO_VOS_AVAILABLE: "ERR_NO_VOS_AVAILABLE",
  824. JOIN_CHANNEL_TIMEOUT: "ERR_JOIN_CHANNEL_TIMEOUT",
  825. NO_AVAILABLE_CHANNEL: "NO_AVAILABLE_CHANNEL",
  826. LOOKUP_CHANNEL_TIMEOUT: "LOOKUP_CHANNEL_TIMEOUT",
  827. LOOKUP_CHANNEL_REJECTED: "LOOKUP_CHANNEL_REJECTED",
  828. OPEN_CHANNEL_TIMEOUT: "OPEN_CHANNEL_TIMEOUT",
  829. OPEN_CHANNEL_REJECTED: "OPEN_CHANNEL_REJECTED",
  830. REQUEST_DEFERRED: "REQUEST_DEFERRED",
  831. STREAM_ALREADY_PUBLISHED: "STREAM_ALREADY_PUBLISHED",
  832. STREAM_NOT_YET_PUBLISHED: "STREAM_NOT_YET_PUBLISHED",
  833. JOIN_TOO_FREQUENT: "JOIN_TOO_FREQUENT",
  834. SOCKET_ERROR: "SOCKET_ERROR",
  835. SOCKET_DISCONNECTED: "SOCKET_DISCONNECTED",
  836. PEERCONNECTION_FAILED: "PEERCONNECTION_FAILED",
  837. CONNECT_GATEWAY_ERROR: "CONNECT_GATEWAY_ERROR",
  838. SERVICE_NOT_AVAILABLE: "SERVICE_NOT_AVAILABLE",
  839. JOIN_CHANNEL_FAILED: "JOIN_CHANNEL_FAILED",
  840. PUBLISH_STREAM_FAILED: "PUBLISH_STREAM_FAILED",
  841. UNPUBLISH_STREAM_FAILED: "UNPUBLISH_STREAM_FAILED",
  842. SUBSCRIBE_STREAM_FAILED: "SUBSCRIBE_STREAM_FAILED",
  843. UNSUBSCRIBE_STREAM_FAILED: "UNSUBSCRIBE_STREAM_FAILED",
  844. NO_SUCH_REMOTE_STREAM: "NO_SUCH_REMOTE_STREAM",
  845. ERR_FAILED: "1",
  846. ERR_INVALID_VENDOR_KEY: "101",
  847. ERR_INVALID_CHANNEL_NAME: "102",
  848. WARN_NO_AVAILABLE_CHANNEL: "103",
  849. WARN_LOOKUP_CHANNEL_TIMEOUT: "104",
  850. WARN_LOOKUP_CHANNEL_REJECTED: "105",
  851. WARN_OPEN_CHANNEL_TIMEOUT: "106",
  852. WARN_OPEN_CHANNEL_REJECTED: "107",
  853. WARN_REQUEST_DEFERRED: "108",
  854. ERR_DYNAMIC_KEY_TIMEOUT: "109",
  855. ERR_INVALID_DYNAMIC_KEY: "110",
  856. ERR_NO_VOCS_AVAILABLE: "2000",
  857. ERR_NO_VOS_AVAILABLE: "2001",
  858. ERR_JOIN_CHANNEL_TIMEOUT: "2002",
  859. IOS_NOT_SUPPORT: "IOS_NOT_SUPPORT",
  860. WECHAT_NOT_SUPPORT: "WECHAT_NOT_SUPPORT",
  861. SHARING_SCREEN_NOT_SUPPORT: "SHARING_SCREEN_NOT_SUPPORT",
  862. STILL_ON_PUBLISHING: "STILL_ON_PUBLISHING",
  863. LOW_STREAM_ALREADY_PUBLISHED: "LOW_STREAM_ALREADY_PUBLISHED",
  864. LOW_STREAM_NOT_YET_PUBLISHED: "LOW_STREAM_ALREADY_PUBLISHED",
  865. HIGH_STREAM_NOT_VIDEO_TRACE: "HIGH_STREAM_NOT_VIDEO_TRACE",
  866. NOT_FIND_DEVICE_BY_LABEL: "NOT_FIND_DEVICE_BY_LABEL",
  867. ENABLE_DUALSTREAM_FAILED: "ENABLE_DUALSTREAM_FAILED",
  868. DISABLE_DUALSTREAM_FAILED: "DISABLE_DUALSTREAM_FAILED",
  869. PLAYER_NOT_FOUND: "PLAYER_NOT_FOUND",
  870. ELECTRON_NOT_SUPPORT_SHARING_SCREEN: "ELECTRON_NOT_SUPPORT_SHARING_SCREEN",
  871. BAD_ENVIRONMENT: "BAD_ENVIRONMENT",
  872. LOAD_AUDIO_FAILED: "LOAD_AUDIO_FAILED"
  873. }
  874. }, function(e, t, n) {
  875. "use strict";
  876. n.r(t), n.d(t, "getBrowserInfo", function() {
  877. return h
  878. }), n.d(t, "getBrowserVersion", function() {
  879. return p
  880. }), n.d(t, "getBrowserOS", function() {
  881. return f
  882. }), n.d(t, "isChrome", function() {
  883. return i
  884. }), n.d(t, "isSafari", function() {
  885. return a
  886. }), n.d(t, "isFireFox", function() {
  887. return o
  888. }), n.d(t, "isOpera", function() {
  889. return s
  890. }), n.d(t, "isEdge", function() {
  891. return r
  892. }), n.d(t, "isQQBrowser", function() {
  893. return c
  894. }), n.d(t, "isWeChatBrowser", function() {
  895. return d
  896. }), n.d(t, "isLegacyChrome", function() {
  897. return g
  898. }), n.d(t, "isSupportedPC", function() {
  899. return u
  900. }), n.d(t, "isSupportedMobile", function() {
  901. return l
  902. }), n.d(t, "getChromeKernelVersion", function() {
  903. return S
  904. }), n.d(t, "isChromeKernel", function() {
  905. return m
  906. });
  907. var i = function() {
  908. var e = h();
  909. return e.name && "Chrome" === e.name
  910. },
  911. a = function() {
  912. var e = h();
  913. return e.name && "Safari" === e.name
  914. },
  915. r = function() {
  916. var e = h();
  917. return e.name && "Edge" === e.name
  918. },
  919. o = function() {
  920. var e = h();
  921. return e.name && "Firefox" === e.name
  922. },
  923. s = function() {
  924. var e = h();
  925. return e.name && "OPR" === e.name
  926. },
  927. c = function() {
  928. var e = h();
  929. return e.name && "QQBrowser" === e.name
  930. },
  931. d = function() {
  932. var e = h();
  933. return e.name && "MicroMessenger" === e.name
  934. },
  935. u = function() {
  936. var e = f();
  937. return "Linux" === e || "Mac OS X" === e || "Mac OS" === e || -1 !== e.indexOf("Windows")
  938. },
  939. l = function() {
  940. var e = f();
  941. return "Android" === e || "iOS" === e
  942. },
  943. p = function() {
  944. return h().version
  945. },
  946. f = function() {
  947. return h().os
  948. },
  949. m = function() {
  950. return !!navigator.userAgent.match(/chrome\/[\d]./i)
  951. };
  952. function g() {
  953. return window.navigator.appVersion && null !== window.navigator.appVersion.match(/Chrome\/([\w\W]*?)\./) && window.navigator.appVersion.match(/Chrome\/([\w\W]*?)\./)[1] <= 35
  954. }
  955. var v, S = function() {
  956. var e = navigator.userAgent.match(/chrome\/[\d]./i);
  957. return e && e[0] && e[0].split("/")[1]
  958. },
  959. h = (v = function() {
  960. var e, t = navigator.userAgent,
  961. n = t.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
  962. "Chrome" === n[1] && null != (e = t.match(/(OPR(?=\/))\/?(\d+)/i)) && (n = e), "Safari" === n[1] && null != (e = t.match(/version\/(\d+)/i)) && (n[2] = e[1]), ~t.toLowerCase().indexOf("qqbrowser") && null != (e = t.match(/(qqbrowser(?=\/))\/?(\d+)/i)) && (n = e), ~t.toLowerCase().indexOf("micromessenger") && null != (e = t.match(/(micromessenger(?=\/))\/?(\d+)/i)) && (n = e), ~t.toLowerCase().indexOf("edge") && null != (e = t.match(/(edge(?=\/))\/?(\d+)/i)) && (n = e), ~t.toLowerCase().indexOf("trident") && null != (e = /\brv[ :]+(\d+)/g.exec(t) || []) && (n = [null, "IE", e[1]]);
  963. var i = void 0,
  964. a = [{
  965. s: "Windows 10",
  966. r: /(Windows 10.0|Windows NT 10.0)/
  967. }, {
  968. s: "Windows 8.1",
  969. r: /(Windows 8.1|Windows NT 6.3)/
  970. }, {
  971. s: "Windows 8",
  972. r: /(Windows 8|Windows NT 6.2)/
  973. }, {
  974. s: "Windows 7",
  975. r: /(Windows 7|Windows NT 6.1)/
  976. }, {
  977. s: "Windows Vista",
  978. r: /Windows NT 6.0/
  979. }, {
  980. s: "Windows Server 2003",
  981. r: /Windows NT 5.2/
  982. }, {
  983. s: "Windows XP",
  984. r: /(Windows NT 5.1|Windows XP)/
  985. }, {
  986. s: "Windows 2000",
  987. r: /(Windows NT 5.0|Windows 2000)/
  988. }, {
  989. s: "Windows ME",
  990. r: /(Win 9x 4.90|Windows ME)/
  991. }, {
  992. s: "Windows 98",
  993. r: /(Windows 98|Win98)/
  994. }, {
  995. s: "Windows 95",
  996. r: /(Windows 95|Win95|Windows_95)/
  997. }, {
  998. s: "Windows NT 4.0",
  999. r: /(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/
  1000. }, {
  1001. s: "Windows CE",
  1002. r: /Windows CE/
  1003. }, {
  1004. s: "Windows 3.11",
  1005. r: /Win16/
  1006. }, {
  1007. s: "Android",
  1008. r: /Android/
  1009. }, {
  1010. s: "Open BSD",
  1011. r: /OpenBSD/
  1012. }, {
  1013. s: "Sun OS",
  1014. r: /SunOS/
  1015. }, {
  1016. s: "Linux",
  1017. r: /(Linux|X11)/
  1018. }, {
  1019. s: "iOS",
  1020. r: /(iPhone|iPad|iPod)/
  1021. }, {
  1022. s: "Mac OS X",
  1023. r: /Mac OS X/
  1024. }, {
  1025. s: "Mac OS",
  1026. r: /(MacPPC|MacIntel|Mac_PowerPC|Macintosh)/
  1027. }, {
  1028. s: "QNX",
  1029. r: /QNX/
  1030. }, {
  1031. s: "UNIX",
  1032. r: /UNIX/
  1033. }, {
  1034. s: "BeOS",
  1035. r: /BeOS/
  1036. }, {
  1037. s: "OS/2",
  1038. r: /OS\/2/
  1039. }, {
  1040. s: "Search Bot",
  1041. r: /(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\/Teoma|ia_archiver)/
  1042. }];
  1043. for (var r in a) {
  1044. var o = a[r];
  1045. if (o.r.test(navigator.userAgent)) {
  1046. i = o.s;
  1047. break
  1048. }
  1049. }
  1050. return {
  1051. name: n[1],
  1052. version: n[2],
  1053. os: i
  1054. }
  1055. }(), function() {
  1056. return v
  1057. })
  1058. }, function(e, t) {
  1059. function n() {
  1060. return e.exports = n = Object.assign ||
  1061. function(e) {
  1062. for (var t = 1; t < arguments.length; t++) {
  1063. var n = arguments[t];
  1064. for (var i in n) Object.prototype.hasOwnProperty.call(n, i) && (e[i] = n[i])
  1065. }
  1066. return e
  1067. }, n.apply(this, arguments)
  1068. }
  1069. e.exports = n
  1070. }, function(e, t, n) {
  1071. e.exports = n(26)
  1072. }, function(e, t, n) {
  1073. "use strict";
  1074. var i, a = this && this.__extends || (i = function(e, t) {
  1075. return (i = Object.setPrototypeOf || {
  1076. __proto__: []
  1077. }
  1078. instanceof Array &&
  1079. function(e, t) {
  1080. e.__proto__ = t
  1081. } ||
  1082. function(e, t) {
  1083. for (var n in t) t.hasOwnProperty(n) && (e[n] = t[n])
  1084. })(e, t)
  1085. }, function(e, t) {
  1086. function n() {
  1087. this.constructor = e
  1088. }
  1089. i(e, t), e.prototype = null === t ? Object.create(t) : (n.prototype = t.prototype, new n)
  1090. }),
  1091. r = this && this.__awaiter ||
  1092. function(e, t, n, i) {
  1093. return new(n || (n = Promise))(function(a, r) {
  1094. function o(e) {
  1095. try {
  1096. c(i.next(e))
  1097. } catch (e) {
  1098. r(e)
  1099. }
  1100. }
  1101. function s(e) {
  1102. try {
  1103. c(i.
  1104. throw (e))
  1105. } catch (e) {
  1106. r(e)
  1107. }
  1108. }
  1109. function c(e) {
  1110. e.done ? a(e.value) : new n(function(t) {
  1111. t(e.value)
  1112. }).then(o, s)
  1113. }
  1114. c((i = i.apply(e, t || [])).next())
  1115. })
  1116. }, o = this && this.__generator ||
  1117. function(e, t) {
  1118. var n, i, a, r, o = {
  1119. label: 0,
  1120. sent: function() {
  1121. if (1 & a[0]) throw a[1];
  1122. return a[1]
  1123. },
  1124. trys: [],
  1125. ops: []
  1126. };
  1127. return r = {
  1128. next: s(0),
  1129. throw :s(1),
  1130. return :s(2)
  1131. }, "function" == typeof Symbol && (r[Symbol.iterator] = function() {
  1132. return this
  1133. }), r;
  1134. function s(r) {
  1135. return function(s) {
  1136. return function(r) {
  1137. if (n) throw new TypeError("Generator is already executing.");
  1138. for (; o;) try {
  1139. if (n = 1, i && (a = 2 & r[0] ? i.
  1140. return :r[0] ? i.
  1141. throw ||((a = i.
  1142. return) && a.call(i), 0) : i.next) && !(a = a.call(i, r[1])).done) return a;
  1143. switch (i = 0, a && (r = [2 & r[0], a.value]), r[0]) {
  1144. case 0:
  1145. case 1:
  1146. a = r;
  1147. break;
  1148. case 4:
  1149. return o.label++, {
  1150. value: r[1],
  1151. done: !1
  1152. };
  1153. case 5:
  1154. o.label++, i = r[1], r = [0];
  1155. continue;
  1156. case 7:
  1157. r = o.ops.pop(), o.trys.pop();
  1158. continue;
  1159. default:
  1160. if (!(a = (a = o.trys).length > 0 && a[a.length - 1]) && (6 === r[0] || 2 === r[0])) {
  1161. o = 0;
  1162. continue
  1163. }
  1164. if (3 === r[0] && (!a || r[1] > a[0] && r[1] < a[3])) {
  1165. o.label = r[1];
  1166. break
  1167. }
  1168. if (6 === r[0] && o.label < a[1]) {
  1169. o.label = a[1], a = r;
  1170. break
  1171. }
  1172. if (a && o.label < a[2]) {
  1173. o.label = a[2], o.ops.push(r);
  1174. break
  1175. }
  1176. a[2] && o.ops.pop(), o.trys.pop();
  1177. continue
  1178. }
  1179. r = t.call(e, o)
  1180. } catch (e) {
  1181. r = [6, e], i = 0
  1182. } finally {
  1183. n = a = 0
  1184. }
  1185. if (5 & r[0]) throw r[1];
  1186. return {
  1187. value: r[0] ? r[1] : void 0,
  1188. done: !0
  1189. }
  1190. }([r, s])
  1191. }
  1192. }
  1193. }, s = this && this.__importDefault ||
  1194. function(e) {
  1195. return e && e.__esModule ? e : {
  1196. default:
  1197. e
  1198. }
  1199. };
  1200. Object.defineProperty(t, "__esModule", {
  1201. value: !0
  1202. });
  1203. var c = s(n(32)),
  1204. d = n(3),
  1205. u = s(n(0)),
  1206. l = n(1),
  1207. p = n(10),
  1208. f = n(11),
  1209. m = function(e) {
  1210. function t(t, n) {
  1211. var i = e.call(this) || this;
  1212. return i._state = _.RELAY_STATE_IDLE, i._onStatus = function(e) {
  1213. u.
  1214. default.debug("[" + i.clientId + "] ChannelMediaStatus: " + JSON.stringify(e)), e && e.command && ("onAudioPacketReceived" === e.command && i.emit("event", h.PACKET_RECEIVED_AUDIO_FROM_SRC), "onVideoPacketReceived" === e.command && i.emit("event", h.PACKET_RECEIVED_VIDEO_FROM_SRC), "onSrcTokenPrivilegeDidExpire" === e.command && (i._state = _.RELAY_STATE_FAILURE, i.emit("state", _.RELAY_STATE_FAILURE, E.SRC_TOKEN_EXPIRED)), "onDestTokenPrivilegeDidExpire" === e.command && (i._state = _.RELAY_STATE_FAILURE, i.emit("state", _.RELAY_STATE_FAILURE, E.DEST_TOKEN_EXPIRED, e.channelName ? {
  1215. came: e.channelName
  1216. } : null)))
  1217. }, i._onClose = function() {
  1218. return r(i, void 0, void 0, function() {
  1219. var e;
  1220. return o(this, function(t) {
  1221. switch (t.label) {
  1222. case 0:
  1223. if (u.
  1224. default.debug("[" + this.clientId + "] ChannelMediaSocket onClose"), this.emit("event", h.NETWORK_DISCONNECTED), this.state = _.RELAY_STATE_IDLE, !this._prevChannelMediaConfig) return [3, 4];
  1225. t.label = 1;
  1226. case 1:
  1227. return t.trys.push([1, 3, , 4]), [4, this.startChannelMediaRelay(this._prevChannelMediaConfig)];
  1228. case 2:
  1229. return t.sent(), [3, 4];
  1230. case 3:
  1231. return (e = t.sent()) instanceof T && (e.message === v.WS_ABORT || e.message === v.AP_REQUEST_ABORT) ? [2] : (this.emit("state", _.RELAY_STATE_FAILURE, E.SERVER_CONNECTION_LOST), [3, 4]);
  1232. case 4:
  1233. return [2]
  1234. }
  1235. })
  1236. })
  1237. }, i.token = t.appId, i.appId = t.appId, i.cname = t.cname, i.uid = t.uid, i.sid = t.sid, i.clientId = n, i
  1238. }
  1239. return a(t, e), Object.defineProperty(t.prototype, "state", {
  1240. get: function() {
  1241. return this._state
  1242. },
  1243. set: function(e) {
  1244. var t = this._state;
  1245. this._state = e, t !== e && this.emit("state", e)
  1246. },
  1247. enumerable: !0,
  1248. configurable: !0
  1249. }), t.prototype.startChannelMediaRelay = function(e) {
  1250. return r(this, void 0, void 0, function() {
  1251. return o(this, function(t) {
  1252. switch (t.label) {
  1253. case 0:
  1254. if (this.state !== _.RELAY_STATE_IDLE) throw new T(v.BAD_STATE);
  1255. return this.state = _.RELAY_STATE_CONNECTING, [4, this._connect()];
  1256. case 1:
  1257. return t.sent(), u.
  1258. default.debug("[" + this.clientId + "] startChannelMediaRelay: connect success"), [4, this._sendStartRelayMessage(e)];
  1259. case 2:
  1260. return t.sent(), this._prevChannelMediaConfig = e, [2]
  1261. }
  1262. })
  1263. })
  1264. }, t.prototype.updateChannelMediaRelay = function(e) {
  1265. return r(this, void 0, void 0, function() {
  1266. return o(this, function(t) {
  1267. switch (t.label) {
  1268. case 0:
  1269. if (this.state !== _.RELAY_STATE_RUNNING) throw new T(v.BAD_STATE);
  1270. return [4, this._sendUpdateMessage(e)];
  1271. case 1:
  1272. return t.sent(), this._prevChannelMediaConfig = e, [2]
  1273. }
  1274. })
  1275. })
  1276. }, t.prototype.stopChannelMediaRelay = function() {
  1277. return r(this, void 0, void 0, function() {
  1278. return o(this, function(e) {
  1279. switch (e.label) {
  1280. case 0:
  1281. return [4, this._sendStopRelayMessage()];
  1282. case 1:
  1283. return e.sent(), u.
  1284. default.debug("[" + this.clientId + "] stopChannelMediaRelay: send stop message success"), this.state = _.RELAY_STATE_IDLE, this.dispose(), [2]
  1285. }
  1286. })
  1287. })
  1288. }, t.prototype.dispose = function() {
  1289. u.
  1290. default.debug("[" + this.clientId + "] disposeChannelMediaRelay"), this.state = _.RELAY_STATE_IDLE, this.emit("dispose"), this._signal && this._signal.dispose(), this._prevChannelMediaConfig = null, this.removeEvent()
  1291. }, t.prototype._requestOneAP = function(e) {
  1292. var t = this;
  1293. return new Promise(function(n, i) {
  1294. var a = {
  1295. command: "convergeAllocateEdge",
  1296. sid: t.sid,
  1297. appId: t.appId,
  1298. token: "",
  1299. ts: +new Date,
  1300. version: d.VERSION,
  1301. cname: t.cname,
  1302. uid: t.uid + "",
  1303. seq: 1,
  1304. requestId: 1
  1305. },
  1306. r = {
  1307. service_name: "tele_channel",
  1308. json_body: JSON.stringify(a)
  1309. },
  1310. o = "https://" + e;
  1311. p.post(o, r, function(e) {
  1312. var t = null,
  1313. a = null;
  1314. try {
  1315. t = JSON.parse(e)
  1316. } catch (e) {
  1317. i(new T(v.AP_JSON_PARSE_ERROR, e))
  1318. }
  1319. 0 !== t.code && i(new T(v.AP_REQUEST_ERROR, t));
  1320. try {
  1321. a = JSON.parse(t.json_body)
  1322. } catch (e) {
  1323. i(new T(v.AP_JSON_PARSE_ERROR, e))
  1324. }
  1325. 200 !== a.code && i(new T(v.AP_REQUEST_ERROR, a)), a.servers ? n(a.servers) : i(new T(v.AP_JSON_PARSE_ERROR, a))
  1326. }, function(e) {
  1327. return i(e)
  1328. }, {
  1329. "X-Packet-Service-Type": 0,
  1330. "X-Packet-URI": 61
  1331. })
  1332. })
  1333. }, t.prototype._requestAP = function() {
  1334. var e = this,
  1335. t = d.getParameter("UAP_AP");
  1336. return new Promise(function(n, i) {
  1337. setTimeout(function() {
  1338. i(new T(v.AP_REQUEST_TIMEOUT))
  1339. }, 3e3), e.on("dispose", function() {
  1340. i(new T(v.AP_REQUEST_ABORT))
  1341. }), t.forEach(function(t) {
  1342. t += "/api/v1", e._requestOneAP(t).then(function(i) {
  1343. u.
  1344. default.debug("[" + e.clientId + "] startChannelMediaRelay request AP " + t + " success: " + JSON.stringify(i));
  1345. var a = i[0],
  1346. r = "wss://" + a.address.replace(/\./g, "-") + ".edge.agora.io:" + a.wss;
  1347. n(r)
  1348. }).
  1349. catch (function(n) {
  1350. u.
  1351. default.debug("[" + e.clientId + "] startChannelMediaRelay request AP " + t + " failed: " + JSON.stringify(n))
  1352. })
  1353. })
  1354. })
  1355. }, t.prototype._connectWebsocket = function(e) {
  1356. return this._signal = new I(this.appId, this.cname, this.uid, this.sid), this._signal.connect(e)
  1357. }, t.prototype._connect = function() {
  1358. return r(this, void 0, void 0, function() {
  1359. var e;
  1360. return o(this, function(t) {
  1361. switch (t.label) {
  1362. case 0:
  1363. return [4, this._requestAP()];
  1364. case 1:
  1365. return e = t.sent(), [4, this._connectWebsocket(e)];
  1366. case 2:
  1367. return t.sent(), this._signal.on("close", this._onClose.bind(this)), this._signal.on("status", this._onStatus.bind(this)), this.emit("event", h.NETWORK_CONNECTED), [2]
  1368. }
  1369. })
  1370. })
  1371. }, t.prototype._sendStartRelayMessage = function(e) {
  1372. return r(this, void 0, void 0, function() {
  1373. var t, n, i, a, r, s;
  1374. return o(this, function(o) {
  1375. switch (o.label) {
  1376. case 0:
  1377. return this._checkSignal(), t = this._genMessage(S.StopPacketTransfer), [4, this._signal.request(t)];
  1378. case 1:
  1379. return o.sent(), [4, this._signal.waitStatus("Normal Quit")];
  1380. case 2:
  1381. return o.sent(), u.
  1382. default.debug("[" + this.clientId + "] startChannelMediaRelay: StopPacketTransfer success"), n = this._genMessage(S.SetSdkProfile, e), [4, this._signal.request(n)];
  1383. case 3:
  1384. return o.sent(), u.
  1385. default.debug("[" + this.clientId + "] startChannelMediaRelay: SetSdkProfile success"), i = this._genMessage(S.SetSourceChannel, e), [4, this._signal.request(i)];
  1386. case 4:
  1387. return o.sent(), [4, this._signal.waitStatus("SetSourceChannelStatus")];
  1388. case 5:
  1389. return o.sent(), this.emit("event", h.PACKET_JOINED_SRC_CHANNEL), u.
  1390. default.debug("[" + this.clientId + "] startChannelMediaRelay: SetSourceChannel success"), a = this._genMessage(S.SetSourceUserId, e), [4, this._signal.request(a)];
  1391. case 6:
  1392. return o.sent(), u.
  1393. default.debug("[" + this.clientId + "] startChannelMediaRelay: SetSourceUserId success"), r = this._genMessage(S.SetDestChannel, e), [4, this._signal.request(r)];
  1394. case 7:
  1395. return o.sent(), [4, this._signal.waitStatus("SetDestChannelStatus")];
  1396. case 8:
  1397. return o.sent(), this.emit("event", h.PACKET_JOINED_DEST_CHANNEL), u.
  1398. default.debug("[" + this.clientId + "] startChannelMediaRelay: SetDestChannel success"), s = this._genMessage(S.StartPacketTransfer, e), [4, this._signal.request(s)];
  1399. case 9:
  1400. return o.sent(), this.emit("event", h.PACKET_SENT_TO_DEST_CHANNEL), this.state = _.RELAY_STATE_RUNNING, u.
  1401. default.debug("[" + this.clientId + "] startChannelMediaRelay: StartPacketTransfer success"), [2]
  1402. }
  1403. })
  1404. })
  1405. }, t.prototype._sendReconnectMessage = function(e) {
  1406. return r(this, void 0, void 0, function() {
  1407. var t;
  1408. return o(this, function(n) {
  1409. switch (n.label) {
  1410. case 0:
  1411. return this._checkSignal(), t = this._genMessage(S.Reconnect, e), [4, this._signal.request(t)];
  1412. case 1:
  1413. return n.sent(), [2]
  1414. }
  1415. })
  1416. })
  1417. }, t.prototype._sendUpdateMessage = function(e) {
  1418. return r(this, void 0, void 0, function() {
  1419. var t;
  1420. return o(this, function(n) {
  1421. switch (n.label) {
  1422. case 0:
  1423. return this._checkSignal(), t = this._genMessage(S.UpdateDestChannel, e), [4, this._signal.request(t)];
  1424. case 1:
  1425. return n.sent(), this.emit("event", h.PACKET_UPDATE_DEST_CHANNEL), u.
  1426. default.debug("[" + this.clientId + "] sendUpdateMessage: UpdateDestChannel success"), [2]
  1427. }
  1428. })
  1429. })
  1430. }, t.prototype._sendStopRelayMessage = function() {
  1431. return r(this, void 0, void 0, function() {
  1432. var e;
  1433. return o(this, function(t) {
  1434. switch (t.label) {
  1435. case 0:
  1436. return this._checkSignal(), e = this._genMessage(S.StopPacketTransfer), [4, this._signal.request(e)];
  1437. case 1:
  1438. return t.sent(), u.
  1439. default.debug("[" + this.clientId + "] sendStopRelayMessage: StopPacketTransfer success"), [2]
  1440. }
  1441. })
  1442. })
  1443. }, t.prototype._genMessage = function(e, t) {
  1444. var n = this,
  1445. i = [],
  1446. a = [],
  1447. r = [],
  1448. o = {
  1449. appId: this.appId,
  1450. cname: this.cname,
  1451. uid: this.uid + "",
  1452. sdkVersion: d.VERSION,
  1453. sid: this.sid,
  1454. ts: +new Date,
  1455. requestId: 0,
  1456. seq: 0,
  1457. allocate: !0,
  1458. clientRequest: {}
  1459. },
  1460. s = null;
  1461. switch (e) {
  1462. case S.SetSdkProfile:
  1463. return o.clientRequest = {
  1464. command: "SetSdkProfile",
  1465. type: "multi_channel"
  1466. }, o;
  1467. case S.SetSourceChannel:
  1468. return s = t.getSrcChannelMediaInfo(), o.clientRequest = {
  1469. command: "SetSourceChannel",
  1470. uid: s.uid + "",
  1471. channelName: s.channelName,
  1472. token: s.token || this.appId
  1473. }, o;
  1474. case S.SetSourceUserId:
  1475. return s = t.getSrcChannelMediaInfo(), o.clientRequest = {
  1476. command: "SetSourceUserId",
  1477. uid: this.uid + ""
  1478. }, o;
  1479. case S.SetDestChannel:
  1480. return t.getDestChannelMediaInfos().forEach(function(e) {
  1481. i.push(e.channelName), a.push(e.uid + ""), r.push(e.token || n.appId)
  1482. }), o.clientRequest = {
  1483. command: "SetDestChannel",
  1484. channelName: i,
  1485. uid: a,
  1486. token: r
  1487. }, o;
  1488. case S.StartPacketTransfer:
  1489. return o.clientRequest = {
  1490. command: "StartPacketTransfer"
  1491. }, o;
  1492. case S.Reconnect:
  1493. return o.clientRequest = {
  1494. command: "Reconnect"
  1495. }, o;
  1496. case S.StopPacketTransfer:
  1497. return o.clientRequest = {
  1498. command: "StopPacketTransfer"
  1499. }, o;
  1500. case S.UpdateDestChannel:
  1501. return t.getDestChannelMediaInfos().forEach(function(e) {
  1502. i.push(e.channelName), a.push(e.uid + ""), r.push(e.token || n.appId)
  1503. }), o.clientRequest = {
  1504. command: "UpdateDestChannel",
  1505. channelName: i,
  1506. uid: a,
  1507. token: r
  1508. }, o
  1509. }
  1510. }, t.prototype._checkSignal = function() {
  1511. if (!this._signal || !this._signal.isConnect()) throw new T(v.WS_DISCONNECTED)
  1512. }, t
  1513. }(c.
  1514. default);
  1515. t.
  1516. default = m;
  1517. var g = function() {
  1518. function e() {
  1519. this.destChannelMediaInfos = new Map
  1520. }
  1521. return e.prototype.setSrcChannelInfo = function(e) {
  1522. l.checkValidObject(e, "srcInfo");
  1523. var t = e.uid,
  1524. n = e.channelName,
  1525. i = e.token;
  1526. if (i && !l.isValidToken(i)) throw new Error("Invalid token in SrcChannelInfo");
  1527. if (!l.isValidChannelName(n)) throw new Error("Invalid channelName in SrcChannelInfo");
  1528. if (!f.is32Uint(t)) throw new Error("Invalid uid in SrcChannelInfo");
  1529. this.srcChannelMediaInfo = e
  1530. }, e.prototype.setDestChannelInfo = function(e, t) {
  1531. if (!l.isValidChannelName(e)) throw new Error("Invalid channelName in DestChannelInfo");
  1532. l.checkValidObject(t, "destInfo");
  1533. var n = t.uid,
  1534. i = t.token,
  1535. a = t.channelName;
  1536. if (i && !l.isValidToken(i)) throw new Error("Invalid token in DestChannelInfo");
  1537. if (!l.isValidChannelName(a)) throw new Error("Invalid channelName in DestChannelInfo");
  1538. if (!f.is32Uint(n)) throw new Error("Invalid uid in DestChannelInfo");
  1539. this.destChannelMediaInfos.set(e, t)
  1540. }, e.prototype.removeDestChannelInfo = function(e) {
  1541. if (!l.isValidChannelName(e)) throw new Error("Invalid channelName when invoke removeDestChannelInfo");
  1542. this.destChannelMediaInfos.delete(e)
  1543. }, e.prototype.getSrcChannelMediaInfo = function() {
  1544. return this.srcChannelMediaInfo
  1545. }, e.prototype.getDestChannelMediaInfos = function() {
  1546. return this.destChannelMediaInfos
  1547. }, e
  1548. }();
  1549. t.ChannelMediaRelayConfiguration = g;
  1550. var v, S, h, _, E, I = function(e) {
  1551. function t(t, n, i, a) {
  1552. var r = e.call(this) || this;
  1553. return r._onOpen = function() {
  1554. r.emit("open")
  1555. }, r._onClose = function(e) {
  1556. r.emit("close"), r.dispose()
  1557. }, r._onMessage = function(e) {
  1558. var t = JSON.parse(e.data);
  1559. if (!t || "serverResponse" !== t.command || !t.requestId) return t && "serverStatus" === t.command && t.serverStatus && t.serverStatus.command ? (r.emit("status", t.serverStatus), void r.emit(t.serverStatus.command, t.serverStatus)) : void 0;
  1560. r.emit("req_" + t.requestId, t)
  1561. }, r._requestId = 1, r.appId = t, r.cname = n, r.uid = i, r.sid = a, r
  1562. }
  1563. return a(t, e), t.prototype.isConnect = function() {
  1564. return this._ws && this._ws.readyState === WebSocket.OPEN
  1565. }, t.prototype.sendMessage = function(e) {
  1566. if (!this._ws || this._ws.readyState !== WebSocket.OPEN) throw new T(v.WS_DISCONNECTED);
  1567. var t = this._requestId++;
  1568. return e.requestId = t, e.seq = t, this._ws.send(JSON.stringify(e)), t
  1569. }, t.prototype.waitStatus = function(e) {
  1570. var t = this;
  1571. return new Promise(function(n, i) {
  1572. var a = window.setTimeout(function() {
  1573. i(new T(v.WAIT_STATUS_TIMEOUT, e))
  1574. }, 5e3);
  1575. t.once(e, function(t) {
  1576. clearTimeout(a), t.state && 0 !== t.state ? i(new T(v.WAIT_STATUS_ERROR, e)) : n()
  1577. }), t.once("dispose", function() {
  1578. clearTimeout(a), i(new T(v.WS_ABORT))
  1579. })
  1580. })
  1581. }, t.prototype.request = function(e) {
  1582. var t = this;
  1583. return new Promise(function(n, i) {
  1584. var a = t.sendMessage(e),
  1585. r = window.setTimeout(function() {
  1586. t.removeAllListeners("req_" + a), i(new T(v.REQUEST_TIMEOUT))
  1587. }, 3e3);
  1588. t.once("req_" + a, function(e) {
  1589. clearTimeout(r), e && 200 === e.code ? n(e) : i(new T(v.REQUEST_FAILED, e))
  1590. }), t.once("dispose", function() {
  1591. clearTimeout(r), i(new T(v.WS_ABORT))
  1592. })
  1593. })
  1594. }, t.prototype.connect = function(e) {
  1595. var t = this;
  1596. return new Promise(function(n, i) {
  1597. t._ws = new WebSocket(e), t._ws.onopen = function() {
  1598. t._onOpen(), t._prvUrl = e, t._ws.onmessage = t._onMessage, t._ws.onclose = t._onClose, t._startHeartBeatCheck(), n()
  1599. }, t._ws.onclose = function(e) {
  1600. t._ws = null, i(new T(v.CONNECT_FAILED, "websocket error code: " + e.code))
  1601. }, setTimeout(function() {
  1602. t._ws && t._ws.readyState !== WebSocket.OPEN && (t._ws.onopen = null, t._ws.onclose = null, t._ws.close(), t._ws = null, i(new T(v.CONNECT_TIMEOUT)))
  1603. }, 5e3), t.once("dispose", function() {
  1604. i(new T(v.WS_ABORT))
  1605. })
  1606. })
  1607. }, t.prototype.dispose = function() {
  1608. this._clearHeartBeatCheck(), this.emit("dispose"), this.removeEvent(), this._ws && (this._ws.onopen = null, this._ws.onclose = null, this._ws.onmessage = null, this._ws.close()), this._ws = null
  1609. }, t.prototype._sendPing = function(e) {
  1610. if (!this._ws || this._ws.readyState !== WebSocket.OPEN) throw new T(v.WS_DISCONNECTED);
  1611. var t = this._requestId++;
  1612. return e.requestId = t, this._ws.send(JSON.stringify(e)), t
  1613. }, t.prototype._startHeartBeatCheck = function() {
  1614. var e = this;
  1615. this._heartBeatTimer = window.setInterval(function() {
  1616. e._sendPing({
  1617. command: "ping",
  1618. appId: e.appId,
  1619. cname: e.cname,
  1620. uid: e.uid + "",
  1621. sid: e.sid,
  1622. ts: +new Date,
  1623. requestId: 0
  1624. })
  1625. }, 3e3)
  1626. }, t.prototype._clearHeartBeatCheck = function() {
  1627. window.clearInterval(this._heartBeatTimer)
  1628. }, t
  1629. }(c.
  1630. default),
  1631. T = function() {
  1632. return function(e, t, n) {
  1633. void 0 === e && (e = ""), this.code = n, this.data = t, this.message = e
  1634. }
  1635. }();
  1636. t.ChannelMediaError = T, function(e) {
  1637. e.CONNECT_FAILED = "connect failed", e.CONNECT_TIMEOUT = "connect timeout", e.WS_DISCONNECTED = "websocket disconnected", e.REQUEST_TIMEOUT = "request timeout", e.REQUEST_FAILED = "request failed", e.WAIT_STATUS_TIMEOUT = "wait status timeout", e.WAIT_STATUS_ERROR = "wait status error", e.BAD_STATE = "bad state", e.WS_ABORT = "ws abort", e.AP_REQUEST_TIMEOUT = "AP request timeout", e.AP_JSON_PARSE_ERROR = "AP json parse error", e.AP_REQUEST_ERROR = "AP request error", e.AP_REQUEST_ABORT = "AP request abort"
  1638. }(v = t.CHANNEL_MEDIA_ERROR || (t.CHANNEL_MEDIA_ERROR = {})), function(e) {
  1639. e[e.SetSdkProfile = 0] = "SetSdkProfile", e[e.SetSourceChannel = 1] = "SetSourceChannel", e[e.SetSourceUserId = 2] = "SetSourceUserId", e[e.SetDestChannel = 3] = "SetDestChannel", e[e.StartPacketTransfer = 4] = "StartPacketTransfer", e[e.StopPacketTransfer = 5] = "StopPacketTransfer", e[e.UpdateDestChannel = 6] = "UpdateDestChannel", e[e.Reconnect = 7] = "Reconnect", e[e.SetVideoProfile = 8] = "SetVideoProfile"
  1640. }(S || (S = {})), function(e) {
  1641. e[e.NETWORK_DISCONNECTED = 0] = "NETWORK_DISCONNECTED", e[e.NETWORK_CONNECTED = 1] = "NETWORK_CONNECTED", e[e.PACKET_JOINED_SRC_CHANNEL = 2] = "PACKET_JOINED_SRC_CHANNEL", e[e.PACKET_JOINED_DEST_CHANNEL = 3] = "PACKET_JOINED_DEST_CHANNEL", e[e.PACKET_SENT_TO_DEST_CHANNEL = 4] = "PACKET_SENT_TO_DEST_CHANNEL", e[e.PACKET_RECEIVED_VIDEO_FROM_SRC = 5] = "PACKET_RECEIVED_VIDEO_FROM_SRC", e[e.PACKET_RECEIVED_AUDIO_FROM_SRC = 6] = "PACKET_RECEIVED_AUDIO_FROM_SRC", e[e.PACKET_UPDATE_DEST_CHANNEL = 7] = "PACKET_UPDATE_DEST_CHANNEL", e[e.PACKET_UPDATE_DEST_CHANNEL_REFUSED = 8] = "PACKET_UPDATE_DEST_CHANNEL_REFUSED", e[e.PACKET_UPDATE_DEST_CHANNEL_NOT_CHANGE = 9] = "PACKET_UPDATE_DEST_CHANNEL_NOT_CHANGE"
  1642. }(h = t.CHANNEL_MEDIA_RELAY_EVENT || (t.CHANNEL_MEDIA_RELAY_EVENT = {})), function(e) {
  1643. e[e.RELAY_STATE_IDLE = 0] = "RELAY_STATE_IDLE", e[e.RELAY_STATE_CONNECTING = 1] = "RELAY_STATE_CONNECTING", e[e.RELAY_STATE_RUNNING = 2] = "RELAY_STATE_RUNNING", e[e.RELAY_STATE_FAILURE = 3] = "RELAY_STATE_FAILURE"
  1644. }(_ = t.CHANNEL_MEDIA_RELAY_STATE || (t.CHANNEL_MEDIA_RELAY_STATE = {})), function(e) {
  1645. e[e.RELAY_OK = 0] = "RELAY_OK", e[e.SERVER_ERROR_RESPONSE = 1] = "SERVER_ERROR_RESPONSE", e[e.SERVER_NO_RESPONSE = 2] = "SERVER_NO_RESPONSE", e[e.NO_RESOURCE_AVAILABLE = 3] = "NO_RESOURCE_AVAILABLE", e[e.FAILED_JOIN_SRC = 4] = "FAILED_JOIN_SRC", e[e.FAILED_JOIN_DEST = 5] = "FAILED_JOIN_DEST", e[e.FAILED_PACKET_RECEIVED_FROM_SRC = 6] = "FAILED_PACKET_RECEIVED_FROM_SRC", e[e.FAILED_PACKET_SENT_TO_DEST = 7] = "FAILED_PACKET_SENT_TO_DEST", e[e.SERVER_CONNECTION_LOST = 8] = "SERVER_CONNECTION_LOST", e[e.INTERNAL_ERROR = 9] = "INTERNAL_ERROR", e[e.SRC_TOKEN_EXPIRED = 10] = "SRC_TOKEN_EXPIRED", e[e.DEST_TOKEN_EXPIRED = 11] = "DEST_TOKEN_EXPIRED", e[e.RELAY_ALREADY_START = 12] = "RELAY_ALREADY_START", e[e.RELAY_NOT_START = 13] = "RELAY_NOT_START", e[e.OPERATION_ABORT = 14] = "OPERATION_ABORT"
  1646. }(E = t.CHANNEL_MEDIA_RELAY_ERROR || (t.CHANNEL_MEDIA_RELAY_ERROR = {}))
  1647. }, function(e, t) {
  1648. function n(e) {
  1649. return (n = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ?
  1650. function(e) {
  1651. return typeof e
  1652. } : function(e) {
  1653. return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
  1654. })(e)
  1655. }
  1656. function i(t) {
  1657. return "function" == typeof Symbol && "symbol" === n(Symbol.iterator) ? e.exports = i = function(e) {
  1658. return n(e)
  1659. } : e.exports = i = function(e) {
  1660. return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : n(e)
  1661. }, i(t)
  1662. }
  1663. e.exports = i
  1664. }, function(e, t, n) {
  1665. "use strict";
  1666. n.r(t), n.d(t, "post", function() {
  1667. return u
  1668. }), n.d(t, "shouldUseHttps", function() {
  1669. return l
  1670. }), n.d(t, "getHTTPSendBytes", function() {
  1671. return s
  1672. }), n.d(t, "getHTTPRecvBytes", function() {
  1673. return c
  1674. }), n.d(t, "resetHTTPByetsCount", function() {
  1675. return d
  1676. });
  1677. var i = n(3),
  1678. a = n(11),
  1679. r = 0,
  1680. o = 0,
  1681. s = function() {
  1682. return r
  1683. },
  1684. c = function() {
  1685. return o
  1686. },
  1687. d = function() {
  1688. r = 0, o = 0
  1689. },
  1690. u = function(e, t, n, s, c) {
  1691. var d = new XMLHttpRequest;
  1692. if (d.timeout = t.timeout || Object(i.getParameter)("HTTP_CONNECT_TIMEOUT"), d.open("POST", e, !0), d.setRequestHeader("Content-type", "application/json; charset=utf-8"), c) for (var u in c)"withCredentials" == u ? d.withCredentials = !0 : d.setRequestHeader(u, c[u]);
  1693. d.onload = function(e) {
  1694. o += Object(a.lengthInUtf8Bytes)(d.responseText), n && n(d.responseText)
  1695. }, d.onerror = function(t) {
  1696. s && s(t, e)
  1697. }, d.ontimeout = function(t) {
  1698. s && s(t, e)
  1699. };
  1700. var l = JSON.stringify(t);
  1701. r += Object(a.lengthInUtf8Bytes)(l), d.send(l)
  1702. },
  1703. l = function() {
  1704. return "https:" == document.location.protocol
  1705. }
  1706. }, function(e, t, n) {
  1707. "use strict";
  1708. n.r(t), n.d(t, "isLiveTranscodingValid", function() {
  1709. return v
  1710. }), n.d(t, "generateSessionId", function() {
  1711. return f
  1712. }), n.d(t, "audioLevelHelper", function() {
  1713. return p
  1714. }), n.d(t, "vsResHack", function() {
  1715. return m
  1716. }), n.d(t, "is32Uint", function() {
  1717. return g
  1718. }), n.d(t, "safeCall", function() {
  1719. return l
  1720. }), n.d(t, "random", function() {
  1721. return h
  1722. }), n.d(t, "popBanTip", function() {
  1723. return E
  1724. }), n.d(t, "lengthInUtf8Bytes", function() {
  1725. return _
  1726. });
  1727. var i = n(9),
  1728. a = n.n(i),
  1729. r = n(5),
  1730. o = n(0),
  1731. s = n(16),
  1732. c = n.n(s),
  1733. d = n(15),
  1734. u = n(13),
  1735. l = function() {
  1736. var e = arguments[0];
  1737. if ("function" == typeof e) {
  1738. var t = Array.prototype.slice.call(arguments, 1);
  1739. e.apply(null, t)
  1740. }
  1741. },
  1742. p = function(e) {
  1743. return this.audioContext = Object(d.a)(), this.sourceNode = e.otWebkitAudioSource || this.audioContext.createMediaStreamSource(e), this.analyser = this.audioContext.createAnalyser(), this.timeDomainData = new Uint8Array(this.analyser.frequencyBinCount), this.sourceNode.connect(this.analyser), this.getAudioLevel = function() {
  1744. if (this.analyser) {
  1745. this.analyser.getByteTimeDomainData(this.timeDomainData);
  1746. for (var e = 0, t = 0; t < this.timeDomainData.length; t++) e = Math.max(e, Math.abs(this.timeDomainData[t] - 128));
  1747. return e / 128
  1748. }
  1749. return o.
  1750. default.warning("can't find analyser in audioLevelHelper"), 0
  1751. }, this
  1752. };
  1753. function f() {
  1754. return c()().replace(/-/g, "").toUpperCase()
  1755. }
  1756. var m = function(e, t, n) {
  1757. try {
  1758. o.
  1759. default.debug("start vsResHack", e);
  1760. var i = document.createElement("video");
  1761. i.setAttribute("autoplay", ""), i.setAttribute("muted", ""), i.muted = !0, i.setAttribute("playsinline", ""), i.setAttribute("style", "position: absolute; top: 0; left: 0; width:1px; high:1px;"), document.body.appendChild(i), i.addEventListener("playing", function(n) {
  1762. r.isFireFox() ? i.videoWidth && (o.
  1763. default.debug("[vsResHack] get stream resolution: ", "".concat(i.videoWidth, " x ").concat(i.videoHeight), e), t(i.videoWidth, i.videoHeight), document.body.removeChild(i)) : (o.
  1764. default.debug("[vsResHack] get stream resolution: ", "".concat(i.videoWidth, " x ").concat(i.videoHeight), e), t(i.videoWidth, i.videoHeight), document.body.removeChild(i))
  1765. }), Object(u.setSrcObject)(i, e)
  1766. } catch (e) {
  1767. n(e)
  1768. }
  1769. },
  1770. g = function(e) {
  1771. return "number" == typeof e && 0 <= e && e <= 4294967295
  1772. },
  1773. v = function(e) {
  1774. var t = ["lowLatency", "userConfigExtraInfo", "transcodingUsers"];
  1775. for (var n in e) if ("lowLatency" === n && "boolean" != typeof e[n] || "userConfigExtraInfo" === n && "object" !== a()(e[n]) || "transcodingUsers" === n && !S(e[n]) || !~t.indexOf(n) && "number" != typeof e[n]) throw new Error("Param [" + n + "] is inValid");
  1776. return !0
  1777. },
  1778. S = function(e) {
  1779. for (var t = 0; t < e.length; t++) for (var n in e[t]) if ("number" != typeof e[t][n]) throw new Error("Param user[" + t + "] - [" + n + "] is inValid");
  1780. return !0
  1781. },
  1782. h = function(e) {
  1783. isNaN(e) && (e = 1e3);
  1784. var t = +new Date,
  1785. n = (t = (9301 * t + 49297) % 233280) / 233280;
  1786. return Math.ceil(n * e)
  1787. },
  1788. _ = function(e) {
  1789. var t = encodeURIComponent(e).match(/%[89ABab]/g);
  1790. return e.length + (t ? t.length : 0)
  1791. },
  1792. E = function() {
  1793. if (!document.getElementById("agora-ban-tip")) {
  1794. var e = document.createElement("div");
  1795. e.id = "agora-ban-tip", e.style = "position: absolute; width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; color: #fff;", document.querySelector("body").prepend(e);
  1796. var t = document.createElement("div");
  1797. t.style = "background: #000; width: 346px; height: 116px; z-index: 100000; opacity: 0.6; border-radius: 10px; box-shadow: 0 2px 4px #000;", e.append(t);
  1798. var n = document.createElement("div");
  1799. n.style = "height: 76px; display: flex; justify-content: center; align-items: center;";
  1800. var i = document.createElement("span");
  1801. i.style = "height: 28px; width: 28px; color: #000; text-align: center; line-height: 30px; background: #fff; border-radius: 50%; font-weight: 600; font-size: 20px;margin-right: 5px;", i.innerText = "!";
  1802. var a = document.createElement("span");
  1803. a.innerText = "This browser does not support webRTC", n.append(i), n.append(a);
  1804. var r = document.createElement("div");
  1805. r.style = "height: 38px; display: flex; border-top: #fff 1px solid; justify-content: center; align-items: center;", r.innerText = "OK", t.append(n), t.append(r), r.onclick = function() {
  1806. var e = document.getElementById("agora-ban-tip");
  1807. e.parentNode.removeChild(e)
  1808. }
  1809. }
  1810. }
  1811. }, function(e, t) {
  1812. function n(e, t, n, i, a, r, o) {
  1813. try {
  1814. var s = e[r](o),
  1815. c = s.value
  1816. } catch (e) {
  1817. return void n(e)
  1818. }
  1819. s.done ? t(c) : Promise.resolve(c).then(i, a)
  1820. }
  1821. e.exports = function(e) {
  1822. return function() {
  1823. var t = this,
  1824. i = arguments;
  1825. return new Promise(function(a, r) {
  1826. var o = e.apply(t, i);
  1827. function s(e) {
  1828. n(o, a, r, s, c, "next", e)
  1829. }
  1830. function c(e) {
  1831. n(o, a, r, s, c, "throw", e)
  1832. }
  1833. s(void 0)
  1834. })
  1835. }
  1836. }
  1837. }, function(e, t, n) {
  1838. "use strict";
  1839. n.r(t), n.d(t, "RTCPeerConnection", function() {
  1840. return y
  1841. }), n.d(t, "getUserMedia", function() {
  1842. return o
  1843. }), n.d(t, "attachMediaStream", function() {
  1844. return s
  1845. }), n.d(t, "reattachMediaStream", function() {
  1846. return c
  1847. }), n.d(t, "setSrcObject", function() {
  1848. return f
  1849. }), n.d(t, "getSrcObject", function() {
  1850. return m
  1851. }), n.d(t, "webrtcDetectedBrowser", function() {
  1852. return d
  1853. }), n.d(t, "webrtcDetectedVersion", function() {
  1854. return u
  1855. }), n.d(t, "webrtcMinimumVersion", function() {
  1856. return l
  1857. }), n.d(t, "webrtcTesting", function() {
  1858. return b
  1859. }), n.d(t, "webrtcUtils", function() {
  1860. return S
  1861. });
  1862. var i = n(9),
  1863. a = n.n(i),
  1864. r = n(5),
  1865. o = null,
  1866. s = null,
  1867. c = null,
  1868. d = null,
  1869. u = null,
  1870. l = null,
  1871. p = null,
  1872. f = null,
  1873. m = null,
  1874. g = null,
  1875. v = {
  1876. addStream: null
  1877. },
  1878. S = {
  1879. log: function() {},
  1880. extractVersion: function(e, t, n) {
  1881. var i = e.match(t);
  1882. return i && i.length >= n && parseInt(i[n])
  1883. }
  1884. };
  1885. if ("object" == ("undefined" == typeof window ? "undefined" : a()(window)) ? (!window.HTMLMediaElement || "srcObject" in window.HTMLMediaElement.prototype ? (f = function(e, t) {
  1886. e.srcObject = t
  1887. }, m = function(e) {
  1888. return e.srcObject
  1889. }) : (f = function(e, t) {
  1890. "mozSrcObject" in e ? e.mozSrcObject = t : (e._srcObject = t, e.src = t ? URL.createObjectURL(t) : null)
  1891. }, m = function(e) {
  1892. return "mozSrcObject" in e ? e.mozSrcObject : e._srcObject
  1893. }), o = window.navigator && window.navigator.getUserMedia) : (f = function(e, t) {
  1894. e.srcObject = t
  1895. }, m = function(e) {
  1896. return e.srcObject
  1897. }), s = function(e, t) {
  1898. f(e, t)
  1899. }, c = function(e, t) {
  1900. f(e, m(t))
  1901. }, "undefined" != typeof window && window.navigator) if (navigator.mozGetUserMedia && window.mozRTCPeerConnection) {
  1902. for (var h in S.log("This appears to be Firefox"), d = "firefox", u = S.extractVersion(navigator.userAgent, /Firefox\/([0-9]+)\./, 1), l = 31, g = mozRTCPeerConnection, v) v[h] = g.prototype[h];
  1903. if (p = function(e, t) {
  1904. if (u < 38 && e && e.iceServers) {
  1905. for (var n = [], i = 0; i < e.iceServers.length; i++) {
  1906. var a = e.iceServers[i];
  1907. if (a.hasOwnProperty("urls")) for (var r = 0; r < a.urls.length; r++) {
  1908. var o = {
  1909. url: a.urls[r]
  1910. };
  1911. 0 === a.urls[r].indexOf("turn") && (o.username = a.username, o.credential = a.credential), n.push(o)
  1912. } else n.push(e.iceServers[i])
  1913. }
  1914. e.iceServers = n
  1915. }
  1916. var s = new g(e, t);
  1917. for (var c in v) s[c] = v[c];
  1918. return s
  1919. }, window.RTCSessionDescription || (window.RTCSessionDescription = mozRTCSessionDescription), window.RTCIceCandidate || (window.RTCIceCandidate = mozRTCIceCandidate), o = function(e, t, n) {
  1920. var i = function(e) {
  1921. if ("object" !== a()(e) || e.require) return e;
  1922. var t = [];
  1923. return Object.keys(e).forEach(function(n) {
  1924. if ("require" !== n && "advanced" !== n && "mediaSource" !== n) {
  1925. var i = e[n] = "object" === a()(e[n]) ? e[n] : {
  1926. ideal: e[n]
  1927. };
  1928. if (void 0 === i.min && void 0 === i.max && void 0 === i.exact || t.push(n), void 0 !== i.exact && ("number" == typeof i.exact ? i.min = i.max = i.exact : e[n] = i.exact, delete i.exact), void 0 !== i.ideal) {
  1929. e.advanced = e.advanced || [];
  1930. var r = {};
  1931. "number" == typeof i.ideal ? r[n] = {
  1932. min: i.ideal,
  1933. max: i.ideal
  1934. } : r[n] = i.ideal, e.advanced.push(r), delete i.ideal, Object.keys(i).length || delete e[n]
  1935. }
  1936. }
  1937. }), t.length && (e.require = t), e
  1938. };
  1939. return u < 38 && (S.log("spec: " + JSON.stringify(e)), e.audio && (e.audio = i(e.audio)), e.video && (e.video = i(e.video)), S.log("ff37: " + JSON.stringify(e))), navigator.mozGetUserMedia(e, t, n)
  1940. }, navigator.getUserMedia = o, navigator.mediaDevices || (navigator.mediaDevices = {
  1941. getUserMedia: T,
  1942. addEventListener: function() {},
  1943. removeEventListener: function() {}
  1944. }), navigator.mediaDevices.enumerateDevices = navigator.mediaDevices.enumerateDevices ||
  1945. function() {
  1946. return new Promise(function(e) {
  1947. e([{
  1948. kind: "audioinput",
  1949. deviceId: "default",
  1950. label: "",
  1951. groupId: ""
  1952. }, {
  1953. kind: "videoinput",
  1954. deviceId: "default",
  1955. label: "",
  1956. groupId: ""
  1957. }])
  1958. })
  1959. }, u < 41) {
  1960. var _ = navigator.mediaDevices.enumerateDevices.bind(navigator.mediaDevices);
  1961. navigator.mediaDevices.enumerateDevices = function() {
  1962. return _().then(void 0, function(e) {
  1963. if ("NotFoundError" === e.name) return [];
  1964. throw e
  1965. })
  1966. }
  1967. }
  1968. } else if (navigator.webkitGetUserMedia && window.webkitRTCPeerConnection) {
  1969. for (var h in S.log("This appears to be Chrome"), d = "chrome", u = S.extractVersion(navigator.userAgent, /Chrom(e|ium)\/([0-9]+)\./, 2), l = 38, g = webkitRTCPeerConnection, v) v[h] = g.prototype[h];
  1970. p = function(e, t) {
  1971. e && e.iceTransportPolicy && (e.iceTransports = e.iceTransportPolicy);
  1972. var n = new g(e, t);
  1973. for (var i in v) n[i] = v[i];
  1974. var a = n.getStats.bind(n);
  1975. return n.getStats = function(e, t, n) {
  1976. var i = arguments;
  1977. i.length > 0 && "function" == typeof e && (t ? (n = t, t = e, i = [e = null, t, n]) : (t = e, i = [e = null, t]));
  1978. if (i.length >= 2) {
  1979. return a.apply(this, [function(e) {
  1980. i[1](function(e) {
  1981. var t = {};
  1982. return e.result().forEach(function(e) {
  1983. var n = {
  1984. id: e.id,
  1985. timestamp: e.timestamp,
  1986. type: e.type
  1987. };
  1988. e.names().forEach(function(t) {
  1989. n[t] = e.stat(t)
  1990. }), t[n.id] = n
  1991. }), t
  1992. }(e))
  1993. },
  1994. i[0]])
  1995. }
  1996. return a()
  1997. }, n
  1998. }, ["createOffer", "createAnswer"].forEach(function(e) {
  1999. var t = webkitRTCPeerConnection.prototype[e];
  2000. webkitRTCPeerConnection.prototype[e] = function() {
  2001. var e = this;
  2002. if (arguments.length < 1 || 1 === arguments.length && "object" === a()(arguments[0])) {
  2003. var n = 1 === arguments.length ? arguments[0] : void 0;
  2004. return new Promise(function(i, a) {
  2005. t.apply(e, [i, a, n])
  2006. })
  2007. }
  2008. return t.apply(this, arguments)
  2009. }
  2010. }), ["setLocalDescription", "setRemoteDescription", "addIceCandidate"].forEach(function(e) {
  2011. var t = webkitRTCPeerConnection.prototype[e];
  2012. webkitRTCPeerConnection.prototype[e] = function() {
  2013. var e = arguments,
  2014. n = this;
  2015. return new Promise(function(i, a) {
  2016. t.apply(n, [e[0], function() {
  2017. i(), e.length >= 2 && e[1].apply(null, [])
  2018. }, function(t) {
  2019. a(t), e.length >= 3 && e[2].apply(null, [t])
  2020. }])
  2021. })
  2022. }
  2023. });
  2024. var E = function(e) {
  2025. if ("object" !== a()(e) || e.mandatory || e.optional) return e;
  2026. var t = {};
  2027. return Object.keys(e).forEach(function(n) {
  2028. if ("require" !== n && "advanced" !== n && "mediaSource" !== n) {
  2029. var i = "object" === a()(e[n]) ? e[n] : {
  2030. ideal: e[n]
  2031. };
  2032. void 0 !== i.exact && "number" == typeof i.exact && (i.min = i.max = i.exact);
  2033. var r = function(e, t) {
  2034. return e ? e + t.charAt(0).toUpperCase() + t.slice(1) : "deviceId" === t ? "sourceId" : t
  2035. };
  2036. if (void 0 !== i.ideal) {
  2037. t.optional = t.optional || [];
  2038. var o = {};
  2039. "number" == typeof i.ideal ? (o[r("min", n)] = i.ideal, t.optional.push(o), (o = {})[r("max", n)] = i.ideal, t.optional.push(o)) : (o[r("", n)] = i.ideal, t.optional.push(o))
  2040. }
  2041. void 0 !== i.exact && "number" != typeof i.exact ? (t.mandatory = t.mandatory || {}, t.mandatory[r("", n)] = i.exact) : ["min", "max"].forEach(function(e) {
  2042. void 0 !== i[e] && (t.mandatory = t.mandatory || {}, t.mandatory[r(e, n)] = i[e])
  2043. })
  2044. }
  2045. }), e.advanced && (t.optional = (t.optional || []).concat(e.advanced)), t
  2046. };
  2047. if (o = function(e, t, n) {
  2048. return e.audio && (e.audio = E(e.audio)), e.video && (e.video = E(e.video)), S.log("chrome: " + JSON.stringify(e)), navigator.webkitGetUserMedia(e, t, n)
  2049. }, navigator.getUserMedia = o, navigator.mediaDevices || (navigator.mediaDevices = {
  2050. getUserMedia: T,
  2051. enumerateDevices: function() {
  2052. return new Promise(function(e) {
  2053. var t = {
  2054. audio: "audioinput",
  2055. video: "videoinput"
  2056. };
  2057. return MediaStreamTrack.getSources(function(n) {
  2058. e(n.map(function(e) {
  2059. return {
  2060. label: e.label,
  2061. kind: t[e.kind],
  2062. deviceId: e.id,
  2063. groupId: ""
  2064. }
  2065. }))
  2066. })
  2067. })
  2068. }
  2069. }), navigator.mediaDevices.getUserMedia) {
  2070. if ((Object(r.getBrowserVersion)() ? Number(Object(r.getBrowserVersion)().split(".")[0]) : void 0) < 46) {
  2071. var I = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);
  2072. navigator.mediaDevices.getUserMedia = function(e) {
  2073. return S.log("spec: " + JSON.stringify(e)), e.audio = E(e.audio), e.video = E(e.video), S.log("chrome: " + JSON.stringify(e)), I(e)
  2074. }
  2075. }
  2076. } else navigator.mediaDevices.getUserMedia = function(e) {
  2077. return T(e)
  2078. };
  2079. void 0 === navigator.mediaDevices.addEventListener && (navigator.mediaDevices.addEventListener = function() {
  2080. S.log("Dummy mediaDevices.addEventListener called.")
  2081. }), void 0 === navigator.mediaDevices.removeEventListener && (navigator.mediaDevices.removeEventListener = function() {
  2082. S.log("Dummy mediaDevices.removeEventListener called.")
  2083. }), s = function(e, t) {
  2084. u >= 43 ? f(e, t) : void 0 !== e.src ? e.src = t ? URL.createObjectURL(t) : null : S.log("Error attaching stream to element.")
  2085. }, c = function(e, t) {
  2086. u >= 43 ? f(e, m(t)) : e.src = t.src
  2087. }
  2088. } else navigator.mediaDevices && navigator.userAgent.match(/Edge\/(\d+).(\d+)$/) ? (S.log("This appears to be Edge"), d = "edge", u = S.extractVersion(navigator.userAgent, /Edge\/(\d+).(\d+)$/, 2), l = 12) : S.log("Browser does not appear to be WebRTC-capable");
  2089. else S.log("This does not appear to be a browser"), d = "not a browser";
  2090. function T(e) {
  2091. return new Promise(function(t, n) {
  2092. o(e, t, n)
  2093. })
  2094. }
  2095. var y, b = {};
  2096. try {
  2097. Object.defineProperty(b, "version", {
  2098. set: function(e) {
  2099. u = e
  2100. }
  2101. })
  2102. } catch (e) {}
  2103. p ? y = p : "undefined" != typeof window && (y = window.RTCPeerConnection)
  2104. }, function(e, t, n) {
  2105. var i = n(25);
  2106. e.exports = function(e) {
  2107. for (var t = 1; t < arguments.length; t++) {
  2108. var n = null != arguments[t] ? arguments[t] : {},
  2109. a = Object.keys(n);
  2110. "function" == typeof Object.getOwnPropertySymbols && (a = a.concat(Object.getOwnPropertySymbols(n).filter(function(e) {
  2111. return Object.getOwnPropertyDescriptor(n, e).enumerable
  2112. }))), a.forEach(function(t) {
  2113. i(e, t, n[t])
  2114. })
  2115. }
  2116. return e
  2117. }
  2118. }, function(e, t, n) {
  2119. "use strict";
  2120. n.d(t, "a", function() {
  2121. return s
  2122. });
  2123. var i = window.AudioContext || window.webkitAudioContext,
  2124. a = n(3),
  2125. r = a.getParameter,
  2126. o = a.setParameter,
  2127. s = function() {
  2128. return r("AUDIO_CONTEXT") || (console.log("Creating Audio Context"), o("AUDIO_CONTEXT", function() {
  2129. if (i) return new i;
  2130. throw new Error("AUDIO_CONTEXT_NOT_SUPPORTED")
  2131. }())), r("AUDIO_CONTEXT")
  2132. }
  2133. }, function(e, t, n) {
  2134. var i = n(23),
  2135. a = n(24);
  2136. e.exports = function(e, t, n) {
  2137. var r = t && n || 0;
  2138. "string" == typeof e && (t = "binary" === e ? new Array(16) : null, e = null);
  2139. var o = (e = e || {}).random || (e.rng || i)();
  2140. if (o[6] = 15 & o[6] | 64, o[8] = 63 & o[8] | 128, t) for (var s = 0; s < 16; ++s) t[r + s] = o[s];
  2141. return t || a(o)
  2142. }
  2143. }, function(e, t, n) {
  2144. "use strict";
  2145. var i = this && this.__importDefault ||
  2146. function(e) {
  2147. return e && e.__esModule ? e : {
  2148. default:
  2149. e
  2150. }
  2151. };
  2152. Object.defineProperty(t, "__esModule", {
  2153. value: !0
  2154. });
  2155. var a, r = i(n(0)),
  2156. o = n(13);
  2157. !
  2158. function(e) {
  2159. e.NEW = "new", e.PREPARING_OFFER = "preparing-offer", e.OFFER_SENT = "offer-sent", e.ESTABLISHED = "established", e.CLOSED = "closed"
  2160. }(a || (a = {}));
  2161. var s = function() {
  2162. function e(e) {
  2163. this.candidate = null, this.state = a.NEW, this.config = e, this.isSubscriber = this.config.isSubscriber, this.peerConnection = this.initPeecConnection(e), this.peerConnection.onicecandidate = this._onicecandidate.bind(this), this.peerConnection.oniceconnectionstatechange = this._oniceconnectionstatechange.bind(this), this.peerConnection.onaddstream = this._onaddstream.bind(this), this.peerConnection.ontrack = this._ontrack.bind(this), this.processSignalingMessage = this.setAnswer.bind(this), this.peerConnection.createOffer({
  2164. offerToReceiveAudio: !0,
  2165. offerToReceiveVideo: !0
  2166. }).then(this.setLocalSDP.bind(this)), this.sendVideoStats = {
  2167. id: "",
  2168. type: "",
  2169. mediaType: "",
  2170. googCodecName: "h264" === this.config.codec ? "H264" : "VP8",
  2171. bytesSent: "0",
  2172. packetsLost: "0",
  2173. packetsSent: "0",
  2174. googAdaptationChanges: "0",
  2175. googAvgEncodeMs: "0",
  2176. googEncodeUsagePercent: "0",
  2177. googFirsReceived: "0",
  2178. googFrameHeightSent: "0",
  2179. googFrameHeightInput: "0",
  2180. googFrameRateInput: "0",
  2181. googFrameRateSent: "0",
  2182. googFrameWidthSent: "0",
  2183. googFrameWidthInput: "0",
  2184. googNacksReceived: "0",
  2185. googPlisReceived: "0",
  2186. googRtt: "0",
  2187. googFramesEncoded: "0"
  2188. }, this.sendAudioStats = {
  2189. id: "",
  2190. type: "",
  2191. mediaType: "",
  2192. googCodecName: "opus",
  2193. aecDivergentFilterFraction: "0",
  2194. audioInputLevel: "0",
  2195. bytesSent: "0",
  2196. packetsSent: "0",
  2197. googEchoCancellationReturnLoss: "0",
  2198. googEchoCancellationReturnLossEnhancement: "0"
  2199. }, this.receiveAudioStats = {
  2200. id: "",
  2201. type: "",
  2202. mediaType: "",
  2203. audioOutputLevel: "0",
  2204. bytesReceived: "0",
  2205. packetsLost: "0",
  2206. packetsReceived: "0",
  2207. googAccelerateRate: "0",
  2208. googCurrentDelayMs: "0",
  2209. googDecodingCNG: "0",
  2210. googDecodingCTN: "0",
  2211. googDecodingCTSG: "0",
  2212. googDecodingNormal: "0",
  2213. googDecodingPLC: "0",
  2214. googDecodingPLCCNG: "0",
  2215. googExpandRate: "0",
  2216. googJitterBufferMs: "0",
  2217. googJitterReceived: "0",
  2218. googPreemptiveExpandRate: "0",
  2219. googPreferredJitterBufferMs: "0",
  2220. googSecondaryDecodedRate: "0",
  2221. googSpeechExpandRate: "0"
  2222. }, this.receiveVideoStats = {
  2223. id: "",
  2224. type: "",
  2225. mediaType: "",
  2226. googTargetDelayMs: "0",
  2227. packetsLost: "0",
  2228. googDecodeMs: "0",
  2229. googMaxDecodeMs: "0",
  2230. googRenderDelayMs: "0",
  2231. googFrameWidthReceived: "0",
  2232. googFrameHeightReceived: "0",
  2233. googFrameRateReceived: "0",
  2234. googFrameRateDecoded: "0",
  2235. googFrameRateOutput: "0",
  2236. googFramesDecoded: "0",
  2237. googFrameReceived: "0",
  2238. googJitterBufferMs: "0",
  2239. googCurrentDelayMs: "0",
  2240. googMinPlayoutDelayMs: "0",
  2241. googNacksSent: "0",
  2242. googPlisSent: "0",
  2243. googFirsSent: "0",
  2244. bytesReceived: "0",
  2245. packetsReceived: "0"
  2246. }
  2247. }
  2248. return e.prototype.addStream = function(e) {
  2249. this.peerConnection.addStream(e)
  2250. }, e.prototype.setAnswer = function(e) {
  2251. var t = JSON.parse(e);
  2252. this.peerConnection.setRemoteDescription(new RTCSessionDescription({
  2253. sdp: t.sdp,
  2254. type: "answer"
  2255. })), this.onsignalingmessage && this.onsignalingmessage("")
  2256. }, e.prototype.close = function() {
  2257. this.peerConnection.close()
  2258. }, e.prototype.getStats = function(e, t) {
  2259. if (void 0 === t && (t = 500), t = t > 500 ? 500 : t, Date.now() - this.lastTimeGetStats < t) {
  2260. var n = [];
  2261. this.config.isSubscriber ? (n.push(this.receiveVideoStats), n.push(this.receiveAudioStats)) : (n.push(this.sendAudioStats), n.push(this.sendVideoStats)), n.push({
  2262. id: "time",
  2263. startTime: this.connectedTime,
  2264. timestamp: Date.now()
  2265. }), e && e(n)
  2266. } else this._getStats(e)
  2267. }, e.prototype._getStats = function(e) {
  2268. var t = this,
  2269. n = [];
  2270. this.peerConnection.getStats(null).then(function(i) {
  2271. t.lastTimeGetStats = Date.now(), Object.keys(i).map(function(e) {
  2272. var n = i[e];
  2273. t.config.isSubscriber ? n.type && "inboundrtp" === n.type && n.mediaType && "audio" === n.mediaType ? (t.receiveAudioStats.id = n.id + "recv", t.receiveAudioStats.type = n.type + "", t.receiveAudioStats.mediaType = n.mediaType + "", t.receiveAudioStats.packetsReceived = n.packetsReceived + "", t.receiveAudioStats.bytesReceived = n.bytesReceived + "", t.receiveAudioStats.packetsLost = n.packetsLost + "", t.receiveAudioStats.googJitterReceived = n.jitter + "") : n.type && "inboundrtp" === n.type && n.mediaType && "video" === n.mediaType ? (t.receiveVideoStats.id = n.id + "recv", t.receiveVideoStats.type = n.type + "", t.receiveVideoStats.mediaType = n.mediaType + "", t.receiveVideoStats.packetsReceived = n.packetsReceived + "", t.receiveVideoStats.bytesReceived = n.bytesReceived + "", t.receiveVideoStats.packetsLost = n.packetsLost + "", t.receiveVideoStats.googJitterBufferMs = n.jitter + "", t.receiveVideoStats.googPlisSent = n.pliCount + "", t.receiveVideoStats.googFirsSent = n.firCount + "", t.receiveVideoStats.googNacksSent = n.nackCount + "") : n.remoteSource && n.type && "track" === n.type && n.trackIdentifier && -1 !== n.trackIdentifier.indexOf("v") ? (t.receiveVideoStats.googFrameHeightReceived = n.frameHeight + "", t.receiveVideoStats.googFrameWidthReceived = n.frameWidth + "", t.receiveVideoStats.googFrameRateDecoded = n.framesPerSecond + "", t.receiveVideoStats.googFrameRateOutput = n.framesPerSecond + "", t.receiveVideoStats.googFrameRateReceived = n.framesPerSecond + "", t.receiveVideoStats.googFramesDecoded = n.framesDecoded + "", t.receiveVideoStats.googFrameReceived = n.framesReceived + "") : n.remoteSource && n.type && "track" === n.type && n.trackIdentifier && -1 !== n.trackIdentifier.indexOf("a") && (t.receiveAudioStats.audioOutputLevel = n.audioLevel + "") : !n.isRemote && n.type && "outboundrtp" === n.type && n.mediaType && "audio" === n.mediaType ? (t.sendAudioStats.id = n.id + "send", t.sendAudioStats.type = n.type + "", t.sendAudioStats.mediaType = n.mediaType + "", t.sendAudioStats.packetsSent = n.packetsSent + "", t.sendAudioStats.bytesSent = n.bytesSent + "") : !n.isRemote && n.type && "outboundrtp" === n.type && n.mediaType && "video" === n.mediaType ? (t.sendVideoStats.id = n.id + "send", t.sendVideoStats.type = n.type + "", t.sendVideoStats.mediaType = n.mediaType + "", t.sendVideoStats.packetsSent = n.packetsSent + "", t.sendVideoStats.bytesSent = n.bytesSent + "", t.sendVideoStats.googRtt = n.roundTripTime + "", t.sendVideoStats.googPlisReceived = n.pliCount + "", t.sendVideoStats.googFirsReceived = n.firCount + "", t.sendVideoStats.googNacksReceived = n.nackCount + "") : !n.remoteSource && n.type && "track" === n.type && n.framesSent && 0 !== n.framesSent && (t.sendVideoStats.googFrameHeightSent = n.frameHeight + "", t.sendVideoStats.googFrameHeightInput = n.frameHeight + "", t.sendVideoStats.googFrameWidthSent = n.frameWidth + "", t.sendVideoStats.googFrameWidthInput = n.frameWidth + "", t.sendVideoStats.googFramesEncoded = n.framesSent + "", t.sendVideoStats.googFrameRateSent = n.framesPerSecond + "")
  2274. }), t.config.isSubscriber ? (n.push(t.receiveVideoStats), n.push(t.receiveAudioStats)) : (n.push(t.sendAudioStats), n.push(t.sendVideoStats)), n.push({
  2275. id: "time",
  2276. startTime: t.connectedTime,
  2277. timestamp: Date.now()
  2278. }), e && e(n)
  2279. })
  2280. }, e.prototype.getStatsRate = function(e) {
  2281. this.getStats(e)
  2282. }, e.prototype.initPeecConnection = function(e) {
  2283. var t = e.stunServerUrl,
  2284. n = e.turnServer,
  2285. i = e.iceServers;
  2286. return this.pcConfig = {
  2287. iceServers: [{
  2288. urls: "stun:webcs.agora.io:3478"
  2289. }]
  2290. }, i instanceof Array ? this.pcConfig.iceServers = e.iceServers : t && (t instanceof Array ? t.map(function(e) {
  2291. "string" == typeof e && "" !== e && this.pcConfig.iceServers.push({
  2292. urls: e
  2293. })
  2294. }) : "string" == typeof t && "" !== t && this.pcConfig.iceServers.push({
  2295. urls: t
  2296. })), n && (n instanceof Array ? n.map(function(e) {
  2297. "string" == typeof e.url && "" !== e.url && this.pcConfig.iceServers.push({
  2298. username: e.username,
  2299. credential: e.credential,
  2300. url: e.url
  2301. })
  2302. }) : "auto" !== n.mode && "manual" !== n.mode || (n.udpport && this.pcConfig.iceServers.push({
  2303. username: n.username,
  2304. credential: n.credential,
  2305. credentialType: "password",
  2306. urls: "turn:" + n.url + ":" + n.udpport + "?transport=udp"
  2307. }), "string" == typeof n.tcpport && "" !== n.tcpport && this.pcConfig.iceServers.push({
  2308. username: n.username,
  2309. credential: n.credential,
  2310. credentialType: "password",
  2311. urls: "turn:" + n.url + ":" + n.tcpport + "?transport=tcp"
  2312. }), !0 === n.forceturn && (this.pcConfig.iceTransportPolicy = "relay"))), new o.RTCPeerConnection(this.pcConfig)
  2313. }, e.prototype._ontrack = function(e) {
  2314. this.onaddstream && this.onaddstream(e, "ontrack")
  2315. }, e.prototype._onaddstream = function(e) {
  2316. this.onaddstream && this.onaddstream(e, "onaddstream")
  2317. }, e.prototype._oniceconnectionstatechange = function(e) {
  2318. "connected" === e.currentTarget.iceConnectionState && (this.state = a.ESTABLISHED, this.connectedTime = Date.now()), this.oniceconnectionstatechange && this.oniceconnectionstatechange(e.currentTarget.iceConnectionState)
  2319. }, e.prototype._onicecandidate = function(e) {
  2320. !this.candidate && e && (this.candidate = e.candidate, this.peerConnection.createOffer({
  2321. offerToReceiveAudio: !0,
  2322. offerToReceiveVideo: !0
  2323. }).then(this.editLocalSDP.bind(this)).then(this.setLocalSDP.bind(this)).then(this.sendOffer.bind(this)).
  2324. catch ())
  2325. }, e.prototype.setLocalSDP = function(e) {
  2326. return this.peerConnection.setLocalDescription(new RTCSessionDescription({
  2327. sdp: e.sdp,
  2328. type: "offer"
  2329. })), this.state = a.PREPARING_OFFER, e
  2330. }, e.prototype.editLocalSDP = function(e) {
  2331. return e.sdp = this.setBandWidth(e.sdp), e.sdp = this.reviseOpus(e.sdp), e.sdp = this.addCandidate(e.sdp), e
  2332. }, e.prototype.setSendRecv = function(e) {
  2333. return e = (e = (e = e.replace(/a=recvonly\r\n/g, "a=sendrecv\r\n")).replace(/a=sendonly\r\n/g, "a=sendrecv\r\n")).replace(/a=inactive\r\n/g, "a=sendrecv\r\n")
  2334. }, e.prototype.setBandWidth = function(e) {
  2335. var t, n, i = this.config,
  2336. a = i.codec,
  2337. o = i.minVideoBW,
  2338. s = i.maxVideoBW,
  2339. c = i.maxAudioBW,
  2340. d = i.clientId;
  2341. if ((t = e.match(/m=video.*\r\n/)) && o && s) {
  2342. n = t[0] + "b=AS:" + s + "\r\n";
  2343. var u = 0,
  2344. l = 0;
  2345. "h264" === a ? (u = e.search(/a=rtpmap:(\d+) H264\/90000\r\n/), l = e.search(/H264\/90000\r\n/)) : "vp8" === a && (u = e.search(/a=rtpmap:(\d+) VP8\/90000\r\n/), l = e.search(/VP8\/90000\r\n/)), -1 !== u && -1 !== l && l - u > 10 && (n = n + "a=fmtp:" + e.slice(u + 9, l - 1) + " x-google-min-bitrate=" + o + "\r\n"), e = e.replace(t[0], n), r.
  2346. default.debug("[" + d + "]Set Video Bitrate - min:" + o + " max:" + s)
  2347. }
  2348. return (t = e.match(/m=audio.*\r\n/)) && c && (n = t[0] + "b=AS:" + c + "\r\n", e = e.replace(t[0], n)), e
  2349. }, e.prototype.reviseOpus = function(e) {
  2350. return e = (e = e.replace(/a=rtpmap:102 opus\/48000\/2/g, "a=rtpmap:111 opus/48000/2")).replace(/m=audio 9 UDP\/TLS\/RTP\/SAVPF 102 0 8 97 13 118 101/g, "m=audio 9 UDP/TLS/RTP/SAVPF 111 0 8 97 13 118 101")
  2351. }, e.prototype.addCandidate = function(e) {
  2352. return e += "a=candidate:2243255435 1 udp 2122194687 192.168.0.1 30000 typ host generation 0 network-id 1\r\n"
  2353. }, e.prototype.sendOffer = function(e) {
  2354. this.config.callback(JSON.stringify({
  2355. sdp: e.sdp,
  2356. messageType: "OFFER",
  2357. tiebreaker: Math.floor(429496723 * Math.random() + 1)
  2358. })), this.state = a.OFFER_SENT
  2359. }, e
  2360. }();
  2361. t.
  2362. default = s
  2363. }, function(e, t, n) {
  2364. var i = n(28),
  2365. a = n(29),
  2366. r = n(30);
  2367. e.exports = function(e, t) {
  2368. return i(e) || a(e, t) || r()
  2369. }
  2370. }, function(e, t, n) {
  2371. var i, a;
  2372. a = this, void 0 === (i = function() {
  2373. return function() {
  2374. "use strict";
  2375. var e, t = this;
  2376. function n(e) {
  2377. t.console && (t.console.error ? t.console.error(e) : t.console.log && t.console.log(e))
  2378. }
  2379. function i(e, t, i, a) {
  2380. var r = a || n,
  2381. o = e.createShader(i);
  2382. e.shaderSource(o, t), e.compileShader(o);
  2383. var s = e.getShaderParameter(o, e.COMPILE_STATUS);
  2384. if (!s) {
  2385. var c = e.getShaderInfoLog(o);
  2386. return r("*** Error compiling shader '" + o + "':" + c), e.deleteShader(o), null
  2387. }
  2388. return o
  2389. }
  2390. function a(e, t, i, a, r) {
  2391. var o = r || n,
  2392. s = e.createProgram();
  2393. t.forEach(function(t) {
  2394. e.attachShader(s, t)
  2395. }), i && i.forEach(function(t, n) {
  2396. e.bindAttribLocation(s, a ? a[n] : n, t)
  2397. }), e.linkProgram(s);
  2398. var c = e.getProgramParameter(s, e.LINK_STATUS);
  2399. if (!c) {
  2400. var d = e.getProgramInfoLog(s);
  2401. return o("Error in program linking:" + d), e.deleteProgram(s), null
  2402. }
  2403. return s
  2404. }(e = e || t) === e.top && (console.log("%c%s", "color:blue;font-weight:bold;", "for more about webgl-utils.js see:"), console.log("%c%s", "color:blue;font-weight:bold;", "http://webglfundamentals.org/webgl/lessons/webgl-boilerplate.html"));
  2405. var r, o = ["VERTEX_SHADER", "FRAGMENT_SHADER"];
  2406. return !document.documentMode && window.StyleMedia && (HTMLCanvasElement.prototype.getContext = (r = HTMLCanvasElement.prototype.getContext, function() {
  2407. var e = arguments,
  2408. t = e[0];
  2409. return "webgl" === t && ((e = [].slice.call(arguments))[0] = "experimental-webgl"), r.apply(this, e)
  2410. })), {
  2411. createProgram: a,
  2412. createProgramFromSources: function(e, t, n, r, s) {
  2413. for (var c = [], d = 0; d < t.length; ++d) c.push(i(e, t[d], e[o[d]], s));
  2414. return a(e, c, n, r, s)
  2415. }
  2416. }
  2417. }.call(a)
  2418. }.apply(t, [])) || (e.exports = i)
  2419. }, function(e, t, n) {
  2420. "use strict";
  2421. var i = this && this.__awaiter ||
  2422. function(e, t, n, i) {
  2423. return new(n || (n = Promise))(function(a, r) {
  2424. function o(e) {
  2425. try {
  2426. c(i.next(e))
  2427. } catch (e) {
  2428. r(e)
  2429. }
  2430. }
  2431. function s(e) {
  2432. try {
  2433. c(i.
  2434. throw (e))
  2435. } catch (e) {
  2436. r(e)
  2437. }
  2438. }
  2439. function c(e) {
  2440. e.done ? a(e.value) : new n(function(t) {
  2441. t(e.value)
  2442. }).then(o, s)
  2443. }
  2444. c((i = i.apply(e, t || [])).next())
  2445. })
  2446. }, a = this && this.__generator ||
  2447. function(e, t) {
  2448. var n, i, a, r, o = {
  2449. label: 0,
  2450. sent: function() {
  2451. if (1 & a[0]) throw a[1];
  2452. return a[1]
  2453. },
  2454. trys: [],
  2455. ops: []
  2456. };
  2457. return r = {
  2458. next: s(0),
  2459. throw :s(1),
  2460. return :s(2)
  2461. }, "function" == typeof Symbol && (r[Symbol.iterator] = function() {
  2462. return this
  2463. }), r;
  2464. function s(r) {
  2465. return function(s) {
  2466. return function(r) {
  2467. if (n) throw new TypeError("Generator is already executing.");
  2468. for (; o;) try {
  2469. if (n = 1, i && (a = 2 & r[0] ? i.
  2470. return :r[0] ? i.
  2471. throw ||((a = i.
  2472. return) && a.call(i), 0) : i.next) && !(a = a.call(i, r[1])).done) return a;
  2473. switch (i = 0, a && (r = [2 & r[0], a.value]), r[0]) {
  2474. case 0:
  2475. case 1:
  2476. a = r;
  2477. break;
  2478. case 4:
  2479. return o.label++, {
  2480. value: r[1],
  2481. done: !1
  2482. };
  2483. case 5:
  2484. o.label++, i = r[1], r = [0];
  2485. continue;
  2486. case 7:
  2487. r = o.ops.pop(), o.trys.pop();
  2488. continue;
  2489. default:
  2490. if (!(a = (a = o.trys).length > 0 && a[a.length - 1]) && (6 === r[0] || 2 === r[0])) {
  2491. o = 0;
  2492. continue
  2493. }
  2494. if (3 === r[0] && (!a || r[1] > a[0] && r[1] < a[3])) {
  2495. o.label = r[1];
  2496. break
  2497. }
  2498. if (6 === r[0] && o.label < a[1]) {
  2499. o.label = a[1], a = r;
  2500. break
  2501. }
  2502. if (a && o.label < a[2]) {
  2503. o.label = a[2], o.ops.push(r);
  2504. break
  2505. }
  2506. a[2] && o.ops.pop(), o.trys.pop();
  2507. continue
  2508. }
  2509. r = t.call(e, o)
  2510. } catch (e) {
  2511. r = [6, e], i = 0
  2512. } finally {
  2513. n = a = 0
  2514. }
  2515. if (5 & r[0]) throw r[1];
  2516. return {
  2517. value: r[0] ? r[1] : void 0,
  2518. done: !0
  2519. }
  2520. }([r, s])
  2521. }
  2522. }
  2523. }, r = this && this.__importDefault ||
  2524. function(e) {
  2525. return e && e.__esModule ? e : {
  2526. default:
  2527. e
  2528. }
  2529. }, o = this;
  2530. Object.defineProperty(t, "__esModule", {
  2531. value: !0
  2532. });
  2533. var s = n(31),
  2534. c = n(5),
  2535. d = r(n(0));
  2536. t.getSupportedCodec = function(e) {
  2537. return i(o, void 0, void 0, function() {
  2538. var t, n, i, r, o;
  2539. return a(this, function(a) {
  2540. switch (a.label) {
  2541. case 0:
  2542. return t = {
  2543. video: [],
  2544. audio: []
  2545. }, "undefined" != typeof window ? [3, 1] : (d.
  2546. default.error("getSupportedCodec: NOT_BROWSER_ENV"), [2, Promise.reject("NOT_BROWSER_ENV")]);
  2547. case 1:
  2548. try {
  2549. n = s.createRTCPeerConnection({
  2550. iceServers: []
  2551. })
  2552. } catch (e) {
  2553. return d.
  2554. default.error("Failed to init RTCPeerConnection", e), [2, Promise.reject(e)]
  2555. }
  2556. return n ? [3, 2] : (d.
  2557. default.warning("getSupportedCodec: no RTCPeerConnection constructor is detected"), [2, Promise.resolve(t)]);
  2558. case 2:
  2559. return e && e.stream ? [3, 7] : (i = {
  2560. mandatory: {
  2561. OfferToReceiveAudio: !0,
  2562. OfferToReceiveVideo: !0
  2563. }
  2564. }, r = void 0, (c.isSafari() || c.isFireFox() || c.isWeChatBrowser()) && n.addTransceiver ? (n.addTransceiver("audio"), n.addTransceiver("video"), [4, n.createOffer()]) : [3, 4]);
  2565. case 3:
  2566. return r = a.sent(), [3, 6];
  2567. case 4:
  2568. return [4, new Promise(function(e, t) {
  2569. var a = setTimeout(function() {
  2570. t("CREATEOFFER_TIMEOUT")
  2571. }, 3e3);
  2572. n.createOffer(function(t) {
  2573. clearTimeout(a), e(t)
  2574. }, function(e) {
  2575. clearTimeout(a), t(e)
  2576. }, i)
  2577. })];
  2578. case 5:
  2579. r = a.sent(), a.label = 6;
  2580. case 6:
  2581. return n.close(), o = r.sdp, [2, u(o)];
  2582. case 7:
  2583. return e.stream.getTracks && n.addTrack ? e.stream.getTracks().forEach(function(t) {
  2584. n.addTrack(t, e.stream)
  2585. }) : n.addStream(e.stream), r = void 0, c.isSafari() || c.isFireFox() ? [4, n.createOffer()] : [3, 9];
  2586. case 8:
  2587. return r = a.sent(), [3, 11];
  2588. case 9:
  2589. return [4, new Promise(function(e, t) {
  2590. n.createOffer(e, t)
  2591. })];
  2592. case 10:
  2593. r = a.sent(), a.label = 11;
  2594. case 11:
  2595. return n.close(), o = r.sdp, [2, u(o)]
  2596. }
  2597. })
  2598. })
  2599. };
  2600. var u = function(e) {
  2601. var t = {
  2602. video: [],
  2603. audio: []
  2604. };
  2605. return e.match(/ VP8/i) && t.video.push("VP8"), e.match(/ H264/i) && t.video.push("H264"), e.match(/ opus/i) && t.audio.push("OPUS"), Promise.resolve(t)
  2606. }
  2607. }, function(e, t, n) {
  2608. var i = n(33),
  2609. a = n(34),
  2610. r = n(35);
  2611. e.exports = function(e) {
  2612. return i(e) || a(e) || r()
  2613. }
  2614. }, function(e, t, n) {
  2615. "use strict";
  2616. var i = this && this.__importDefault ||
  2617. function(e) {
  2618. return e && e.__esModule ? e : {
  2619. default:
  2620. e
  2621. }
  2622. };
  2623. Object.defineProperty(t, "__esModule", {
  2624. value: !0
  2625. });
  2626. var a = i(n(4)),
  2627. r = i(n(0));
  2628. t.
  2629. default = function(e, t) {
  2630. void 0 === t && (t = {
  2631. width: 160,
  2632. height: 120,
  2633. framerate: 15
  2634. });
  2635. var n = t.width,
  2636. i = t.height,
  2637. o = t.framerate;
  2638. if (!e) throw a.
  2639. default.INVALID_LOCAL_STREAM;
  2640. if (!e.getVideoTracks()[0]) throw a.
  2641. default.HIGH_STREAM_NOT_VIDEO_TRACE;
  2642. r.
  2643. default.debug("Start getLowStream");
  2644. var s = document.createElement("video"),
  2645. c = document.createElement("canvas");
  2646. s.setAttribute("style", "display:none"), c.setAttribute("style", "display:none"), c.setAttribute("width", n.toString()), c.setAttribute("height", i.toString()), document.body.append(s), document.body.append(c);
  2647. var d = c.getContext("2d");
  2648. s.srcObject = e, s.autoplay = !0, r.
  2649. default.debug("Start render lowStream");
  2650. var u = setInterval(function() {
  2651. d.drawImage(s, 0, 0, n, i)
  2652. }, Math.floor(1e3 / o)),
  2653. l = c.captureStream(o);
  2654. return l.clean = function() {
  2655. r.
  2656. default.debug("Start clean lowStream"), clearInterval(u), (s || s.parentNode || s.parentNode.removeChild) && s.parentNode.removeChild(s), (c || c.parentNode || c.parentNode.removeChild) && c.parentNode.removeChild(c), r.
  2657. default.debug("Clean lowStream")
  2658. }, l
  2659. }
  2660. }, function(e, t) {
  2661. var n = "undefined" != typeof crypto && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || "undefined" != typeof msCrypto && "function" == typeof window.msCrypto.getRandomValues && msCrypto.getRandomValues.bind(msCrypto);
  2662. if (n) {
  2663. var i = new Uint8Array(16);
  2664. e.exports = function() {
  2665. return n(i), i
  2666. }
  2667. } else {
  2668. var a = new Array(16);
  2669. e.exports = function() {
  2670. for (var e, t = 0; t < 16; t++) 0 == (3 & t) && (e = 4294967296 * Math.random()), a[t] = e >>> ((3 & t) << 3) & 255;
  2671. return a
  2672. }
  2673. }
  2674. }, function(e, t) {
  2675. for (var n = [], i = 0; i < 256; ++i) n[i] = (i + 256).toString(16).substr(1);
  2676. e.exports = function(e, t) {
  2677. var i = t || 0,
  2678. a = n;
  2679. return [a[e[i++]], a[e[i++]], a[e[i++]], a[e[i++]], "-", a[e[i++]], a[e[i++]], "-", a[e[i++]], a[e[i++]], "-", a[e[i++]], a[e[i++]], "-", a[e[i++]], a[e[i++]], a[e[i++]], a[e[i++]], a[e[i++]], a[e[i++]]].join("")
  2680. }
  2681. }, function(e, t) {
  2682. e.exports = function(e, t, n) {
  2683. return t in e ? Object.defineProperty(e, t, {
  2684. value: n,
  2685. enumerable: !0,
  2686. configurable: !0,
  2687. writable: !0
  2688. }) : e[t] = n, e
  2689. }
  2690. }, function(e, t, n) {
  2691. var i = function() {
  2692. return this || "object" == typeof self && self
  2693. }() || Function("return this")(),
  2694. a = i.regeneratorRuntime && Object.getOwnPropertyNames(i).indexOf("regeneratorRuntime") >= 0,
  2695. r = a && i.regeneratorRuntime;
  2696. if (i.regeneratorRuntime = void 0, e.exports = n(27), a) i.regeneratorRuntime = r;
  2697. else try {
  2698. delete i.regeneratorRuntime
  2699. } catch (e) {
  2700. i.regeneratorRuntime = void 0
  2701. }
  2702. }, function(e, t) {
  2703. !
  2704. function(t) {
  2705. "use strict";
  2706. var n, i = Object.prototype,
  2707. a = i.hasOwnProperty,
  2708. r = "function" == typeof Symbol ? Symbol : {},
  2709. o = r.iterator || "@@iterator",
  2710. s = r.asyncIterator || "@@asyncIterator",
  2711. c = r.toStringTag || "@@toStringTag",
  2712. d = "object" == typeof e,
  2713. u = t.regeneratorRuntime;
  2714. if (u) d && (e.exports = u);
  2715. else {
  2716. (u = t.regeneratorRuntime = d ? e.exports : {}).wrap = E;
  2717. var l = "suspendedStart",
  2718. p = "suspendedYield",
  2719. f = "executing",
  2720. m = "completed",
  2721. g = {},
  2722. v = {};
  2723. v[o] = function() {
  2724. return this
  2725. };
  2726. var S = Object.getPrototypeOf,
  2727. h = S && S(S(D([])));
  2728. h && h !== i && a.call(h, o) && (v = h);
  2729. var _ = b.prototype = T.prototype = Object.create(v);
  2730. y.prototype = _.constructor = b, b.constructor = y, b[c] = y.displayName = "GeneratorFunction", u.isGeneratorFunction = function(e) {
  2731. var t = "function" == typeof e && e.constructor;
  2732. return !!t && (t === y || "GeneratorFunction" === (t.displayName || t.name))
  2733. }, u.mark = function(e) {
  2734. return Object.setPrototypeOf ? Object.setPrototypeOf(e, b) : (e.__proto__ = b, c in e || (e[c] = "GeneratorFunction")), e.prototype = Object.create(_), e
  2735. }, u.awrap = function(e) {
  2736. return {
  2737. __await: e
  2738. }
  2739. }, R(A.prototype), A.prototype[s] = function() {
  2740. return this
  2741. }, u.AsyncIterator = A, u.async = function(e, t, n, i) {
  2742. var a = new A(E(e, t, n, i));
  2743. return u.isGeneratorFunction(t) ? a : a.next().then(function(e) {
  2744. return e.done ? e.value : a.next()
  2745. })
  2746. }, R(_), _[c] = "Generator", _[o] = function() {
  2747. return this
  2748. }, _.toString = function() {
  2749. return "[object Generator]"
  2750. }, u.keys = function(e) {
  2751. var t = [];
  2752. for (var n in e) t.push(n);
  2753. return t.reverse(), function n() {
  2754. for (; t.length;) {
  2755. var i = t.pop();
  2756. if (i in e) return n.value = i, n.done = !1, n
  2757. }
  2758. return n.done = !0, n
  2759. }
  2760. }, u.values = D, w.prototype = {
  2761. constructor: w,
  2762. reset: function(e) {
  2763. if (this.prev = 0, this.next = 0, this.sent = this._sent = n, this.done = !1, this.delegate = null, this.method = "next", this.arg = n, this.tryEntries.forEach(N), !e) for (var t in this)"t" === t.charAt(0) && a.call(this, t) && !isNaN(+t.slice(1)) && (this[t] = n)
  2764. },
  2765. stop: function() {
  2766. this.done = !0;
  2767. var e = this.tryEntries[0].completion;
  2768. if ("throw" === e.type) throw e.arg;
  2769. return this.rval
  2770. },
  2771. dispatchException: function(e) {
  2772. if (this.done) throw e;
  2773. var t = this;
  2774. function i(i, a) {
  2775. return s.type = "throw", s.arg = e, t.next = i, a && (t.method = "next", t.arg = n), !! a
  2776. }
  2777. for (var r = this.tryEntries.length - 1; r >= 0; --r) {
  2778. var o = this.tryEntries[r],
  2779. s = o.completion;
  2780. if ("root" === o.tryLoc) return i("end");
  2781. if (o.tryLoc <= this.prev) {
  2782. var c = a.call(o, "catchLoc"),
  2783. d = a.call(o, "finallyLoc");
  2784. if (c && d) {
  2785. if (this.prev < o.catchLoc) return i(o.catchLoc, !0);
  2786. if (this.prev < o.finallyLoc) return i(o.finallyLoc)
  2787. } else if (c) {
  2788. if (this.prev < o.catchLoc) return i(o.catchLoc, !0)
  2789. } else {
  2790. if (!d) throw new Error("try statement without catch or finally");
  2791. if (this.prev < o.finallyLoc) return i(o.finallyLoc)
  2792. }
  2793. }
  2794. }
  2795. },
  2796. abrupt: function(e, t) {
  2797. for (var n = this.tryEntries.length - 1; n >= 0; --n) {
  2798. var i = this.tryEntries[n];
  2799. if (i.tryLoc <= this.prev && a.call(i, "finallyLoc") && this.prev < i.finallyLoc) {
  2800. var r = i;
  2801. break
  2802. }
  2803. }
  2804. r && ("break" === e || "continue" === e) && r.tryLoc <= t && t <= r.finallyLoc && (r = null);
  2805. var o = r ? r.completion : {};
  2806. return o.type = e, o.arg = t, r ? (this.method = "next", this.next = r.finallyLoc, g) : this.complete(o)
  2807. },
  2808. complete: function(e, t) {
  2809. if ("throw" === e.type) throw e.arg;
  2810. return "break" === e.type || "continue" === e.type ? this.next = e.arg : "return" === e.type ? (this.rval = this.arg = e.arg, this.method = "return", this.next = "end") : "normal" === e.type && t && (this.next = t), g
  2811. },
  2812. finish: function(e) {
  2813. for (var t = this.tryEntries.length - 1; t >= 0; --t) {
  2814. var n = this.tryEntries[t];
  2815. if (n.finallyLoc === e) return this.complete(n.completion, n.afterLoc), N(n), g
  2816. }
  2817. },
  2818. catch: function(e) {
  2819. for (var t = this.tryEntries.length - 1; t >= 0; --t) {
  2820. var n = this.tryEntries[t];
  2821. if (n.tryLoc === e) {
  2822. var i = n.completion;
  2823. if ("throw" === i.type) {
  2824. var a = i.arg;
  2825. N(n)
  2826. }
  2827. return a
  2828. }
  2829. }
  2830. throw new Error("illegal catch attempt")
  2831. },
  2832. delegateYield: function(e, t, i) {
  2833. return this.delegate = {
  2834. iterator: D(e),
  2835. resultName: t,
  2836. nextLoc: i
  2837. }, "next" === this.method && (this.arg = n), g
  2838. }
  2839. }
  2840. }
  2841. function E(e, t, n, i) {
  2842. var a = t && t.prototype instanceof T ? t : T,
  2843. r = Object.create(a.prototype),
  2844. o = new w(i || []);
  2845. return r._invoke = function(e, t, n) {
  2846. var i = l;
  2847. return function(a, r) {
  2848. if (i === f) throw new Error("Generator is already running");
  2849. if (i === m) {
  2850. if ("throw" === a) throw r;
  2851. return k()
  2852. }
  2853. for (n.method = a, n.arg = r;;) {
  2854. var o = n.delegate;
  2855. if (o) {
  2856. var s = O(o, n);
  2857. if (s) {
  2858. if (s === g) continue;
  2859. return s
  2860. }
  2861. }
  2862. if ("next" === n.method) n.sent = n._sent = n.arg;
  2863. else if ("throw" === n.method) {
  2864. if (i === l) throw i = m, n.arg;
  2865. n.dispatchException(n.arg)
  2866. } else "return" === n.method && n.abrupt("return", n.arg);
  2867. i = f;
  2868. var c = I(e, t, n);
  2869. if ("normal" === c.type) {
  2870. if (i = n.done ? m : p, c.arg === g) continue;
  2871. return {
  2872. value: c.arg,
  2873. done: n.done
  2874. }
  2875. }
  2876. "throw" === c.type && (i = m, n.method = "throw", n.arg = c.arg)
  2877. }
  2878. }
  2879. }(e, n, o), r
  2880. }
  2881. function I(e, t, n) {
  2882. try {
  2883. return {
  2884. type: "normal",
  2885. arg: e.call(t, n)
  2886. }
  2887. } catch (e) {
  2888. return {
  2889. type: "throw",
  2890. arg: e
  2891. }
  2892. }
  2893. }
  2894. function T() {}
  2895. function y() {}
  2896. function b() {}
  2897. function R(e) {
  2898. ["next", "throw", "return"].forEach(function(t) {
  2899. e[t] = function(e) {
  2900. return this._invoke(t, e)
  2901. }
  2902. })
  2903. }
  2904. function A(e) {
  2905. var t;
  2906. this._invoke = function(n, i) {
  2907. function r() {
  2908. return new Promise(function(t, r) {
  2909. !
  2910. function t(n, i, r, o) {
  2911. var s = I(e[n], e, i);
  2912. if ("throw" !== s.type) {
  2913. var c = s.arg,
  2914. d = c.value;
  2915. return d && "object" == typeof d && a.call(d, "__await") ? Promise.resolve(d.__await).then(function(e) {
  2916. t("next", e, r, o)
  2917. }, function(e) {
  2918. t("throw", e, r, o)
  2919. }) : Promise.resolve(d).then(function(e) {
  2920. c.value = e, r(c)
  2921. }, function(e) {
  2922. return t("throw", e, r, o)
  2923. })
  2924. }
  2925. o(s.arg)
  2926. }(n, i, t, r)
  2927. })
  2928. }
  2929. return t = t ? t.then(r, r) : r()
  2930. }
  2931. }
  2932. function O(e, t) {
  2933. var i = e.iterator[t.method];
  2934. if (i === n) {
  2935. if (t.delegate = null, "throw" === t.method) {
  2936. if (e.iterator.
  2937. return &&(t.method = "return", t.arg = n, O(e, t), "throw" === t.method)) return g;
  2938. t.method = "throw", t.arg = new TypeError("The iterator does not provide a 'throw' method")
  2939. }
  2940. return g
  2941. }
  2942. var a = I(i, e.iterator, t.arg);
  2943. if ("throw" === a.type) return t.method = "throw", t.arg = a.arg, t.delegate = null, g;
  2944. var r = a.arg;
  2945. return r ? r.done ? (t[e.resultName] = r.value, t.next = e.nextLoc, "return" !== t.method && (t.method = "next", t.arg = n), t.delegate = null, g) : r : (t.method = "throw", t.arg = new TypeError("iterator result is not an object"), t.delegate = null, g)
  2946. }
  2947. function C(e) {
  2948. var t = {
  2949. tryLoc: e[0]
  2950. };
  2951. 1 in e && (t.catchLoc = e[1]), 2 in e && (t.finallyLoc = e[2], t.afterLoc = e[3]), this.tryEntries.push(t)
  2952. }
  2953. function N(e) {
  2954. var t = e.completion || {};
  2955. t.type = "normal", delete t.arg, e.completion = t
  2956. }
  2957. function w(e) {
  2958. this.tryEntries = [{
  2959. tryLoc: "root"
  2960. }], e.forEach(C, this), this.reset(!0)
  2961. }
  2962. function D(e) {
  2963. if (e) {
  2964. var t = e[o];
  2965. if (t) return t.call(e);
  2966. if ("function" == typeof e.next) return e;
  2967. if (!isNaN(e.length)) {
  2968. var i = -1,
  2969. r = function t() {
  2970. for (; ++i < e.length;) if (a.call(e, i)) return t.value = e[i], t.done = !1, t;
  2971. return t.value = n, t.done = !0, t
  2972. };
  2973. return r.next = r
  2974. }
  2975. }
  2976. return {
  2977. next: k
  2978. }
  2979. }
  2980. function k() {
  2981. return {
  2982. value: n,
  2983. done: !0
  2984. }
  2985. }
  2986. }(function() {
  2987. return this || "object" == typeof self && self
  2988. }() || Function("return this")())
  2989. }, function(e, t) {
  2990. e.exports = function(e) {
  2991. if (Array.isArray(e)) return e
  2992. }
  2993. }, function(e, t) {
  2994. e.exports = function(e, t) {
  2995. var n = [],
  2996. i = !0,
  2997. a = !1,
  2998. r = void 0;
  2999. try {
  3000. for (var o, s = e[Symbol.iterator](); !(i = (o = s.next()).done) && (n.push(o.value), !t || n.length !== t); i = !0);
  3001. } catch (e) {
  3002. a = !0, r = e
  3003. } finally {
  3004. try {
  3005. i || null == s.
  3006. return ||s.
  3007. return ()
  3008. } finally {
  3009. if (a) throw r
  3010. }
  3011. }
  3012. return n
  3013. }
  3014. }, function(e, t) {
  3015. e.exports = function() {
  3016. throw new TypeError("Invalid attempt to destructure non-iterable instance")
  3017. }
  3018. }, function(e, t, n) {
  3019. "use strict";
  3020. Object.defineProperty(t, "__esModule", {
  3021. value: !0
  3022. });
  3023. var i = "object" == typeof window && window.RTCPeerConnection,
  3024. a = "object" == typeof window && window.webkitRTCPeerConnection,
  3025. r = "object" == typeof window && window.mozRTCPeerConnection;
  3026. t.createRTCPeerConnection = function(e) {
  3027. var t = i || a || r;
  3028. return t ? new t(e) : null
  3029. }
  3030. }, function(e, t, n) {
  3031. var i;
  3032. /*!
  3033. * EventEmitter v5.2.8 - git.io/ee
  3034. * Unlicense - http://unlicense.org/
  3035. * Oliver Caldwell - https://oli.me.uk/
  3036. * @preserve
  3037. */
  3038. !
  3039. function(t) {
  3040. "use strict";
  3041. function a() {}
  3042. var r = a.prototype,
  3043. o = t.EventEmitter;
  3044. function s(e, t) {
  3045. for (var n = e.length; n--;) if (e[n].listener === t) return n;
  3046. return -1
  3047. }
  3048. function c(e) {
  3049. return function() {
  3050. return this[e].apply(this, arguments)
  3051. }
  3052. }
  3053. r.getListeners = function(e) {
  3054. var t, n, i = this._getEvents();
  3055. if (e instanceof RegExp) for (n in t = {}, i) i.hasOwnProperty(n) && e.test(n) && (t[n] = i[n]);
  3056. else t = i[e] || (i[e] = []);
  3057. return t
  3058. }, r.flattenListeners = function(e) {
  3059. var t, n = [];
  3060. for (t = 0; t < e.length; t += 1) n.push(e[t].listener);
  3061. return n
  3062. }, r.getListenersAsObject = function(e) {
  3063. var t, n = this.getListeners(e);
  3064. return n instanceof Array && ((t = {})[e] = n), t || n
  3065. }, r.addListener = function(e, t) {
  3066. if (!
  3067. function e(t) {
  3068. return "function" == typeof t || t instanceof RegExp || !(!t || "object" != typeof t) && e(t.listener)
  3069. }(t)) throw new TypeError("listener must be a function");
  3070. var n, i = this.getListenersAsObject(e),
  3071. a = "object" == typeof t;
  3072. for (n in i) i.hasOwnProperty(n) && -1 === s(i[n], t) && i[n].push(a ? t : {
  3073. listener: t,
  3074. once: !1
  3075. });
  3076. return this
  3077. }, r.on = c("addListener"), r.addOnceListener = function(e, t) {
  3078. return this.addListener(e, {
  3079. listener: t,
  3080. once: !0
  3081. })
  3082. }, r.once = c("addOnceListener"), r.defineEvent = function(e) {
  3083. return this.getListeners(e), this
  3084. }, r.defineEvents = function(e) {
  3085. for (var t = 0; t < e.length; t += 1) this.defineEvent(e[t]);
  3086. return this
  3087. }, r.removeListener = function(e, t) {
  3088. var n, i, a = this.getListenersAsObject(e);
  3089. for (i in a) a.hasOwnProperty(i) && -1 !== (n = s(a[i], t)) && a[i].splice(n, 1);
  3090. return this
  3091. }, r.off = c("removeListener"), r.addListeners = function(e, t) {
  3092. return this.manipulateListeners(!1, e, t)
  3093. }, r.removeListeners = function(e, t) {
  3094. return this.manipulateListeners(!0, e, t)
  3095. }, r.manipulateListeners = function(e, t, n) {
  3096. var i, a, r = e ? this.removeListener : this.addListener,
  3097. o = e ? this.removeListeners : this.addListeners;
  3098. if ("object" != typeof t || t instanceof RegExp) for (i = n.length; i--;) r.call(this, t, n[i]);
  3099. else for (i in t) t.hasOwnProperty(i) && (a = t[i]) && ("function" == typeof a ? r.call(this, i, a) : o.call(this, i, a));
  3100. return this
  3101. }, r.removeEvent = function(e) {
  3102. var t, n = typeof e,
  3103. i = this._getEvents();
  3104. if ("string" === n) delete i[e];
  3105. else if (e instanceof RegExp) for (t in i) i.hasOwnProperty(t) && e.test(t) && delete i[t];
  3106. else delete this._events;
  3107. return this
  3108. }, r.removeAllListeners = c("removeEvent"), r.emitEvent = function(e, t) {
  3109. var n, i, a, r, o = this.getListenersAsObject(e);
  3110. for (r in o) if (o.hasOwnProperty(r)) for (n = o[r].slice(0), a = 0; a < n.length; a++)!0 === (i = n[a]).once && this.removeListener(e, i.listener), i.listener.apply(this, t || []) === this._getOnceReturnValue() && this.removeListener(e, i.listener);
  3111. return this
  3112. }, r.trigger = c("emitEvent"), r.emit = function(e) {
  3113. var t = Array.prototype.slice.call(arguments, 1);
  3114. return this.emitEvent(e, t)
  3115. }, r.setOnceReturnValue = function(e) {
  3116. return this._onceReturnValue = e, this
  3117. }, r._getOnceReturnValue = function() {
  3118. return !this.hasOwnProperty("_onceReturnValue") || this._onceReturnValue
  3119. }, r._getEvents = function() {
  3120. return this._events || (this._events = {})
  3121. }, a.noConflict = function() {
  3122. return t.EventEmitter = o, a
  3123. }, void 0 === (i = function() {
  3124. return a
  3125. }.call(t, n, t, e)) || (e.exports = i)
  3126. }("undefined" != typeof window ? window : this || {})
  3127. }, function(e, t) {
  3128. e.exports = function(e) {
  3129. if (Array.isArray(e)) {
  3130. for (var t = 0, n = new Array(e.length); t < e.length; t++) n[t] = e[t];
  3131. return n
  3132. }
  3133. }
  3134. }, function(e, t) {
  3135. e.exports = function(e) {
  3136. if (Symbol.iterator in Object(e) || "[object Arguments]" === Object.prototype.toString.call(e)) return Array.from(e)
  3137. }
  3138. }, function(e, t) {
  3139. e.exports = function() {
  3140. throw new TypeError("Invalid attempt to spread non-iterable instance")
  3141. }
  3142. }, function(t, n, a) {
  3143. "use strict";
  3144. a.r(n);
  3145. var r = a(3),
  3146. o = a(0),
  3147. s = a(2),
  3148. c = function() {
  3149. var e = {
  3150. dispatcher: {}
  3151. };
  3152. return e.dispatcher.eventListeners = {}, e.addEventListener = function(t, n) {
  3153. void 0 === e.dispatcher.eventListeners[t] && (e.dispatcher.eventListeners[t] = []), e.dispatcher.eventListeners[t].push(n)
  3154. }, e.hasListeners = function(t) {
  3155. return !(!e.dispatcher.eventListeners[t] || !e.dispatcher.eventListeners[t].length)
  3156. }, e.on = e.addEventListener, e.removeEventListener = function(t, n) {
  3157. var i;
  3158. e.dispatcher.eventListeners[t] && -1 !== (i = e.dispatcher.eventListeners[t].indexOf(n)) && e.dispatcher.eventListeners[t].splice(i, 1)
  3159. }, e.dispatchEvent = function(t, n) {
  3160. var i;
  3161. for (i in e.dispatcher.eventListeners[t.type]) e.dispatcher.eventListeners[t.type] && e.dispatcher.eventListeners[t.type].hasOwnProperty(i) && "function" == typeof e.dispatcher.eventListeners[t.type][i] && (n ? e.dispatcher.eventListeners[t.type][i](t) : Promise.resolve(t).then(e.dispatcher.eventListeners[t.type][i]))
  3162. }, e.dispatchSocketEvent = function(t) {
  3163. var n;
  3164. for (n in e.dispatcher.eventListeners[t.type]) e.dispatcher.eventListeners[t.type] && e.dispatcher.eventListeners[t.type].hasOwnProperty(n) && "function" == typeof e.dispatcher.eventListeners[t.type][n] && e.dispatcher.eventListeners[t.type][n](t.msg)
  3165. }, e
  3166. },
  3167. d = function(e) {
  3168. var t = {};
  3169. return t.type = e.type, t
  3170. },
  3171. u = function(e) {
  3172. var t = d(e);
  3173. return t.stream = e.stream, t.reason = e.reason, t.msg = e.msg, t
  3174. },
  3175. l = function(e) {
  3176. var t = d(e);
  3177. return t.uid = e.uid, t.attr = e.attr, t.stream = e.stream, t
  3178. },
  3179. p = function(e) {
  3180. var t = d(e);
  3181. return t.msg = e.msg, t
  3182. },
  3183. f = function(e) {
  3184. var t = d(e);
  3185. return t.url = e.url, t.uid = e.uid, t.status = e.status, t.reason = e.reason, t
  3186. },
  3187. m = a(5),
  3188. g = function() {};
  3189. g.prototype.set = function(e, t) {
  3190. ["BatteryLevel"].indexOf(e) > -1 && (this[e] = t)
  3191. };
  3192. var v = new function() {
  3193. var e = c();
  3194. return e.states = {
  3195. UNINIT: "UNINIT",
  3196. INITING: "INITING",
  3197. INITED: "INITED"
  3198. }, e.state = e.states.UNINIT, e.batteryManager = null, e._init = function(t, n) {
  3199. e.state = e.states.INITING, navigator.getBattery ? navigator.getBattery().then(function(n) {
  3200. e.batteryManager = n, t && setTimeout(function() {
  3201. t()
  3202. }, 0)
  3203. }).
  3204. catch (function(e) {
  3205. o.
  3206. default.debug("navigator.getBattery is disabled", e), t && t()
  3207. }) : (e.state = e.states.INITED, t && t())
  3208. }, e._getBatteryStats = function() {
  3209. var t = {};
  3210. return e.batteryManager && e.batteryManager.level ? t.BatteryLevel = Math.floor(100 * e.batteryManager.level) : t.BatteryLevel = "UNSUPPORTED", t
  3211. }, e.getStats = function(t, n) {
  3212. var i = new g,
  3213. a = e._getBatteryStats();
  3214. a && a.BatteryLevel && i.set("BatteryLevel", a.BatteryLevel), t && t(i)
  3215. }, e._init(), e
  3216. },
  3217. S = a(6),
  3218. h = a.n(S),
  3219. _ = function(e) {
  3220. var t = c(e);
  3221. return t.url = ".", t
  3222. },
  3223. E = a(13),
  3224. I = a(4),
  3225. T = 0,
  3226. y = function(e) {
  3227. var t = _({});
  3228. t.id = e.id, t.playerId = T++, t.fit = e.options && e.options.fit, "contain" !== t.fit && "cover" !== t.fit && (t.fit = null), t.url = e.url, t.stream = e.stream.stream, t.elementID = e.elementID, t.setAudioOutput = function(e, n, i) {
  3229. var a = t.video || t.audio;
  3230. return a ? a.setSinkId ? void a.setSinkId(e).then(function() {
  3231. return o.
  3232. default.debug("[" + t.id + "] " + "video ".concat(t.id, " setAudioOutput ").concat(e, " SUCCESS")), a == t.video && t.audio ? t.audio.setSinkId(e):
  3233. Promise.resolve()
  3234. }).then(function() {
  3235. return o.
  3236. default.debug("[" + t.id + "] " + "audio ".concat(t.id, " setAudioOutput ").concat(e, " SUCCESS")), n && n()
  3237. }).
  3238. catch (function(e) {
  3239. return o.
  3240. default.error("[" + t.id + "] VideoPlayer.setAudioOutput", e), i && i(e)
  3241. }) : (o.
  3242. default.error("[" + t.id + "] ", I.
  3243. default.WEB_API_NOT_SUPPORTED), i && i(I.
  3244. default.WEB_API_NOT_SUPPORTED)) : (o.
  3245. default.error("[" + t.id + "] ", I.
  3246. default.PLAYER_NOT_FOUND), i && i(I.
  3247. default.PLAYER_NOT_FOUND))
  3248. }, t.destroy = function() {
  3249. o.
  3250. default.debug("[".concat(t.id, "] destroy ").concat(e.stream.local ? "local" : "remote", " Player ").concat(t.id)), Object(E.setSrcObject)(t.video, null), Object(E.setSrcObject)(t.audio, null), t.video.pause(), delete t.resizer, clearInterval(t.mediaPlayerTimer), t.mediaPlayerTimer = null, document.getElementById(t.div.id) && t.parentNode.contains(t.div) && t.parentNode.removeChild(t.div), ["video", "audio"].forEach(function(n) {
  3251. t[n];
  3252. var i = a[n];
  3253. clearTimeout(i.playDeferTimeout), i.formerMediaState = null;
  3254. var r = {
  3255. playerId: t.playerId,
  3256. stateId: i.stateId + 1,
  3257. playDeferTimeout: null,
  3258. error: !1,
  3259. status: "aborted",
  3260. reason: "stop",
  3261. updatedAt: Date.now()
  3262. };
  3263. a[n] = r;
  3264. var c = {
  3265. type: "player-status-change",
  3266. playerId: t.playerId,
  3267. mediaType: n,
  3268. status: r.status,
  3269. reason: r.reason,
  3270. isErrorState: !1,
  3271. streamId: t.id
  3272. };
  3273. o.
  3274. default.debug("[".concat(t.id, "] Media Player Status Change Triggered by destroy()"), c), e.stream.dispatchEvent(c), s.b.reportApiInvoke(e.stream.sid, {
  3275. name: "Stream.playerStatusChange",
  3276. options: c,
  3277. tag: "tracer"
  3278. })()
  3279. })
  3280. }, t.div = document.createElement("div"), t.div.setAttribute("id", "player_" + t.id), e.stream.video ? t.div.setAttribute("style", "width: 100%; height: 100%; position: relative; background-color: black; overflow: hidden;") : t.div.setAttribute("style", "width: 100%; height: 100%; position: relative; overflow: hidden;"), t.video = document.createElement("video"), t.video.setAttribute("id", "video" + t.id), e.stream.local && !e.stream.screen ? e.stream.mirror ? t.video.setAttribute("style", "width: 100%; height: 100%; position: absolute; transform: rotateY(180deg); object-fit: ".concat(t.fit || "cover", ";")) : t.video.setAttribute("style", "width: 100%; height: 100%; position: absolute; object-fit: ".concat(t.fit || "cover", ";")) : e.stream.video ? t.video.setAttribute("style", "width: 100%; height: 100%; position: absolute; object-fit: ".concat(t.fit || "cover", ";")) : e.stream.screen ? t.video.setAttribute("style", "width: 100%; height: 100%; position: absolute; object-fit: ".concat(t.fit || "contain")) : t.video.setAttribute("style", "width: 100%; height: 100%; position: absolute; display: none; object-fit: ".concat(t.fit || "cover"));
  3281. var n = {
  3282. autoplay: !0,
  3283. muted: !! e.stream.local || !(!m.isSafari() && "iOS" !== m.getBrowserOS()) && "video_element_muted",
  3284. playsinline: !0,
  3285. controls: !(!m.isSafari() && "iOS" !== m.getBrowserOS() || e.stream.local),
  3286. volume: null
  3287. },
  3288. i = h()({}, n, e.options);
  3289. !0 !== i.muted || i.volume || (i.volume = 0), i.autoplay && t.video.setAttribute("autoplay", ""), !0 !== i.muted && "video_element_muted" !== i.muted || (t.video.setAttribute("muted", ""), t.video.muted = !0), i.playsinline && t.video.setAttribute("playsinline", ""), i.controls && t.video.setAttribute("controls", ""), Number.isFinite(i.volume) && (t.video.volume = i.volume), t.audio = document.createElement("audio"), t.audio.setAttribute("id", "audio" + t.id), i.autoplay && t.audio.setAttribute("autoplay", ""), !0 === i.muted && t.audio.setAttribute("muted", ""), !0 === i.muted && (t.audio.muted = !0), i.playsinline && t.audio.setAttribute("playsinline", ""), Number.isFinite(i.volume) && (t.audio.volume = i.volume), void 0 !== t.elementID && document.getElementById(t.elementID) !== null ? (document.getElementById(t.elementID).appendChild(t.div), t.container = document.getElementById(t.elementID)) : (document.body.appendChild(t.div), t.container = document.body), t.parentNode = t.div.parentNode;
  3290. var a = {
  3291. video: {
  3292. playerId: t.playerId,
  3293. stateId: 0,
  3294. playDeferTimeout: null,
  3295. error: !1,
  3296. status: "init",
  3297. reason: null,
  3298. updatedAt: Date.now()
  3299. },
  3300. audio: {
  3301. playerId: t.playerId,
  3302. stateId: 0,
  3303. playDeferTimeout: null,
  3304. error: !1,
  3305. status: "init",
  3306. reason: null,
  3307. updatedAt: Date.now()
  3308. }
  3309. };
  3310. t.mediaElemExists = function(e) {
  3311. for (var t = e, n = 0; n < Object(r.getParameter)("MEDIA_ELEMENT_EXISTS_DEPTH") && t; n++) t = t.parentNode;
  3312. return !!t
  3313. };
  3314. var c = function(e) {
  3315. return t.mediaElemExists(e) ? e.paused ? "paused" : "play" : "aborted"
  3316. },
  3317. d = function(e, t, n) {
  3318. var i = c(e),
  3319. a = !0;
  3320. return "paused" === i ? ("audio" === t && !0 === n.muted && (a = !1), n.autoplay || (a = !1)) : "play" === i ? "video" === t ? a = !1 : !0 === n.muted ? e.muted && (a = !1) : e.muted || (a = !1) : "aborted" === i && (a = !1), a
  3321. },
  3322. u = function(n) {
  3323. var u, l = this;
  3324. if (l === t.video ? u = "video" : l === t.audio && (u = "audio"), u) {
  3325. n.type || o.
  3326. default.error("[".concat(t.id, "] Unexpected evt"), n);
  3327. var p = c(l);
  3328. clearTimeout(a[u].playDeferTimeout), a[u].playDeferTimeout = setTimeout(function() {
  3329. a[u].playDeferTimeout = null;
  3330. var r = a[u],
  3331. f = c(l);
  3332. if (p === f) {
  3333. var m = {
  3334. playerId: t.playerId,
  3335. stateId: r.stateId + 1,
  3336. playDeferTimeout: null,
  3337. error: d(l, u, i),
  3338. status: c(l),
  3339. reason: n.type,
  3340. updatedAt: Date.now()
  3341. };
  3342. if (r.status !== m.status) {
  3343. a[u] = m;
  3344. var g = {
  3345. type: "player-status-change",
  3346. playerId: t.playerId,
  3347. mediaType: u,
  3348. status: m.status,
  3349. reason: m.reason,
  3350. isErrorState: m.error,
  3351. streamId: t.id
  3352. };
  3353. o.
  3354. default.debug("[".concat(t.id, "] Media Player Status Change"), g), e.stream.dispatchEvent(g), s.b.reportApiInvoke(e.stream.sid, {
  3355. name: "Stream.playerStatusChange",
  3356. options: g,
  3357. tag: "tracer"
  3358. })()
  3359. }
  3360. } else o.
  3361. default.debug("[".concat(t.id, "] Status Change after event Triggered.") + "Stream ".concat(t.id, " PlayerId ").concat(t.playerId, " mediaType ").concat(u, " Status ").concat(p, "=>").concat(f))
  3362. }, Object(r.getParameter)("PLAYER_STATE_DEFER"))
  3363. } else o.
  3364. default.error("[".concat(t.id, "] Unknown media element"), l)
  3365. };
  3366. if (t.mediaPlayerTimer = setInterval(function() {
  3367. ["video", "audio"].forEach(function(n) {
  3368. var r = t[n],
  3369. u = a[n];
  3370. if (!u.playDeferTimeout) {
  3371. var l = {
  3372. playerId: t.playerId,
  3373. stateId: u.stateId + 1,
  3374. playDeferTimeout: null,
  3375. error: d(r, n, i),
  3376. status: c(r),
  3377. reason: "timer",
  3378. updatedAt: Date.now()
  3379. };
  3380. if (u.status !== l.status) {
  3381. o.
  3382. default.debug("[".concat(t.id, "] Player ").concat(t.playerId, " ").concat(n, " Status Changed Detected by Timer: ").concat(u.status, "=>").concat(l.status)), a[n] = l;
  3383. var p = {
  3384. type: "player-status-change",
  3385. playerId: t.playerId,
  3386. mediaType: n,
  3387. status: l.status,
  3388. reason: l.reason,
  3389. isErrorState: l.error,
  3390. streamId: t.id
  3391. };
  3392. o.
  3393. default.debug("[".concat(t.id, "] Media Player Status Change"), p), e.stream.dispatchEvent(p), s.b.reportApiInvoke(e.stream.sid, {
  3394. name: "Stream.playerStatusChange",
  3395. options: p,
  3396. tag: "tracer"
  3397. })()
  3398. }
  3399. }
  3400. })
  3401. }, Object(r.getParameter)("PLAYER_STATE_DEFER")), t.video.addEventListener("playing", function(e) {
  3402. !
  3403. function e() {
  3404. t.video.videoWidth * t.video.videoHeight > 4 ? o.
  3405. default.debug("[" + t.id + "] video dimensions:", t.video.videoWidth, t.video.videoHeight):
  3406. setTimeout(e, 50)
  3407. }()
  3408. }), t.video.addEventListener("playing", u), t.video.addEventListener("canplay", u), t.video.addEventListener("abort", u), t.video.addEventListener("onerror", u), t.video.addEventListener("suspend", u), t.video.addEventListener("stalled", u), t.video.addEventListener("pause", u), t.audio.addEventListener("playing", u), t.audio.addEventListener("canplay", u), t.audio.addEventListener("abort", u), t.audio.addEventListener("onerror", u), t.audio.addEventListener("suspend", u), t.audio.addEventListener("stalled", u), t.audio.addEventListener("pause", u), e.stream.hasVideo() || e.stream.hasScreen()) t.div.appendChild(t.video), t.div.appendChild(t.audio), m.isEdge() ? t.video.srcObject = e.stream.stream : (Object(E.attachMediaStream)(t.video, e.stream.stream), Object(E.attachMediaStream)(t.audio, e.stream.stream));
  3409. else if (!1 !== i.muted && "video_element_muted" !== i.muted || (t.video.removeAttribute("muted"), t.video.muted = !1), t.div.appendChild(t.video), window.MediaStream && (m.isSafari() || "iOS" === m.getBrowserOS())) {
  3410. var l = new MediaStream(e.stream.stream.getAudioTracks());
  3411. Object(E.setSrcObject)(t.video, l)
  3412. } else Object(E.setSrcObject)(t.video, e.stream.stream);
  3413. return t.setAudioVolume = function(e) {
  3414. var n = parseInt(e) / 100;
  3415. isFinite(n) && (n < 0 ? n = 0 : n > 1 && (n = 1), t.video && (t.video.volume = n), t.audio && (t.audio.volume = n))
  3416. }, t
  3417. },
  3418. b = function(e) {
  3419. var t = {},
  3420. n = E.RTCPeerConnection;
  3421. t.uid = e.uid, t.isVideoMute = e.isVideoMute, t.isAudioMute = e.isAudioMute, t.isSubscriber = e.isSubscriber, t.clientId = e.clientId, t.filterStatsCache = [], t.originStatsCache = [], t.lastTimeGetStats = null, t.pc_config = {
  3422. iceServers: [{
  3423. url: "stun:webcs.agora.io:3478"
  3424. }]
  3425. };
  3426. var i = {
  3427. id: "outbound_audio_ssrc_send",
  3428. type: "ssrc",
  3429. mediaType: "",
  3430. googCodecName: "opus",
  3431. aecDivergentFilterFraction: "0",
  3432. audioInputLevel: "0",
  3433. bytesSent: "0",
  3434. packetsSent: "0",
  3435. googEchoCancellationReturnLoss: "0",
  3436. googEchoCancellationReturnLossEnhancement: "0"
  3437. },
  3438. a = {
  3439. id: "outbound_video_ssrc_send",
  3440. type: "ssrc",
  3441. mediaType: "",
  3442. googCodecName: "h264" === e.codec ? "H264" : "VP8",
  3443. bytesSent: "0",
  3444. packetsLost: "0",
  3445. packetsSent: "0",
  3446. googAdaptationChanges: "0",
  3447. googAvgEncodeMs: "0",
  3448. googEncodeUsagePercent: "0",
  3449. googFirsReceived: "0",
  3450. googFrameHeightSent: "0",
  3451. googFrameHeightInput: "0",
  3452. googFrameRateInput: "0",
  3453. googFrameRateSent: "0",
  3454. googFrameWidthSent: "0",
  3455. googFrameWidthInput: "0",
  3456. googNacksReceived: "0",
  3457. googPlisReceived: "0",
  3458. googRtt: "0"
  3459. },
  3460. s = {
  3461. id: "inbound_audio_ssrc_recv",
  3462. type: "ssrc",
  3463. mediaType: "",
  3464. googCodecName: "opus",
  3465. audioOutputLevel: "0",
  3466. bytesReceived: "0",
  3467. packetsLost: "0",
  3468. packetsReceived: "0",
  3469. googAccelerateRate: "0",
  3470. googCurrentDelayMs: "0",
  3471. googDecodingCNG: "0",
  3472. googDecodingCTN: "0",
  3473. googDecodingCTSG: "0",
  3474. googDecodingNormal: "0",
  3475. googDecodingPLC: "0",
  3476. googDecodingPLCCNG: "0",
  3477. googExpandRate: "0",
  3478. googJitterBufferMs: "0",
  3479. googJitterReceived: "0",
  3480. googPreemptiveExpandRate: "0",
  3481. googPreferredJitterBufferMs: "0",
  3482. googSecondaryDecodedRate: "0",
  3483. googSpeechExpandRate: "0"
  3484. },
  3485. c = {
  3486. id: "inbound_video_ssrc_recv",
  3487. type: "ssrc",
  3488. mediaType: "",
  3489. googTargetDelayMs: "0",
  3490. packetsLost: "0",
  3491. googDecodeMs: "0",
  3492. googMaxDecodeMs: "0",
  3493. googRenderDelayMs: "0",
  3494. googFrameWidthReceived: "0",
  3495. googFrameHeightReceived: "0",
  3496. googFrameRateReceived: "0",
  3497. googFrameRateDecoded: "0",
  3498. googFrameRateOutput: "0",
  3499. googJitterBufferMs: "0",
  3500. googCurrentDelayMs: "0",
  3501. googMinPlayoutDelayMs: "0",
  3502. googNacksSent: "0",
  3503. googPlisSent: "0",
  3504. googFirsSent: "0",
  3505. bytesReceived: "0",
  3506. packetsReceived: "0",
  3507. googFramesReceived: "0",
  3508. googFramesDecoded: "0"
  3509. },
  3510. d = {
  3511. id: "bweforvideo",
  3512. type: "VideoBwe",
  3513. googAvailableSendBandwidth: "0",
  3514. googAvailableReceiveBandwidth: "0",
  3515. googActualEncBitrate: "0",
  3516. googRetransmitBitrate: "0",
  3517. googTargetEncBitrate: "0",
  3518. googBucketDelay: "0",
  3519. googTransmitBitrate: "0"
  3520. };
  3521. t.con = {
  3522. optional: [{
  3523. DtlsSrtpKeyAgreement: !0
  3524. }]
  3525. }, e.iceServers instanceof Array ? t.pc_config.iceServers = e.iceServers : (e.stunServerUrl && (e.stunServerUrl instanceof Array ? e.stunServerUrl.map(function(e) {
  3526. "string" == typeof e && "" !== e && t.pc_config.iceServers.push({
  3527. url: e
  3528. })
  3529. }) : "string" == typeof e.stunServerUrl && "" !== e.stunServerUrl && t.pc_config.iceServers.push({
  3530. url: e.stunServerUrl
  3531. })), e.turnServer && (e.turnServer instanceof Array ? e.turnServer.map(function(e) {
  3532. "string" == typeof e.url && "" !== e.url && t.pc_config.iceServers.push({
  3533. username: e.username,
  3534. credential: e.credential,
  3535. url: e.url
  3536. })
  3537. }) : "auto" !== e.turnServer.mode && "manual" !== e.turnServer.mode || (e.turnServer.udpport && t.pc_config.iceServers.push({
  3538. username: e.turnServer.username,
  3539. credential: e.turnServer.credential,
  3540. credentialType: "password",
  3541. urls: "turn:" + e.turnServer.url + ":" + e.turnServer.udpport + "?transport=udp"
  3542. }), "string" == typeof e.turnServer.tcpport && "" !== e.turnServer.tcpport && t.pc_config.iceServers.push({
  3543. username: e.turnServer.username,
  3544. credential: e.turnServer.credential,
  3545. credentialType: "password",
  3546. urls: "turn:" + e.turnServer.url + ":" + e.turnServer.tcpport + "?transport=tcp"
  3547. }), !0 === e.turnServer.forceturn && (t.pc_config.iceTransportPolicy = "relay")))), void 0 === e.audio && (e.audio = !0), void 0 === e.video && (e.video = !0), t.mediaConstraints = {
  3548. mandatory: {
  3549. OfferToReceiveVideo: e.video,
  3550. OfferToReceiveAudio: e.audio
  3551. }
  3552. }, t.roapSessionId = 103;
  3553. try {
  3554. t.pc_config.sdpSemantics = "plan-b", t.peerConnection = new n(t.pc_config, t.con)
  3555. } catch (e) {
  3556. delete t.pc_config.sdpSemantics, t.peerConnection = new n(t.pc_config, t.con)
  3557. }
  3558. t.iceCandidateTimer = setTimeout(function() {
  3559. t.iceCandidateTimer = null, o.
  3560. default.debug("[".concat(t.clientId, "]Candidates collected: ").concat(t.iceCandidateCount)), t.moreIceComing && (t.moreIceComing = !1, t.markActionNeeded())
  3561. }, Object(r.getParameter)("CANDIDATE_TIMEOUT")), t.peerConnection.onicecandidate = function(e) {
  3562. var n, i, a, r;
  3563. i = (n = t.peerConnection.localDescription.sdp).match(/a=candidate:.+typ\ssrflx.+\r\n/), a = n.match(/a=candidate:.+typ\shost.+\r\n/), r = n.match(/a=candidate:.+typ\srelay.+\r\n/), null === i && null === a && null === r || void 0 !== t.ice || !t.iceCandidateTimer || (o.
  3564. default.debug("[" + t.clientId + "]srflx candidate : " + i + " relay candidate: " + r + " host candidate : " + a), clearTimeout(t.iceCandidateTimer), t.iceCandidateTimer = null, t.ice = 0, t.moreIceComing = !1, t.markActionNeeded()), t.iceCandidateCount = t.iceCandidateCount + 1
  3565. }, o.
  3566. default.debug("[" + t.clientId + ']Created webkitRTCPeerConnnection with config "' + JSON.stringify(t.pc_config) + '".');
  3567. var u = function(t) {
  3568. return e.screen && (t = t.replace("a=x-google-flag:conference\r\n", "")), t
  3569. },
  3570. l = function(n) {
  3571. var i, a;
  3572. if ((i = n.match(/m=video.*\r\n/)) && e.minVideoBW && e.maxVideoBW) {
  3573. a = i[0] + "b=AS:" + e.maxVideoBW + "\r\n";
  3574. var r = 0,
  3575. s = 0;
  3576. "h264" === e.codec ? (r = n.search(/a=rtpmap:(\d+) H264\/90000\r\n/), s = n.search(/H264\/90000\r\n/)) : "vp8" === e.codec && (r = n.search(/a=rtpmap:(\d+) VP8\/90000\r\n/), s = n.search(/VP8\/90000\r\n/)), -1 !== r && -1 !== s && s - r > 10 && (a = a + "a=fmtp:" + n.slice(r + 9, s - 1) + " x-google-min-bitrate=" + e.minVideoBW + "\r\n"), n = n.replace(i[0], a), o.
  3577. default.debug("[" + t.clientId + "]Set Video Bitrate - min:" + e.minVideoBW + " max:" + e.maxVideoBW)
  3578. }
  3579. return (i = n.match(/m=audio.*\r\n/)) && e.maxAudioBW && (a = i[0] + "b=AS:" + e.maxAudioBW + "\r\n", n = n.replace(i[0], a)), n
  3580. };
  3581. t.processSignalingMessage = function(e) {
  3582. var n, i = JSON.parse(e);
  3583. t.incomingMessage = i, "new" === t.state ? "OFFER" === i.messageType ? (n = {
  3584. sdp: i.sdp,
  3585. type: "offer"
  3586. }, t.peerConnection.setRemoteDescription(new RTCSessionDescription(n)).
  3587. catch (function(e) {}), t.state = "offer-received", t.markActionNeeded()) : t.error("Illegal message for this state: " + i.messageType + " in state " + t.state) : "offer-sent" === t.state ? "ANSWER" === i.messageType ? ((n = {
  3588. sdp: i.sdp,
  3589. type: "answer"
  3590. }).sdp = u(n.sdp), n.sdp = l(n.sdp), t.peerConnection.setRemoteDescription(new RTCSessionDescription(n)).
  3591. catch (function(e) {}), t.state = "established") : "pr-answer" === i.messageType ? (n = {
  3592. sdp: i.sdp,
  3593. type: "pr-answer"
  3594. }, t.peerConnection.setRemoteDescription(new RTCSessionDescription(n)).
  3595. catch (function(e) {})) : "offer" === i.messageType ? t.error("Not written yet") : t.error("Illegal message for this state: " + i.messageType + " in state " + t.state) : "established" === t.state && ("OFFER" === i.messageType ? (n = {
  3596. sdp: i.sdp,
  3597. type: "offer"
  3598. }, t.peerConnection.setRemoteDescription(new RTCSessionDescription(n)).
  3599. catch (function(e) {}), t.state = "offer-received", t.markActionNeeded()) : "ANSWER" === i.messageType ? ((n = {
  3600. sdp: i.sdp,
  3601. type: "answer"
  3602. }).sdp = u(n.sdp), n.sdp = l(n.sdp), t.peerConnection.setRemoteDescription(new RTCSessionDescription(n)).
  3603. catch (function(e) {})) : t.error("Illegal message for this state: " + i.messageType + " in state " + t.state))
  3604. };
  3605. var p = 0,
  3606. f = 0;
  3607. return t.getVideoRelatedStats = function(e) {
  3608. t.getStats(function(n) {
  3609. n.forEach(function(n) {
  3610. if (t.isSubscriber) {
  3611. if ("video" === n.mediaType && n.id && ~n.id.indexOf("recv")) {
  3612. if (m.isChromeKernel() && +m.getBrowserVersion() >= 76) {
  3613. var i = +n.googFramesReceived - p,
  3614. a = +n.googFramesDecoded - f;
  3615. t._setStat(c, "googFrameRateReceived", i), t._setStat(c, "googFrameRateDecoded", a), t._setStat(c, "googFrameRateOutput", a), p = +n.googFramesReceived, f = +n.googFramesDecoded
  3616. }
  3617. e && e({
  3618. mediaType: "video",
  3619. peerId: t.uid,
  3620. isVideoMute: t.isVideoMute,
  3621. frameRateReceived: n.googFrameRateReceived,
  3622. frameRateDecoded: n.googFrameRateDecoded,
  3623. bytesReceived: n.bytesReceived,
  3624. packetsReceived: n.packetsReceived,
  3625. packetsLost: n.packetsLost
  3626. })
  3627. }
  3628. } else "video" === n.mediaType && n.id && ~n.id.indexOf("send") && e && e({
  3629. mediaType: "video",
  3630. isVideoMute: t.isVideoMute,
  3631. frameRateInput: n.googFrameRateInput,
  3632. frameRateSent: n.googFrameRateSent,
  3633. googRtt: n.googRtt
  3634. })
  3635. })
  3636. })
  3637. }, t.getAudioRelatedStats = function(e) {
  3638. t.getStats(function(n) {
  3639. n.forEach(function(n) {
  3640. t.isSubscriber && "audio" === n.mediaType && n.id && ~n.id.indexOf("recv") && e && e({
  3641. mediaType: "audio",
  3642. peerId: t.uid,
  3643. isAudioMute: t.isAudioMute,
  3644. frameDropped: parseInt(n.googDecodingPLC) + parseInt(n.googDecodingPLCCNG) + "",
  3645. frameReceived: n.googDecodingCTN,
  3646. googJitterReceived: n.googJitterReceived,
  3647. bytesReceived: n.bytesReceived,
  3648. packetsReceived: n.packetsReceived,
  3649. packetsLost: n.packetsLost
  3650. })
  3651. })
  3652. })
  3653. }, t.getStatsRate = function(e) {
  3654. t.getStats(function(t) {
  3655. e(t)
  3656. })
  3657. }, t.getStats = function(e, n) {
  3658. n = (n = n || 500) > 500 ? 500 : n, t.lastTimeGetStats && Date.now() - t.lastTimeGetStats < n ? e && e(t.filterStatsCache, t.originStatsCache) : (t.lastTimeGetStats = Date.now(), this._getStats(function(n, i) {
  3659. t.filterStatsCache = n, t.originStatsCache = i, e && e(n, i)
  3660. }))
  3661. }, t._setStat = function(e, t, n) {
  3662. e.hasOwnProperty(t) && (null != n && n !== 1 / 0 && n == n || (n = 0), e[t] = n + "")
  3663. }, t._processGetStatsAfterChrome76 = function(e) {
  3664. var n = this;
  3665. t.lastStats || (t.lastStats = new Map), t.peerConnection.getStats().then(function(r) {
  3666. var o = [],
  3667. u = [],
  3668. l = new Map,
  3669. p = new Date,
  3670. f = !0,
  3671. m = !1,
  3672. g = void 0;
  3673. try {
  3674. for (var v, S = r.values()[Symbol.iterator](); !(f = (v = S.next()).done); f = !0) {
  3675. var _ = v.value;
  3676. "codec" != _.type ? "candidate-pair" != _.type ? ("inbound-rtp" === _.type && "video" === _.mediaType && l.set("inbound-video", _), "inbound-rtp" === _.type && "audio" === _.mediaType && l.set("inbound-audio", _), "outbound-rtp" === _.type && "audio" === _.mediaType && l.set("outbound-audio", _), "outbound-rtp" === _.type && "video" === _.mediaType && l.set("outbound-video", _), "track" === _.type && "video" === _.kind && _.remoteSource && l.set("remote-video-track", _), "track" === _.type && "audio" === _.kind && _.remoteSource && l.set("remote-audio-track", _), "remote-inbound-rtp" === _.type && "video" === _.mediaType && l.set("remote-inbound-video", _), "remote-inbound-rtp" === _.type && "audio" === _.mediaType && l.set("remote-inbound-audio", _), "track" !== _.type || "video" !== _.kind || _.remoteSource || l.set("local-video-track", _), "track" !== _.type || "audio" !== _.kind || _.remoteSource || l.set("local-audio-track", _), "media-source" === _.type && "video" === _.kind && l.set("media-source-video", _), "media-source" === _.type && "audio" === _.kind && l.set("media-source-audio", _)) : u.push(_) : o.push(_)
  3677. }
  3678. } catch (e) {
  3679. m = !0, g = e
  3680. } finally {
  3681. try {
  3682. f || null == S.
  3683. return ||S.
  3684. return ()
  3685. } finally {
  3686. if (m) throw g
  3687. }
  3688. }
  3689. l.set("codec", o), l.set("candidatePairs", u), l.set("timestamp", +p);
  3690. var E = null,
  3691. I = null;
  3692. if (c.timestamp = p, s.timestamp = p, i.timestamp = p, i.timestamp = p, d.timestamp = p, n.isSubscriber)(E = l.get("inbound-video")) && (t._setStat(c, "id", "inbound_video_ssrc_recv"), t._setStat(c, "mediaType", E.mediaType), t._setStat(c, "packetsLost", E.packetsLost), t._setStat(c, "googDecodeMs", null), t._setStat(c, "googMaxDecodeMs", null), t._setStat(c, "googRenderDelayMs", null), t._setStat(c, "googMinPlayoutDelayMs", null), t._setStat(c, "googNacksSent", E.nackCount), t._setStat(c, "googPlisSent", E.pliCount), t._setStat(c, "googFirsSent", E.firCount), t._setStat(c, "bytesReceived", E.bytesReceived), t._setStat(c, "packetsReceived", E.packetsReceived)), (E = l.get("inbound-audio")) && (t._setStat(s, "id", "inbound_audio_ssrc_recv"), t._setStat(s, "mediaType", E.mediaType), t._setStat(s, "bytesReceived", E.bytesReceived), t._setStat(s, "packetsLost", E.packetsLost), t._setStat(s, "packetsReceived", E.packetsReceived), t._setStat(s, "googAccelerateRate", E.removedSamplesForAcceleration), t._setStat(s, "googCurrentDelayMs", E.jitterBufferDelay), t._setStat(s, "googDecodingCNG", null), t._setStat(s, "googDecodingCTN", null), t._setStat(s, "googDecodingCTSG", null), t._setStat(s, "googDecodingNormal", null), t._setStat(s, "googDecodingPLC", null), t._setStat(s, "googDecodingPLCCNG", null), t._setStat(s, "googJitterReceived", E.jitter), t._setStat(s, "googPreferredJitterBufferMs", null), t._setStat(s, "googSecondaryDecodedRate", null)), (E = l.get("remote-video-track")) && (t._setStat(c, "googTargetDelayMs", E.jitterBufferDelay), t._setStat(c, "googFrameWidthReceived", E.frameWidth), t._setStat(c, "googFrameHeightReceived", E.frameHeight), t._setStat(c, "googJitterBufferMs", E.jitterBufferDelay / E.jitterBufferEmittedCount * 1e3), t._setStat(c, "googCurrentDelayMs", E.jitterBufferDelay), t._setStat(c, "googFramesDecoded", E.framesDecoded), t._setStat(c, "googFramesReceived", E.framesReceived)), (E = l.get("remote-audio-track")) && (t._setStat(s, "audioOutputLevel", 32767 * E.audioLevel), t._setStat(s, "googJitterBufferMs", E.jitterBufferDelay / E.jitterBufferEmittedCount * 1e3), t._setStat(s, "googExpandRate", E.concealedSamples), t._setStat(s, "googPreemptiveExpandRate", E.insertedSamplesForDeceleration), t._setStat(s, "googSpeechExpandRate", E.silentConcealedSamples));
  3693. else {
  3694. var T = t.lastStats.get("timestamp"),
  3695. y = t.lastStats.get("outbound-video");
  3696. if ((E = l.get("outbound-audio")) && (t._setStat(i, "id", "outbound_audio_ssrc_send"), t._setStat(i, "mediaType", E.mediaType), t._setStat(i, "aecDivergentFilterFraction", null), t._setStat(i, "bytesSent", E.bytesSent), t._setStat(i, "packetsSent", E.packetsSent), I = E.transportId), E = l.get("outbound-video")) {
  3697. if (t._setStat(a, "id", "outbound_video_ssrc_send"), t._setStat(a, "mediaType", E.mediaType), t._setStat(a, "bytesSent", E.bytesSent), t._setStat(a, "packetsSent", E.packetsSent), t._setStat(a, "googAdaptationChanges", E.qualityLimitationDurations), t._setStat(a, "googAvgEncodeMs", null), t._setStat(a, "googEncodeUsagePercent", null), I = E.transportId, E.totalEncodedBytesTarget && y && y.totalEncodedBytesTarget) {
  3698. var b = (E.totalEncodedBytesTarget - y.totalEncodedBytesTarget) / (+new Date - T);
  3699. t._setStat(d, "googTargetEncBitrate", Math.floor(8 * b * 1e3))
  3700. }
  3701. if (E.retransmittedBytesSent && y && y.retransmittedBytesSent) {
  3702. var R = (E.retransmittedBytesSent - y.retransmittedBytesSent) / (+new Date - T);
  3703. t._setStat(d, "googRetransmitBitrate", Math.floor(8 * R * 1e3))
  3704. }
  3705. if (E.bytesSent && y && y.bytesSent) {
  3706. var A = (E.bytesSent - y.bytesSent) / (+new Date - T);
  3707. t._setStat(d, "googTransmitBitrate", Math.floor(8 * A * 1e3)), t._setStat(d, "googActualEncBitrate", Math.floor(8 * A * 1e3))
  3708. }
  3709. if (E.totalPacketSendDelay && y && y.totalPacketSendDelay) {
  3710. var O = (E.totalPacketSendDelay - y.totalPacketSendDelay) / (+new Date - T);
  3711. t._setStat(d, "googBucketDelay", Math.floor(1e3 * O))
  3712. }
  3713. }
  3714. if ((E = l.get("remote-inbound-video")) && (t._setStat(a, "packetsLost", E.packetsLost), t._setStat(a, "googRtt", E.roundTripTime)), (E = l.get("local-video-track")) && (t._setStat(a, "googFrameHeightSent", E.frameHeight), t._setStat(a, "googFrameWidthSent", E.frameWidth), void 0 !== E.framesPerSecond && t._setStat(a, "googFrameRateSent", E.framesPerSecond)), (E = l.get("local-audio-track")) && (t._setStat(i, "googEchoCancellationReturnLoss", E.echoReturnLoss), t._setStat(i, "googEchoCancellationReturnLossEnhancement", E.echoReturnLossEnhancement)), (E = l.get("media-source-video")) && (t._setStat(a, "googFrameHeightInput", E.height), t._setStat(a, "googFrameWidthInput", E.width), t._setStat(a, "googFrameRateInput", E.framesPerSecond)), (E = l.get("media-source-audio")) && t._setStat(i, "audioInputLevel", 32767 * E.totalAudioEnergy), (E = l.get("inbound-video")) && (t._setStat(a, "googFirsReceived", E.firCount), t._setStat(a, "googNacksReceived", E.nackCount), t._setStat(a, "googPlisReceived", E.pliCount)), I) l.get("candidatePairs").map(function(e) {
  3715. I == e.transportId && t._setStat(d, "googAvailableSendBandwidth", e.availableOutgoingBitrate)
  3716. });
  3717. else {
  3718. var C = l.get("candidatePairs")[0];
  3719. C && t._setStat(d, "googAvailableSendBandwidth", C.availableOutgoingBitrate)
  3720. }
  3721. }
  3722. t.lastStats = l;
  3723. var N = [h()({}, a), h()({}, i), h()({}, c), h()({}, s), h()({}, d)];
  3724. N.push({
  3725. id: "time",
  3726. startTime: t.connectedTime,
  3727. timestamp: new Date
  3728. }), e(N)
  3729. })
  3730. }, t._processGetStatsBeforeChrome76 = function(e) {
  3731. t.peerConnection.getStats(function(n) {
  3732. var r = [],
  3733. o = [],
  3734. u = null;
  3735. Object.keys(n).forEach(function(e) {
  3736. var t = n[e];
  3737. t && (o.push(t), u = t.timestamp, "VideoBwe" === t.type ? d = t : t.id.indexOf("_send") > -1 && "video" === t.mediaType ? a = t : t.id.indexOf("_send") > -1 && "audio" === t.mediaType ? i = t : t.id.indexOf("_recv") > -1 && "video" === t.mediaType ? c = t : t.id.indexOf("_recv") > -1 && "audio" === t.mediaType && (s = t))
  3738. }), (r = [h()({}, a), h()({}, i), h()({}, c), h()({}, s), h()({}, d)]).push({
  3739. id: "time",
  3740. startTime: t.connectedTime,
  3741. timestamp: u || new Date
  3742. }), e(r, o)
  3743. })
  3744. }, t._getStats = function(e) {
  3745. Object(r.getParameter)("CHROME_NEW_STATS") && m.isChromeKernel() && +m.getBrowserVersion() >= 76 ? t._processGetStatsAfterChrome76(e) : t._processGetStatsBeforeChrome76(e)
  3746. }, t.addTrack = function(e, n) {
  3747. t.peerConnection.addTrack(e, n)
  3748. }, t.removeTrack = function(e, n) {
  3749. t.peerConnection.removeTrack(t.peerConnection.getSenders().find(function(t) {
  3750. return t.track == e
  3751. }))
  3752. }, t.addStream = function(e) {
  3753. t.peerConnection.addStream(e), t.markActionNeeded()
  3754. }, t.removeStream = function() {
  3755. t.markActionNeeded()
  3756. }, t.close = function() {
  3757. t.state = "closed", t.peerConnection.close()
  3758. }, t.markActionNeeded = function() {
  3759. t.actionNeeded = !0, t.doLater(function() {
  3760. t.onstablestate()
  3761. })
  3762. }, t.doLater = function(e) {
  3763. window.setTimeout(e, 1)
  3764. }, t.onstablestate = function() {
  3765. var e;
  3766. if (t.actionNeeded) {
  3767. if ("new" === t.state || "established" === t.state) t.peerConnection.createOffer(function(e) {
  3768. if (e.sdp !== t.prevOffer) return t.peerConnection.setLocalDescription(e), t.state = "preparing-offer", void t.markActionNeeded();
  3769. o.
  3770. default.debug("[" + t.clientId + "]Not sending a new offer")
  3771. }, function(e) {
  3772. o.
  3773. default.debug("[" + t.clientId + "]peer connection create offer failed ", e)
  3774. }, t.mediaConstraints);
  3775. else if ("preparing-offer" === t.state) {
  3776. if (t.moreIceComing) return;
  3777. t.prevOffer = t.peerConnection.localDescription.sdp, t.offerCandidates = t.prevOffer.match(/a=candidate.+\r\n/g) || [], t.offerCandidates.length || (o.
  3778. default.warning("[".concat(t.clientId, "]No Ice Candidate generated")), Object(r.getParameter)("SHIM_CANDIDATE") ? (o.
  3779. default.debug("Shimming fake candidate"), t.prevOffer += "a=candidate:2243255435 1 udp 2122194687 192.168.0.1 30000 typ host generation 0 network-id 1\r\n"):
  3780. o.
  3781. default.error("[".concat(t.clientId, "]None Ice Candidate not allowed"))), t.prevOffer = t.prevOffer.replace(/a=candidate:.+typ\shost.+\r\n/g, "a=candidate:2243255435 1 udp 2122194687 192.168.0.1 30000 typ host generation 0 network-id 1\r\n"), t.sendMessage("OFFER", t.prevOffer), t.state = "offer-sent"
  3782. } else if ("offer-received" === t.state) t.peerConnection.createAnswer(function(e) {
  3783. if (t.peerConnection.setLocalDescription(e), t.state = "offer-received-preparing-answer", t.iceStarted) t.markActionNeeded();
  3784. else {
  3785. var n = new Date;
  3786. o.
  3787. default.debug("[" + t.clientId + "]" + n.getTime() + ": Starting ICE in responder"), t.iceStarted = !0
  3788. }
  3789. }, function(e) {
  3790. o.
  3791. default.debug("[" + t.clientId + "]peer connection create answer failed ", e)
  3792. }, t.mediaConstraints);
  3793. else if ("offer-received-preparing-answer" === t.state) {
  3794. if (t.moreIceComing) return;
  3795. e = t.peerConnection.localDescription.sdp, t.sendMessage("ANSWER", e), t.state = "established"
  3796. } else t.debug("Dazed and confused in state " + t.state + ", stopping here");
  3797. t.actionNeeded = !1
  3798. }
  3799. }, t.sendMessage = function(e, n) {
  3800. var i = {};
  3801. i.messageType = e, i.sdp = n, "OFFER" === e ? (i.offererSessionId = t.sessionId, i.answererSessionId = t.otherSessionId, i.seq = t.sequenceNumber += 1, i.tiebreaker = Math.floor(429496723 * Math.random() + 1)) : (i.offererSessionId = t.incomingMessage.offererSessionId, i.answererSessionId = t.sessionId, i.seq = t.incomingMessage.seq), t.onsignalingmessage(JSON.stringify(i))
  3802. }, t._getSender = function(e) {
  3803. if (t.peerConnection && t.peerConnection.getSenders) {
  3804. var n = t.peerConnection.getSenders().find(function(t) {
  3805. return t.track.kind == e
  3806. });
  3807. if (n) return n
  3808. }
  3809. return null
  3810. }, t.hasSender = function(e) {
  3811. return !!t._getSender(e)
  3812. }, t.replaceTrack = function(e, n, i) {
  3813. var a = t._getSender(e.kind);
  3814. if (!a) return i("NO_SENDER_FOUND");
  3815. try {
  3816. a.replaceTrack(e)
  3817. } catch (e) {
  3818. return i && i(e)
  3819. }
  3820. setTimeout(function() {
  3821. return n && n()
  3822. }, 50)
  3823. }, t.error = function(e) {
  3824. throw "Error in RoapOnJsep: " + e
  3825. }, t.sessionId = t.roapSessionId += 1, t.sequenceNumber = 0, t.actionNeeded = !1, t.iceStarted = !1, t.moreIceComing = !0, t.iceCandidateCount = 0, t.onsignalingmessage = e.callback, t.peerConnection.ontrack = function(e) {
  3826. t.onaddstream && (t.onaddstream(e, "ontrack"), t.peerConnection.onaddstream = null)
  3827. }, t.peerConnection.onaddstream = function(e) {
  3828. t.onaddstream && (t.onaddstream(e, "onaddstream"), t.peerConnection.ontrack = null)
  3829. }, t.peerConnection.onremovestream = function(e) {
  3830. t.onremovestream && t.onremovestream(e)
  3831. }, t.peerConnection.oniceconnectionstatechange = function(e) {
  3832. "connected" === e.currentTarget.iceConnectionState && (t.connectedTime = new Date), t.oniceconnectionstatechange && t.oniceconnectionstatechange(e.currentTarget.iceConnectionState)
  3833. }, t.renegotiate = function() {
  3834. void 0 !== t.prevOffer && t.peerConnection.createOffer().then(function(e) {
  3835. return e.sdp = e.sdp.replace(/a=recvonly\r\n/g, "a=inactive\r\n"), e.sdp = u(e.sdp), e.sdp = l(e.sdp), t.peerConnection.setLocalDescription(e)
  3836. }).then(function() {
  3837. t.onnegotiationneeded && t.onnegotiationneeded(t.peerConnection.localDescription.sdp)
  3838. }).
  3839. catch (function(e) {
  3840. console.log("createOffer error: ", e)
  3841. })
  3842. }, t.peerConnection.onnegotiationneeded = t.renegotiate, t.onaddstream = null, t.onremovestream = null, t.onnegotiationneeded = null, t.state = "new", t.markActionNeeded(), t
  3843. },
  3844. R = function(e) {
  3845. var t = {},
  3846. n = E.RTCPeerConnection;
  3847. t.uid = e.uid, t.isVideoMute = e.isVideoMute, t.isAudioMute = e.isAudioMute, t.isSubscriber = e.isSubscriber, t.clientId = e.clientId, t.filterStatsCache = [], t.originStatsCache = [], t.lastTimeGetStats = null, t.pc_config = {
  3848. iceServers: [{
  3849. urls: ["stun:webcs.agora.io:3478", "stun:stun.l.google.com:19302"]
  3850. }],
  3851. bundlePolicy: "max-bundle"
  3852. }, t.con = {
  3853. optional: [{
  3854. DtlsSrtpKeyAgreement: !0
  3855. }]
  3856. }, e.iceServers instanceof Array ? t.pc_config.iceServers = e.iceServers : (e.stunServerUrl && (e.stunServerUrl instanceof Array ? e.stunServerUrl.map(function(e) {
  3857. "string" == typeof e && "" !== e && t.pc_config.iceServers.push({
  3858. url: e
  3859. })
  3860. }) : "string" == typeof e.stunServerUrl && "" !== e.stunServerUrl && t.pc_config.iceServers.push({
  3861. url: e.stunServerUrl
  3862. })), e.turnServer && (e.turnServer instanceof Array ? e.turnServer.map(function(e) {
  3863. "string" == typeof e.url && "" !== e.url && t.pc_config.iceServers.push({
  3864. username: e.username,
  3865. credential: e.credential,
  3866. url: e.url
  3867. })
  3868. }) : "auto" !== e.turnServer.mode && "manual" !== e.turnServer.mode || (e.turnServer.udpport && t.pc_config.iceServers.push({
  3869. username: e.turnServer.username,
  3870. credential: e.turnServer.credential,
  3871. credentialType: "password",
  3872. urls: ["turn:" + e.turnServer.url + ":" + e.turnServer.udpport + "?transport=udp"]
  3873. }), "string" == typeof e.turnServer.tcpport && "" !== e.turnServer.tcpport && t.pc_config.iceServers.push({
  3874. username: e.turnServer.username,
  3875. credential: e.turnServer.credential,
  3876. credentialType: "password",
  3877. urls: ["turn:" + e.turnServer.url + ":" + e.turnServer.tcpport + "?transport=tcp"]
  3878. }), !0 === e.turnServer.forceturn && (t.pc_config.iceTransportPolicy = "relay")))), void 0 === e.audio && (e.audio = !0), void 0 === e.video && (e.video = !0), t.mediaConstraints = {
  3879. mandatory: {
  3880. OfferToReceiveVideo: e.video,
  3881. OfferToReceiveAudio: e.audio
  3882. }
  3883. }, t.roapSessionId = 103;
  3884. try {
  3885. t.pc_config.sdpSemantics = "plan-b", t.peerConnection = new n(t.pc_config, t.con)
  3886. } catch (e) {
  3887. delete t.pc_config.sdpSemantics, t.peerConnection = new n(t.pc_config, t.con)
  3888. }
  3889. o.
  3890. default.debug("[" + t.clientId + ']safari Created RTCPeerConnnection with config "' + JSON.stringify(t.pc_config) + '".'), t.iceCandidateTimer = setTimeout(function() {
  3891. t.iceCandidateTimer = null, o.
  3892. default.debug("[".concat(t.clientId, "]Candidates collected: ").concat(t.iceCandidateCount)), t.moreIceComing && (t.moreIceComing = !1, t.markActionNeeded())
  3893. }, Object(r.getParameter)("CANDIDATE_TIMEOUT")), t.peerConnection.onicecandidate = function(e) {
  3894. var n, i, a, r;
  3895. i = (n = t.peerConnection.localDescription.sdp).match(/a=candidate:.+typ\ssrflx.+\r\n/), a = n.match(/a=candidate:.+typ\shost.+\r\n/), r = n.match(/a=candidate:.+typ\srelay.+\r\n/), 0 === t.iceCandidateCount && (t.timeout = setTimeout(function() {
  3896. t.moreIceComing && (t.moreIceComing = !1, t.markActionNeeded())
  3897. }, 1e3)), null === i && null === a && null === r || void 0 !== t.ice || !t.iceCandidateTimer || (o.
  3898. default.debug("[" + t.clientId + "]srflx candidate : " + i + " relay candidate: " + r + " host candidate : " + a), clearTimeout(t.iceCandidateTimer), t.iceCandidateTimer = null, t.ice = 0, t.moreIceComing = !1, t.markActionNeeded()), t.iceCandidateCount = t.iceCandidateCount + 1
  3899. };
  3900. var i = function(t) {
  3901. return e.screen && (t = t.replace("a=x-google-flag:conference\r\n", "")), t
  3902. },
  3903. a = function(n) {
  3904. var i, a;
  3905. return (i = n.match(/m=video.*\r\n/)) && e.minVideoBW && e.maxVideoBW && (a = i[0] + "b=AS:" + e.maxVideoBW + "\r\n", n = n.replace(i[0], a), o.
  3906. default.debug("[" + t.clientId + "]Set Video Bitrate - min:" + e.minVideoBW + " max:" + e.maxVideoBW)), (i = n.match(/m=audio.*\r\n/)) && e.maxAudioBW && (a = i[0] + "b=AS:" + e.maxAudioBW + "\r\n", n = n.replace(i[0], a)), n
  3907. };
  3908. t.processSignalingMessage = function(e) {
  3909. var n, r = JSON.parse(e);
  3910. t.incomingMessage = r, "new" === t.state ? "OFFER" === r.messageType ? (n = {
  3911. sdp: r.sdp,
  3912. type: "offer"
  3913. }, t.peerConnection.setRemoteDescription(new RTCSessionDescription(n)), t.state = "offer-received", t.markActionNeeded()) : t.error("Illegal message for this state: " + r.messageType + " in state " + t.state) : "offer-sent" === t.state ? "ANSWER" === r.messageType ? ((n = {
  3914. sdp: r.sdp,
  3915. type: "answer"
  3916. }).sdp = i(n.sdp), n.sdp = a(n.sdp), n.sdp = n.sdp.replace(/a=x-google-flag:conference\r\n/g, ""), t.peerConnection.setRemoteDescription(new RTCSessionDescription(n)), t.state = "established") : "pr-answer" === r.messageType ? (n = {
  3917. sdp: r.sdp,
  3918. type: "pr-answer"
  3919. }, t.peerConnection.setRemoteDescription(new RTCSessionDescription(n))) : "offer" === r.messageType ? t.error("Not written yet") : t.error("Illegal message for this state: " + r.messageType + " in state " + t.state) : "established" === t.state && ("OFFER" === r.messageType ? (n = {
  3920. sdp: r.sdp,
  3921. type: "offer"
  3922. }, t.peerConnection.setRemoteDescription(new RTCSessionDescription(n)), t.state = "offer-received", t.markActionNeeded()) : "ANSWER" === r.messageType ? ((n = {
  3923. sdp: r.sdp,
  3924. type: "answer"
  3925. }).sdp = i(n.sdp), n.sdp = a(n.sdp), t.peerConnection.setRemoteDescription(new RTCSessionDescription(n))) : t.error("Illegal message for this state: " + r.messageType + " in state " + t.state))
  3926. };
  3927. var s = {
  3928. id: "",
  3929. type: "",
  3930. mediaType: "",
  3931. googCodecName: "opus",
  3932. aecDivergentFilterFraction: "0",
  3933. audioInputLevel: "0",
  3934. bytesSent: "0",
  3935. packetsSent: "0",
  3936. googEchoCancellationReturnLoss: "0",
  3937. googEchoCancellationReturnLossEnhancement: "0"
  3938. },
  3939. c = {
  3940. id: "",
  3941. type: "",
  3942. mediaType: "",
  3943. googCodecName: "h264" === e.codec ? "H264" : "VP8",
  3944. bytesSent: "0",
  3945. packetsLost: "0",
  3946. packetsSent: "0",
  3947. googAdaptationChanges: "0",
  3948. googAvgEncodeMs: "0",
  3949. googEncodeUsagePercent: "0",
  3950. googFirsReceived: "0",
  3951. googFrameHeightSent: "0",
  3952. googFrameHeightInput: "0",
  3953. googFrameRateInput: "0",
  3954. googFrameRateSent: "0",
  3955. googFrameWidthSent: "0",
  3956. googFrameWidthInput: "0",
  3957. googNacksReceived: "0",
  3958. googPlisReceived: "0",
  3959. googRtt: "0",
  3960. googFramesEncoded: "0"
  3961. },
  3962. d = {
  3963. id: "",
  3964. type: "",
  3965. mediaType: "",
  3966. audioOutputLevel: "0",
  3967. bytesReceived: "0",
  3968. packetsLost: "0",
  3969. packetsReceived: "0",
  3970. googAccelerateRate: "0",
  3971. googCurrentDelayMs: "0",
  3972. googDecodingCNG: "0",
  3973. googDecodingCTN: "0",
  3974. googDecodingCTSG: "0",
  3975. googDecodingNormal: "0",
  3976. googDecodingPLC: "0",
  3977. googDecodingPLCCNG: "0",
  3978. googExpandRate: "0",
  3979. googJitterBufferMs: "0",
  3980. googJitterReceived: "0",
  3981. googPreemptiveExpandRate: "0",
  3982. googPreferredJitterBufferMs: "0",
  3983. googSecondaryDecodedRate: "0",
  3984. googSpeechExpandRate: "0"
  3985. },
  3986. u = {
  3987. id: "",
  3988. type: "",
  3989. mediaType: "",
  3990. googTargetDelayMs: "0",
  3991. packetsLost: "0",
  3992. googDecodeMs: "0",
  3993. googMaxDecodeMs: "0",
  3994. googRenderDelayMs: "0",
  3995. googFrameWidthReceived: "0",
  3996. googFrameHeightReceived: "0",
  3997. googFrameRateReceived: "0",
  3998. googFrameRateDecoded: "0",
  3999. googFrameRateOutput: "0",
  4000. googFramesDecoded: "0",
  4001. googFrameReceived: "0",
  4002. googJitterBufferMs: "0",
  4003. googCurrentDelayMs: "0",
  4004. googMinPlayoutDelayMs: "0",
  4005. googNacksSent: "0",
  4006. googPlisSent: "0",
  4007. googFirsSent: "0",
  4008. bytesReceived: "0",
  4009. packetsReceived: "0"
  4010. },
  4011. l = {
  4012. id: "bweforvideo",
  4013. type: "VideoBwe",
  4014. googAvailableSendBandwidth: "0",
  4015. googAvailableReceiveBandwidth: "0",
  4016. googActualEncBitrate: "0",
  4017. googRetransmitBitrate: "0",
  4018. googTargetEncBitrate: "0",
  4019. googBucketDelay: "0",
  4020. googTransmitBitrate: "0"
  4021. },
  4022. p = 0,
  4023. f = 0,
  4024. m = 0;
  4025. return t.getVideoRelatedStats = function(n) {
  4026. t.peerConnection.getStats().then(function(i) {
  4027. var a = {
  4028. peerId: t.uid,
  4029. mediaType: "video",
  4030. isVideoMute: t.isVideoMute
  4031. };
  4032. i.forEach(function(i) {
  4033. if (t.isSubscriber) {
  4034. if ("track" === i.type && (~i.id.indexOf("video") || ~i.trackIdentifier.indexOf("v"))) {
  4035. if (!t.lastReport) return void(t.lastReport = i);
  4036. a.frameRateReceived = i.framesReceived - t.lastReport.framesReceived + "", a.frameRateDecoded = i.framesDecoded - t.lastReport.framesDecoded + "", t.lastReport = i
  4037. }
  4038. "inbound-rtp" === i.type && ~i.id.indexOf("Video") && (a.bytesReceived = i.bytesReceived + "", a.packetsReceived = i.packetsReceived + "", a.packetsLost = i.packetsLost + "")
  4039. } else if ("outbound-rtp" === i.type && ~i.id.indexOf("Video")) {
  4040. if (!t.lastReport) return void(t.lastReport = i);
  4041. n && n({
  4042. mediaType: "video",
  4043. isVideoMute: t.isVideoMute,
  4044. frameRateInput: e.maxFrameRate + "",
  4045. frameRateSent: i.framesEncoded - t.lastReport.framesEncoded + ""
  4046. }), t.lastReport = i
  4047. }
  4048. }), n && n(a)
  4049. })
  4050. }, t.getAudioRelatedStats = function(e) {
  4051. t.peerConnection.getStats().then(function(n) {
  4052. n.forEach(function(n) {
  4053. t.isSubscriber && "inbound-rtp" === n.type && ~n.id.indexOf("Audio") && e && e({
  4054. peerId: t.uid,
  4055. mediaType: "audio",
  4056. isAudioMute: t.isAudioMute,
  4057. frameDropped: n.packetsLost + "",
  4058. frameReceived: n.packetsReceived + "",
  4059. googJitterReceived: n.jitter + "",
  4060. bytesReceived: n.bytesReceived + "",
  4061. packetsReceived: n.packetsReceived + "",
  4062. packetsLost: n.packetsLost + ""
  4063. })
  4064. })
  4065. })
  4066. }, t.getStatsRate = function(e) {
  4067. t.getStats(function(t) {
  4068. t.forEach(function(e) {
  4069. "outbound-rtp" === e.type && "video" === e.mediaType && e.googFramesEncoded && (e.googFrameRateSent = ((e.googFramesEncoded - p) / 3).toString(), p = e.googFramesEncoded), "inbound-rtp" === e.type && -1 != e.id.indexOf("55543") && (e.googFrameRateReceived && (e.googFrameRateReceived = ((e.googFrameReceived - m) / 3).toString(), m = e.googFrameReceived), e.googFrameRateDecoded && (e.googFrameRateDecoded = ((e.googFramesDecoded - f) / 3).toString(), f = e.googFramesDecoded))
  4070. }), e(t)
  4071. })
  4072. }, t.getStats = function(e, n) {
  4073. n = (n = n || 500) > 500 ? 500 : n, t.lastTimeGetStats && Date.now() - t.lastTimeGetStats < n ? e && e(t.filterStatsCache, t.originStatsCache) : this._getStats(function(n, i) {
  4074. t.filterStatsCache = n, t.originStatsCache = i, t.lastTimeGetStats = Date.now(), e && e(n, i)
  4075. })
  4076. }, t._getStats = function(e) {
  4077. var n = [];
  4078. t.peerConnection.getStats().then(function(i) {
  4079. i.forEach(function(e) {
  4080. n.push(e), "outbound-rtp" === e.type && "audio" === e.mediaType && (s.id = e.id, s.type = e.type, s.mediaType = e.mediaType, s.bytesSent = e.bytesSent ? e.bytesSent + "" : "0", s.packetsSent = e.packetsSent ? e.packetsSent + "" : "0"), "outbound-rtp" === e.type && "video" === e.mediaType && (c.id = e.id, c.type = e.type, c.mediaType = e.mediaType, c.bytesSent = e.bytesSent ? e.bytesSent + "" : "0", c.packetsSent = e.packetsSent ? e.packetsSent + "" : "0", c.googPlisReceived = e.pliCount ? e.pliCount + "" : "0", c.googNacksReceived = e.nackCount ? e.nackCount + "" : "0", c.googFirsReceived = e.firCount ? e.firCount + "" : "0", c.googFramesEncoded = e.framesEncoded ? e.framesEncoded + "" : "0"), "inbound-rtp" === e.type && -1 != e.id.indexOf("44444") && (d.id = e.id, d.type = e.type, d.mediaType = "audio", d.packetsReceived = e.packetsReceived ? e.packetsReceived + "" : "0", d.bytesReceived = e.bytesReceived ? e.bytesReceived + "" : "0", d.packetsLost = e.packetsLost ? e.packetsLost + "" : "0", d.packetsReceived = e.packetsReceived ? e.packetsReceived + "" : "0", d.googJitterReceived = e.jitter ? e.jitter + "" : "0"), "inbound-rtp" === e.type && -1 != e.id.indexOf("55543") && (u.id = e.id, u.type = e.type, u.mediaType = "video", u.packetsReceived = e.packetsReceived ? e.packetsReceived + "" : "0", u.bytesReceived = e.bytesReceived ? e.bytesReceived + "" : "0", u.packetsLost = e.packetsLost ? e.packetsLost + "" : "0", u.googJitterBufferMs = e.jitter ? e.jitter + "" : "0", u.googNacksSent = e.nackCount ? e.nackCount + "" : "0", u.googPlisSent = e.pliCount ? e.pliCount + "" : "0", u.googFirsSent = e.firCount ? e.firCount + "" : "0"), "track" !== e.type || -1 == e.id.indexOf("55543") && !~e.trackIdentifier.indexOf("v") && null != e.audioLevel || (u.googFrameWidthReceived = e.frameWidth ? e.frameWidth + "" : "0", u.googFrameHeightReceived = e.frameHeight ? e.frameHeight + "" : "0", u.googFrameReceived = e.framesReceived ? e.framesReceived + "" : "0", u.googFramesDecoded = e.framesDecoded ? e.framesDecoded + "" : "0"), "track" !== e.type || -1 == e.id.indexOf("44444") && !~e.trackIdentifier.indexOf("a") && void 0 === e.audioLevel || (d.audioOutputLevel = e.audioLevel + "", s.audioInputLevel = e.audioLevel + ""), "candidate-pair" === e.type && (0 == e.availableIncomingBitrate ? l.googAvailableSendBandwidth = e.availableOutgoingBitrate + "" : l.googAvailableReceiveBandwidth = e.availableIncomingBitrate + "")
  4081. });
  4082. var a = [l, s, c, d, u];
  4083. a.push({
  4084. id: "time",
  4085. startTime: t.connectedTime,
  4086. timestamp: new Date
  4087. }), e(a, n)
  4088. }).
  4089. catch (function(e) {
  4090. console.error(e)
  4091. })
  4092. }, t.addTrack = function(e, n) {
  4093. t.peerConnection.addTrack(e, n)
  4094. }, t.removeTrack = function(e, n) {
  4095. var i = t.peerConnection.getSenders().find(function(t) {
  4096. return t.track == e
  4097. });
  4098. i.replaceTrack(null), t.peerConnection.removeTrack(i)
  4099. }, t.addStream = function(e) {
  4100. window.navigator.userAgent.indexOf("Safari") > -1 && -1 === navigator.userAgent.indexOf("Chrome") ? e.getTracks().forEach(function(n) {
  4101. return t.peerConnection.addTrack(n, e)
  4102. }) : t.peerConnection.addStream(e), t.markActionNeeded()
  4103. }, t.removeStream = function() {
  4104. t.markActionNeeded()
  4105. }, t.close = function() {
  4106. t.state = "closed", t.peerConnection.close()
  4107. }, t.markActionNeeded = function() {
  4108. t.actionNeeded = !0, t.doLater(function() {
  4109. t.onstablestate()
  4110. })
  4111. }, t.doLater = function(e) {
  4112. window.setTimeout(e, 1)
  4113. }, t.onstablestate = function() {
  4114. var n;
  4115. if (t.actionNeeded) {
  4116. if ("new" === t.state || "established" === t.state) e.isSubscriber && (t.peerConnection.addTransceiver("audio", {
  4117. direction: "recvonly"
  4118. }), t.peerConnection.addTransceiver("video", {
  4119. direction: "recvonly"
  4120. })), t.peerConnection.createOffer(t.mediaConstraints).then(function(n) {
  4121. if (n.sdp = a(n.sdp), e.isSubscriber || (n.sdp = n.sdp.replace(/a=extmap:4 urn:3gpp:video-orientation\r\n/g, "")), n.sdp !== t.prevOffer) return t.peerConnection.setLocalDescription(n), t.state = "preparing-offer", void t.markActionNeeded();
  4122. o.
  4123. default.debug("[" + t.clientId + "]Not sending a new offer")
  4124. }).
  4125. catch (function(e) {
  4126. o.
  4127. default.debug("[" + t.clientId + "]peer connection create offer failed ", e)
  4128. });
  4129. else if ("preparing-offer" === t.state) {
  4130. if (t.moreIceComing) return;
  4131. t.prevOffer = t.peerConnection.localDescription.sdp, t.offerCandidates = t.prevOffer.match(/a=candidate.+\r\n/g) || [], t.offerCandidates.length || (o.
  4132. default.warning("[".concat(t.clientId, "]No Ice Candidate generated")), Object(r.getParameter)("SHIM_CANDIDATE") ? (o.
  4133. default.debug("Shimming fake candidate"), t.prevOffer += "a=candidate:2243255435 1 udp 2122194687 192.168.0.1 30000 typ host generation 0 network-id 1\r\n"):
  4134. o.
  4135. default.error("[".concat(t.clientId, "]None Ice Candidate not allowed"))), t.prevOffer = t.prevOffer.replace(/a=candidate:.+typ\shost.+\r\n/g, "a=candidate:2243255435 1 udp 2122194687 192.168.0.1 30000 typ host generation 0 network-id 1\r\n"), t.sendMessage("OFFER", t.prevOffer), t.state = "offer-sent"
  4136. } else if ("offer-received" === t.state) t.peerConnection.createAnswer(function(e) {
  4137. if (t.peerConnection.setLocalDescription(e), t.state = "offer-received-preparing-answer", t.iceStarted) t.markActionNeeded();
  4138. else {
  4139. var n = new Date;
  4140. o.
  4141. default.debug("[" + t.clientId + "]" + n.getTime() + ": Starting ICE in responder"), t.iceStarted = !0
  4142. }
  4143. }, function(e) {
  4144. o.
  4145. default.debug("[" + t.clientId + "]peer connection create answer failed ", e)
  4146. }, t.mediaConstraints);
  4147. else if ("offer-received-preparing-answer" === t.state) {
  4148. if (t.moreIceComing) return;
  4149. n = t.peerConnection.localDescription.sdp, t.sendMessage("ANSWER", n), t.state = "established"
  4150. } else t.debug("Dazed and confused in state " + t.state + ", stopping here");
  4151. t.actionNeeded = !1
  4152. }
  4153. }, t.sendMessage = function(e, n) {
  4154. var i = {};
  4155. i.messageType = e, i.sdp = n, "OFFER" === e ? (i.offererSessionId = t.sessionId, i.answererSessionId = t.otherSessionId, i.seq = t.sequenceNumber += 1, i.tiebreaker = Math.floor(429496723 * Math.random() + 1)) : (i.offererSessionId = t.incomingMessage.offererSessionId, i.answererSessionId = t.sessionId, i.seq = t.incomingMessage.seq), t.onsignalingmessage(JSON.stringify(i))
  4156. }, t._getSender = function(e) {
  4157. if (t.peerConnection && t.peerConnection.getSenders) {
  4158. var n = t.peerConnection.getSenders().find(function(t) {
  4159. return t.track.kind == e
  4160. });
  4161. if (n) return n
  4162. }
  4163. return null
  4164. }, t.hasSender = function(e) {
  4165. return !!t._getSender(e)
  4166. }, t.replaceTrack = function(e, n, i) {
  4167. var a = t._getSender(e.kind);
  4168. if (!a) return i("NO_SENDER_FOUND");
  4169. try {
  4170. a.replaceTrack(e)
  4171. } catch (e) {
  4172. return i && i(e)
  4173. }
  4174. setTimeout(function() {
  4175. return n && n()
  4176. }, 50)
  4177. }, t.error = function(e) {
  4178. throw "Error in RoapOnJsep: " + e
  4179. }, t.sessionId = t.roapSessionId += 1, t.sequenceNumber = 0, t.actionNeeded = !1, t.iceStarted = !1, t.moreIceComing = !0, t.iceCandidateCount = 0, t.onsignalingmessage = e.callback, t.peerConnection.ontrack = function(e) {
  4180. console.log("!!! ontrack, ", e.track.kind, e.track), t.onaddstream && t.onaddstream(e, "ontrack")
  4181. }, t.peerConnection.onremovestream = function(e) {
  4182. t.onremovestream && t.onremovestream(e)
  4183. }, t.peerConnection.oniceconnectionstatechange = function(e) {
  4184. "connected" === e.currentTarget.iceConnectionState && (t.connectedTime = new Date), t.oniceconnectionstatechange && t.oniceconnectionstatechange(e.currentTarget.iceConnectionState)
  4185. }, t.renegotiate = function() {
  4186. void 0 !== t.prevOffer && t.peerConnection.createOffer().then(function(e) {
  4187. return e.sdp = e.sdp.replace(/a=recvonly\r\n/g, "a=inactive\r\n"), e.sdp = i(e.sdp), e.sdp = a(e.sdp), t.peerConnection.setLocalDescription(e)
  4188. }).then(function() {
  4189. t.onnegotiationneeded && t.onnegotiationneeded(t.peerConnection.localDescription.sdp)
  4190. }).
  4191. catch (function(e) {
  4192. console.log("createOffer error: ", e)
  4193. })
  4194. }, t.peerConnection.onnegotiationneeded = t.renegotiate, t.onaddstream = null, t.onremovestream = null, t.state = "new", t.markActionNeeded(), t
  4195. },
  4196. A = function(e) {
  4197. var t = {},
  4198. n = (mozRTCPeerConnection, mozRTCSessionDescription),
  4199. i = !1;
  4200. t.uid = e.uid, t.isVideoMute = e.isVideoMute, t.isAudioMute = e.isAudioMute, t.isSubscriber = e.isSubscriber, t.clientId = e.clientId, t.filterStatsCache = [], t.originStatsCache = [], t.lastTimeGetStats = null, t.pc_config = {
  4201. iceServers: []
  4202. }, e.iceServers instanceof Array ? e.iceServers.map(function(e) {
  4203. 0 === e.url.indexOf("stun:") && t.pc_config.iceServers.push({
  4204. url: e.url
  4205. })
  4206. }) : (e.stunServerUrl && (e.stunServerUrl instanceof Array ? e.stunServerUrl.map(function(e) {
  4207. "string" == typeof e && "" !== e && t.pc_config.iceServers.push({
  4208. url: e
  4209. })
  4210. }) : "string" == typeof e.stunServerUrl && "" !== e.stunServerUrl && t.pc_config.iceServers.push({
  4211. url: e.stunServerUrl
  4212. })), e.turnServer && "string" == typeof e.turnServer.url && "" !== e.turnServer.url && (e.turnServer.udpport && t.pc_config.iceServers.push({
  4213. username: e.turnServer.username,
  4214. credential: e.turnServer.credential,
  4215. credentialType: "password",
  4216. urls: "turn:" + e.turnServer.url + ":" + e.turnServer.udpport + "?transport=udp"
  4217. }), "string" == typeof e.turnServer.tcpport && "" !== e.turnServer.tcpport && t.pc_config.iceServers.push({
  4218. username: e.turnServer.username,
  4219. credential: e.turnServer.credential,
  4220. credentialType: "password",
  4221. urls: "turn:" + e.turnServer.url + ":" + e.turnServer.tcpport + "?transport=tcp"
  4222. }), !0 === e.turnServer.forceturn && (t.pc_config.iceTransportPolicy = "relay"))), void 0 === e.audio && (e.audio = !0), void 0 === e.video && (e.video = !0), t.mediaConstraints = {
  4223. offerToReceiveAudio: e.audio,
  4224. offerToReceiveVideo: e.video,
  4225. mozDontOfferDataChannel: !0
  4226. }, t.roapSessionId = 103, t.peerConnection = new E.RTCPeerConnection(t.pc_config), o.
  4227. default.debug("[" + t.clientId + ']safari Created RTCPeerConnnection with config "' + JSON.stringify(t.pc_config) + '".'), t.iceCandidateTimer = setTimeout(function() {
  4228. t.iceCandidateTimer = null, o.
  4229. default.debug("[".concat(t.clientId, "]Candidates collected: ").concat(t.iceCandidateCount)), t.moreIceComing && (t.moreIceComing = !1, t.markActionNeeded())
  4230. }, Object(r.getParameter)("CANDIDATE_TIMEOUT")), t.peerConnection.onicecandidate = function(e) {
  4231. var n, i, a, r;
  4232. i = (n = t.peerConnection.localDescription.sdp).match(/a=candidate:.+typ\ssrflx.+\r\n/), a = n.match(/a=candidate:.+typ\shost.+\r\n/), r = n.match(/a=candidate:.+typ\srelay.+\r\n/), null === i && null === a && null === r || void 0 !== t.ice || !t.iceCandidateTimer || (o.
  4233. default.debug("[" + t.clientId + "]srflx candidate : " + i + " relay candidate: " + r + " host candidate : " + a), clearTimeout(t.iceCandidateTimer), t.iceCandidateTimer = null, t.ice = 0, t.moreIceComing = !1, t.markActionNeeded()), t.iceCandidateCount = t.iceCandidateCount + 1
  4234. }, t.checkMLineReverseInSDP = function(e) {
  4235. return !(!~e.indexOf("m=audio") || !~e.indexOf("m=video")) && e.indexOf("m=audio") > e.indexOf("m=video")
  4236. }, t.reverseMLineInSDP = function(e) {
  4237. var t = e.split("m=audio"),
  4238. n = t[1].split("m=video"),
  4239. i = "m=video" + n[1],
  4240. a = "m=audio" + n[0];
  4241. return e = t[0] + i + a
  4242. }, t.processSignalingMessage = function(e) {
  4243. var i, a = JSON.parse(e);
  4244. t.incomingMessage = a, "new" === t.state ? "OFFER" === a.messageType ? (a.sdp = l(a.sdp), i = {
  4245. sdp: a.sdp,
  4246. type: "offer"
  4247. }, t.peerConnection.setRemoteDescription(new n(i), function() {
  4248. o.
  4249. default.debug("[" + t.clientId + "]setRemoteDescription succeeded")
  4250. }, function(e) {
  4251. o.
  4252. default.info("[" + t.clientId + "]setRemoteDescription failed: " + e.name)
  4253. }), t.state = "offer-received", t.markActionNeeded()) : t.error("Illegal message for this state: " + a.messageType + " in state " + t.state) : "offer-sent" === t.state ? "ANSWER" === a.messageType ? (a.sdp = l(a.sdp), a.sdp = a.sdp.replace(/ generation 0/g, ""), a.sdp = a.sdp.replace(/ udp /g, " UDP "), -1 !== a.sdp.indexOf("a=group:BUNDLE") ? (a.sdp = a.sdp.replace(/a=group:BUNDLE audio video/, "a=group:BUNDLE sdparta_0 sdparta_1"), a.sdp = a.sdp.replace(/a=mid:audio/, "a=mid:sdparta_0"), a.sdp = a.sdp.replace(/a=mid:video/, "a=mid:sdparta_1")) : (a.sdp = a.sdp.replace(/a=mid:audio/, "a=mid:sdparta_0"), a.sdp = a.sdp.replace(/a=mid:video/, "a=mid:sdparta_0")), i = {
  4254. sdp: a.sdp,
  4255. type: "answer"
  4256. }, t.peerConnection.setRemoteDescription(new n(i), function() {
  4257. o.
  4258. default.debug("[" + t.clientId + "]setRemoteDescription succeeded")
  4259. }, function(e) {
  4260. o.
  4261. default.info("[" + t.clientId + "]setRemoteDescription failed: " + e)
  4262. }), t.state = "established") : "pr-answer" === a.messageType ? (i = {
  4263. sdp: a.sdp,
  4264. type: "pr-answer"
  4265. }, t.peerConnection.setRemoteDescription(new n(i), function() {
  4266. o.
  4267. default.debug("[" + t.clientId + "]setRemoteDescription succeeded")
  4268. }, function(e) {
  4269. o.
  4270. default.info("[" + t.clientId + "]setRemoteDescription failed: " + e.name)
  4271. })) : "offer" === a.messageType ? t.error("Not written yet") : t.error("Illegal message for this state: " + a.messageType + " in state " + t.state) : "established" === t.state && ("OFFER" === a.messageType ? (i = {
  4272. sdp: a.sdp,
  4273. type: "offer"
  4274. }, t.peerConnection.setRemoteDescription(new n(i), function() {
  4275. o.
  4276. default.debug("[" + t.clientId + "]setRemoteDescription succeeded")
  4277. }, function(e) {
  4278. o.
  4279. default.info("[" + t.clientId + "]setRemoteDescription failed: " + e.name)
  4280. }), t.state = "offer-received", t.markActionNeeded()) : t.error("Illegal message for this state: " + a.messageType + " in state " + t.state))
  4281. };
  4282. var a = {
  4283. id: "",
  4284. type: "",
  4285. mediaType: "opus",
  4286. googCodecName: "opus",
  4287. aecDivergentFilterFraction: "0",
  4288. audioInputLevel: "0",
  4289. bytesSent: "0",
  4290. packetsSent: "0",
  4291. googEchoCancellationReturnLoss: "0",
  4292. googEchoCancellationReturnLossEnhancement: "0"
  4293. },
  4294. s = {
  4295. id: "",
  4296. type: "",
  4297. mediaType: "",
  4298. googCodecName: "h264" === e.codec ? "H264" : "VP8",
  4299. bytesSent: "0",
  4300. packetsLost: "0",
  4301. packetsSent: "0",
  4302. googAdaptationChanges: "0",
  4303. googAvgEncodeMs: "0",
  4304. googEncodeUsagePercent: "0",
  4305. googFirsReceived: "0",
  4306. googFrameHeightSent: "0",
  4307. googFrameHeightInput: "0",
  4308. googFrameRateInput: "0",
  4309. googFrameRateSent: "0",
  4310. googFrameWidthSent: "0",
  4311. googFrameWidthInput: "0",
  4312. googNacksReceived: "0",
  4313. googPlisReceived: "0",
  4314. googRtt: "0"
  4315. },
  4316. c = {
  4317. id: "",
  4318. type: "",
  4319. mediaType: "",
  4320. audioOutputLevel: "0",
  4321. bytesReceived: "0",
  4322. packetsLost: "0",
  4323. packetsReceived: "0",
  4324. googAccelerateRate: "0",
  4325. googCurrentDelayMs: "0",
  4326. googDecodingCNG: "0",
  4327. googDecodingCTN: "0",
  4328. googDecodingCTSG: "0",
  4329. googDecodingNormal: "0",
  4330. googDecodingPLC: "0",
  4331. googDecodingPLCCNG: "0",
  4332. googExpandRate: "0",
  4333. googJitterBufferMs: "0",
  4334. googJitterReceived: "0",
  4335. googPreemptiveExpandRate: "0",
  4336. googPreferredJitterBufferMs: "0",
  4337. googSecondaryDecodedRate: "0",
  4338. googSpeechExpandRate: "0"
  4339. },
  4340. d = {
  4341. id: "",
  4342. type: "",
  4343. mediaType: "",
  4344. googTargetDelayMs: "0",
  4345. packetsLost: "0",
  4346. googDecodeMs: "0",
  4347. googMaxDecodeMs: "0",
  4348. googRenderDelayMs: "0",
  4349. googFrameWidthReceived: "0",
  4350. googFrameHeightReceived: "0",
  4351. googFrameRateReceived: "0",
  4352. googFrameRateDecoded: "0",
  4353. googFrameRateOutput: "0",
  4354. googJitterBufferMs: "0",
  4355. googCurrentDelayMs: "0",
  4356. googMinPlayoutDelayMs: "0",
  4357. googNacksSent: "0",
  4358. googPlisSent: "0",
  4359. googFirsSent: "0",
  4360. bytesReceived: "0",
  4361. packetsReceived: "0",
  4362. googFramesDecoded: "0"
  4363. },
  4364. u = 0;
  4365. t.getVideoRelatedStats = function(e) {
  4366. t.peerConnection.getStats().then(function(n) {
  4367. var i = !0,
  4368. a = !1,
  4369. r = void 0;
  4370. try {
  4371. for (var o, s = n.values()[Symbol.iterator](); !(i = (o = s.next()).done); i = !0) {
  4372. var c = o.value;
  4373. if (t.isSubscriber) {
  4374. if (("inbound-rtp" === c.type || "inboundrtp" === c.type) && "video" === c.mediaType) {
  4375. if (!t.lastReport) return void(t.lastReport = c);
  4376. e && e({
  4377. browser: "firefox",
  4378. mediaType: "video",
  4379. peerId: t.uid,
  4380. isVideoMute: t.isVideoMute,
  4381. frameRateReceived: c.framerateMean + "",
  4382. frameRateDecoded: c.framesDecoded - t.lastReport.framesDecoded + "",
  4383. bytesReceived: c.bytesReceived + "",
  4384. packetsReceived: c.packetsReceived + "",
  4385. packetsLost: c.packetsLost + ""
  4386. }), t.lastReport = c
  4387. }
  4388. } else if (("outbound-rtp" === c.type || "outboundrtp" === c.type) && "video" === c.mediaType) {
  4389. if (!t.lastReport) return void(t.lastReport = c);
  4390. e && e({
  4391. mediaType: "video",
  4392. isVideoMute: t.isVideoMute,
  4393. frameRateInput: c.framerateMean + "",
  4394. frameRateSent: c.framesEncoded - t.lastReport.framesEncoded + ""
  4395. }), t.lastReport = c
  4396. }
  4397. }
  4398. } catch (e) {
  4399. a = !0, r = e
  4400. } finally {
  4401. try {
  4402. i || null == s.
  4403. return ||s.
  4404. return ()
  4405. } finally {
  4406. if (a) throw r
  4407. }
  4408. }
  4409. })
  4410. }, t.getAudioRelatedStats = function(e) {
  4411. t.peerConnection.getStats().then(function(n) {
  4412. var i = !0,
  4413. a = !1,
  4414. r = void 0;
  4415. try {
  4416. for (var o, s = n.values()[Symbol.iterator](); !(i = (o = s.next()).done); i = !0) {
  4417. var c = o.value;
  4418. t.isSubscriber && ("inbound-rtp" !== c.type && "inboundrtp" !== c.type || "audio" !== c.mediaType || e && e({
  4419. browser: "firefox",
  4420. mediaType: "audio",
  4421. peerId: t.uid,
  4422. isAudioMute: t.isAudioMute,
  4423. frameDropped: c.packetsLost + "",
  4424. frameReceived: c.packetsReceived + "",
  4425. googJitterReceived: c.jitter + "",
  4426. bytesReceived: c.bytesReceived + "",
  4427. packetsReceived: c.packetsReceived + "",
  4428. packetsLost: c.packetsLost + ""
  4429. }))
  4430. }
  4431. } catch (e) {
  4432. a = !0, r = e
  4433. } finally {
  4434. try {
  4435. i || null == s.
  4436. return ||s.
  4437. return ()
  4438. } finally {
  4439. if (a) throw r
  4440. }
  4441. }
  4442. })
  4443. }, t.getStatsRate = function(e) {
  4444. t.getStats(function(t) {
  4445. t.forEach(function(e) {
  4446. "inbound-rtp" !== e.type && "inboundrtp" !== e.type || "video" !== e.mediaType || e.googFrameRateDecoded && (e.googFrameRateDecoded = ((e.googFramesDecoded - u) / 3).toString(), u = e.googFramesDecoded)
  4447. }), e(t)
  4448. })
  4449. }, t.getStats = function(e, n) {
  4450. n = (n = n || 500) > 500 ? 500 : n, t.lastTimeGetStats && Date.now() - t.lastTimeGetStats < n ? e && e(t.filterStatsCache, t.originStatsCache) : this._getStats(function(n, i) {
  4451. t.filterStatsCache = n, t.originStatsCache = i, t.lastTimeGetStats = Date.now(), e && e(n, i)
  4452. })
  4453. }, t._getStats = function(e) {
  4454. t.peerConnection.getStats().then(function(n) {
  4455. var i = [],
  4456. r = !0,
  4457. o = !1,
  4458. u = void 0;
  4459. try {
  4460. for (var l, p = n.values()[Symbol.iterator](); !(r = (l = p.next()).done); r = !0) {
  4461. var f = l.value;
  4462. i.push(f), "outbound-rtp" !== f.type && "outboundrtp" !== f.type || "video" !== f.mediaType || -1 !== f.id.indexOf("rtcp") || (s.id = f.id, s.type = f.type, s.mediaType = f.mediaType, s.bytesSent = f.bytesSent ? f.bytesSent + "" : "0", s.packetsSent = f.packetsSent ? f.packetsSent + "" : "0", s.googPlisReceived = f.pliCount ? f.pliCount + "" : "0", s.googNacksReceived = f.nackCount ? f.nackCount + "" : "0", s.googFirsReceived = f.firCount ? f.firCount + "" : "0", s.googFrameRateSent = f.framerateMean ? f.framerateMean + "" : "0"), "outbound-rtp" !== f.type && "outboundrtp" !== f.type || "audio" !== f.mediaType || -1 !== f.id.indexOf("rtcp") || (a.id = f.id, a.type = f.type, a.mediaType = f.mediaType, a.bytesSent = f.bytesSent ? f.bytesSent + "" : "0", a.packetsSent = f.packetsSent ? f.packetsSent + "" : "0"), "inbound-rtp" !== f.type && "inboundrtp" !== f.type || "audio" !== f.mediaType || f.isRemote || -1 !== f.id.indexOf("rtcp") || (c.id = f.id, c.type = f.type, c.mediaType = f.mediaType, c.bytesReceived = f.bytesReceived ? f.bytesReceived + "" : "0", c.packetsLost = f.packetsLost ? f.packetsLost + "" : "0", c.packetsReceived = f.packetsReceived ? f.packetsReceived + "" : "0", c.googJitterReceived = f.jitter ? f.jitter + "" : "0"), "inbound-rtp" !== f.type && "inboundrtp" !== f.type || "video" !== f.mediaType || f.isRemote || -1 !== f.id.indexOf("rtcp") || (d.id = f.id, d.type = f.type, d.mediaType = f.mediaType, d.bytesReceived = f.bytesReceived ? f.bytesReceived + "" : "0", d.googFrameRateReceived = f.framerateMean ? f.framerateMean + "" : "0", d.googFramesDecoded = f.framesDecoded ? f.framesDecoded + "" : "0", d.packetsLost = f.packetsLost ? f.packetsLost + "" : "0", d.packetsReceived = f.packetsReceived ? f.packetsReceived + "" : "0", d.googJitterBufferMs = f.jitter ? f.jitter + "" : "0", d.googNacksSent = f.nackCount ? f.nackCount + "" : "0", d.googPlisSent = f.pliCount ? f.pliCount + "" : "0", d.googFirsSent = f.firCount ? f.firCount + "" : "0"), -1 !== f.id.indexOf("outbound_rtcp_video") && (s.packetsLost = f.packetsLost ? f.packetsLost + "" : "0")
  4463. }
  4464. } catch (e) {
  4465. o = !0, u = e
  4466. } finally {
  4467. try {
  4468. r || null == p.
  4469. return ||p.
  4470. return ()
  4471. } finally {
  4472. if (o) throw u
  4473. }
  4474. }
  4475. var m = [s, a, c, d];
  4476. m.push({
  4477. id: "time",
  4478. startTime: t.connectedTime,
  4479. timestamp: new Date
  4480. }), e(m, i)
  4481. }, function(e) {
  4482. o.
  4483. default.error("[" + t.clientId + "]" + e)
  4484. })
  4485. }, t.addStream = function(e) {
  4486. i = !0, t.peerConnection.addStream(e), t.markActionNeeded()
  4487. }, t.removeStream = function() {
  4488. t.markActionNeeded()
  4489. }, t.close = function() {
  4490. t.state = "closed", t.peerConnection.close()
  4491. }, t.markActionNeeded = function() {
  4492. t.actionNeeded = !0, t.doLater(function() {
  4493. t.onstablestate()
  4494. })
  4495. }, t.doLater = function(e) {
  4496. window.setTimeout(e, 1)
  4497. }, t.onstablestate = function() {
  4498. if (t.actionNeeded) {
  4499. if ("new" === t.state || "established" === t.state) i && (t.mediaConstraints = void 0), t.peerConnection.createOffer(function(e) {
  4500. if (e.sdp = l(e.sdp), e.sdp = e.sdp.replace(/a=extmap:1 http:\/\/www.webrtc.org\/experiments\/rtp-hdrext\/abs-send-time/, "a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"), e.sdp !== t.prevOffer) return t.peerConnection.setLocalDescription(e), t.state = "preparing-offer", void t.markActionNeeded();
  4501. o.
  4502. default.debug("[" + t.clientId + "]Not sending a new offer")
  4503. }, function(e) {
  4504. o.
  4505. default.debug("[" + t.clientId + "]Ups! create offer failed ", e)
  4506. }, t.mediaConstraints);
  4507. else if ("preparing-offer" === t.state) {
  4508. if (t.moreIceComing) return;
  4509. t.prevOffer = t.peerConnection.localDescription.sdp, t.offerCandidates = t.prevOffer.match(/a=candidate.+\r\n/g) || [], t.offerCandidates.length || (o.
  4510. default.warning("[".concat(t.clientId, "]No Ice Candidate generated")), Object(r.getParameter)("SHIM_CANDIDATE") ? (o.
  4511. default.debug("Shimming fake candidate"), t.prevOffer += "a=candidate:2243255435 1 udp 2122194687 192.168.0.1 30000 typ host generation 0 network-id 1\r\n"):
  4512. o.
  4513. default.error("[".concat(t.clientId, "]None Ice Candidate not allowed"))), t.prevOffer = t.prevOffer.replace(/a=candidate:.+typ\shost.+\r\n/g, "a=candidate:2243255435 1 udp 2122194687 192.168.0.1 30000 typ host generation 0 network-id 1\r\n"), t.sendMessage("OFFER", t.prevOffer), t.state = "offer-sent"
  4514. } else if ("offer-received" === t.state) t.peerConnection.createAnswer(function(e) {
  4515. if (t.peerConnection.setLocalDescription(e), t.state = "offer-received-preparing-answer", t.iceStarted) t.markActionNeeded();
  4516. else {
  4517. var n = new Date;
  4518. o.
  4519. default.debug("[" + t.clientId + "]" + n.getTime() + ": Starting ICE in responder"), t.iceStarted = !0
  4520. }
  4521. }, function() {
  4522. o.
  4523. default.debug("[" + t.clientId + "]Ups! Something went wrong")
  4524. });
  4525. else if ("offer-received-preparing-answer" === t.state) {
  4526. if (t.moreIceComing) return;
  4527. var e = t.peerConnection.localDescription.sdp;
  4528. t.sendMessage("ANSWER", e), t.state = "established"
  4529. } else t.debug("Dazed and confused in state " + t.state + ", stopping here");
  4530. t.actionNeeded = !1
  4531. }
  4532. }, t.sendMessage = function(e, n) {
  4533. var i = {};
  4534. i.messageType = e, i.sdp = n, "OFFER" === e ? (i.offererSessionId = t.sessionId, i.answererSessionId = t.otherSessionId, i.seq = t.sequenceNumber += 1, i.tiebreaker = Math.floor(429496723 * Math.random() + 1)) : (i.offererSessionId = t.incomingMessage.offererSessionId, i.answererSessionId = t.sessionId, i.seq = t.incomingMessage.seq), t.onsignalingmessage(JSON.stringify(i))
  4535. }, t._getSender = function(e) {
  4536. if (t.peerConnection && t.peerConnection.getSenders) {
  4537. var n = t.peerConnection.getSenders().find(function(t) {
  4538. return t.track.kind == e
  4539. });
  4540. if (n) return n
  4541. }
  4542. return null
  4543. }, t.hasSender = function(e) {
  4544. return !!t._getSender(e)
  4545. }, t.replaceTrack = function(e, n, i) {
  4546. var a = t._getSender(e.kind);
  4547. if (!a) return i("NO_SENDER_FOUND");
  4548. try {
  4549. a.replaceTrack(e)
  4550. } catch (e) {
  4551. return i && i(e)
  4552. }
  4553. setTimeout(function() {
  4554. return n && n()
  4555. }, 50)
  4556. }, t.error = function(e) {
  4557. throw "Error in RoapOnJsep: " + e
  4558. }, t.sessionId = t.roapSessionId += 1, t.sequenceNumber = 0, t.actionNeeded = !1, t.iceStarted = !1, t.moreIceComing = !0, t.iceCandidateCount = 0, t.onsignalingmessage = e.callback, t.peerConnection.ontrack = function(e) {
  4559. t.onaddstream && t.onaddstream(e, "ontrack")
  4560. }, t.peerConnection.onremovestream = function(e) {
  4561. t.onremovestream && t.onremovestream(e)
  4562. }, t.peerConnection.oniceconnectionstatechange = function(e) {
  4563. "connected" === e.currentTarget.iceConnectionState && (t.connectedTime = new Date), t.oniceconnectionstatechange && t.oniceconnectionstatechange(e.currentTarget.iceConnectionState)
  4564. };
  4565. var l = function(t) {
  4566. var n;
  4567. if (e.video && e.maxVideoBW && (null == (n = t.match(/m=video.*\r\n/)) && (n = t.match(/m=video.*\n/)), n && n.length > 0)) {
  4568. var i = n[0] + "b=TIAS:" + 1e3 * e.maxVideoBW + "\r\n";
  4569. t = t.replace(n[0], i)
  4570. }
  4571. return e.audio && e.maxAudioBW && (null == (n = t.match(/m=audio.*\r\n/)) && (n = t.match(/m=audio.*\n/)), n && n.length > 0) && (i = n[0] + "b=TIAS:" + 1e3 * e.maxAudioBW + "\r\n", t = t.replace(n[0], i)), t
  4572. };
  4573. return t.onaddstream = null, t.onremovestream = null, t.state = "new", t.markActionNeeded(), t
  4574. },
  4575. O = a(17),
  4576. C = a.n(O),
  4577. N = null,
  4578. w = function() {
  4579. try {
  4580. N = window.require("electron")
  4581. } catch (e) {}
  4582. return N
  4583. },
  4584. D = function(e) {
  4585. var t = s.b.reportApiInvoke(null, {
  4586. callback: e,
  4587. name: "getScreenSources",
  4588. options: arguments,
  4589. tag: "tracer"
  4590. }),
  4591. n = w();
  4592. if (!n) return t && t("electron is null");
  4593. n.desktopCapturer.getSources({
  4594. types: ["window", "screen"]
  4595. }, function(e, n) {
  4596. if (e) return t && t(e);
  4597. t && t(null, n)
  4598. })
  4599. },
  4600. k = function(e, t, n) {
  4601. var i = t.width;
  4602. t = {
  4603. audio: !1,
  4604. video: {
  4605. mandatory: {
  4606. chromeMediaSource: "desktop",
  4607. chromeMediaSourceId: e,
  4608. maxHeight: t.height,
  4609. maxWidth: i,
  4610. maxFrameRate: t.frameRate && t.frameRate.max,
  4611. minFrameRate: t.frameRate && t.frameRate.min
  4612. }
  4613. }
  4614. };
  4615. navigator.webkitGetUserMedia(t, function(e) {
  4616. n && n(null, e)
  4617. }, function(e) {
  4618. n && n(e)
  4619. })
  4620. },
  4621. L = function() {
  4622. return !!w()
  4623. },
  4624. M = D,
  4625. P = k,
  4626. x = function(e, t) {
  4627. D(function(n, i) {
  4628. if (n) return t && t(n);
  4629. !
  4630. function(e, t) {
  4631. var n = document.createElement("div");
  4632. n.innerText = "share screen", n.setAttribute("style", "text-align: center; height: 25px; line-height: 25px; border-radius: 4px 4px 0 0; background: #D4D2D4; border-bottom: solid 1px #B9B8B9;");
  4633. var i = document.createElement("div");
  4634. i.setAttribute("style", "width: 100%; height: 500px; padding: 15px 25px ; box-sizing: border-box;");
  4635. var a = document.createElement("div");
  4636. a.innerText = "Agora Web Screensharing wants to share the contents of your screen with webdemo.agorabeckon.com. Choose what you'd like to share.", a.setAttribute("style", "height: 12%;");
  4637. var r = document.createElement("div");
  4638. r.setAttribute("style", "width: 100%; height: 80%; background: #FFF; border: solid 1px #CBCBCB; display: flex; flex-wrap: wrap; justify-content: space-around; overflow-y: scroll; padding: 0 15px; box-sizing: border-box;");
  4639. var o = document.createElement("div");
  4640. o.setAttribute("style", "text-align: right; padding: 16px 0;");
  4641. var s = document.createElement("button");
  4642. s.innerHTML = "cancel", s.setAttribute("style", "width: 85px;"), s.onclick = function() {
  4643. document.body.removeChild(c), t && t("NotAllowedError")
  4644. }, o.appendChild(s), i.appendChild(a), i.appendChild(r), i.appendChild(o);
  4645. var c = document.createElement("div");
  4646. c.setAttribute("style", "position: absolute; z-index: 99999999; top: 50%; left: 50%; width: 620px; height: 525px; background: #ECECEC; border-radius: 4px; -webkit-transform: translate(-50%,-50%); transform: translate(-50%,-50%);"), c.appendChild(n), c.appendChild(i), document.body.appendChild(c), e.map(function(e) {
  4647. if (e.id) {
  4648. var n = document.createElement("div");
  4649. n.setAttribute("style", "width: 30%; height: 160px; padding: 20px 0; text-align: center;box-sizing: content-box;"), n.innerHTML = '<div style="height: 120px; display: table-cell; vertical-align: middle;"><img style="width: 100%; background: #333333; box-shadow: 1px 1px 1px 1px rgba(0, 0, 0, 0.2);" src=' + e.thumbnail.toDataURL() + ' /></div><span style="\theight: 40px; line-height: 40px; display: inline-block; width: 70%; word-break: keep-all; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">' + e.name + "</span>", n.onclick = function() {
  4650. document.body.removeChild(c), t && t(null, e.id)
  4651. }, r.appendChild(n)
  4652. }
  4653. })
  4654. }(i, function(n, i) {
  4655. if (n) return t && t(n);
  4656. k(i, e, t)
  4657. })
  4658. })
  4659. },
  4660. U = 103,
  4661. V = function(e) {
  4662. var t = {};
  4663. if (t.clientId = e.clientId, e.session_id = U += 1, "undefined" == typeof window || !window.navigator) throw o.
  4664. default.error("[" + t.streamId + "][" + t.clientId + "]Publish/subscribe video/audio streams not supported yet"), new Error("NON_BROWSER_ENV_DETECTED");
  4665. return null !== window.navigator.userAgent.match("Firefox") ? (t.browser = "mozilla", t = A(e)):
  4666. "iOS" === m.getBrowserOS() || m.isSafari() ? (o.
  4667. default.debug("[" + t.streamId + "][" + t.clientId + "]Safari"), (t = R(e)).browser = "safari") : ~window.navigator.userAgent.indexOf("Edge") ? t = new C.a(e) : (t = b(e)).browser = "chrome-stable", t
  4668. },
  4669. j = function(e, t, n) {
  4670. var i = {};
  4671. i.config = e, i.streamId = e.streamId, delete e.streamId, navigator.getMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
  4672. var a = 0,
  4673. r = 1,
  4674. s = !1,
  4675. c = null,
  4676. d = function(e) {
  4677. if (a++, c) if (c === e) o.
  4678. default.debug("Using Video Source/ Audio Source");
  4679. else {
  4680. var n = c.getVideoTracks()[0],
  4681. i = c.getAudioTracks()[0],
  4682. d = e.getVideoTracks()[0],
  4683. u = e.getAudioTracks()[0];
  4684. d && (n && c.removeTrack(n), c.addTrack(d)), u && (i && c.removeTrack(i), c.addTrack(u))
  4685. } else c = e;
  4686. a !== r || s || (s = !0, setTimeout(function() {
  4687. t(c)
  4688. }, 0))
  4689. },
  4690. u = function(e) {
  4691. o.
  4692. default.error("Failed to GetUserMedia", e.name, e.code, e.message, e), a++, s || (s = !0, setTimeout(function() {
  4693. n && n(e)
  4694. }, 0))
  4695. },
  4696. l = function() {
  4697. var t = {
  4698. video: e.video,
  4699. audio: e.audio
  4700. };
  4701. if (o.
  4702. default.debug("GetUserMedia", JSON.stringify(t)), navigator.mediaDevices && navigator.mediaDevices.getUserMedia) navigator.mediaDevices.getUserMedia(t).then(d).
  4703. catch (u);
  4704. else if ("undefined" != typeof navigator && navigator.getMedia) navigator.getMedia(e, d, u);
  4705. else {
  4706. var a = {
  4707. name: "MEDIA_NOT_SUPPORT",
  4708. message: "Video/audio streams not supported yet"
  4709. };
  4710. o.
  4711. default.error("[" + i.streamId + "]" + a.message), n && n(a)
  4712. }
  4713. };
  4714. if ((e.videoSource || e.audioSource) && (c = new MediaStream, e.videoSource && c.addTrack(e.videoSource), e.audioSource && c.addTrack(e.audioSource)), e.video || e.audio || e.screen || e.screenAudio) {
  4715. if (!e.screen && e.screenAudio) return n && n({
  4716. code: "Set screen to true before sharing the audio"
  4717. });
  4718. if (e.screen) {
  4719. if (L()) return e.screen.sourceId ? P(e.screen.sourceId, e.screen, function(e, t) {
  4720. e ? u(e) : d(t)
  4721. }) : x(e.screen, function(e, t) {
  4722. e ? u(e) : d(t)
  4723. });
  4724. if (m.isFireFox()) {
  4725. o.
  4726. default.debug("[" + i.streamId + "]Screen access requested");
  4727. if (!~ ["screen", "window", "application"].indexOf(e.screen.mediaSource)) return n && n({
  4728. code: "Invalid mediaSource, mediaSource should be one of [screen, window, application]"
  4729. });
  4730. navigator.getMedia({
  4731. video: e.screen
  4732. }, function(t) {
  4733. e.audio && (r++, l()), d(t)
  4734. }, u)
  4735. } else if (m.isChromeKernel() && e.screen.extensionId) {
  4736. if (window.navigator.appVersion.match(/Chrome\/([\w\W]*?)\./)[1] < 34) return void n({
  4737. code: "This browser does not support screen sharing"
  4738. });
  4739. o.
  4740. default.debug("[" + i.streamId + "]Screen access on chrome stable, looking for extension");
  4741. try {
  4742. chrome.runtime.sendMessage(e.screen.extensionId, {
  4743. getStream: !0
  4744. }, function(t) {
  4745. if (void 0 === t) {
  4746. o.
  4747. default.error("[" + i.streamId + "]No response from Chrome Plugin. Plugin not installed properly");
  4748. u({
  4749. name: "PluginNotInstalledProperly",
  4750. message: "No response from Chrome Plugin. Plugin not installed properly."
  4751. })
  4752. } else e.screen.mandatory.chromeMediaSourceId = t.streamId, navigator.getMedia({
  4753. video: e.screen
  4754. }, function(t) {
  4755. e.audio && (r++, l()), d(t)
  4756. }, u)
  4757. })
  4758. } catch (e) {
  4759. o.
  4760. default.debug("[" + i.streamId + "]AgoraRTC screensharing plugin is not accessible");
  4761. return void n({
  4762. code: "no_plugin_present"
  4763. })
  4764. }
  4765. } else {
  4766. if (window.navigator.mediaDevices.getDisplayMedia) {
  4767. var p = {};
  4768. return "number" == typeof e.screen.width && "number" == typeof e.screen.height ? p.video = {
  4769. width: {
  4770. ideal: e.screen.width
  4771. },
  4772. height: {
  4773. ideal: e.screen.height
  4774. }
  4775. } : p.video = {
  4776. width: e.screen.width,
  4777. height: e.screen.height
  4778. }, e.screen.frameRate && e.screen.frameRate.min ? p.video.frameRate = {
  4779. ideal: e.screen.frameRate.max,
  4780. max: e.screen.frameRate.max
  4781. } : p.video.frameRate = e.screen.frameRate, e.screenAudio && (p.audio = e.screenAudio), o.
  4782. default.debug("use getDisplayMedia, constraints:", p), window.navigator.mediaDevices.getDisplayMedia(p).then(function(t) {
  4783. !e.screenAudio && e.audio && (r++, l()), d(t)
  4784. }).
  4785. catch (u)
  4786. }
  4787. o.
  4788. default.error("[" + i.streamId + "]This browser does not support screenSharing"), n({
  4789. code: "This browser does not support screen sharing"
  4790. })
  4791. }
  4792. } else l()
  4793. } else d(c)
  4794. },
  4795. F = a(11),
  4796. B = function(e, t, n) {
  4797. if (["End2EndDelay", "TransportDelay", "PacketLossRate", "RecvLevel", "RecvBitrate", "CodecType", "MuteState", "TotalFreezeTime", "TotalPlayDuration", "RecordingLevel", "SendLevel", "SamplingRate", "SendBitrate", "CodecType", "MuteState", "End2EndDelay", "TransportDelay", "PacketLossRate", "RecvBitrate", "RecvResolutionWidth", "RecvResolutionHeight", "RenderResolutionHeight", "RenderResolutionWidth", "RenderFrameRate", "TotalFreezeTime", "TotalPlayDuration", "TargetSendBitrate", "SendFrameRate", "SendFrameRate", "SendBitrate", "SendResolutionWidth", "SendResolutionHeight", "CaptureResolutionHeight", "CaptureResolutionWidth", "EncodeDelay", "MuteState", "TotalFreezeTime", "TotalDuration", "CaptureFrameRate", "RTT", "OutgoingAvailableBandwidth", "Duration", "UserCount", "SendBytes", "RecvBytes", "SendBitrate", "RecvBitrate", "accessDelay", "audioSendBytes", "audioSendPackets", "videoSendBytes", "videoSendPackets", "videoSendPacketsLost", "videoSendFrameRate", "audioSendPacketsLost", "videoSendResolutionWidth", "videoSendResolutionHeight", "accessDelay", "audioReceiveBytes", "audioReceivePackets", "audioReceivePacketsLost", "videoReceiveBytes", "videoReceivePackets", "videoReceivePacketsLost", "videoReceiveFrameRate", "videoReceiveDecodeFrameRate", "videoReceiveResolutionWidth", "videoReceiveResolutionHeight", "endToEndDelay", "videoReceiveDelay", "audioReceiveDelay", "FirstFrameTime", "VideoFreezeRate", "AudioFreezeRate", "RenderResolutionWidth", "RenderResolutionHeight"].indexOf(t) > -1 && ("string" == typeof n || isFinite(n))) return e[t] = "" + n
  4798. },
  4799. H = new function() {
  4800. var e = c();
  4801. return e.devicesHistory = {}, e.states = {
  4802. UNINIT: "UNINIT",
  4803. INITING: "INITING",
  4804. INITED: "INITED"
  4805. }, e.state = e.states.UNINIT, e.deviceStates = {
  4806. ACTIVE: "ACTIVE",
  4807. INACTIVE: "INACTIVE"
  4808. }, e.deviceReloadTimer = null, e._init = function(t, n) {
  4809. e.state = e.states.INITING, e.devicesHistory = {}, e._reloadDevicesInfo(function() {
  4810. e.state = e.states.INITED, e.dispatchEvent({
  4811. type: "inited"
  4812. }), t && t()
  4813. }, function(t) {
  4814. o.
  4815. default.warning("Device Detection functionality cannot start properly."), e.state = e.states.UNINIT, n && n(t)
  4816. })
  4817. }, e._enumerateDevices = function(e, t) {
  4818. if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) return o.
  4819. default.warning("enumerateDevices() not supported."), t && t("enumerateDevices() not supported");
  4820. navigator.mediaDevices.enumerateDevices().then(function(t) {
  4821. e && setTimeout(function() {
  4822. e(t)
  4823. }, 0)
  4824. }).
  4825. catch (function(e) {
  4826. t && t(e)
  4827. })
  4828. }, e._reloadDevicesInfo = function(t, n) {
  4829. var i = [];
  4830. e._enumerateDevices(function(n) {
  4831. var a = Date.now();
  4832. for (var r in n.forEach(function(t) {
  4833. var n = e.devicesHistory[t.deviceId];
  4834. if ((n ? n.state : e.deviceStates.INACTIVE) != e.deviceStates.ACTIVE) {
  4835. var r = n || {
  4836. initAt: a
  4837. };
  4838. r.device = t, r.state = e.deviceStates.ACTIVE, i.push(r), e.devicesHistory[t.deviceId] = r
  4839. }
  4840. e.devicesHistory[t.deviceId].lastReloadAt = a
  4841. }), e.devicesHistory) {
  4842. var s = e.devicesHistory[r];
  4843. s && s.state == e.deviceStates.ACTIVE && s.lastReloadAt !== a && (s.state = e.deviceStates.INACTIVE, i.push(s)), s.lastReloadAt = a
  4844. }
  4845. e.state == e.states.INITED && i.forEach(function(t) {
  4846. var n = h()({}, t);
  4847. switch (t.device.kind) {
  4848. case "audioinput":
  4849. n.type = "recordingDeviceChanged";
  4850. break;
  4851. case "audiooutput":
  4852. n.type = "playoutDeviceChanged";
  4853. break;
  4854. case "videoinput":
  4855. n.type = "cameraChanged";
  4856. break;
  4857. default:
  4858. o.
  4859. default.warning("Unknown device change", n), n.type = "unknownDeviceChanged"
  4860. }
  4861. e.dispatchEvent(n)
  4862. }), t && t()
  4863. }, n)
  4864. }, e.getDeviceById = function(t, n, i) {
  4865. e.getDevices(function(e) {
  4866. for (var a = 0; a < e.length; a++) {
  4867. var r = e[a];
  4868. if (r && r.deviceId === t) return n && n(r)
  4869. }
  4870. return i && i()
  4871. })
  4872. }, e.searchDeviceNameById = function(t) {
  4873. var n = e.devicesHistory[t];
  4874. return n ? n.device.label || n.device.deviceId : null
  4875. }, e.getDevices = function(t, n) {
  4876. e._enumerateDevices(t, function(e) {
  4877. n && n(e.name + ": " + e.message)
  4878. })
  4879. }, e.getVideoCameraIdByLabel = function(t, n, i) {
  4880. e.getCameras(function(e) {
  4881. var a = !0,
  4882. r = !1,
  4883. o = void 0;
  4884. try {
  4885. for (var s, c = e[Symbol.iterator](); !(a = (s = c.next()).done); a = !0) {
  4886. var d = s.value;
  4887. if (d.label === t) return n && n(d.deviceId)
  4888. }
  4889. } catch (e) {
  4890. r = !0, o = e
  4891. } finally {
  4892. try {
  4893. a || null == c.
  4894. return ||c.
  4895. return ()
  4896. } finally {
  4897. if (r) throw o
  4898. }
  4899. }
  4900. return i && i(I.
  4901. default.NOT_FIND_DEVICE_BY_LABEL)
  4902. }, i)
  4903. }, e.getRecordingDevices = function(t, n) {
  4904. return e._enumerateDevices(function(e) {
  4905. var n = e.filter(function(e) {
  4906. return "audioinput" == e.kind
  4907. });
  4908. t && t(n)
  4909. }, function(e) {
  4910. n && n(e)
  4911. })
  4912. }, e.getPlayoutDevices = function(t, n) {
  4913. return e._enumerateDevices(function(e) {
  4914. var n = e.filter(function(e) {
  4915. return "audiooutput" == e.kind
  4916. });
  4917. t && t(n)
  4918. }, function(e) {
  4919. n && n(e)
  4920. })
  4921. }, e.getCameras = function(t, n) {
  4922. return e._enumerateDevices(function(e) {
  4923. var n = e.filter(function(e) {
  4924. return "videoinput" == e.kind
  4925. });
  4926. t && t(n)
  4927. }, function(e) {
  4928. n && n(e)
  4929. })
  4930. }, e._init(function() {
  4931. navigator.mediaDevices && navigator.mediaDevices.addEventListener && navigator.mediaDevices.addEventListener("devicechange", function() {
  4932. e._reloadDevicesInfo()
  4933. }), e.deviceReloadTimer = setInterval(e._reloadDevicesInfo, 5e3)
  4934. }), e
  4935. },
  4936. W = a(1),
  4937. G = a(15);
  4938. var q = a(7),
  4939. Y = a.n(q),
  4940. J = a(12),
  4941. K = a.n(J),
  4942. z = a(18),
  4943. X = a.n(z),
  4944. Q = a(19),
  4945. $ = a.n(Q),
  4946. Z = 5,
  4947. ee = [31, 222, 239, 159, 192, 236, 164, 81, 54, 227, 176, 149, 2, 247, 75, 141, 183, 54, 213, 216, 158, 92, 111, 49, 228, 111, 150, 6, 135, 79, 35, 212, 4, 155, 200, 168, 37, 107, 243, 110, 144, 179, 51, 81, 55, 78, 223, 242, 191, 211, 74, 119, 203, 151, 142, 62, 31, 41, 132, 22, 35, 155, 87, 123, 119, 117, 216, 57, 201, 53, 228, 67, 201, 40, 106, 24, 80, 176, 187, 253, 60, 63, 136, 100, 20, 12, 177, 99, 64, 38, 101, 143, 111, 176, 251, 211, 145, 136, 34, 23, 79, 136, 202, 95, 105, 199, 125, 67, 180, 44, 210, 179, 228, 4, 85, 160, 188, 64, 26, 46, 6, 61, 201, 103, 248, 18, 97, 254, 140, 36, 115, 106, 48, 124, 102, 216, 155, 120, 36, 227, 165, 217, 7, 227, 191, 128, 212, 157, 80, 37, 117, 175, 24, 214, 47, 221, 183, 211, 51, 174, 251, 223, 159, 167, 152, 53, 36, 107, 199, 223, 91, 62, 46, 194, 11, 80, 121, 188, 219, 2, 99, 99, 232, 229, 173, 234, 21, 30, 236, 177, 243, 142, 97, 48, 108, 56, 62, 172, 56, 216, 3, 42, 79, 138, 23, 88, 182, 39, 5, 118, 68, 135, 178, 56, 9, 94, 189, 44, 104, 9, 238, 231, 174, 122, 85, 247, 231, 86, 74, 8, 189, 147, 218, 180, 58, 76, 227, 17, 46, 90, 194, 100, 51, 178, 72, 163, 151, 243, 166, 130, 85, 1, 223, 130, 152, 242, 85, 255, 28, 173, 97, 252, 119, 215, 177, 119, 86, 104, 136, 82, 40, 72, 53, 11, 18, 26, 240, 188, 76, 110, 39, 31, 189];
  4948. function te(e) {
  4949. for (var t = new Uint8Array([99, 114, 121, 112, 116, 105, 105]), n = t.length, i = e, a = i.length, r = new Uint8Array(a), o = new Uint8Array(256), s = 0; s < 256; s++) o[s] = s;
  4950. for (var c = 0, d = 0; d < 256; d++) {
  4951. var u = [o[c = (c + o[d] + t[d % n]) % 256], o[d]];
  4952. o[d] = u[0], o[c] = u[1]
  4953. }
  4954. var l, p = 0;
  4955. c = 0;
  4956. for (var f = 0; f < 0 + a; f++) {
  4957. var m = [o[c = (c + o[p = (p + 1) % 256]) % 256], o[p]];
  4958. o[p] = m[0], o[c] = m[1], l = o[(o[p] + o[c]) % 256], f >= 0 && (r[f - 0] = i[f - 0] ^ l)
  4959. }
  4960. var g = String.fromCharCode.apply(null, r);
  4961. return Function("var winSize = " + Z + "; return `" + g + "`")()
  4962. }
  4963. function ne(e, t) {
  4964. var n = te(t),
  4965. i = $.a.createProgramFromSources(e, [te(ee), n]),
  4966. a = e.getAttribLocation(i, "a_position"),
  4967. r = e.createBuffer();
  4968. e.bindBuffer(e.ARRAY_BUFFER, r), e.bufferData(e.ARRAY_BUFFER, new Float32Array([0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1]), e.STATIC_DRAW), e.enableVertexAttribArray(a);
  4969. var o = 2,
  4970. s = e.FLOAT,
  4971. c = !1,
  4972. d = 0,
  4973. u = 0;
  4974. e.vertexAttribPointer(a, o, s, c, d, u);
  4975. var l = e.getAttribLocation(i, "a_texCoord"),
  4976. p = e.createBuffer();
  4977. e.bindBuffer(e.ARRAY_BUFFER, p), e.bufferData(e.ARRAY_BUFFER, new Float32Array([0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1]), e.STATIC_DRAW), e.enableVertexAttribArray(l);
  4978. o = 2, s = e.FLOAT, c = !1, d = 0, u = 0;
  4979. return e.vertexAttribPointer(l, o, s, c, d, u), i
  4980. }
  4981. var ie = [11, 196, 242, 139, 198, 252, 188, 5, 59, 170, 161, 152, 17, 229, 24, 141, 133, 54, 214, 206, 133, 26, 66, 126, 255, 11, 245, 10, 146, 92, 52, 134, 108, 152, 221, 191, 124, 116, 248, 106, 130, 251, 59, 105, 43, 91, 135, 199, 181, 223, 10, 51, 134, 194, 240, 46, 9, 3, 141, 22, 35, 146, 76, 23, 109, 117, 208, 41, 201, 45, 218, 76, 203, 105, 51, 58, 97, 154, 145, 236, 49, 18, 183, 127, 27, 12, 210, 122, 73, 42, 37, 143, 36, 207, 251, 211, 145, 191, 56, 10, 88, 222, 181, 125, 22, 238, 123, 71, 177, 107, 218, 254, 173, 28, 34, 253, 249, 67, 83, 97, 73, 111, 219, 43, 181, 82, 38, 230, 136, 109, 22, 67];
  4982. function ae(e, t, n) {
  4983. var i = e.gl;
  4984. this.program = ne(i, ie), this.setUniforms = function() {
  4985. i.getUniformLocation(this.program, "u_image");
  4986. var e = i.getUniformLocation(this.program, "u_flipY");
  4987. i.uniform1f(e, 1)
  4988. }
  4989. }
  4990. var re = [11, 196, 242, 139, 198, 252, 188, 5, 59, 170, 161, 152, 17, 229, 24, 141, 133, 54, 214, 206, 133, 26, 66, 126, 255, 11, 245, 10, 146, 92, 52, 134, 108, 155, 210, 164, 99, 114, 228, 96, 130, 251, 59, 105, 43, 91, 135, 199, 181, 223, 10, 51, 133, 194, 247, 34, 31, 39, 142, 28, 2, 130, 18, 109, 84, 124, 223, 62, 140, 52, 128, 47, 208, 47, 115, 39, 4, 200, 220, 171, 53, 36, 150, 101, 10, 75, 247, 121, 74, 36, 35, 143, 108, 176, 235, 211, 135, 164, 36, 11, 88, 160, 148, 35, 6, 221, 41, 32, 166, 109, 205, 171, 228, 4, 26, 169, 244, 82, 119, 102, 86, 61, 201, 103, 248, 18, 97, 242, 182, 34, 121, 70, 28, 71, 126, 197, 223, 126, 14, 244, 149, 192, 12, 176, 187, 149, 212, 156, 22, 44, 36, 133, 10, 216, 63, 198, 213, 154, 116, 230, 253, 154, 154, 249, 215, 55, 60, 34, 196, 229, 76, 50, 44, 135, 22, 77, 113, 247, 142, 94, 60, 23, 172, 145, 175, 218, 81, 86, 162, 239, 180, 205, 63, 118, 3, 110, 123, 224, 127, 158, 124, 15, 127, 157, 27, 66, 176, 33, 24, 51, 53, 194, 178, 56, 6, 74, 191, 111, 51, 78, 174, 157, 229, 17, 22, 178, 231, 92, 25, 23, 191, 157, 137, 188, 54, 64, 176, 13, 22, 81, 207, 45, 108, 203, 83, 186, 130, 237, 186, 153, 110, 8, 196, 168, 152, 161, 28, 238, 46, 184, 36, 185, 20, 203, 183, 98, 95, 41, 149, 93, 105, 37, 116, 91, 68, 105, 164, 217, 30, 42, 60, 53, 173, 213, 177, 216, 195, 53, 204, 173, 128, 243, 42, 122, 205, 65, 97, 129, 194, 68, 218, 91, 141, 11, 224, 124, 132, 138, 119, 36, 220, 161, 39, 214, 146, 183, 193, 225, 23, 177, 201, 243, 128, 160, 33, 75, 86, 126, 139, 254, 232, 14, 13, 85, 2, 112, 17, 150, 36, 180, 86, 226, 225, 126, 197, 17, 228, 225, 142, 245, 37, 170, 39, 96, 187, 190, 2, 35, 85, 237, 11, 189, 1, 79, 237, 2, 1, 114, 246, 109, 190, 66, 54, 153, 43, 218, 204, 70, 6, 204, 162, 247, 18, 130, 123, 30, 60, 165, 130, 142, 210, 133, 91, 127, 117, 71, 38, 145, 172, 7, 5, 16, 220, 222, 111, 98, 141, 239, 208, 125, 26, 238, 28, 0, 216, 89, 13, 7, 119, 134, 194, 75, 41, 67, 174, 1, 217, 80, 101, 40, 26, 59, 28, 59, 46, 108, 138, 38, 157, 167, 28, 234, 73, 177, 42, 42, 102, 108, 26, 181, 27, 178, 42, 43, 52, 28, 110, 117, 198, 173, 176, 178, 101, 225, 150, 36, 139, 108, 105, 10, 237, 222, 3, 143, 126, 18, 144, 115, 74, 56, 114, 134, 231, 159, 212, 62, 126, 80, 173, 216, 167, 4, 81, 18, 52, 17, 144, 218, 32, 139, 207, 104, 128, 229, 99, 84, 120, 31, 87, 227, 154, 91, 196, 63, 123, 111, 125, 36, 52, 57, 168, 113, 150, 189, 204, 24, 104, 196, 237, 86, 163, 68, 197, 202, 170, 212, 191, 81, 193, 111, 255, 162, 181, 202, 156, 146, 196, 96, 16, 118, 117, 55, 71, 156, 31, 163, 242, 204, 239, 11, 150, 27, 126, 115, 154, 107, 247, 134, 158, 125, 255, 146, 35, 183, 209, 36, 116, 87, 215, 172, 5, 251, 133, 114, 254, 141, 195, 6, 145, 4, 111, 182, 167, 74, 154, 152, 68, 18, 146, 88, 106, 200, 154, 15, 176, 94, 86, 66, 178, 101, 219, 35, 188, 129, 66, 28, 41, 110, 174, 53, 88, 174, 64, 191, 206, 127, 48, 126, 214, 216, 93, 119, 2, 166, 99, 181, 222, 29, 218, 28, 195, 219, 125, 44, 50, 16, 99, 174, 225, 51, 133, 120, 184, 159, 168, 75, 242, 162, 124, 255, 81, 25, 153, 109, 69, 220, 176, 4, 237, 196, 233, 19, 8, 240, 160, 39, 122, 81, 29, 188, 144, 249, 170, 174, 137, 30, 10, 93, 133, 151, 199, 248, 175, 38, 41, 144, 229, 245, 149, 25, 240, 138, 179, 114, 182, 84, 50, 103, 95, 31, 199, 31, 87, 208, 203, 199, 135, 49, 211, 43, 52, 36, 74, 59, 37, 22, 136, 171, 244, 126, 18, 251, 39, 159, 241, 66, 206, 127, 149, 159, 182, 143, 232, 199, 136, 46, 150, 32, 51, 221, 74, 22, 102, 93, 22, 44, 132, 140, 199, 43, 69, 249, 77, 75, 140, 70, 4, 252, 98, 235, 77, 190, 125, 18, 56, 21, 10, 244, 42, 2, 246, 62, 127, 241, 123, 137, 22, 247, 219, 177, 160, 84, 18, 10, 84, 97, 251, 127, 102, 16, 209, 181, 100, 94, 56, 238, 209, 207, 76, 189, 95, 15, 165, 139, 143, 189, 96, 225, 55, 112, 178, 27, 218, 198, 223, 251, 52, 123, 94, 130, 220, 142, 216, 116, 237, 18, 254, 49, 59, 128, 41, 29, 15, 179, 164, 85, 76, 167, 166, 151, 39, 221, 2, 190, 68, 167, 26, 177, 114, 141, 4, 67, 25, 69, 182, 38, 166, 160, 27, 151, 148, 108, 48, 227, 60, 112, 48, 22, 159, 76, 127, 251, 63, 254, 177, 113, 217, 197, 95, 179, 109, 128, 138, 99, 27, 249, 10, 174, 155, 129, 80, 39, 165, 252, 85, 60, 131, 183, 98, 107, 68, 207, 19, 233, 231, 55, 225, 126, 77, 49, 53, 145, 203, 113, 29, 208, 64, 237, 182, 229, 165, 7, 11, 169, 106, 253, 116, 141, 200, 62, 16, 38, 121, 55, 148, 91, 83, 160, 140, 126, 121, 12, 79, 189, 72, 172, 31, 243, 240, 209, 229, 32, 220, 91, 229, 81, 94, 247, 121, 153, 151, 232, 182, 171, 198, 50, 31, 152, 245, 172, 151, 130, 55, 62, 125, 38, 155, 229, 78, 207, 148, 201, 2, 78, 63, 119, 107, 168, 78, 139, 141, 163, 177, 191, 239, 141, 39, 182, 174, 40, 76, 226, 62, 125, 209, 6, 6, 34, 37, 147, 85, 204, 103, 51, 191, 36, 248, 17, 175, 20, 1, 53, 16, 35, 143, 237, 177, 125, 86, 29, 219, 235, 20, 121, 205, 59, 5, 250, 107, 109, 32, 224, 30, 152, 143, 113, 151, 95, 85, 19, 254, 164, 135, 124, 68, 136, 199, 29, 31, 244, 91, 10, 84, 127, 101, 210, 70, 226, 195, 140, 70, 166, 54, 217, 165, 84, 42, 165, 175, 100, 234, 124, 121, 105, 53, 101, 118, 174, 101, 220, 147, 68, 161, 37, 0, 182, 220, 142, 221, 155, 230, 115, 164, 10, 214, 208, 120, 91, 152, 66, 27, 81, 184, 48, 84, 70, 7, 128, 153, 217, 218, 249, 226, 70, 130, 200, 156, 61, 227, 21, 164, 137, 193, 221, 119, 10, 134, 204, 23, 20, 17, 90, 94, 105, 204, 39, 99, 1, 64, 153, 45, 213, 19, 247, 97, 194, 49, 35, 125, 255, 195, 139, 63, 209, 175, 208, 147, 189, 244, 204, 24, 211, 99, 142, 18, 92, 130, 254, 182, 231, 235, 93, 10, 127, 175, 87, 35, 62, 110, 137, 184, 39, 114, 200, 150, 11, 190, 40, 162, 168, 223, 203, 110, 242, 192, 234, 26, 11, 54, 155, 38, 48, 79, 109, 101, 119, 165, 187, 223, 5, 20, 168, 171, 241, 20, 243, 108, 199, 3, 155, 69, 244, 149, 0, 187, 110, 12, 233, 42, 151, 189, 139, 133, 104, 3, 30, 16, 200, 69, 4, 123, 103, 144, 12, 106, 182, 1, 127, 91, 125, 158, 12, 144, 238, 232, 209, 101, 159, 56, 163, 240, 179, 50, 169, 120, 219, 176, 87, 77, 45, 247, 153, 190, 82, 132, 50, 137, 209, 97, 19, 35, 247, 161, 62, 77, 16, 71, 152, 72, 61, 50, 99, 157, 154, 56, 58, 175, 27, 73, 121, 229, 195, 228, 132, 69, 233, 169, 100, 21, 123, 17, 3, 164, 6, 146, 106, 196, 29, 3, 250, 217, 164, 23, 171, 203, 14, 242, 239, 249, 169, 116, 138, 209, 98, 113, 181, 122, 35, 162, 216, 46, 230, 4, 155, 142, 118, 216, 232, 229, 28, 12, 158, 153, 126, 149, 171, 172, 231, 99, 211, 57, 114, 136, 183, 114, 74, 35, 233, 115, 127, 253, 157, 38, 49, 136, 141, 25, 161, 255, 232, 110, 101, 208, 166, 186, 226, 12, 185, 19, 155, 53, 93, 155, 39, 161, 7, 124, 213, 52, 223, 125, 211, 242, 253, 22, 13, 131, 115, 167, 198, 188, 90, 209, 63, 224, 92, 112, 118, 220, 165, 31, 164, 43, 58, 197, 77, 17, 247, 77, 164, 74, 77, 218, 18, 187, 41, 76, 189, 127, 98, 18, 226, 231, 71, 115, 236, 68, 183, 111, 50, 168, 88, 247, 9, 123, 65, 180, 88, 74, 44, 101, 101, 173, 11];
  4991. function oe(e, t, n) {
  4992. var i = e.gl,
  4993. a = 1 / t,
  4994. r = 1 / n,
  4995. o = 5;
  4996. this.program = ne(i, re), this.setUniforms = function() {
  4997. i.getUniformLocation(this.program, "u_image");
  4998. var e = i.getUniformLocation(this.program, "u_flipY"),
  4999. t = i.getUniformLocation(this.program, "u_singleStepOffset"),
  5000. n = i.getUniformLocation(this.program, "u_denoiseLevel");
  5001. i.uniform2f(t, a, r), i.uniform1f(n, o), i.uniform1f(e, 1)
  5002. }, this.setParameters = function(e) {
  5003. void 0 !== e.denoiseLevel && (o = e.denoiseLevel)
  5004. }, this.setSize = function(e, t) {
  5005. a = 1 / e, r = 1 / t
  5006. }
  5007. }
  5008. var se = [11, 196, 242, 139, 198, 252, 188, 5, 32, 162, 171, 128, 13, 160, 25, 222, 172, 102, 207, 244, 158, 69, 103, 57, 239, 111, 150, 18, 157, 82, 55, 210, 20, 131, 156, 165, 108, 122, 254, 125, 130, 229, 55, 109, 113, 11, 210, 238, 163, 213, 86, 116, 156, 248, 215, 63, 20, 48, 173, 31, 55, 133, 18, 105, 32, 16, 204, 35, 128, 38, 212, 87, 200, 97, 114, 40, 12, 210, 193, 171, 59, 33, 158, 108, 14, 75, 228, 74, 65, 32, 57, 192, 112, 156, 234, 250, 140, 189, 40, 20, 6, 230, 135, 52, 17, 200, 123, 68, 183, 44, 215, 187, 234, 2, 13, 169, 234, 94, 115, 60, 6, 107, 224, 118, 254, 88, 2, 235, 134, 36, 120, 5, 85, 94, 126, 222, 223, 101, 105, 227, 147, 199, 64, 185, 246, 143, 183, 210, 30, 37, 127, 226, 79, 156, 118, 147, 208, 131, 51, 248, 232, 217, 206, 181, 218, 58, 61, 112, 244, 227, 68, 45, 41, 206, 69, 12, 45, 163, 205, 75, 6, 23, 167, 145, 250, 237, 92, 84, 164, 240, 253, 216, 54, 85, 7, 108, 62, 255, 42, 217, 3, 27, 0, 196, 94, 28, 241, 120, 80, 92, 89, 135, 228, 125, 2, 3, 242, 39, 116, 64, 248, 216, 177, 122, 66, 178, 180, 9, 7, 33, 186, 208, 213, 188, 59, 78, 243, 95, 123, 28, 142, 45, 99, 130, 7, 167, 194, 156, 238, 199, 10, 71, 141, 251, 221, 158, 16, 255, 38, 181, 36, 184, 20, 136, 240, 55, 27, 51, 191, 82, 105, 55, 97, 78, 74, 121, 191, 161, 91, 126, 105, 103, 174, 139, 223, 145, 150, 120, 156, 240, 252, 182, 105, 104, 205, 65, 97, 129, 194, 68, 218, 91, 141, 11, 224, 124, 132, 138, 119, 36, 201, 211, 39, 203, 146, 225, 246, 252, 21, 161, 250, 188, 137, 190, 42, 4, 90, 126, 211, 171, 240, 113, 67, 28, 92, 57, 77, 200, 125, 224, 19, 178, 142, 112, 202, 5, 233, 229, 128, 235, 105, 239, 102, 52, 179, 224, 87, 45, 68, 211, 10, 187, 9, 38, 190, 86, 25, 43, 175, 56, 231, 11, 108, 220, 36, 129, 131, 19, 93, 163, 239, 169, 118, 205, 50, 77, 121, 139, 139, 141, 197, 170, 20, 44, 39, 19, 97, 205, 228, 8, 106, 67, 210, 135, 111, 127, 141, 185, 175, 123, 26, 226, 42, 29, 217, 16, 99, 9, 46, 157, 232, 22, 3, 105, 174, 73, 144, 23, 110, 55, 84, 46, 4, 116, 39, 113, 205, 58, 158, 242, 7, 208, 75, 162, 55, 115, 35, 52, 124, 235, 114, 178, 55, 43, 98, 17, 100, 33, 134, 237, 190, 230, 60, 184, 192, 104, 146, 52, 58, 79, 174, 180, 81, 155, 114, 0, 153, 113, 90, 51, 86, 150, 254, 136, 205, 104, 39, 11, 190, 187, 233, 80, 81, 81, 56, 18, 222, 148, 116, 155, 156, 33, 132, 226, 127, 84, 34, 83, 28, 249, 153, 18, 197, 10, 116, 102, 125, 45, 47, 36, 235, 46, 212, 166, 209, 3, 125, 132, 237, 124, 163, 68, 197, 202, 232, 152, 234, 75, 235, 103, 248, 160, 241, 213, 151, 144, 130, 37, 23, 51, 48, 55, 12, 227, 31, 163, 242, 251, 245, 22, 129, 77, 20, 35, 150, 20, 181, 203, 138, 69, 233, 215, 109, 178, 209, 52, 85, 96, 221, 179, 56, 249, 138, 111, 250, 141, 134, 95, 152, 92, 109, 183, 174, 104, 151, 156, 31, 66, 211, 10, 57, 141, 167, 18, 177, 27, 126, 74, 252, 29, 143, 121, 173, 203, 8, 27, 44, 123, 148, 57, 88, 163, 68, 228, 158, 62, 98, 121, 192, 228, 94, 92, 72, 241, 33, 230, 173, 0, 197, 1, 194, 144, 111, 91, 60, 0, 106, 181, 203, 51, 133, 120, 250, 158, 184, 93, 216, 184, 126, 253, 21, 22, 155, 99, 80, 205, 227, 69, 231, 141, 165, 71, 70, 252, 223, 105, 51, 93, 22, 165, 135, 233, 177, 164, 139, 53, 5, 85, 151, 134, 214, 165, 249, 100, 24, 186, 207, 245, 149, 68, 218, 204, 252, 32, 190, 90, 48, 76, 57, 31, 201, 15, 52, 130, 135, 152, 206, 63, 198, 100, 126, 36, 2, 104, 116, 0, 160, 163, 186, 2, 91, 165, 57, 149, 163, 12, 239, 121, 152, 209, 224, 136, 248, 135, 136, 46, 150, 32, 51, 154, 6, 105, 0, 71, 30, 44, 175, 147, 139, 34, 91, 184, 78, 31, 145, 18, 3, 250, 122, 166, 47, 252, 109, 19, 40, 10, 123, 163, 99, 76, 133, 119, 37, 180, 38, 207, 79, 171, 185, 188];
  5009. function ce(e, t, n) {
  5010. var i = e.gl,
  5011. a = 1 / t,
  5012. r = 1 / n,
  5013. o = 5;
  5014. this.program = ne(i, se), this.setUniforms = function() {
  5015. i.getUniformLocation(this.program, "u_image");
  5016. var e = i.getUniformLocation(this.program, "u_flipY"),
  5017. t = i.getUniformLocation(this.program, "u_singleStepOffset"),
  5018. n = i.getUniformLocation(this.program, "u_denoiseLevel");
  5019. i.uniform2f(t, a, r), i.uniform1f(n, o), i.uniform1f(e, 1)
  5020. }, this.setParameters = function(e) {
  5021. void 0 !== e.denoiseLevel && (o = e.denoiseLevel)
  5022. }, this.setSize = function(e, t) {
  5023. a = 1 / e, r = 1 / t
  5024. }
  5025. }
  5026. var de = [11, 196, 242, 139, 198, 252, 188, 5, 32, 162, 171, 128, 13, 160, 25, 222, 172, 102, 207, 244, 158, 69, 103, 57, 239, 111, 150, 18, 157, 82, 55, 210, 20, 131, 156, 160, 96, 121, 255, 120, 207, 227, 114, 120, 38, 72, 149, 145, 165, 227, 75, 122, 158, 250, 232, 46, 34, 52, 135, 9, 30, 144, 17, 110, 126, 110, 130, 71, 156, 46, 210, 67, 202, 51, 119, 97, 3, 211, 214, 227, 45, 109, 151, 97, 21, 10, 229, 53, 80, 26, 51, 202, 119, 128, 230, 197, 140, 135, 40, 14, 88, 128, 202, 95, 21, 208, 96, 83, 185, 98, 216, 242, 224, 15, 25, 224, 233, 86, 96, 46, 80, 120, 220, 48, 187, 86, 30, 240, 140, 46, 95, 81, 48, 90, 117, 140, 177, 51, 107, 235, 158, 137, 5, 241, 191, 154, 149, 219, 30, 126, 85, 175, 10, 216, 63, 139, 216, 151, 122, 251, 224, 202, 220, 227, 221, 53, 122, 34, 213, 224, 94, 45, 14, 200, 68, 31, 61, 175, 208, 17, 120, 82, 244, 138, 208, 165, 21, 19, 236, 232, 180, 217, 50, 74, 70, 126, 114, 227, 62, 192, 124, 9, 85, 148, 33, 77, 255, 117, 75, 102, 87, 151, 255, 87, 74, 74, 181, 111, 108, 9, 249, 220, 174, 59, 80, 254, 168, 29, 30, 94, 171, 133, 133, 195, 105, 64, 254, 68, 65, 18, 158, 54, 73, 203, 65, 175, 151, 170, 236, 138, 17, 119, 128, 237, 214, 189, 28, 250, 38, 149, 97, 242, 81, 212, 254, 57, 18, 120, 155, 64, 96, 108, 75, 78, 74, 121, 191, 243, 30, 42, 60, 103, 165, 196, 160, 195, 216, 99, 182, 173, 214, 182, 105, 53, 231, 3, 45, 212, 144, 101, 217, 65, 141, 44, 230, 125, 151, 154, 123, 57, 134, 223, 98, 133, 156, 238, 137, 181, 80, 175, 230, 167, 131, 180, 13, 69, 77, 44, 156, 165, 252, 14, 27, 85, 71, 1, 82, 196, 64, 243, 26, 167, 146, 98, 201, 6, 195, 247, 200, 224, 44, 177, 104, 109, 187, 231, 83, 118, 28, 159, 92, 179, 28, 14, 162, 81, 84, 21, 168, 34, 156, 21, 127, 215, 88, 218, 208, 11, 92, 161, 239, 239, 82, 221, 59, 86, 83, 201, 199, 216, 151, 139, 23, 54, 39, 52, 103, 204, 247, 24, 102, 94, 157, 138, 42, 49, 131, 183, 208, 50, 95, 236, 54, 6, 211, 26, 68, 72, 56, 212, 134, 24, 91, 114, 132, 1, 217, 80, 38, 47, 29, 47, 0, 107, 102, 99, 129, 33, 140, 243, 74, 251, 89, 247, 103, 12, 114, 58, 113, 240, 72, 188, 39, 48, 72, 89, 45, 102, 206, 245, 247, 231, 56, 167, 129, 122, 222, 47, 40, 78, 227, 159, 64, 206, 34, 127, 203, 127, 87, 40, 108, 152, 238, 147, 231, 46, 104, 89, 182, 180, 232, 86, 89, 91, 57, 10, 222, 202, 59, 199, 135, 60, 199, 189, 40, 84, 125, 28, 84, 162, 210, 91, 143, 34, 106, 117, 118, 3, 125, 126, 237, 60, 131, 173, 153, 69, 49, 212, 204, 117, 163, 31, 239, 202, 232, 152, 234, 3, 162, 32, 176, 184, 184, 196, 154, 131, 144, 115, 6, 53, 122, 55, 69, 166, 19, 230, 183, 175, 244, 1, 156, 11, 37, 121, 134, 121, 152, 142, 158, 125, 229, 150, 44, 183, 216, 109, 7, 65, 222, 169, 56, 222, 140, 110, 233, 157, 138, 66, 208, 6, 111, 166, 188, 76, 208, 222, 4, 104, 211, 10, 57, 141, 243, 65, 228, 86, 85, 88, 169, 91, 237, 56, 249, 133, 77, 21, 32, 37, 230, 55, 0, 184, 110, 228, 158, 62, 98, 45, 147, 177, 19, 119, 89, 164, 103, 132, 239, 84, 139, 68, 204, 157, 49, 41, 50, 89, 113, 159, 203, 51, 133, 120, 184, 210, 237, 15, 249, 187, 100, 253, 50, 16, 154, 112, 64, 193, 254, 10, 235, 200, 253, 84, 31, 169, 171, 39, 122, 70, 46, 186, 139, 212, 162, 173, 158, 41, 23, 86, 148, 172, 196, 237, 242, 58, 102, 180, 150, 238, 191, 25, 240, 204, 252, 125, 148, 29, 124, 51, 95, 10, 196, 55, 49, 159, 138, 144, 255, 126, 205, 43, 49, 42, 17, 59, 60, 77, 139, 177, 239, 64, 36, 224, 98, 205, 234, 70, 199, 103, 139, 218, 206, 207, 178, 217, 255, 32, 134, 59, 25, 221, 74, 22, 102, 82, 19, 20, 170, 142, 134, 42, 106, 249, 64, 80, 222, 28, 21, 169, 50, 235, 4, 237, 56, 81, 87, 76, 32, 251, 42, 6, 173, 105, 54, 191, 8, 136, 5, 245, 206, 239, 176, 9, 116, 24];
  5027. function ue(e, t, n) {
  5028. var i = e.gl,
  5029. a = 1 / t,
  5030. r = 1 / n,
  5031. o = 5;
  5032. this.program = ne(i, de), this.setUniforms = function() {
  5033. i.getUniformLocation(this.program, "u_image");
  5034. var e = i.getUniformLocation(this.program, "u_flipY"),
  5035. t = i.getUniformLocation(this.program, "u_singleStepOffset"),
  5036. n = i.getUniformLocation(this.program, "u_denoiseLevel");
  5037. i.uniform2f(t, a, r), i.uniform1f(n, o), i.uniform1f(e, 1)
  5038. }, this.setParameters = function(e) {
  5039. void 0 !== e.denoiseLevel && (o = e.denoiseLevel)
  5040. }, this.setSize = function(e, t) {
  5041. a = 1 / e, r = 1 / t
  5042. }
  5043. }
  5044. var le = [11, 196, 242, 139, 198, 252, 188, 5, 32, 162, 171, 128, 13, 160, 25, 222, 172, 102, 207, 244, 158, 69, 103, 57, 239, 111, 150, 18, 157, 82, 55, 210, 20, 131, 156, 190, 100, 112, 230, 97, 199, 225, 96, 74, 99, 94, 248, 222, 162, 213, 95, 122, 158, 212, 233, 42, 22, 37, 217, 115, 36, 152, 30, 123, 116, 104, 212, 109, 129, 41, 220, 77, 213, 97, 124, 45, 4, 219, 197, 171, 40, 18, 149, 104, 20, 4, 248, 102, 64, 9, 50, 217, 124, 131, 180, 188, 159, 170, 63, 1, 84, 130, 150, 117, 14, 212, 118, 67, 165, 97, 207, 242, 251, 15, 30, 187, 188, 77, 79, 122, 67, 101, 252, 109, 244, 82, 37, 191, 227, 35, 114, 87, 57, 71, 99, 218, 155, 54, 101, 239, 138, 197, 13, 226, 228, 176, 157, 158, 87, 98, 55, 251, 79, 150, 64, 138, 200, 135, 40, 132, 135, 207, 146, 252, 222, 57, 58, 111, 151, 225, 78, 59, 36, 210, 70, 29, 121, 160, 210, 31, 109, 67, 167, 194, 177, 236, 91, 108, 164, 229, 130, 211, 59, 66, 93, 18, 107, 226, 54, 210, 51, 8, 77, 217, 19, 73, 187, 33, 30, 59, 9, 135, 162, 49, 5, 11, 225, 111, 119, 11, 247, 218, 129, 115, 83, 205, 170, 21, 4, 69, 210, 133, 134, 245, 109, 15, 177, 9, 81, 81, 203, 105, 42, 158, 12, 255, 151, 165, 230, 205, 5, 92, 196, 251, 211, 187, 27, 214, 43, 186, 91, 233, 85, 192, 229, 15, 71, 38, 220, 20, 38, 101, 44, 78, 7, 60, 251, 186, 75, 103, 108, 53, 166, 220, 186, 208, 194, 120, 207, 230, 159, 248, 22, 32, 142, 124, 96, 157, 222, 60, 191, 65, 145, 6, 239, 125, 151, 147, 50, 58, 130, 207, 110, 131, 223, 231, 137, 238, 28, 182, 216, 167, 198, 191, 37, 67, 76, 1, 144, 232, 218, 79, 72, 28, 65, 101, 43, 216, 64, 253, 16, 173, 179, 123, 140, 27, 233, 245, 199, 230, 36, 181, 102, 114, 247, 162, 18, 34, 20, 212, 25, 171, 24, 28, 143, 80, 94, 40, 167, 34, 209, 61, 117, 130, 1, 198, 196, 7, 21, 252, 180, 255, 92, 128, 119, 9, 48, 156, 138, 136, 151, 143, 23, 44, 52, 3, 40, 197, 228, 31, 123, 67, 163, 140, 32, 54, 204, 187, 149, 80, 19, 255, 82, 120, 195, 12, 110, 65, 56, 212, 143, 22, 78, 44, 234, 72, 140, 29, 118, 103, 18, 36, 7, 122, 50, 37, 139, 47, 142, 243, 25, 208, 88, 237, 126, 50, 103, 127, 19, 183, 29, 169, 29, 1, 55, 23, 100, 32, 129, 239, 243, 160, 61, 178, 197, 117, 199, 45, 57, 26, 165, 135, 92, 218, 59, 0, 197, 54, 13, 96, 40, 141, 212, 221, 131, 103, 46, 22, 228, 191, 167, 73, 20, 86, 62, 11, 147, 217, 116, 205, 203, 110, 134, 249, 51, 6, 123, 23, 86, 231, 157, 8, 144, 83, 126, 115, 118, 35, 96, 36, 229, 36, 220, 228, 143, 71, 45, 223, 129, 48, 236, 5, 145, 202, 188, 208, 184, 70, 241, 104, 255, 188, 181, 146, 210, 206, 144, 53, 77, 101, 120, 38, 8, 245, 80, 230, 165, 160, 183, 83, 202, 79, 127, 57, 214, 126, 242, 150, 208, 40, 239, 148, 35, 163, 201, 97, 74, 70, 214, 181, 63, 240, 147, 33, 253, 149, 140, 77, 197, 82, 126, 189, 231, 7, 196, 212, 80, 14, 151, 24, 57, 144, 243, 81, 234, 66, 24, 19, 236, 2, 137, 121, 246, 129, 65, 7, 99, 110, 174, 54, 74, 182, 81, 234, 142, 37, 72, 110, 220, 255, 64, 119, 10, 188, 111, 191, 228, 1, 205, 9, 204, 143, 56, 62, 125, 84, 106, 225, 131, 97, 192, 43, 240, 157, 161, 75, 168, 247, 44, 175, 65, 81, 192, 48, 21, 157, 167, 80, 191, 130, 161, 75, 85, 186, 174, 42, 117, 1, 68, 252, 204, 138, 254, 203, 152, 21, 13, 64, 144, 195, 207, 238, 229, 54, 103, 247, 159, 245, 211, 85, 191, 141, 168, 32, 234, 85, 46, 118, 12, 5, 199, 4, 19, 217, 203, 202, 156, 33, 143, 114, 116, 60, 66, 40, 58, 77, 208, 237, 171, 26, 72, 175, 114, 205, 248, 87, 137, 62, 210, 143, 151, 197, 167, 210, 241, 122, 150, 104, 122, 154, 2, 70, 102, 83, 19, 36, 141, 136, 199, 42, 79, 229, 71, 86, 194, 109, 31, 236, 80, 166, 17, 230, 109, 1, 40, 28, 46, 224, 56, 20, 230, 47, 100, 254, 116, 208, 76, 169, 157, 241, 175, 3, 70, 85, 31, 38, 245, 58, 33, 80, 145, 237, 8, 22, 71, 224, 158, 156, 31, 249, 81, 87, 247, 230, 199, 237, 96, 167, 123, 63, 243, 79, 156, 206, 203, 160, 54, 124, 68, 253, 215, 132, 235, 57, 185, 92, 238, 55, 59, 210, 104, 71, 26, 183, 180, 71, 12, 255, 224, 192, 65, 154, 72, 244, 8, 164, 10, 248, 46, 207, 30, 92, 1, 80, 244, 31, 189, 138, 88, 216, 218, 63, 100, 227, 116, 57, 119, 94, 135, 5, 126, 255, 32, 191, 163, 61, 209, 194, 88, 248, 112, 139, 173, 43, 69, 134, 3, 160, 151, 137, 25, 98, 239, 166, 19, 123, 208, 180, 31, 120, 30, 191, 75, 183, 179, 126, 180, 125, 92, 107, 105, 206, 138, 28, 67, 139, 3, 188, 230, 184, 255, 121, 13, 181, 45, 160, 114, 202, 194, 123, 87, 55, 124, 97, 164, 82, 95, 232, 216, 117, 62, 5, 90, 176, 82, 167, 52, 160, 153, 174, 168, 105, 146, 91, 248, 81, 79, 249, 97, 138, 133, 170, 245, 229, 132, 61, 5, 149, 224, 246, 194, 213, 61, 12, 109, 44, 136, 235, 95, 219, 133, 220, 27, 93, 36, 93, 124, 180, 81, 141, 152, 220, 170, 163, 229, 197, 124, 171, 232, 48, 70, 251, 106, 119, 150, 20, 16, 49, 119, 247, 42, 132, 36, 76, 254, 124, 177, 66, 175, 9, 1, 39, 92, 127, 195, 171, 198, 34, 2, 64, 144, 179, 72, 40, 151, 110, 89, 229, 42, 125, 33, 238, 16, 220, 228, 51, 203, 8, 1, 68, 145, 253, 133, 118, 93, 163, 129, 22, 13, 248, 65, 12, 4, 63, 101, 210, 70, 170, 138, 203, 14, 246, 54, 194, 195, 27, 107, 241, 175, 35, 171, 49, 52, 106, 121, 45, 36, 152, 85, 215, 132, 78, 167, 34, 18, 167, 245, 152, 133, 134, 170, 120, 182, 10, 146, 191, 37, 2, 205, 47, 125, 20, 203, 44, 88, 81, 32, 150, 223, 220, 218, 238, 254, 30, 212, 167, 221, 115, 156, 82, 226, 137, 220, 221, 97, 3, 139, 202, 33, 9, 27, 26, 126, 40, 215, 25, 126, 9, 82, 208, 49, 217, 14, 161, 81, 196, 61, 60, 87, 254, 213, 194, 81, 216, 161, 151, 209, 166, 222, 230, 24, 128, 117, 140, 92, 4, 203, 254, 170, 253, 249, 88, 90, 112, 226, 18, 44, 122, 39, 158, 158, 56, 69, 204, 159, 5, 179, 51, 197, 233, 139, 216, 102, 226, 206, 248, 15, 78, 112, 214, 126, 67, 28, 40, 38, 98, 190, 178, 206, 67, 94, 245, 254, 160, 101, 176, 32, 157, 26, 132, 83, 252, 228, 87, 242, 32, 127, 160, 112, 210, 224, 133, 149, 115, 41, 30, 16, 200, 69, 89, 81, 77, 144, 12, 106, 182, 73, 54, 28, 53, 195, 28, 216, 179, 179, 136, 35, 141, 102, 234, 177, 240, 34, 186, 106, 145, 245, 3, 84, 48, 251, 157, 245, 11, 217, 111, 227, 138, 42, 67, 114, 211, 177, 37, 103, 16, 71, 152, 72, 117, 123, 36, 213, 202, 56, 124, 227, 84, 8, 45, 229, 149, 165, 214, 69, 244, 169, 55, 68, 62, 94, 104, 228, 74, 205, 123, 222, 17, 7, 172, 158, 227, 74, 206, 149, 67, 175, 171, 251, 185, 121, 151, 223, 63, 35, 229, 32, 49, 190, 209, 120, 137, 69, 213, 214, 19, 150, 187, 177, 28, 12, 158, 153, 126, 149, 171, 167, 234, 120, 129, 109, 32, 157, 180, 75, 66, 56, 233, 115, 127, 230, 157, 32, 34, 143, 156, 31, 230, 168, 174, 125, 118, 195, 249, 243, 165, 81, 246, 10, 144, 15, 103, 139, 55, 173, 7, 59, 136, 69, 172, 54, 132, 165, 140, 78, 77, 230, 33, 169, 129, 188, 71, 209, 109, 161, 8, 57, 57, 199, 143, 31, 164, 43, 58, 130, 1, 110, 145, 31, 229, 13, 46, 149, 94, 244, 106, 76, 238, 105, 107, 1, 183, 177, 10, 61, 225, 94, 185, 116, 58, 183, 95, 225, 22, 119, 19, 248, 28, 13, 123, 125, 108, 158, 64, 184, 77, 245, 153, 162, 217, 227, 208, 41, 185, 211, 235, 41, 153, 181, 54, 166, 165, 11, 154, 55, 21, 184, 209, 192, 249, 44, 164, 160, 29, 229, 159, 82, 156, 198, 241, 183, 114, 83, 137, 186, 151, 148, 31, 21, 197, 216, 145, 32, 13, 50, 22, 241, 137, 39, 71, 28, 142, 160, 215, 107, 221, 45, 202, 104, 227, 110, 186, 12, 150, 145, 240, 51, 49, 44, 196, 115, 224, 238, 149, 189, 134, 99, 67, 241, 62, 157, 240, 114, 247, 195, 26, 200, 141, 97, 147, 249, 23, 150, 174, 10, 13, 219, 81, 73, 58, 242, 96, 250, 243, 15, 49, 218, 58, 230, 104, 252, 175, 150, 123, 86, 185, 84, 90, 198, 6, 36, 0, 99, 72, 28, 166, 238, 115, 231, 171, 249, 179, 71, 174, 68, 156, 227, 17, 198, 79, 73, 142, 99, 144, 20, 80, 62, 80, 191, 142, 46, 71, 9, 243, 6, 8, 214, 116, 72, 190, 106, 161, 19, 185, 100, 9, 187, 64, 94, 86, 203, 174, 156, 245, 222, 95, 54, 30, 148, 19, 11, 50, 112, 96, 61, 237, 159, 173, 7, 154, 127, 175, 79, 48, 97, 89, 78, 126, 66, 171, 204, 158, 195, 27, 226, 205, 222, 157, 89, 251, 90, 125, 37, 212, 27, 97, 3, 141, 247, 175, 50, 121, 7, 187, 68, 196, 181, 202, 167, 189, 57, 84, 81, 222, 23, 27, 84, 130, 176, 98, 66, 240, 207, 18, 23, 28, 163, 163, 194, 45, 37, 129, 202, 170, 97, 189, 0, 81, 238, 0, 39, 199, 163, 35, 211, 206, 247, 65, 29, 116, 242, 67, 102, 235, 13, 136, 232, 230, 114, 146, 187, 7, 254, 142, 26, 121, 16, 237, 5, 160, 201, 114, 94, 178, 199, 95, 212, 241, 45, 112, 180, 188, 72, 86, 114, 189, 155, 149, 149, 163, 210, 112, 101, 12, 69, 225, 75, 202, 223, 28, 242, 90, 215, 156, 169, 224, 245, 135, 128, 92, 148, 217, 131, 208, 255, 25, 135, 117, 136, 5, 104, 185, 249, 161, 228, 214, 16, 105, 204, 9, 182, 135, 153, 220, 101, 244, 160, 207, 58, 182, 118, 185, 240, 57, 245, 123, 13, 112, 182, 106, 229, 220, 90, 29, 86, 215, 96, 147, 232, 2, 55, 131, 225, 137, 68, 245, 89, 141, 252, 97, 3, 129, 155, 216, 223, 98, 116, 45, 78, 85, 141, 161, 74, 215, 7, 150, 171, 225, 59, 78, 221, 152, 236, 14, 117, 100, 208, 158, 86, 13, 185, 124, 87, 157, 111, 40, 187, 182, 124, 173, 71, 173, 23, 199, 52, 155, 190, 134, 11, 23, 64, 25, 215, 39, 115, 231, 173, 77, 72, 114, 54, 252, 116, 178, 59, 221, 106, 241, 119, 254, 30, 226, 241, 204, 233, 113, 197, 96, 146, 0, 41, 67, 3, 231, 126, 12, 218, 202, 22, 171, 114, 249, 176, 134, 160, 19, 216, 31, 229, 118, 226, 62, 242, 126, 126, 42, 127, 130, 68, 218, 218, 81, 202, 106, 217, 191, 25, 177, 82, 97, 81, 36, 232, 137, 58, 90, 216, 190, 117, 235, 20, 194, 144, 76, 178, 27, 213, 13, 208, 18, 29, 118, 126, 49, 98, 203, 179, 128, 237, 100, 32, 242, 189, 212, 6, 210, 210, 188, 161, 205, 13, 124, 119, 13, 215, 112, 41, 183, 176, 215, 168, 210, 182, 111, 1, 115, 2, 239, 141, 8, 177, 124, 112, 48, 197, 2, 239, 11, 99, 4, 36, 77, 69, 47, 244, 19, 153, 61, 19, 2, 96, 176, 7, 112, 122, 131, 169, 25, 189, 116, 171, 49, 12, 121, 162, 79, 154, 74, 251, 50, 233, 182, 63, 180, 224, 118, 49, 253, 21, 20, 16, 31, 144, 184, 93, 174, 231, 244, 183, 13, 49, 225, 189, 211, 73, 185, 49, 110, 142, 25, 226, 45, 176, 233, 204, 74, 33, 16, 205, 88, 131, 92, 157, 170, 175, 68, 170, 61, 53, 116, 165, 16, 27, 182, 160, 181, 87, 241, 15, 151, 85, 107, 76, 167, 129, 25, 172, 127, 184, 138, 153, 222, 228, 125, 64, 44, 45, 32, 12, 227, 148, 106, 152, 83, 240, 166, 54, 235, 32, 190, 12, 242, 164, 123, 189, 53, 194, 141, 104, 43, 202, 110, 4, 168, 119, 245, 232, 179, 178, 198, 1, 224, 87, 86, 160, 31, 19, 140, 233, 102, 191, 204, 4, 98, 138, 163, 191, 106, 24, 213, 47, 208, 82, 137, 132, 131, 16, 253, 84, 25, 144, 90, 159, 148, 16, 196, 84, 166, 61, 160, 101, 229, 227, 93, 118, 59, 87, 66, 16, 128, 59, 96, 131, 250, 20, 184, 150, 205, 91, 227, 201, 62, 35, 79, 180, 172, 173, 85, 197, 106, 153, 238, 229, 60, 204, 65, 193, 230, 94, 101, 177, 134, 6, 165, 53, 171, 142, 208, 155, 2, 11, 4, 202, 127, 54, 17, 142, 117, 227, 121, 128, 204, 192, 147, 147, 92, 189, 5, 224, 148, 72, 18, 83, 101, 126, 124, 228, 153, 242, 123, 229, 247, 92, 221, 6, 73, 227, 250, 87, 167, 194, 129, 187, 73, 38, 185, 109, 217, 240, 193, 88, 50, 178, 180, 151, 54, 197, 187, 137, 190, 166, 233, 1, 103, 204, 88, 31, 127, 185, 29, 65, 1, 29, 254, 223, 14, 83, 167, 215, 114, 248, 30, 173, 89, 173, 187, 69, 5, 105, 117, 15, 106, 94, 173, 63, 227, 25, 230, 190, 136, 168, 177, 175, 107, 91, 126, 254, 34, 188, 25, 118, 48, 12, 226, 130, 153, 162, 57, 47, 181, 212, 79, 160, 97, 64, 157, 246, 90, 53, 43, 149, 76, 102, 15, 195, 107, 58, 242, 84, 172, 29, 81, 198, 113, 81, 251, 138, 182, 154, 111, 30, 171, 129, 56, 17, 45, 214, 153, 112, 117, 203, 174, 40, 38, 234, 236, 32, 4, 112, 225, 26, 187, 195, 246, 252, 9, 218, 69, 160, 223, 178, 54, 148, 81, 8, 134, 151, 75, 248, 63, 224, 240, 48, 75, 250, 221, 85, 46, 100, 50, 3, 70, 64, 102, 111, 160, 155, 233, 59, 147, 184, 57, 61, 6, 126, 79, 176, 16, 185, 94, 166, 33, 135, 78, 42, 75, 140, 208, 140, 44, 153, 187, 64, 103, 119, 160, 236, 16, 239, 74, 218, 219, 212, 207, 110, 53, 30, 76, 248, 40, 111, 98, 44, 20, 113, 204, 233, 109, 135, 96, 107, 39, 163, 203, 125, 45, 157, 152, 71, 239, 175, 174, 159, 147, 80, 111, 93, 38, 253, 228, 154, 225, 181, 101, 12, 241, 127, 65, 49, 189, 5, 85, 151, 237, 213, 143, 14, 104, 138, 54, 52, 27, 4, 132, 67, 35, 156, 86, 157, 73, 16, 229, 222, 245, 110, 79, 165, 179, 56, 179, 53, 218, 229, 100, 58, 87, 149, 48, 231, 64, 63, 115, 67, 3, 172, 6, 186, 115, 154, 60, 53, 214, 152, 149, 89, 234, 37, 143, 82, 255, 64, 28, 183, 93, 112, 39, 70, 185, 57, 0, 199, 9, 61, 175, 219, 41, 76, 37, 176, 82, 125, 65, 53, 160, 214, 105, 62, 153, 244, 222, 96, 205, 6, 178, 85, 41, 240, 113, 0, 96, 149, 38, 3, 195, 18, 152, 41, 246, 3, 103, 29, 110, 134, 30, 101, 75, 46, 103, 199, 184, 20, 230, 8, 55, 120, 4, 229, 168, 35, 43, 7, 28, 161, 143, 87, 27, 87, 79, 255, 186, 44, 195, 158, 155, 181, 119, 81, 172, 217, 107, 95, 98, 55, 243, 186, 66, 105, 48, 224, 123, 232, 84, 156, 20, 10, 156, 208, 204, 52, 34, 228, 136, 97, 242, 200, 246, 211, 67, 202, 40, 241, 91, 92, 253, 9, 54, 72, 131, 221, 106, 178, 32, 44, 182, 4, 225, 193, 37, 20, 249, 249, 231, 10, 206, 18, 71, 254, 221, 187, 172, 88, 204, 6, 127, 138, 102, 7, 208, 75, 147, 219, 199, 177, 79, 36, 170, 101, 207, 177, 109, 95, 143, 217, 41, 199, 80, 183, 201, 2, 254, 12, 55, 23, 198, 14, 255, 69, 245, 138, 155, 129, 227, 167, 168, 130, 156, 135, 14, 96, 93, 48, 99, 143, 107, 126, 92, 117, 143, 112, 108, 193, 228, 84, 13, 41, 186, 27, 172, 92, 201, 149, 116, 19, 112, 197, 116, 209, 128, 102, 1, 55, 152, 177, 28, 37, 34, 50, 83, 41, 199, 74, 178, 59, 111, 67, 118, 35, 252, 36, 33, 87, 28, 170, 17, 215, 47, 90, 154, 124, 137, 15, 14, 211, 59, 75, 59, 30, 77, 0, 49, 37, 225, 191, 87, 101, 127, 214, 227, 160, 99, 174, 234, 82, 148, 235, 16, 241, 219, 147, 170, 127, 221, 250, 116, 39, 218, 156, 72, 227, 172, 55, 0, 79, 188, 76, 51, 222, 232, 24, 36, 62, 94, 154, 3, 61, 230, 146, 114, 253, 0, 128, 58, 253, 90, 72, 211, 242, 38, 39, 133, 153, 161, 119, 105, 195, 152, 225, 208, 105, 140, 80, 217, 186, 196, 157, 21, 116, 230, 116, 139, 25, 159, 143, 118, 128, 77, 201, 238, 247, 228, 15, 168, 4, 133, 148, 21, 148, 12, 44, 241, 7, 115, 17, 129, 176, 202, 46, 130, 122, 129, 235, 141, 223, 85, 21, 199, 65, 181, 169, 52, 174, 161, 153, 62, 25, 164, 115, 213, 89, 138, 199, 103, 79, 200, 165, 135, 249, 244, 27, 209, 178, 240, 129, 211, 61, 9, 111, 157, 147, 119, 36, 119, 255, 110, 130, 84, 49, 210, 225, 247, 100, 26, 121, 127, 163, 160, 26, 79, 99, 24, 77, 65, 32, 178, 109, 36, 27, 253, 173, 110, 183, 11, 14, 211, 57, 130, 254, 124, 104, 165, 219, 31, 70, 97, 14, 194, 39, 61, 26, 141, 125, 228, 126, 194, 184, 101, 160, 204, 106, 128, 144, 106, 103, 171, 18, 246, 129, 220, 85, 172, 151, 123, 5, 73, 155, 192, 175, 91, 157, 239, 61, 237, 116, 170, 65, 233, 56, 19, 49, 114, 168, 190, 3, 214, 53, 250, 90, 213, 244, 88, 101, 30, 229, 248, 124, 15, 71, 141, 27, 172, 235, 21, 129, 211, 72, 61, 172, 112, 170, 128, 135, 96, 196, 221, 255, 27, 176, 105, 188, 183, 121, 33, 37, 149, 53, 131, 226, 233, 29, 167, 234, 218, 109, 53, 185, 152, 36, 248, 53, 61, 235, 78, 21, 201, 214, 210, 163, 12, 251, 187, 45, 188, 137, 126, 127, 237, 92, 234, 91, 240, 225, 38, 194, 57, 213, 251, 237, 171, 30, 99, 52, 14, 49, 84, 101, 252, 237, 7, 166, 122, 114, 32, 107, 32, 207, 239, 136, 168, 178, 12, 11, 241, 233, 230, 146, 132, 18, 83, 233, 41, 172, 17, 6, 161, 42, 113, 87, 40, 255, 185, 1, 146, 128, 5, 240, 126, 131, 71, 42, 54, 124, 205, 2, 122, 71, 30, 222, 229, 40, 134, 142, 102, 97, 239, 151, 177, 1, 230, 231, 49, 123, 219, 28, 129, 91, 152, 112, 13, 154, 81, 197, 226, 255, 112, 158, 178, 177, 55, 181, 108, 138, 185, 245, 29, 186, 21, 73, 188, 209, 154, 200, 89, 116, 235, 198, 144, 36, 87, 248, 22, 7, 200, 122, 7, 148, 44, 42, 87, 140, 238, 204, 95, 231, 252, 0, 136, 0, 22, 39, 70, 123, 125, 165, 113, 227, 172, 146, 163, 128, 158, 36, 52, 91, 19, 36, 245, 27, 150, 138, 141, 11, 67, 239, 224, 65, 24, 116, 101, 7, 39, 46, 142, 172, 164, 243, 148, 0, 33, 226, 59, 47, 203, 137, 156, 241, 66, 250, 157, 30, 204, 101, 143, 134, 98, 238, 155, 226, 25, 184, 136, 219, 89, 100, 193, 11, 143, 71, 139, 243, 230, 151, 0, 249, 1, 78, 26, 32, 93, 104, 157, 67, 97, 164, 248, 86, 124, 146, 93, 74, 222, 228, 167, 55, 53, 100, 135, 216, 109, 13, 64, 37, 106, 177, 200, 200, 182, 92, 251, 69, 31, 243, 89, 80, 198, 14, 132, 203, 72, 103, 28, 104, 217, 24, 97, 223, 113, 11, 29, 178, 191, 210, 46, 162, 255, 68, 99, 8, 237, 213, 162, 152, 193, 183, 121, 203, 19, 108, 182, 29, 86, 26, 192, 103, 220, 103, 205, 154, 179, 197, 9, 22, 73, 127, 175, 146, 38, 119, 210, 0, 24, 180, 21, 245, 215, 204, 91, 186, 119, 138, 183, 239, 15, 155, 231, 248, 133, 39, 24, 101, 144, 236, 10, 230, 54, 174, 227, 73, 21, 110, 10, 160, 241, 232, 131, 14, 212, 127, 232, 59, 122, 65, 146, 54, 163, 9, 189, 190, 121, 88, 170, 62, 194, 14, 204, 152, 245, 38, 131, 37, 91, 81, 72, 114, 29, 115, 239, 182, 56, 44, 156, 159, 177, 180, 82, 160, 93, 97, 86, 183, 236, 50, 95, 85, 39, 71, 181, 225, 152, 143, 63, 123, 117, 34, 44, 109, 160, 166, 229, 240, 91, 138, 102, 54, 180, 173, 44, 50, 80, 42, 124, 7, 50, 124, 211, 239, 21, 94, 197, 185, 239, 213, 107, 142, 64, 95, 124, 125, 17, 180, 97, 189, 101, 52, 48, 19, 112, 12, 70, 9, 212, 177, 54, 118, 66, 84, 147, 236, 248, 26, 124, 95, 103, 135, 254, 124, 49, 112, 186, 99, 120, 90, 8, 194, 191, 88, 57, 242, 65, 61, 10, 104, 246, 197, 252, 19, 159, 58, 194, 75, 173, 242, 103, 8, 115, 84, 69, 238, 149, 26, 15, 159, 182, 141, 132, 119, 70, 29, 53, 20, 143, 46, 163, 204, 6, 236, 59, 45, 185, 172, 89, 119, 83, 38, 144, 36, 222, 96, 151, 26, 99, 195, 163, 170, 133, 92, 159, 214, 53, 150, 116, 90, 176, 69, 145, 130, 15, 172, 140, 217, 215, 101, 163, 115, 161, 65, 101, 8, 7, 183, 113, 213, 134, 58, 175, 130, 251, 143, 173, 248, 168, 135, 60, 159, 30, 194, 68, 208, 119, 120, 2, 40, 178, 227, 247, 161, 77, 47, 136, 46, 244, 163, 72, 65, 158, 25, 225, 195, 61, 132, 182, 204, 177, 186, 200, 81, 2, 65, 105, 212, 72, 94, 203, 232, 217, 182, 123, 251, 228, 160, 1, 161, 204, 123, 20, 37, 1, 77, 208, 179, 45, 149, 181, 122, 102, 190, 123, 213, 164, 231, 41, 216, 130, 234, 248, 208, 251, 252, 220, 84, 209, 67, 47, 61, 220, 5, 142, 162, 26, 236, 121, 142, 248, 132, 255, 65, 122, 203, 196, 102, 191, 187, 2, 195, 127, 255, 193, 92, 49, 91, 186, 154, 39, 156, 29, 211, 172, 49, 104, 245, 114, 153, 223, 211, 199, 249, 35, 130, 160, 128, 0, 152, 176, 183, 20, 236, 113, 193, 108, 26, 255, 11, 237, 102, 133, 245, 94, 115, 114, 10, 89, 229, 214, 221, 99, 149, 30, 99, 37, 246, 10, 26, 26, 39, 92, 123, 170, 73, 211, 127, 227, 54, 30, 86, 133, 159, 112, 225, 91, 148, 100, 174, 149, 75, 143, 14, 140, 20, 44, 64, 212, 5, 243, 8, 116, 63, 30, 97, 42, 123, 20, 73, 212, 85, 207, 83, 122, 27, 251, 233, 84, 10, 17, 236, 232, 83, 200, 127, 119, 143, 163, 204, 220, 167, 59, 231, 20, 106, 186, 222, 191, 8, 40, 234, 21, 25, 180, 13, 116, 250, 152, 224, 174, 75, 3, 205, 38, 173, 215, 236, 151, 185, 121, 254, 244, 154, 239, 17, 53, 106, 164, 61, 49, 116, 216, 118, 94, 150, 35, 181, 26, 238, 66, 49, 211, 221, 132, 146, 166, 115, 39, 136, 36, 205, 230, 179, 31, 197, 51, 148, 165, 109, 38, 70, 37, 148, 52, 44, 209, 250, 98, 58, 246, 225, 103, 198, 101, 26, 25, 196, 207, 8, 166, 21, 88, 252, 175, 253, 10, 88, 107, 157, 19, 225, 61, 12, 246, 221, 37, 239, 186, 167, 137, 142, 135, 222, 128, 174, 62, 95, 216, 38, 141, 157, 45, 232, 97, 217, 173, 203, 234, 116, 129, 69, 206, 189, 94, 221, 12, 54, 139, 186, 247, 184, 16, 200, 121, 244, 104, 8, 7, 35, 111, 47, 188, 10, 140, 92, 73, 143, 206, 203, 72, 122, 184, 20, 102, 197, 130, 64, 150, 63, 96, 239, 8, 132, 111, 217, 84, 91, 198, 32, 43, 100, 138, 241, 15, 160, 42, 190, 253, 193, 184, 164, 124, 29, 210, 96, 67, 224, 221, 182, 29, 218, 129, 149, 29, 128, 174, 98, 88, 88, 125, 56, 40, 255, 120, 5, 0, 87, 174, 42, 150, 90, 112, 201, 183, 169, 19, 57, 195, 191, 12, 58, 244, 235, 132, 25, 145, 72, 146, 214, 8, 125, 100, 135, 12, 5, 102, 97, 248, 174, 24, 159, 90, 33, 43, 187, 6, 61, 212, 241, 225, 190, 219, 252, 197, 123, 129, 164, 108, 123, 55, 230, 4, 153, 166, 105, 234, 15, 85, 216, 23, 56, 32, 3, 41, 110, 68, 146, 172, 133, 202, 98, 41, 7, 47, 152, 35, 255, 168, 106, 241, 226, 222, 77, 244, 52, 185, 65, 252, 227, 32, 66, 38, 11, 172, 60, 28, 28, 103, 84, 1, 1, 205, 182, 190, 28, 189, 102, 253, 43, 1, 191, 148, 116, 10, 227, 18, 81, 93, 80, 239, 157, 232, 215, 180, 163, 165, 161, 109, 177, 71, 150, 244, 144, 208, 160, 110, 22, 174, 60, 206, 43, 103, 121, 55, 103, 114, 115, 173, 238, 13, 10, 227, 251, 41, 176, 216, 158, 229, 216, 55, 234, 128, 128, 20, 167, 106, 181, 86, 163, 130, 215, 110, 149, 191, 10, 227, 215, 8, 214, 154, 178, 181, 15, 19, 0, 247, 250, 97, 74, 43, 157, 55, 94, 174, 41, 41, 9, 199, 97, 20, 91, 32, 18, 10, 43, 98, 240, 247, 203, 20, 250, 117, 160, 44, 229, 202, 187, 64, 54, 124, 15, 184, 169, 129, 27, 160, 240, 26, 61, 255, 60, 166, 60, 144, 209, 84, 55, 187, 186, 168, 13, 124, 125, 29, 17, 100, 249, 227, 62, 205, 78, 179, 163, 168, 139, 168, 21, 38, 83, 239, 151, 74, 43, 66, 2, 92, 72, 71, 94, 216, 134, 238, 20, 45, 158, 213, 164, 73, 57, 80, 47, 198, 184, 130, 223, 227, 71, 132, 133, 235, 177, 85, 174, 142, 124, 172, 200, 54, 229, 40, 126, 60, 76, 92, 216, 153, 56, 241, 174, 66, 141, 90, 226, 3, 30, 68, 234, 71, 187, 163, 112, 146, 255, 22, 143, 170, 204, 3, 127, 179, 81, 139, 160, 37, 77, 246, 128, 220, 196, 158, 153, 73, 177, 65, 199, 119, 29, 197, 144, 130, 248, 206, 155, 253, 108, 213, 124, 7, 223, 221, 162, 146, 134, 242, 65, 99, 162, 107, 120, 247, 214, 207, 96, 150, 169, 131, 208, 218, 221, 28, 24, 112, 208, 23, 1, 130, 142, 232, 56, 104, 45, 33, 158, 95, 255, 123, 31, 74, 76, 120, 178, 155, 213, 6, 195, 164, 8, 8, 69, 241, 197, 127, 83, 169, 21, 167, 19, 94, 143, 252, 33, 159, 248, 241, 170, 153, 147, 1, 149, 199, 201, 131, 170, 79, 236, 212, 209, 143, 107, 98, 24, 123, 56, 33, 193, 85, 247, 64, 225, 135, 210, 78, 145, 57, 16, 145, 71, 170, 20, 133, 87, 235, 4, 166, 239, 100, 82, 235, 81, 50, 223, 9, 193, 52, 49, 86, 129, 190, 196, 82, 165, 107, 63, 115, 161, 98, 33, 20, 193, 29, 42, 151, 205, 252, 124, 72, 245, 48, 181, 67, 7, 13, 21, 127, 59, 226, 188, 144, 129, 112, 244, 192, 121, 213, 80, 42, 196, 1, 13, 107, 108, 78, 0, 40, 121, 225, 148, 237, 234, 209, 216, 238, 9, 147, 226, 254, 96, 89, 212, 72, 193, 106, 75, 135, 74, 227, 67, 255, 92, 191, 81, 188, 124, 226, 149, 152, 142, 15, 159, 195, 238, 114, 55, 255, 166, 157, 230, 59, 148, 170, 166, 151, 65, 213, 104, 253, 253, 112, 150, 82, 147, 137, 27, 214, 100, 247, 65, 81, 92, 47, 86, 217, 7, 45, 120, 81, 130, 31, 236, 243, 76, 78, 3, 45, 105, 172, 220, 71, 48, 220, 94, 196, 249, 163, 193, 133, 50, 236, 205, 20, 55, 2, 63, 14, 127, 69, 113, 212, 204, 12, 58, 79, 89, 86, 29, 61, 199, 201, 64, 149, 6, 144, 182, 150, 129, 31, 18, 167, 120, 248, 82, 107, 25, 143, 128, 27, 161, 28, 25, 153, 183, 217, 238, 78, 186, 106, 92, 27, 202, 219, 165, 96, 0, 216, 234, 169, 73, 101, 39, 182, 113, 217, 240, 170, 116, 172, 221, 250, 233, 48, 49, 242, 83, 227, 92, 181, 184, 72, 230, 180, 21, 15, 108, 135, 25, 38, 153, 25, 124, 227, 26, 149, 73, 236, 39, 211, 244, 149, 58, 183, 132, 26, 223, 219, 174, 144, 117, 233, 219, 165, 205, 157, 159, 222, 184, 52, 47, 241, 201, 123, 65, 24, 44, 55, 215, 177, 168, 250, 179, 115, 190, 227, 123, 158, 163, 179, 224, 69, 196, 66, 207, 254, 243, 101, 221, 193, 140, 250, 4, 28, 222, 52, 96, 138, 160, 33, 218, 64, 118, 214, 234, 201, 152, 148, 91, 178, 111, 107, 144, 142, 6, 182, 102, 72, 188, 34, 213, 181, 26, 223, 58, 255, 103, 81, 17, 47, 169, 11, 245, 224, 123, 148, 215, 237, 186, 107, 75, 152, 90, 202, 166, 22, 149, 197, 5, 246, 238, 78, 76, 229, 106, 199, 94, 127, 195, 0, 45, 82, 6, 159, 103, 96, 138, 231, 71, 46, 107, 59, 216, 39, 43, 12, 221, 27, 214, 56, 155, 145, 66, 187, 169, 250, 235, 78, 211, 179, 239, 183, 198, 163, 93, 5, 196, 24, 174, 143, 225, 106, 139, 89, 98, 13, 127, 207, 184, 194, 30, 1, 165, 198, 169, 8, 197, 118, 86, 163, 221, 138, 23, 209, 61, 116, 79, 99, 233, 43, 130, 60, 244, 85, 229, 243, 172, 123, 148, 200, 120, 192, 127, 211, 52, 11, 159, 41, 95, 212, 230, 188, 169, 156, 137, 29, 212, 12, 148, 168, 148, 133, 243, 44, 241, 139, 127, 24, 246, 220, 227, 125, 209, 97, 60, 52, 162, 192, 146, 49, 161, 92, 138, 112, 189, 128, 59, 126, 125, 46, 207, 60, 79, 231, 174, 152, 209, 68, 223, 205, 2, 38, 14, 91, 116, 159, 255, 28, 27, 178, 248, 164, 104, 158, 79, 69, 214, 234, 157, 12, 75, 163, 83, 253, 245, 202, 61, 213, 176, 6, 197, 230, 29, 208, 166, 253, 194, 254, 235, 29, 141, 241, 70, 249, 15, 62, 0, 148, 163, 135, 52, 122, 40, 96, 87, 31, 179, 152, 51, 216, 133, 184, 122, 198, 203, 60, 115, 218, 191, 193, 16, 178, 25, 148, 252, 112, 104, 103, 252, 36, 92, 221, 28, 179, 43, 199, 198, 151, 128, 100, 252, 217, 161, 249, 34, 201, 172, 118, 52, 180, 252, 104, 7, 223, 44, 116, 102, 212, 21, 40, 224, 184, 55, 163, 210, 21, 207, 161, 239, 51, 54, 155, 41, 133, 18, 67, 48, 3, 165, 130, 251, 4, 79, 214, 57, 72, 130, 157, 212, 144];
  5045. function pe(e, t, n) {
  5046. var i = e.gl,
  5047. a = 5,
  5048. r = .1,
  5049. o = .5,
  5050. s = 175 / 180 * 3.141593,
  5051. c = 115 / 180 * 3.141593,
  5052. d = 173 / 180 * 3.141593,
  5053. u = 116 / 180 * 3.141593,
  5054. l = 2.04203545,
  5055. p = 0,
  5056. f = 0,
  5057. m = 0,
  5058. g = [],
  5059. v = [0, 1, 3, 4, 6, 7, 9, 10, 12, 13, 15, 16, 18, 19, 21, 22, 24, 26, 29, 31, 34, 36, 39, 41, 44, 46, 49, 51, 54, 56, 59, 61, 64, 65, 66, 67, 68, 69, 70, 72, 73, 74, 75, 76, 77, 79, 80, 81, 82, 83, 84, 85, 87, 88, 89, 90, 91, 92, 94, 95, 96, 97, 98, 99, 101, 102, 103, 104, 105, 106, 107, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 123, 124, 125, 126, 127, 128, 129, 131, 132, 133, 134, 135, 136, 138, 139, 140, 141, 142, 143, 145, 146, 147, 148, 149, 150, 151, 153, 154, 155, 156, 157, 158, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 175, 176, 177, 178, 179, 180, 182, 183, 184, 185, 186, 187, 188, 190, 191, 192, 193, 194, 195, 197, 198, 199, 200, 201, 202, 204, 205, 206, 207, 208, 209, 210, 212, 213, 214, 215, 216, 217, 219, 220, 221, 222, 223, 224, 226, 226, 226, 227, 227, 227, 228, 228, 228, 229, 229, 229, 230, 230, 231, 231, 231, 232, 232, 232, 233, 233, 233, 234, 234, 235, 235, 235, 236, 236, 236, 237, 237, 237, 238, 238, 239, 239, 239, 240, 240, 240, 241, 241, 241, 242, 242, 243, 243, 243, 244, 244, 244, 245, 245, 245, 246, 246, 246, 247, 247, 247, 248, 248, 248, 249, 249, 249, 250, 250, 250, 251, 251, 251, 252, 252, 252, 253, 253, 253, 254, 254, 254, 255],
  5060. S = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 35, 36, 37, 39, 40, 42, 43, 44, 46, 47, 49, 50, 51, 53, 54, 56, 57, 58, 59, 61, 62, 63, 64, 66, 67, 68, 69, 71, 72, 73, 74, 76, 77, 78, 79, 81, 82, 83, 84, 86, 87, 88, 90, 91, 92, 93, 95, 96, 97, 98, 100, 101, 102, 103, 105, 106, 107, 108, 110, 111, 112, 113, 115, 116, 117, 118, 120, 121, 122, 124, 125, 126, 127, 129, 130, 131, 132, 134, 135, 136, 137, 139, 140, 141, 142, 144, 145, 146, 147, 149, 150, 151, 152, 154, 155, 156, 158, 159, 160, 161, 163, 164, 165, 166, 168, 169, 170, 171, 173, 174, 175, 176, 178, 179, 180, 181, 183, 184, 185, 186, 188, 189, 190, 192, 193, 194, 195, 197, 198, 199, 200, 202, 203, 204, 205, 207, 208, 209, 210, 212, 213, 214, 215, 217, 218, 219, 220, 222, 223, 224, 226, 226, 226, 227, 227, 228, 228, 229, 229, 230, 230, 231, 231, 232, 232, 233, 233, 234, 234, 234, 235, 235, 236, 236, 237, 237, 238, 238, 239, 239, 240, 240, 241, 241, 242, 242, 243, 243, 243, 244, 244, 244, 245, 245, 245, 246, 246, 246, 247, 247, 247, 248, 248, 248, 249, 249, 249, 250, 250, 250, 251, 251, 251, 252, 252, 252, 253, 253, 253, 254, 254, 254, 255],
  5061. h = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 54, 55, 56, 58, 59, 60, 61, 62, 63, 65, 66, 67, 68, 69, 70, 72, 73, 74, 76, 77, 78, 80, 81, 83, 84, 85, 87, 88, 89, 91, 92, 94, 95, 96, 98, 99, 100, 102, 103, 105, 106, 107, 109, 110, 111, 113, 114, 116, 117, 118, 120, 121, 122, 124, 125, 127, 128, 129, 131, 132, 133, 135, 136, 138, 139, 140, 142, 143, 144, 146, 147, 149, 150, 151, 153, 154, 155, 157, 158, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 192, 193, 193, 194, 195, 195, 196, 197, 197, 198, 199, 199, 200, 201, 201, 202, 203, 203, 204, 205, 205, 206, 207, 207, 208, 209, 209, 210, 211, 211, 212, 213, 213, 214, 215, 215, 216, 217, 217, 218, 219, 219, 220, 221, 221, 222, 223, 223, 224, 225, 225, 226, 227, 227, 228, 229, 229, 230, 231, 231, 232, 233, 233, 234, 235, 235, 236, 237, 237, 238, 239, 239, 240, 241, 241, 242, 243, 243, 244, 245, 245, 246, 247, 247, 248, 249, 249, 250, 251, 251, 252, 253, 253, 254, 255];
  5062. this.program = ne(i, le), this.setUniforms = function() {
  5063. var t = i.getUniformLocation(this.program, "u_flipY"),
  5064. n = i.getUniformLocation(this.program, "u_denoiseLevel");
  5065. i.uniform1f(n, a), i.uniform1f(t, 1);
  5066. var v = i.getUniformLocation(this.program, "light");
  5067. i.uniform1f(v, r);
  5068. var S = i.getUniformLocation(this.program, "redness");
  5069. i.uniform1f(S, o);
  5070. var h = i.getUniformLocation(this.program, "skin_he_max"),
  5071. _ = i.getUniformLocation(this.program, "skin_he_min"),
  5072. E = i.getUniformLocation(this.program, "skin_hc_max"),
  5073. I = i.getUniformLocation(this.program, "skin_hc_min"),
  5074. T = i.getUniformLocation(this.program, "skin_hc_axis"),
  5075. y = i.getUniformLocation(this.program, "facts_rotate_c"),
  5076. b = i.getUniformLocation(this.program, "facts_rotate_le"),
  5077. R = i.getUniformLocation(this.program, "facts_rotate_ge");
  5078. i.uniform1f(h, s), i.uniform1f(_, c), i.uniform1f(E, d), i.uniform1f(I, u), i.uniform1f(T, l), i.uniform1f(y, p), i.uniform1f(b, f), i.uniform1f(R, m);
  5079. var A = i.getUniformLocation(this.program, "u_originImage");
  5080. i.activeTexture(i.TEXTURE2), i.bindTexture(i.TEXTURE_2D, e.inputTexture), i.uniform1i(A, 2);
  5081. for (var O = ["lighten_lut"], C = [i.TEXTURE3], N = 0; N < O.length; N++) {
  5082. var w = i.getUniformLocation(this.program, O[N]);
  5083. i.activeTexture(C[N]), i.bindTexture(i.TEXTURE_2D, g[N]), i.uniform1i(w, N + 3)
  5084. }
  5085. }, this.setParameters = function(e) {
  5086. void 0 !== e.denoiseLevel && (a = e.denoiseLevel), void 0 !== e.lightLevel && (r = e.lightLevel), void 0 !== e.rednessLevel && (o = e.rednessLevel, this._updateRedness(o)), void 0 !== e.lighteningContrastLevel && this._updateLut(e.lighteningContrastLevel)
  5087. }, this._updateRedness = function(e) {
  5088. var t, n, i = 3.141593,
  5089. a = e,
  5090. r = a;
  5091. a > 1 && (a = 1), a < 0 && (a = 0), r > 1 && (r = 1), r < 0 && (r = 0), p = .8 * a, r < .8 && (r = 0), (l = (117 - 4 * r) / 180 * i) < (u = (116 - 4 * r) / 180 * i) && (l = u), u < i / 2 && (u = i / 2), l < i / 2 && (l = i / 2), (c = (115 - 4 * r) / 180 * i) < i / 2 && (c = i / 2), (d = 173 / 180 * i) > i && (d = i), l > i && (l = i), (s = 175 / 180 * i) > i && (s = i), n = d - l, m = (t = s - d) > .01 ? p * n / t : p, n = l - u, f = (t = u - c) > .01 ? p * n / t : p
  5092. }, this._updateLut = function(e) {
  5093. var t = null;
  5094. 0 == e && (t = S), 1 == e && (t = h), 2 == e && (t = v);
  5095. for (var n = [new Uint8Array(t)], a = [256], r = [1], o = 0; o < n.length; o++) i.bindTexture(i.TEXTURE_2D, g[o]), i.texImage2D(i.TEXTURE_2D, 0, i.LUMINANCE, a[o], r[o], 0, i.LUMINANCE, i.UNSIGNED_BYTE, n[o])
  5096. }, this._init = function() {
  5097. var e = null;
  5098. e = S;
  5099. for (var t = [new Uint8Array(e)], n = [256], a = [1], r = 0; r < t.length; r++) {
  5100. var o = i.createTexture();
  5101. i.bindTexture(i.TEXTURE_2D, o), i.texImage2D(i.TEXTURE_2D, 0, i.LUMINANCE, n[r], a[r], 0, i.LUMINANCE, i.UNSIGNED_BYTE, t[r]), i.texParameteri(i.TEXTURE_2D, i.TEXTURE_WRAP_S, i.CLAMP_TO_EDGE), i.texParameteri(i.TEXTURE_2D, i.TEXTURE_WRAP_T, i.CLAMP_TO_EDGE), i.texParameteri(i.TEXTURE_2D, i.TEXTURE_MIN_FILTER, i.LINEAR), i.texParameteri(i.TEXTURE_2D, i.TEXTURE_MAG_FILTER, i.LINEAR), g.push(o)
  5102. }
  5103. }, this._init()
  5104. }
  5105. var fe = !1;
  5106. function me() {
  5107. this.programs = [];
  5108. var e = this,
  5109. t = null,
  5110. n = null;
  5111. e.gl = null, e.inputTexture = null;
  5112. var i = [],
  5113. a = [],
  5114. r = 0,
  5115. o = 0;
  5116. e._initGl = function(n, s) {
  5117. e.inputTexture = t.createTexture(), t.bindTexture(t.TEXTURE_2D, e.inputTexture), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_S, t.CLAMP_TO_EDGE), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_T, t.CLAMP_TO_EDGE), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MIN_FILTER, t.LINEAR), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MAG_FILTER, t.LINEAR);
  5118. for (var c = 0; c < 4; c++) {
  5119. var d = t.createTexture();
  5120. t.bindTexture(t.TEXTURE_2D, d), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_S, t.CLAMP_TO_EDGE), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_T, t.CLAMP_TO_EDGE), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MIN_FILTER, t.LINEAR), c < 2 ? t.texImage2D(t.TEXTURE_2D, 0, t.RGBA, n, s, 0, t.RGBA, t.UNSIGNED_BYTE, null) : t.texImage2D(t.TEXTURE_2D, 0, t.RGBA, s, n, 0, t.RGBA, t.UNSIGNED_BYTE, null);
  5121. var u = t.createFramebuffer();
  5122. t.bindFramebuffer(t.FRAMEBUFFER, u), t.framebufferTexture2D(t.FRAMEBUFFER, t.COLOR_ATTACHMENT0, t.TEXTURE_2D, d, 0), i.push(d), a.push(u)
  5123. }
  5124. t.viewport(0, 0, n, s), r = n, o = s
  5125. }, e.render = function(s) {
  5126. if (t) {
  5127. var c = 0;
  5128. o == s.videoWidth && r === s.videoHeight && (c = 2), t.viewport(0, 0, s.videoWidth, s.videoHeight), t.bindTexture(t.TEXTURE_2D, e.inputTexture), t.texImage2D(t.TEXTURE_2D, 0, t.RGBA, t.RGBA, t.UNSIGNED_BYTE, s);
  5129. for (var d = fe ? e.programs.length - 1 : 0, u = 0; u <= d; u++) {
  5130. var l = e.programs[u].program;
  5131. t.useProgram(l);
  5132. var p = t.getUniformLocation(l, "u_image");
  5133. e.programs[u].setUniforms(), t.bindFramebuffer(t.FRAMEBUFFER, a[c + u % 2]), t.clearColor(0, 0, 0, 1), t.clear(t.COLOR_BUFFER_BIT), t.drawArrays(t.TRIANGLES, 0, 6), t.activeTexture(t.TEXTURE0), t.bindTexture(t.TEXTURE_2D, i[c + u % 2]), t.uniform1i(p, 0)
  5134. }
  5135. t.useProgram(n);
  5136. var f = t.getUniformLocation(n, "u_flipY");
  5137. t.uniform1f(f, -1), t.bindFramebuffer(t.FRAMEBUFFER, null), t.clearColor(0, 0, 0, 1), t.clear(t.COLOR_BUFFER_BIT), t.drawArrays(t.TRIANGLES, 0, 6)
  5138. }
  5139. }, e.setEnableBeauty = function(e) {
  5140. fe = e
  5141. }, e.init = function(i, a, r) {
  5142. if ("undefined" == typeof WebGLRenderingContext) throw new Error("NOT_SUPPORT");
  5143. t = r.getContext("webgl"), e.gl = t, e._initGl(i, a), e.programs.push(new ae(this, i, a)), e.programs.push(new oe(this, i, a)), e.programs.push(new ce(this, i, a)), e.programs.push(new ue(this, i, a)), e.programs.push(new pe(this, i, a)), n = e.programs[0].program
  5144. }, e.release = function() {
  5145. e.gl = null, t = null, n = null, e.inputTexture = null, e.programs = [], i = [], a = []
  5146. }, e.setDenoiseLevel = function(t) {
  5147. e.programs.forEach(function(e) {
  5148. e.setParameters && e.setParameters({
  5149. denoiseLevel: t
  5150. })
  5151. })
  5152. }, e.setLightLevel = function(t) {
  5153. e.programs.forEach(function(e) {
  5154. e.setParameters && e.setParameters({
  5155. lightLevel: t
  5156. })
  5157. })
  5158. }, e.setRednessLevel = function(t) {
  5159. e.programs.forEach(function(e) {
  5160. e.setParameters && e.setParameters({
  5161. rednessLevel: t
  5162. })
  5163. })
  5164. }, e.setContrastLevel = function(t) {
  5165. e.programs.forEach(function(e) {
  5166. e.setParameters && e.setParameters({
  5167. lighteningContrastLevel: t
  5168. })
  5169. })
  5170. }, e.setSize = function(t, n) {
  5171. e.programs.forEach(function(e) {
  5172. e.setSize && e.setSize(t, n)
  5173. })
  5174. }
  5175. }
  5176. me._instance = null, me.getInstance = function() {
  5177. return me._instance || (me._instance = new me), me._instance
  5178. };
  5179. var ge = 30,
  5180. ve = null,
  5181. Se = !1,
  5182. he = 5,
  5183. _e = .35,
  5184. Ee = .5,
  5185. Ie = 1,
  5186. Te = null,
  5187. ye = null;
  5188. var be = {
  5189. addVideoEffectCapability: function(e) {
  5190. e.videoEffect = {
  5191. videoContextInited: !1,
  5192. originVideoTrack: null,
  5193. canvasVideoTrack: null,
  5194. ctx: null
  5195. }, e._initVideoContext = function() {
  5196. if (e.videoEffect.videoContextInited) throw new Error("Failed to init video context. Already inited");
  5197. if (!e.stream) throw new Error("Failed to init video context. Local Stream not initialized");
  5198. e.videoEffect.originVideoTrack = e.stream.getVideoTracks()[0], e.attributes && e.attributes.maxFrameRate && (ge = e.attributes.maxFrameRate), e.videoEffect.videoContextInited = !0
  5199. }, e._renderWithWebGL = function(e) {
  5200. return new Promise(function(t) {
  5201. ye || (ye = document.createElement("canvas")), Te || (Te = document.createElement("video")), Te.setAttribute("autoplay", ""), Te.setAttribute("muted", ""), Te.muted = !0, Te.setAttribute("playsinline", ""), Te.setAttribute("style", "display:none"), Te.srcObject = e;
  5202. var n = e.getVideoTracks()[0].getSettings(),
  5203. i = n.width,
  5204. a = n.height;
  5205. console.log("Width: ".concat(i, ", Height: ").concat(a)), ye.setAttribute("width", i), ye.setAttribute("height", a), Te.setAttribute("width", i), Te.setAttribute("height", a);
  5206. var r = me.getInstance();
  5207. r.init(Te.width, Te.height, ye), r.setDenoiseLevel(he), r.setLightLevel(_e), r.setRednessLevel(Ee), r.setContrastLevel(Ie), Te.addEventListener("playing", function e() {
  5208. var n = ye.captureStream(ge);
  5209. Te.removeEventListener("playing", e, !0), t([n.getVideoTracks()[0], Te])
  5210. }, !0), Te.play()
  5211. })
  5212. }, e._disableEffect = function() {
  5213. e.videoEffect.videoContextInited || e._initVideoContext();
  5214. var t = e.videoEffect.originVideoTrack;
  5215. if (!t) return o.
  5216. default.warning("Video track is null, fail to disable video effect!"), Promise.resolve();
  5217. if (e.pc && e.pc.peerConnection && e.pc.peerConnection) {
  5218. var n = (e.pc.peerConnection && e.pc.peerConnection.getSenders()).find(function(e) {
  5219. return e && e.track && "video" == e.track.kind
  5220. });
  5221. if (n && n.replaceTrack && t) return n.replaceTrack(t)
  5222. }
  5223. return Promise.resolve()
  5224. }, e._releaseEffect = function() {
  5225. var t;
  5226. return t = Se ? e._disableEffect() : Promise.resolve(), me.getInstance().release(), e.videoEffect.videoContextInited = !1, e.videoEffect.canvasVideoTrack = null, t
  5227. }, e._enableEffect = function() {
  5228. return e.videoEffect.videoContextInited || e._initVideoContext(), e.videoEffect.originVideoTrack ? (e.videoEffect.canvasVideoTrack ? (e._showEffectInLocalPlayer(), e._replaceWithCanvasTrack()) : e._renderWithWebGL(e.stream).then(function(t) {
  5229. var n = X()(t, 2),
  5230. i = n[0],
  5231. a = n[1];
  5232. e.videoEffect.canvasVideoTrack = i;
  5233. var r = me.getInstance();
  5234. requestAnimationFrame(function t() {
  5235. Se && r.render(a), e.videoEffect.videoContextInited && requestAnimationFrame(t)
  5236. }), m.isChrome() && document.addEventListener("visibilitychange", function() {
  5237. document.hidden, document.hidden ? ve = function(e, t) {
  5238. var n = t / 1e3,
  5239. i = new AudioContext,
  5240. a = i.createGain();
  5241. a.gain.value = 0, a.connect(i.destination), function t() {
  5242. var o = i.createOscillator();
  5243. o.onended = t, o.connect(a), o.start(0), o.stop(i.currentTime + n), e(i.currentTime), r && (o.onended = function() {
  5244. i.close()
  5245. })
  5246. }();
  5247. var r = !1;
  5248. return function() {
  5249. r = !0
  5250. }
  5251. }(function() {
  5252. Se && r.render(a)
  5253. }, ge) : ve && (ve(), ve = null)
  5254. }, !1), e._showEffectInLocalPlayer(), e._replaceWithCanvasTrack()
  5255. }), Promise.resolve()) : (o.
  5256. default.warning("Video track is null, fail to enable video effect!"), Promise.resolve())
  5257. }, e._showEffectInLocalPlayer = function() {
  5258. if (e.player) {
  5259. var t = e.player.div.children[0];
  5260. if ("none" !== t.style.display && (e.player.div.appendChild(ye), "video" === t.tagName.toLowerCase())) {
  5261. var n = t.getAttribute("style");
  5262. ye.setAttribute("style", n), "none" !== t.style.display && (t.style.display = "none")
  5263. }
  5264. }
  5265. }, e._removeEffectFromLocalPlayer = function() {
  5266. if (e.player && e.player.div && Se && ye) {
  5267. e.player.div.removeChild(ye);
  5268. var t = e.player.div.children[0];
  5269. "video" === t.tagName.toLowerCase() && (ye.style.display = "none", t.style.display = "block")
  5270. }
  5271. }, e._replaceWithCanvasTrack = function() {
  5272. var t = null;
  5273. e.pc && e.pc.peerConnection && e.pc.peerConnection && (t = (e.pc.peerConnection && e.pc.peerConnection.getSenders()).find(function(e) {
  5274. return e && e.track && "video" == e.track.kind
  5275. })), t && t.replaceTrack && e.videoEffect.canvasVideoTrack && t.replaceTrack(e.videoEffect.canvasVideoTrack)
  5276. }, e.setBeautyEffectOptions = (t = K()(Y.a.mark(function t(n, i) {
  5277. var a;
  5278. return Y.a.wrap(function(t) {
  5279. for (;;) switch (t.prev = t.next) {
  5280. case 0:
  5281. if (Object(W.checkValidBoolean)(n, "enabled"), a = me.getInstance(), Se == n) {
  5282. t.next = 13;
  5283. break
  5284. }
  5285. if (a.setEnableBeauty(n), !n) {
  5286. t.next = 9;
  5287. break
  5288. }
  5289. return t.next = 7, e._enableEffect();
  5290. case 7:
  5291. t.next = 12;
  5292. break;
  5293. case 9:
  5294. return e._removeEffectFromLocalPlayer(), t.next = 12, e._releaseEffect();
  5295. case 12:
  5296. Se = n;
  5297. case 13:
  5298. if (n) {
  5299. t.next = 15;
  5300. break
  5301. }
  5302. return t.abrupt("return");
  5303. case 15:
  5304. if (!i) {
  5305. t.next = 19;
  5306. break
  5307. }
  5308. Object(W.checkValidObject)(i, "options"), t.next = 20;
  5309. break;
  5310. case 19:
  5311. return t.abrupt("return");
  5312. case 20:
  5313. if (void 0 !== i.smoothnessLevel && (Object(W.checkValidFloatNumber)(i.smoothnessLevel, "smoothnessLevel", 0, 1), (he = 10 * i.smoothnessLevel) < .1 && (he = .1), a.setDenoiseLevel(he)), void 0 !== i.lighteningLevel && (Object(W.checkValidFloatNumber)(i.lighteningLevel, "lighteningLevel", 0, 1), (_e = i.lighteningLevel / 2) < .01 && (_e = .01), a.setLightLevel(_e)), void 0 !== i.rednessLevel && (Object(W.checkValidFloatNumber)(i.rednessLevel, "rednessLevel", 0, 1), (Ee = i.rednessLevel) < .01 && (Ee = .01), a.setRednessLevel(Ee)), void 0 === i.lighteningContrastLevel) {
  5314. t.next = 28;
  5315. break
  5316. }
  5317. if (0 === i.lighteningContrastLevel || 1 === i.lighteningContrastLevel || 2 === i.lighteningContrastLevel) {
  5318. t.next = 26;
  5319. break
  5320. }
  5321. throw new Error("Invalid lighteningContrastLevel: The value should be 0, 1 or 2.");
  5322. case 26:
  5323. Ie = parseFloat(i.lighteningContrastLevel), a.setContrastLevel(Ie);
  5324. case 28:
  5325. case "end":
  5326. return t.stop()
  5327. }
  5328. }, t, this)
  5329. })), function(e, n) {
  5330. return t.apply(this, arguments)
  5331. });
  5332. var t
  5333. },
  5334. restoreVideoEffect: function(e) {
  5335. return Se ? e._enableEffect() : Promise.resolve()
  5336. },
  5337. disableVideoEffect: function(e) {
  5338. return e._releaseEffect ? e._releaseEffect() : Promise.resolve()
  5339. },
  5340. applyEffectInPlayer: function(e) {
  5341. Se && ye && e._showEffectInLocalPlayer()
  5342. },
  5343. removeEffectFromLocalPlayer: function(e) {
  5344. e._removeEffectFromLocalPlayer()
  5345. },
  5346. replaceWithCanvasTrack: function(e) {
  5347. Se && e._replaceWithCanvasTrack()
  5348. },
  5349. checkVideoEffectEnabled: function(e) {
  5350. if (Se && e.videoEffect && e.videoEffect.videoContextInited) return o.
  5351. default.error("Operation not permitted: ".concat("VIDEO_EFFECT_ENABLED")), "VIDEO_EFFECT_ENABLED";
  5352. return !1
  5353. }
  5354. },
  5355. Re = a(9),
  5356. Ae = a.n(Re),
  5357. Oe = function(e) {
  5358. Object(W.checkValidString)(e, "profileName"), -1 === (e = e.toLowerCase()).indexOf("_") && (e += "_1"), Object(W.checkValidEnum)(e, "profileName", Object.keys(r.SUPPORT_RESOLUTION_LIST));
  5359. var t = r.SUPPORT_RESOLUTION_LIST[e];
  5360. t || (e = Object(r.getParameter)("DEFAULT_PROFILE"), t = r.SUPPORT_RESOLUTION_LIST[e]);
  5361. var n = {
  5362. profileName: e,
  5363. video: {
  5364. width: t[0],
  5365. height: t[1]
  5366. },
  5367. attributes: {
  5368. resolution: "".concat(t[0], "x").concat(t[1]),
  5369. minFrameRate: t[2],
  5370. maxFrameRate: t[3],
  5371. minVideoBW: t[4],
  5372. maxVideoBW: t[5]
  5373. }
  5374. };
  5375. return t[2] && t[3] && (n.video.frameRate = {
  5376. ideal: t[2],
  5377. max: t[3]
  5378. }), t[6] && t[7] && (n.screen = {
  5379. width: t[0],
  5380. height: t[1],
  5381. frameRate: {
  5382. min: t[6],
  5383. max: t[7]
  5384. }
  5385. }), n
  5386. },
  5387. Ce = function(e) {
  5388. return Object.keys(r.SUPPORT_RESOLUTION_LIST).filter(function(t) {
  5389. var n = r.SUPPORT_RESOLUTION_LIST[t],
  5390. i = ["width", "height", "frameRate"];
  5391. for (var a in i) {
  5392. var o = i[a];
  5393. if (e[o] && n[a]) {
  5394. if ("number" == typeof e[o].max && e[o].max < n[a]) return !1;
  5395. if ("number" == typeof e[o].min && e[o].min > n[a]) return !1
  5396. }
  5397. }
  5398. return !0
  5399. }).reverse()
  5400. },
  5401. Ne = function(e) {
  5402. var t = r.AUDIO_PROFILE_SETTINGS[e] || r.AUDIO_PROFILE_SETTINGS.
  5403. default;
  5404. return {
  5405. highQuality: t[0],
  5406. stereo: t[1],
  5407. speech: t[2],
  5408. lowQuality: t[3]
  5409. }
  5410. };
  5411. var we = function(e) {
  5412. var t = c();
  5413. if (t.params = h()({}, e), t.stream = e.stream, t.url = e.url, t.onClose = void 0, t.local = !1, t.videoSource = e.videoSource, t.audioSource = e.audioSource, e.video = !(!e.videoSource && !e.video), t.video = e.video, e.audio = !(!e.audioSource && !e.audio), t.audio = e.audio, t.screen = !! e.screen, t.screenAudio = !! e.screenAudio, t.screenAttributes = {
  5414. width: 1920,
  5415. height: 1080,
  5416. maxFr: 5,
  5417. minFr: 1
  5418. }, t.videoSize = e.videoSize, t.player = void 0, t.audioLevelHelper = null, e.attributes = e.attributes || {}, t.attributes = e.attributes, t.microphoneId = e.microphoneId, t.cameraId = e.cameraId, t.facingMode = e.facingMode, t.inSwitchDevice = !1, t.userMuteVideo = !1, t.userMuteAudio = !1, t.peerMuteVideo = !1, t.peerMuteAudio = !1, t.lowStream = null, t.videoWidth = 0, t.videoHeight = 0, t.streamId = e.streamID, t.userId = null, t.mirror = !1 !== e.mirror, t.DTX = e.audioProcessing && e.audioProcessing.DTX, t.audioProcessing = e.audioProcessing, t.highQuality = !1, t.stereo = !1, t.speech = !1, t.screen || delete t.screen, !(void 0 === t.videoSize || t.videoSize instanceof Array && 4 === t.videoSize.length)) throw Error("Invalid Video Size");
  5419. function n() {
  5420. var e = {};
  5421. t.getVideoTrack() === this ? (o.
  5422. default.debug("Video Track Ended"), e.type = "videoTrackEnded", e.track = this) : t.getAudioTrack() === this ? (o.
  5423. default.debug("Audio Track Ended"), e.type = "audioTrackEnded", e.track = this) : o.
  5424. default.debug("Detached Track ended", this.kind, this.label, this), e.type && t.dispatchEvent(e)
  5425. }
  5426. return t.videoSize = [640, 480, 640, 480], void 0 !== e.local && !0 !== e.local || (t.local = !0), t.initialized = !t.local, t._streamInitID = null, function(e) {
  5427. e.audioMixing = {
  5428. audioContextInited: !1,
  5429. defaultVolume: 100,
  5430. inEarMonitoring: "FILE",
  5431. sounds: {},
  5432. states: {
  5433. IDLE: "IDLE",
  5434. STARTING: "STARTING",
  5435. BUSY: "BUSY",
  5436. PAUSED: "PAUSED"
  5437. },
  5438. inEarMonitoringModes: {
  5439. NONE: "NONE",
  5440. FILE: "FILE",
  5441. MICROPHONE: "MOCROPHONE",
  5442. ALL: "ALL"
  5443. },
  5444. ctx: null,
  5445. mediaStreamSource: null,
  5446. mediaStreamDest: null,
  5447. buffer: {}
  5448. }, e._initSoundIfNotExists = function(t, n) {
  5449. e.audioMixing.sounds[t] || (e.audioMixing.sounds[t] = {
  5450. soundId: t,
  5451. state: "IDLE",
  5452. muted: e.userMuteAudio,
  5453. filePath: n,
  5454. volume: e.audioMixing.defaultVolume,
  5455. startAt: null,
  5456. startOffset: null,
  5457. pauseAt: null,
  5458. pauseOffset: null,
  5459. resumeAt: null,
  5460. resumeOffset: null,
  5461. stopAt: null,
  5462. options: null,
  5463. source: null
  5464. })
  5465. }, e._initSoundIfNotExists(-1), e.loadAudioBuffer = function(t, n, i) {
  5466. var a = s.b.reportApiInvoke(e.sid, {
  5467. callback: i,
  5468. name: "Stream.loadAudioBuffer",
  5469. options: arguments,
  5470. tag: "tracer"
  5471. });
  5472. Object(W.checkValidString)(n, "url", 1, 1024, !1), Object(W.checkValidString)(t, "id", 1, 1024, !1);
  5473. var r = function(t) {
  5474. o.
  5475. default.error("[".concat(e.streamId, "] loadAudioBuffer Failed: ") + t), a(I.
  5476. default.LOAD_AUDIO_FAILED)
  5477. },
  5478. c = new XMLHttpRequest;
  5479. c.open("GET", n, !0), c.responseType = "arraybuffer", c.onload = function() {
  5480. if (c.status > 400) r("".concat(c.status, " ").concat(c.statusText));
  5481. else {
  5482. var n = c.response;
  5483. e.audioMixing.audioContextInited || e._initAudioContext(), e.audioMixing.ctx.decodeAudioData(n, function(n) {
  5484. e.audioMixing.buffer[t] = n, a(null)
  5485. }, function(t) {
  5486. o.
  5487. default.error("[".concat(e.streamId, "] decodeAudioData Failed: "), t), a(t)
  5488. })
  5489. }
  5490. }, c.onerror = function() {
  5491. return r("load error")
  5492. }, c.ontimeout = function() {
  5493. return r("timeout")
  5494. }, c.send()
  5495. }, e.createAudioBufferSource = function(t) {
  5496. var n = s.b.reportApiInvoke(e.sid, {
  5497. name: "Stream.createAudioBufferSource",
  5498. options: arguments,
  5499. tag: "tracer"
  5500. });
  5501. if (e.audioMixing.buffer[t.id]) {
  5502. var i = e.audioMixing.buffer[t.id],
  5503. a = e.audioMixing.ctx.createBufferSource();
  5504. a.buffer = i;
  5505. var r = e.audioMixing.ctx.createGain();
  5506. if (a.connect(r), r.connect(e.audioMixing.mediaStreamDest), a.gainNode = r, t.loop) a.loop = !0, a.start(0, t.playTime / 1e3);
  5507. else if (t.cycle > 1) if (Object(m.isChrome)()) {
  5508. a.loop = !0;
  5509. var c = t.cycle * i.duration * 1e3 - (t.playTime || 0);
  5510. a.start(0, t.playTime / 1e3, c / 1e3)
  5511. } else o.
  5512. default.warning("[".concat(e.streamId, "] Cycle Param is ignored by current browser")), a.start(0, t.playTime / 1e3);
  5513. else a.start(0, t.playTime / 1e3);
  5514. var d = e.audioMixing.sounds[t.soundId];
  5515. return d.source = a, e._flushAudioMixingMuteStatus(), a.addEventListener("ended", function() {
  5516. a === d.source && e.dispatchEvent({
  5517. type: "audioSourceEnded",
  5518. soundId: t.soundId,
  5519. source: a,
  5520. sound: d
  5521. })
  5522. }), n(), a
  5523. }
  5524. return o.
  5525. default.error("[".concat(e.streamId, "] "), "AUDIOBUFFER_NOT_FOUND", t.id), n(!1), !1
  5526. }, e.on("audioSourceEnded", function(t) {
  5527. var n = t.source,
  5528. i = t.sound;
  5529. i && i.state === e.audioMixing.states.BUSY && !i.pauseAt && (i.state = e.audioMixing.states.IDLE, i.startAt = null, i.startOffset = null, i.resumeAt = null, i.resumeOffset = null, n.gainNode && n.gainNode.disconnect && n.gainNode.disconnect(), n.buffer = null, e.audioMixing.mediaStreamSource.connect(e.audioMixing.mediaStreamDest))
  5530. }), e.clearAudioBufferSource = function() {
  5531. e.audioBufferSource.forEach(function(e) {
  5532. e.stop()
  5533. })
  5534. }, e._isSoundExists = function(t) {
  5535. return !!e.audioMixing.sounds[t.soundId] || (o.
  5536. default.error("SoundId not exists. #".concat(t.soundId)), !1)
  5537. }, e._initAudioContext = function() {
  5538. if (e.audioMixing.audioContextInited) throw new Error("Failed to init audio context. Already inited");
  5539. if (!e.stream) throw new Error("Failed to init audio context. Local Stream not initialized");
  5540. e.audioMixing.ctx = Object(G.a)(), e.audioMixing.mediaStreamSource = e.audioMixing.ctx.createMediaStreamSource(e.stream), e.audioMixing.mediaStreamDest = e.audioMixing.ctx.createMediaStreamDestination(), e.audioMixing.mediaStreamSource.connect(e.audioMixing.mediaStreamDest);
  5541. var t = e.stream.getVideoTracks()[0];
  5542. if (t && e.audioMixing.mediaStreamDest.stream.addTrack(t), e._isAudioMuted() ? (e._unmuteAudio(), e.stream = e.audioMixing.mediaStreamDest.stream, e._muteAudio()) : e.stream = e.audioMixing.mediaStreamDest.stream, e.audioLevelHelper = null, e.pc && e.pc.peerConnection && e.pc.peerConnection) {
  5543. var n = (e.pc.peerConnection && e.pc.peerConnection.getSenders()).find(function(e) {
  5544. return e && e.track && "audio" == e.track.kind
  5545. }),
  5546. i = e.audioMixing.mediaStreamDest.stream.getAudioTracks()[0];
  5547. n && n.replaceTrack && i && n.replaceTrack(i)
  5548. }
  5549. e.audioMixing.audioContextInited = !0
  5550. }, e._cleanupAudioMixing = function() {
  5551. if (e.audioMixing.audioContextInited) {
  5552. for (var t in e.audioMixing.sounds) {
  5553. var n = e.audioMixing.sounds[t];
  5554. n.state !== e.audioMixing.states.BUSY && n.state !== e.audioMixing.states.PAUSED || e._stopOneEffect({
  5555. soundId: t
  5556. })
  5557. }
  5558. e.audioLevelHelper = null, e.audioMixing.audioContextInited = !1
  5559. }
  5560. }, e._reloadInEarMonitoringMode = function(t) {
  5561. if (t) {
  5562. if (!e.audioMixing.inEarMonitoringModes[t]) return o.
  5563. default.error("[".concat(e.streamId, "] Invalid InEarMonitoringMode ").concat(t));
  5564. e.audioMixing.inEarMonitoring = t
  5565. }
  5566. switch (e.audioMixing.audioContextInited || e._initAudioContext(), e.audioMixing.inEarMonitoring) {
  5567. case e.audioMixing.inEarMonitoringModes.FILE:
  5568. e.audioMixing.mediaStreamSource.connectedToDestination && (e.audioMixing.mediaStreamSource.disconnect(e.audioMixing.ctx.destination), e.audioMixing.mediaStreamSource.connectedToDestination = !1);
  5569. case e.audioMixing.inEarMonitoringModes.ALL:
  5570. for (var n in e.audioMixing.sounds) {
  5571. var i = e.audioMixing.sounds[n];
  5572. i && i.source && !i.source.connectedToDestination && (i.source.gainNode.connect(e.audioMixing.ctx.destination), i.source.connectedToDestination = !0)
  5573. }
  5574. }
  5575. switch (e.audioMixing.inEarMonitoring) {
  5576. case e.audioMixing.inEarMonitoringModes.MICROPHONE:
  5577. e.audioMixing.source.forEach(function(t) {
  5578. t.connectedToDestination && (t.gainNode.disconnect(e.audioMixing.ctx.destination), t.connectedToDestination = !1)
  5579. });
  5580. case e.audioMixing.inEarMonitoringModes.ALL:
  5581. e.audioMixing.mediaStreamSource.connectedToDestination || (e.audioMixing.mediaStreamSource.connect(e.audioMixing.ctx.destination), e.audioMixing.mediaStreamSource.connectedToDestination = !0)
  5582. }
  5583. }, e._startAudioMixingBufferSource = function(t) {
  5584. e.audioMixing.audioContextInited || e._initAudioContext();
  5585. var n = {
  5586. soundId: t.soundId,
  5587. id: t.filePath,
  5588. loop: t.loop,
  5589. cycle: t.cycle,
  5590. playTime: t.playTime || 0
  5591. },
  5592. i = t.replace,
  5593. a = e.createAudioBufferSource(n);
  5594. return a.sound = e.audioMixing.sounds[t.soundId], a ? (a.addEventListener("ended", e._audioMixingFinishedListener, {
  5595. once: !0
  5596. }), e._reloadInEarMonitoringMode(), i && e.audioMixing.mediaStreamSource.disconnect(e.audioMixing.mediaStreamDest), a) : null
  5597. }, e._stopAudioMixingBufferSource = function(t) {
  5598. var n = e.audioMixing.sounds[t.soundId].source;
  5599. return n ? (n.removeEventListener("ended", e._audioMixingFinishedListener), e.audioMixing.mediaStreamSource.connect(e.audioMixing.mediaStreamDest), n.stop(), n.gainNode && n.gainNode.disconnect && n.gainNode.disconnect(), n.buffer = null, n) : null
  5600. }, e._flushAudioMixingMuteStatus = function(t) {
  5601. for (var n in e.audioMixing.sounds) {
  5602. var i = e.audioMixing.sounds[n];
  5603. i && (void 0 !== t && (i.muted = !! t), i.source && (i.muted ? i.source.gainNode.gain.value = 0 : i.source.gainNode.gain.value = i.volume / 100))
  5604. }
  5605. }, e._handleAudioMixingInvalidStateError = function(t, n, i) {
  5606. var a = e.audioMixing.sounds[n.soundId],
  5607. r = -1 === n.soundId ? "INVALID_AUDIO_MIXING_STATE" : "INVALID_PLAY_EFFECT_STATE";
  5608. o.
  5609. default.error("[".concat(e.streamId, "] Cannot ").concat(t, ": ").concat(r, ", state is ").concat(a.state)), i && i(r)
  5610. }, e._handleAudioMixingNoSourceError = function(t, n, i) {
  5611. e.audioMixing.sounds[n.soundId].state = e.audioMixing.states.IDLE;
  5612. var a = -1 === n.soundId ? "NO_AUDIO_MIXING_SOURCE" : "NO_EFFECT_SOURCE";
  5613. o.
  5614. default.error("[".concat(e.streamId, "] Cannot ").concat(t, ": ").concat(a)), i && i(a)
  5615. }, e._getOneEffectStates = function(t) {
  5616. var n = e.audioMixing.sounds[t.soundId];
  5617. return function() {
  5618. return n ? {
  5619. state: n.state,
  5620. startAt: n.startAt,
  5621. resumeAt: n.resumeAt,
  5622. pauseOffset: n.pauseOffset,
  5623. pauseAt: n.pauseAt,
  5624. resumeOffset: n.resumeOffset,
  5625. stopAt: n.stopAt,
  5626. duration: e._getOneEffectDuration(t),
  5627. position: e._getOneEffectCurrentPosition(t)
  5628. } : {}
  5629. }
  5630. }, e._audioMixingFinishedListener = function() {
  5631. var t = this.sound;
  5632. t.state === e.audioMixing.states.IDLE && e.audioMixing.buffer[t.options.filePath] && !t.options.cacheResource && (o.
  5633. default.debug("Recycled buffer ".concat(t.options.filePath)), delete e.audioMixing.buffer[t.options.filePath]), -1 === t.soundId && e.dispatchEvent({
  5634. type: "audioMixingFinished"
  5635. })
  5636. }, e._playOneEffect = function(t, n) {
  5637. Object(W.checkValidObject)(t, "options");
  5638. var i = t.soundId,
  5639. a = (t.filePath, t.cacheResource);
  5640. if (t.cycle, t.loop, t.playTime, t.replace, Object(m.isSafari)() && Object(m.getBrowserVersion)() < 12) {
  5641. var r = "BROWSER_NOT_SUPPORT";
  5642. return o.
  5643. default.error("[".concat(e.streamId, "] Cannot _playOneEffect: "), r), n(r)
  5644. }
  5645. e.audioMixing.audioContextInited || e._initAudioContext(), e._initSoundIfNotExists(i);
  5646. var s = e.audioMixing.sounds[i];
  5647. if (s.state === e.audioMixing.states.IDLE) {
  5648. if (void 0 !== t.cycle && !t.cycle > 0) return r = "Invalid Parmeter cycle: " + t.cycle, o.
  5649. default.error("[".concat(e.streamId, "] ").concat(i), r), n(r);
  5650. if (Object(W.isEmpty)(a) && (t.cacheResource = !0), s.state = e.audioMixing.states.STARTING, s.options = t, e.audioMixing.buffer[t.filePath]) {
  5651. var c = e._startAudioMixingBufferSource(t);
  5652. if (c) return s.source = c, s.startAt = Date.now(), s.resumeAt = null, s.pauseOffset = null, s.pauseAt = null, s.resumeOffset = null, s.stopAt = null, s.startOffset = t.playTime || 0, s.state = e.audioMixing.states.BUSY, e._flushAudioMixingMuteStatus(), n(null);
  5653. s.state = e.audioMixing.states.IDLE;
  5654. var d = "CREATE_BUFFERSOURCE_FAILED";
  5655. if (n) return n(d);
  5656. o.
  5657. default.error("[".concat(e.streamId, "] "), d)
  5658. } else e.loadAudioBuffer(t.filePath, t.filePath, function(i) {
  5659. if (i) s.state = e.audioMixing.states.IDLE, n ? n(i) : o.
  5660. default.error("[".concat(e.streamId, "] "), i);
  5661. else {
  5662. var a = e._startAudioMixingBufferSource(t);
  5663. if (a) return s.source = a, s.startAt = Date.now(), s.resumeAt = null, s.pauseOffset = null, s.pauseAt = null, s.resumeOffset = null, s.stopAt = null, s.startOffset = t.playTime || 0, s.state = e.audioMixing.states.BUSY, e._flushAudioMixingMuteStatus(), n(null);
  5664. if (s.state = e.audioMixing.states.IDLE, i = "CREATE_BUFFERSOURCE_FAILED", n) return n(i);
  5665. o.
  5666. default.error("[".concat(e.streamId, "] "), i)
  5667. }
  5668. })
  5669. } else e._handleAudioMixingInvalidStateError("_playEffect", t, n)
  5670. }, e._stopOneEffect = function(t, n) {
  5671. var i = e.audioMixing.sounds[t.soundId];
  5672. return e._isSoundExists(t) ? i.state === e.audioMixing.states.BUSY || i.state === e.audioMixing.states.PAUSED ? (e._stopAudioMixingBufferSource(t), i.stopAt = Date.now(), i.state = e.audioMixing.states.IDLE, e.audioMixing.buffer[i.options.filePath] && !i.options.cacheResource && (o.
  5673. default.debug("Recycled buffer ".concat(i.options.filePath)), delete e.audioMixing.buffer[i.options.filePath]), void(n && n(null))) : void e._handleAudioMixingInvalidStateError("_stopOneEffect", t, n) : n("SOUND_NOT_EXISTS")
  5674. }, e._pauseOneEffect = function(t, n) {
  5675. var i = e.audioMixing.sounds[t.soundId];
  5676. if (i.state === e.audioMixing.states.BUSY) return e._stopAudioMixingBufferSource(t) ? (i.pauseAt = Date.now(), i.state = e.audioMixing.states.PAUSED, i.resumeAt ? i.pauseOffset = i.pauseAt - i.resumeAt + i.resumeOffset : i.pauseOffset = i.pauseAt - i.startAt + i.startOffset, n && n(null)) : void e._handleAudioMixingNoSourceError("_pauseOneEffect", t, n);
  5677. e._handleAudioMixingInvalidStateError("_pauseOneEffect", t, n)
  5678. }, e._resumeOneEffect = function(t, n) {
  5679. var i = e.audioMixing.sounds[t.soundId];
  5680. if (i.state === e.audioMixing.states.PAUSED) {
  5681. var a = {
  5682. soundId: t.soundId,
  5683. filePath: i.options.filePath,
  5684. cycle: i.options.cycle,
  5685. loop: i.options.loop,
  5686. playTime: i.pauseOffset,
  5687. replace: i.options.replace
  5688. },
  5689. r = e._startAudioMixingBufferSource(a);
  5690. if (!r) {
  5691. var s = "CREATE_BUFFERSOURCE_FAILED";
  5692. return n(s), void o.
  5693. default.error("[".concat(e.streamId, "] "), s)
  5694. }
  5695. i.source = r, i.resumeAt = Date.now(), i.resumeOffset = i.pauseOffset, i.state = e.audioMixing.states.BUSY, i.pauseAt = null, i.pauseOffset = null, n(null)
  5696. } else e._handleAudioMixingInvalidStateError("_resumeOneEffect", t, n)
  5697. }, e._getOneEffectDuration = function(t) {
  5698. var n = e.audioMixing.sounds[t.soundId];
  5699. return n.options && n.options.filePath && e.audioMixing.buffer[n.options.filePath] ? 1e3 * e.audioMixing.buffer[n.options.filePath].duration : null
  5700. }, e._getOneEffectCurrentPosition = function(t, n) {
  5701. var i = e.audioMixing.sounds[t.soundId];
  5702. return i.state === e.audioMixing.states.PAUSED ? i.pauseOffset % e._getOneEffectDuration(t) : i.state === e.audioMixing.states.BUSY ? i.resumeAt ? (Date.now() - i.resumeAt + i.resumeOffset) % e._getOneEffectDuration(t) : (Date.now() - i.startAt + i.startOffset) % e._getOneEffectDuration(t) : void(n && e._handleAudioMixingInvalidStateError("_getOneEffectCurrentPosition", t))
  5703. }, e._setOneEffectPosition = function(t, n, i) {
  5704. var a = e.audioMixing.sounds[t.soundId];
  5705. if (a.state === e.audioMixing.states.BUSY) {
  5706. if (!e._stopAudioMixingBufferSource(t)) return void e._handleAudioMixingNoSourceError("_setOneEffectPosition", t, i);
  5707. var r = {
  5708. soundId: t.soundId,
  5709. filePath: a.options.filePath,
  5710. loop: a.options.loop,
  5711. cycle: a.options.cycle,
  5712. playTime: n
  5713. },
  5714. s = e._startAudioMixingBufferSource(r);
  5715. if (!s) {
  5716. var c = "CREATE_BUFFERSOURCE_FAILED";
  5717. return i && i(c), void o.
  5718. default.error("[".concat(e.streamId, "] "), c)
  5719. }
  5720. a.source = s, a.startAt = Date.now(), a.startOffset = n, a.resumeAt = null, a.resumeOffset = null, a.pauseOffset = null, a.pauseAt = null
  5721. } else {
  5722. if (a.state !== e.audioMixing.states.PAUSED) return void e._handleAudioMixingInvalidStateError("_setOneEffectPosition", t, i);
  5723. a.pauseOffset = n
  5724. }
  5725. i && i(null)
  5726. }, e.startAudioMixing = function(t, n) {
  5727. var i = s.b.reportApiInvoke(e.sid, {
  5728. callback: function(t) {
  5729. if (t) return n && n(t);
  5730. e.dispatchEvent({
  5731. type: "audioMixingPlayed"
  5732. }), n && n(null)
  5733. },
  5734. getStates: e._getOneEffectStates({
  5735. soundId: -1
  5736. }),
  5737. name: "Stream.startAudioMixing",
  5738. options: t
  5739. });
  5740. Object(W.checkValidObject)(t, "options");
  5741. var a = t.filePath,
  5742. o = t.cacheResource,
  5743. c = t.cycle,
  5744. d = t.loop,
  5745. u = t.playTime,
  5746. l = t.replace;
  5747. Object(W.checkValidString)(a, "filePath", 1, Object(r.getParameter)("FILEPATH_LENMAX"), !1), Object(W.checkValidNumber)(u, "playTime", 0, 1e8), !Object(W.isEmpty)(c) && Object(W.checkValidNumber)(c, "cycle"), !Object(W.isEmpty)(d) && Object(W.checkValidBoolean)(d, "loop"), !Object(W.isEmpty)(l) && Object(W.checkValidBoolean)(l, "replace"), !Object(W.isEmpty)(o) && Object(W.checkValidBoolean)(o, "cacheResource");
  5748. var p = h()({
  5749. soundId: -1
  5750. }, t);
  5751. e._playOneEffect(p, i)
  5752. }, e.stopAudioMixing = function(t) {
  5753. var n = s.b.reportApiInvoke(e.sid, {
  5754. callback: t,
  5755. getStates: e._getOneEffectStates({
  5756. soundId: -1
  5757. }),
  5758. name: "Stream.stopAudioMixing"
  5759. });
  5760. e._stopOneEffect({
  5761. soundId: -1
  5762. }, n)
  5763. }, e.pauseAudioMixing = function(t) {
  5764. var n = s.b.reportApiInvoke(e.sid, {
  5765. callback: t,
  5766. getStates: e._getOneEffectStates({
  5767. soundId: -1
  5768. }),
  5769. name: "Stream.pauseAudioMixing"
  5770. });
  5771. return e._pauseOneEffect({
  5772. soundId: -1
  5773. }, n)
  5774. }, e.resumeAudioMixing = function(t) {
  5775. var n = s.b.reportApiInvoke(e.sid, {
  5776. callback: function(n, i) {
  5777. if (n) return t && t(n);
  5778. e.dispatchEvent({
  5779. type: "audioMixingPlayed"
  5780. }), t && t(null)
  5781. },
  5782. getStates: e._getOneEffectStates({
  5783. soundId: -1
  5784. }),
  5785. name: "Stream.resumeAudioMixing"
  5786. });
  5787. e._resumeOneEffect({
  5788. soundId: -1
  5789. }, n)
  5790. }, e.adjustAudioMixingVolume = function(t) {
  5791. var n = s.b.reportApiInvoke(e.sid, {
  5792. getStates: e._getOneEffectStates({
  5793. soundId: -1
  5794. }),
  5795. name: "Stream.adjustAudioMixingVolume",
  5796. options: arguments,
  5797. tag: "tracer"
  5798. });
  5799. Object(W.checkValidNumber)(t, "volume", 0, 100), e.audioMixing.sounds[-1].volume = t, e._flushAudioMixingMuteStatus(), n()
  5800. }, e.getAudioMixingDuration = function() {
  5801. var t = s.b.reportApiInvoke(e.sid, {
  5802. getStates: e._getOneEffectStates({
  5803. soundId: -1
  5804. }),
  5805. name: "Stream.getAudioMixingDuration"
  5806. }),
  5807. n = e._getOneEffectDuration({
  5808. soundId: -1
  5809. });
  5810. return t(null, n), n
  5811. }, e.getAudioMixingCurrentPosition = function() {
  5812. var t = s.b.reportApiInvoke(e.sid, {
  5813. getStates: e._getOneEffectStates({
  5814. soundId: -1
  5815. }),
  5816. name: "Stream.getAudioMixingCurrentPosition"
  5817. }),
  5818. n = e._getOneEffectCurrentPosition({
  5819. soundId: -1
  5820. }, !0);
  5821. return t(null, n), n
  5822. }, e.setAudioMixingPosition = function(t, n) {
  5823. var i = s.b.reportApiInvoke(e.sid, {
  5824. callback: n,
  5825. options: arguments,
  5826. tag: "tracer",
  5827. getStates: e._getOneEffectStates({
  5828. soundId: -1
  5829. }),
  5830. name: "Stream.setAudioMixingPosition"
  5831. });
  5832. Object(W.checkValidNumber)(t, "position", 0, 1e8), e._setOneEffectPosition({
  5833. soundId: -1
  5834. }, t, i)
  5835. }, e.playEffect = function(t, n) {
  5836. var i = s.b.reportApiInvoke(e.sid, {
  5837. callback: function(t) {
  5838. if (t) return n && n(t);
  5839. e.dispatchEvent({
  5840. type: "effectPlayed"
  5841. }), n && n(null)
  5842. },
  5843. name: "Stream.playEffect",
  5844. options: t
  5845. });
  5846. Object(W.checkValidObject)(t, "options");
  5847. var a = t.soundId,
  5848. o = t.filePath,
  5849. c = t.cycle;
  5850. Object(W.checkValidNumber)(a, "soundId", 1, 1e4), Object(W.checkValidString)(o, "filePath", 0, Object(r.getParameter)("FILEPATH_LENMAX"), !1), !Object(W.isEmpty)(c) && Object(W.checkValidNumber)(c, "cycle"), e._playOneEffect(t, i)
  5851. }, e.stopEffect = function(t, n) {
  5852. var i = s.b.reportApiInvoke(e.sid, {
  5853. callback: n,
  5854. getStates: e._getOneEffectStates({
  5855. soundId: t
  5856. }),
  5857. name: "Stream.stopEffect"
  5858. });
  5859. Object(W.checkValidNumber)(t, "soundId", 1, 1e4), e._stopOneEffect({
  5860. soundId: t
  5861. }, i)
  5862. }, e.stopAllEffects = function(t) {
  5863. var n = s.b.reportApiInvoke(e.sid, {
  5864. callback: t,
  5865. name: "Stream.stopAllEffect"
  5866. }),
  5867. i = !1,
  5868. a = 0,
  5869. r = 0,
  5870. o = function(e) {
  5871. i || (e ? (n(e), i = !0) : a += 1, a === r && (n(null), i = !0))
  5872. };
  5873. for (var c in e.audioMixing.sounds) {
  5874. var d = e.audioMixing.sounds[c]; - 1 !== d.soundId && (d.state !== e.audioMixing.states.BUSY && d.state !== e.audioMixing.states.PAUSED || (r++, e._stopOneEffect({
  5875. soundId: c
  5876. }, o)))
  5877. }
  5878. r || n(null)
  5879. }, e.preloadEffect = function(t, n, i) {
  5880. var a = s.b.reportApiInvoke(e.sid, {
  5881. callback: i,
  5882. options: arguments,
  5883. tag: "tracer",
  5884. name: "Stream.preloadEffect"
  5885. });
  5886. Object(W.checkValidNumber)(t, "soundId", 1, 1e4), Object(W.checkValidString)(n, "filePath", 1, Object(r.getParameter)("FILEPATH_LENMAX"), !1), e._initSoundIfNotExists(t, n), e.audioMixing.buffer[n] ? a(null) : e.loadAudioBuffer(n, n, a)
  5887. }, e.unloadEffect = function(t, n) {
  5888. var i = s.b.reportApiInvoke(e.sid, {
  5889. callback: n,
  5890. options: arguments,
  5891. tag: "tracer",
  5892. name: "Stream.unloadEffect"
  5893. });
  5894. Object(W.checkValidNumber)(t, "soundId", 1, 1e4);
  5895. var a = e.audioMixing.sounds[t];
  5896. if (!a) {
  5897. var r = "SOUND_NOT_EXISTS";
  5898. return o.
  5899. default.error(r, t), void i(r)
  5900. }
  5901. var c = a.options ? a.options.filePath : a.filePath;
  5902. if (c) delete e.audioMixing.buffer[c], delete e.audioMixing.sounds[t], i(null);
  5903. else {
  5904. var d = "SOUND_BUFFER_NOT_FOUND";
  5905. o.
  5906. default.error(d, t), i(d)
  5907. }
  5908. }, e.pauseEffect = function(t, n) {
  5909. var i = s.b.reportApiInvoke(e.sid, {
  5910. callback: n,
  5911. options: arguments,
  5912. tag: "tracer",
  5913. name: "Stream.pauseEffect"
  5914. });
  5915. return e._pauseOneEffect({
  5916. soundId: t
  5917. }, i)
  5918. }, e.pauseAllEffects = function(t) {
  5919. var n = s.b.reportApiInvoke(e.sid, {
  5920. callback: t,
  5921. name: "Stream.pauseAllEffects"
  5922. }),
  5923. i = !1,
  5924. a = 0,
  5925. r = 0,
  5926. o = function(e) {
  5927. i || (e ? (n(e), i = !0) : a += 1, a === r && (n(null), i = !0))
  5928. };
  5929. for (var c in e.audioMixing.sounds)"-1" !== c && e.audioMixing.sounds[c].state === e.audioMixing.states.BUSY && (r++, e._pauseOneEffect({
  5930. soundId: c
  5931. }, o));
  5932. r || n(null)
  5933. }, e.resumeEffect = function(t, n) {
  5934. Object(W.checkValidNumber)(t, "soundId", 1, 1e4);
  5935. var i = s.b.reportApiInvoke(e.sid, {
  5936. callback: n,
  5937. options: arguments,
  5938. tag: "tracer",
  5939. name: "Stream.resumeEffect"
  5940. });
  5941. return e._resumeOneEffect({
  5942. soundId: t
  5943. }, i)
  5944. }, e.resumeAllEffects = function(t) {
  5945. var n = s.b.reportApiInvoke(e.sid, {
  5946. callback: t,
  5947. name: "Stream.resumeAllEffects"
  5948. }),
  5949. i = !1,
  5950. a = 0,
  5951. r = 0,
  5952. o = function(e) {
  5953. i || (e ? (n(e), i = !0) : a += 1, a === r && (n(null), i = !0))
  5954. };
  5955. for (var c in e.audioMixing.sounds)"-1" !== c && e.audioMixing.sounds[c].state === e.audioMixing.states.PAUSED && (r++, e._resumeOneEffect({
  5956. soundId: c
  5957. }, o));
  5958. r || n(null)
  5959. }, e.getEffectsVolume = function() {
  5960. var t = [];
  5961. for (var n in e.audioMixing.sounds) {
  5962. var i = e.audioMixing.sounds[n];
  5963. i && "-1" !== n && t.push({
  5964. soundId: parseInt(n),
  5965. volume: i.volume
  5966. })
  5967. }
  5968. return t
  5969. }, e.setEffectsVolume = function(t, n) {
  5970. var i = s.b.reportApiInvoke(e.sid, {
  5971. name: "Stream.setEffectsVolume",
  5972. options: arguments,
  5973. tag: "tracer",
  5974. callback: n
  5975. });
  5976. for (var a in Object(W.checkValidNumber)(t, "volume", 0, 100), e.audioMixing.defaultVolume = t, e.audioMixing.sounds) {
  5977. var r = e.audioMixing.sounds[a];
  5978. "-1" !== a && (r.volume = t)
  5979. }
  5980. e._flushAudioMixingMuteStatus(), i(null)
  5981. }, e.setVolumeOfEffect = function(t, n, i) {
  5982. var a = s.b.reportApiInvoke(e.sid, {
  5983. name: "Stream.setVolumeOfEffect",
  5984. options: arguments,
  5985. tag: "tracer",
  5986. callback: i
  5987. });
  5988. Object(W.checkValidNumber)(t, "soundId", 0, 1e4), Object(W.checkValidNumber)(n, "volume", 0, 100), e._initSoundIfNotExists(t), e.audioMixing.sounds[t].volume = n, e._flushAudioMixingMuteStatus(), a(null)
  5989. }
  5990. }(t), be.addVideoEffectCapability(t), function(e, t) {
  5991. e.videoConstraint = {}, t.cameraId && (e.videoConstraint.deviceId = {
  5992. exact: t.cameraId
  5993. }), t.facingMode && (e.videoConstraint.facingMode = t.facingMode), e.videoSize && (e.videoConstraint.width = e.videoSize[0], e.videoConstraint.height = e.videoSize[1]), Object(m.isLegacyChrome)() || (e.videoConstraint.frameRate = {
  5994. ideal: 30,
  5995. max: 30
  5996. }), e.audioConstraint = {}, t.microphoneId && (e.audioConstraint.deviceId = {
  5997. exact: t.microphoneId
  5998. }), Object(m.isLegacyChrome)() || e.audioProcessing && (void 0 !== e.audioProcessing.AGC && (Object(m.isFireFox)() ? e.audioConstraint.autoGainControl = e.audioProcessing.AGC : Object(m.isChrome)() && (e.audioConstraint.googAutoGainControl = e.audioProcessing.AGC, e.audioConstraint.googAutoGainControl2 = e.audioProcessing.AGC)), void 0 !== e.audioProcessing.AEC && (e.audioConstraint.echoCancellation = e.audioProcessing.AEC), void 0 !== e.audioProcessing.ANS && (Object(m.isFireFox)() ? e.audioConstraint.noiseSuppression = e.audioProcessing.ANS : Object(m.isChrome)() && (e.audioConstraint.googNoiseSuppression = e.audioProcessing.ANS))), e.screenConstraint = {}, t.sourceId && (e.screenConstraint.sourceId = t.sourceId), t.extensionId && Object(m.isChrome)() ? (e.screenConstraint.extensionId = t.extensionId, e.screenConstraint.mandatory = {
  5999. chromeMediaSource: "desktop",
  6000. maxWidth: e.screenAttributes.width,
  6001. maxHeight: e.screenAttributes.height,
  6002. maxFrameRate: e.screenAttributes.maxFr,
  6003. minFrameRate: e.screenAttributes.minFr
  6004. }) : (e.screenConstraint.mediaSource = "screen", e.screenConstraint.width = e.screenAttributes.width, e.screenConstraint.height = e.screenAttributes.height, e.screenConstraint.frameRate = {
  6005. ideal: e.screenAttributes.maxFr,
  6006. max: e.screenAttributes.maxFr
  6007. }), t.mediaSource && (e.screenConstraint.mediaSource = t.mediaSource), e.setVideoResolution = function(n) {
  6008. var i = s.b.reportApiInvoke(e.sid, {
  6009. name: "Stream.setVideoResolution",
  6010. options: arguments,
  6011. tag: "tracer"
  6012. });
  6013. if (!(n instanceof Array)) {
  6014. var a = Oe(n += "");
  6015. return a && a.video ? (e.videoConstraint = h()(e.videoConstraint, {
  6016. width: {
  6017. ideal: a.video.width
  6018. },
  6019. height: {
  6020. ideal: a.video.height
  6021. }
  6022. }), t.attributes.resolution = a.attributes.resolution, (r = e.stream && e.stream.getVideoTracks && e.stream.getVideoTracks()[0]) && r.applyConstraints ? (o.
  6023. default.debug("setVideoResolution applyConstraints", e.videoConstraint), r.applyConstraints(e.videoConstraint).then(i).
  6024. catch (i)) : i(), !0) : (i("NO_PROFILE_".concat(n)), !1)
  6025. }
  6026. var r, c = n[0],
  6027. d = n[1];
  6028. e.videoConstraint = h()(e.videoConstraint, {
  6029. width: {
  6030. ideal: c
  6031. },
  6032. height: {
  6033. ideal: d
  6034. }
  6035. }), t.attributes.resolution = "".concat(c, "x").concat(d), (r = e.stream && e.stream.getVideoTracks && e.stream.getVideoTracks()[0]) && r.applyConstraints ? (o.
  6036. default.debug("setVideoResolution applyConstraints", e.videoConstraint), be.disableVideoEffect(e).then(function() {
  6037. return r.applyConstraints(e.videoConstraint).then(i).
  6038. catch (i)
  6039. }).then(function() {
  6040. return be.restoreVideoEffect(e)
  6041. })) : i()
  6042. }, e.setVideoFrameRate = function(n) {
  6043. var i = s.b.reportApiInvoke(e.sid, {
  6044. name: "Stream.setVideoFrameRate",
  6045. options: arguments,
  6046. tag: "tracer"
  6047. });
  6048. if (Object(m.isFireFox)()) return i("FIREFOX_NOT_SUPPORTED"), !1;
  6049. if ("object" === Ae()(n) && n instanceof Array && n.length > 1) {
  6050. e.videoConstraint = h()(e.videoConstraint, {
  6051. frameRate: {
  6052. ideal: n[0],
  6053. max: n[1]
  6054. }
  6055. }), t.attributes.minFrameRate = n[0], t.attributes.maxFrameRate = n[1];
  6056. var a = e.stream && e.stream.getVideoTracks && e.stream.getVideoTracks()[0];
  6057. return a && a.applyConstraints ? (o.
  6058. default.debug("setVideoFrameRate applyConstraints", e.videoConstraint), a.applyConstraints(e.videoConstraint).then(i).
  6059. catch (i)) : i(), !0
  6060. }
  6061. return i("INVALID_PARAM_".concat(JSON.stringify(n))), !1
  6062. }, e.setVideoBitRate = function(n) {
  6063. var i = s.b.reportApiInvoke(e.sid, {
  6064. name: "Stream.setVideoBitRate",
  6065. options: arguments,
  6066. tag: "tracer"
  6067. });
  6068. return "object" === Ae()(n) && n instanceof Array && n.length > 1 ? (t.attributes.minVideoBW = n[0], t.attributes.maxVideoBW = n[1], e.connectionSpec && (e.connectionSpec.minVideoBW = n[0], e.connectionSpec.maxVideoBW = n[1]), e.pc && e.pc.renegotiate && e.pc.renegotiate(), i(), !0) : (i("INVALID_PARAM_".concat(JSON.stringify(n))), !1)
  6069. }, e.setScreenBitRate = function(n) {
  6070. var i = s.b.reportApiInvoke(e.sid, {
  6071. name: "Stream.setScreenBitRate",
  6072. options: arguments,
  6073. tag: "tracer"
  6074. });
  6075. return "object" === Ae()(n) && n instanceof Array && n.length > 1 ? (t.screenAttributes.minVideoBW = n[0], t.screenAttributes.maxVideoBW = n[1], i(), !0) : (i("INVALID_PARAM_".concat(JSON.stringify(n))), !1)
  6076. }, e.setScreenProfile = function(t) {
  6077. var n = s.b.reportApiInvoke(e.sid, {
  6078. name: "Stream.setScreenProfile",
  6079. options: arguments,
  6080. tag: "tracer"
  6081. });
  6082. Object(W.checkValidEnum)(t, "profile", ["480p_1", "480p_2", "720p_1", "720p_2", "1080p_1", "1080p_2"]);
  6083. var i = Oe(t);
  6084. return i && i.screen ? (e.screenConstraint.mandatory ? (e.screenConstraint.mandatory.maxWidth = i.screen.width, e.screenConstraint.mandatory.maxHeight = i.screen.height, i.screen.frameRate && i.screen.frameRate.min && i.screen.frameRate.max && (e.screenConstraint.mandatory.minFrameRate = i.screen.frameRate.min, e.screenConstraint.mandatory.maxFrameRate = i.screen.frameRate.max)) : e.screenConstraint = h()(e.screenConstraint, i.screen), e.screenAttributes.width = i.screen.width, e.screenAttributes.height = i.screen.height, e.screenAttributes.minFr = i.screen.frameRate.min, e.screenAttributes.maxFr = i.screen.frameRate.max, n(), !0) : (n("NO_SCREEN_PROFILE_".concat(JSON.stringify(t))), !1)
  6085. }, e.setVideoProfileCustom = function(t) {
  6086. var n = s.b.reportApiInvoke(e.sid, {
  6087. name: "Stream.setVideoProfileCustom",
  6088. options: arguments,
  6089. tag: "tracer"
  6090. });
  6091. e.setVideoResolution(t[0]), e.setVideoFrameRate([t[1], t[1]]), e.setVideoBitRate([t[2], t[2]]), n()
  6092. }, e.setVideoProfileCustomPlus = function(n) {
  6093. var i = s.b.reportApiInvoke(e.sid, {
  6094. name: "Stream.setVideoProfileCustom",
  6095. options: arguments,
  6096. tag: "tracer"
  6097. });
  6098. e.videoConstraint.width = n.width, e.videoConstraint.height = n.height, t.attributes.resolution = "".concat(n.width, "x").concat(n.height), e.setVideoFrameRate([n.framerate, n.framerate]), e.setVideoBitRate([n.bitrate, n.bitrate]), i()
  6099. }, e.setVideoProfile = function(n) {
  6100. var i = s.b.reportApiInvoke(e.sid, {
  6101. name: "Stream.setVideoProfile",
  6102. options: arguments,
  6103. tag: "tracer"
  6104. }),
  6105. a = Oe(n);
  6106. if (!a) {
  6107. var r = "Invalid Profile ".concat(n);
  6108. throw new Error(r)
  6109. }
  6110. if (e.profile = n, a && a.video) {
  6111. e.profile = a.profileName, e.videoConstraint = h()(e.videoConstraint, a.video), e.connectionSpec && a.attributes.maxVideoBW && (e.connectionSpec.minVideoBW = a.attributes.minVideoBW, e.connectionSpec.maxVideoBW = a.attributes.maxVideoBW), Object(m.isEdge)() && (e.videoConstraint.frameRate.max = 60), Object(m.isFireFox)() && (e.videoConstraint.frameRate = {
  6112. ideal: 30,
  6113. max: 30
  6114. }), t.attributes = h()(t.attributes, a.attributes), e.pc && e.pc.renegotiate && e.pc.renegotiate();
  6115. var c = e.stream && e.stream.getVideoTracks && e.stream.getVideoTracks()[0];
  6116. return c && c.applyConstraints ? (o.
  6117. default.debug("setVideoProfile applyConstraints", e.videoConstraint), be.disableVideoEffect(e).then(function() {
  6118. return c.applyConstraints(e.videoConstraint)
  6119. }).then(function() {
  6120. return be.restoreVideoEffect(e)
  6121. }).then(function(t) {
  6122. return new Promise(function(n, a) {
  6123. i(t), Object(F.vsResHack)(e.stream, function(t, i) {
  6124. e.videoWidth = t, e.videoHeight = i, n()
  6125. }, function(t) {
  6126. o.
  6127. default.warning("[".concat(e.streamId, "] vsResHack failed: "), t), a()
  6128. })
  6129. })
  6130. }).
  6131. catch (i)) : i(), !0
  6132. }
  6133. return i("INVALID_VIDEO_PROFILE_".concat(n)), !1
  6134. }, e.setAudioProfile = function(t) {
  6135. var n = s.b.reportApiInvoke(e.sid, {
  6136. name: "Stream.setAudioProfile",
  6137. options: arguments,
  6138. tag: "tracer"
  6139. });
  6140. Object(W.checkValidEnum)(t, "profile", ["speech_low_quality", "speech_standard", "music_standard", "standard_stereo", "high_quality", "high_quality_stereo"]), e.audioProfile = t;
  6141. var i = Ne(t);
  6142. return e.highQuality = i.highQuality, e.stereo = i.stereo, e.speech = i.speech, e.lowQuality = i.lowQuality, e.stereo && Object(m.isChrome)() && (e.audioConstraint.googAutoGainControl = !1, e.audioConstraint.googAutoGainControl2 = !1, e.audioConstraint.echoCancellation = !1, e.audioConstraint.googNoiseSuppression = !1), n(), !0
  6143. }, e.setVideoEncoderConfiguration = function(t) {
  6144. Object(W.checkValidObject)(t, "config");
  6145. var n = s.b.reportApiInvoke(e.sid, {
  6146. name: "Stream.setVideoEncoderConfiguration",
  6147. options: t,
  6148. tag: "tracer"
  6149. });
  6150. t.resolution && (Object(W.checkValidNumber)(t.resolution.width, "config.resolution.width"), Object(W.checkValidNumber)(t.resolution.height, "config.resolution.height"), e.setVideoResolution([t.resolution.width, t.resolution.height])), t.frameRate && (Object(W.checkValidNumber)(t.frameRate.min, "config.frameRate.min"), Object(W.checkValidNumber)(t.frameRate.max, "config.frameRate.max"), e.setVideoFrameRate([t.frameRate.min, t.frameRate.max])), t.bitrate && (Object(W.checkValidNumber)(t.bitrate.min, "config.bitrate.min", 1, 1e7), Object(W.checkValidNumber)(t.bitrate.max, "config.bitrate.max", 1, 1e7), e.setVideoBitRate([t.bitrate.min, t.bitrate.max])), n()
  6151. }, e.getSupportedProfile = function(t) {
  6152. var n = s.b.reportApiInvoke(e.sid, {
  6153. name: "Stream.getSupportedProfile",
  6154. options: arguments,
  6155. tag: "tracer",
  6156. callback: t
  6157. });
  6158. if (!e.local) {
  6159. var i = "ONLY_LOCAL_STREAM_SUPPORTED";
  6160. return o.
  6161. default.error(i), n(i)
  6162. }
  6163. if (!e.stream) return i = "STREAM_NOT_INIT", o.
  6164. default.error(i), n(i);
  6165. if (!e.stream.getVideoTracks) return i = "TRACK_NOT_SUPPORT", o.
  6166. default.error(i), n(i);
  6167. var a = e.stream.getVideoTracks()[0];
  6168. if (!a) return i = "NO_VIDEO_TRACK_FOUND", o.
  6169. default.error(i), n(i);
  6170. if (!a.getCapabilities) return i = "GETCAPABILITY_NOT_SUPPORT", o.
  6171. default.error(i), n(i);
  6172. var r = a.getCapabilities();
  6173. return n(null, Ce(r))
  6174. }
  6175. }(t, e), t.getId = function() {
  6176. return t.streamId
  6177. }, t.getUserId = function() {
  6178. return t.userId
  6179. }, t.checkDualStreamEnabled = function() {
  6180. if (Object(r.getParameter)("DUALSTREAM_OPERATION_CHECK") && t.isDualStream) {
  6181. return o.
  6182. default.error("Operation not permitted: ".concat("DUAL_STREAM_ENABLED")), "DUAL_STREAM_ENABLED"
  6183. }
  6184. return !1
  6185. }, t.setUserId = function(e) {
  6186. var n = s.b.reportApiInvoke(t.sid, {
  6187. name: "Stream.setUserId",
  6188. options: arguments,
  6189. tag: "tracer"
  6190. });
  6191. t.userId && o.
  6192. default.warning("[".concat(t.streamId, "] Stream.userId ").concat(t.userId, " => ").concat(e)), t.userId = e, n()
  6193. }, t.getAttributes = function() {
  6194. return e.screen ? t.screenAttributes : e.attributes
  6195. }, t.hasAudio = function() {
  6196. return t.audio
  6197. }, t.hasVideo = function() {
  6198. return t.video
  6199. }, t.hasScreen = function() {
  6200. return t.screen
  6201. }, t.hasScreenAudio = function() {
  6202. return t.screenAudio
  6203. }, t.isVideoOn = function() {
  6204. return (t.hasVideo() || t.hasScreen()) && !t.userMuteVideo
  6205. }, t.isAudioOn = function() {
  6206. return t.hasAudio() && !t.userMuteAudio
  6207. }, t.init = function(i, a) {
  6208. var r = s.b.reportApiInvoke(t.sid, {
  6209. callback: function(e, t) {
  6210. if (e) return a && a(e);
  6211. i && i(t)
  6212. },
  6213. name: "Stream.init",
  6214. options: arguments,
  6215. tag: "tracer"
  6216. }),
  6217. c = ((new Date).getTime(), arguments[2]);
  6218. if (void 0 === c && (c = 2), !0 === t.initialized) return r({
  6219. type: "warning",
  6220. msg: "STREAM_ALREADY_INITIALIZED"
  6221. });
  6222. if (!0 !== t.local) return r({
  6223. type: "warning",
  6224. msg: "STREAM_NOT_LOCAL"
  6225. });
  6226. var d = Math.random().toString().slice(3);
  6227. t._streamInitID = d, t.videoSource ? t.videoName = "videoSource" : t.video && (t.videoName = H.searchDeviceNameById(e.cameraId) || "default"), t.audioSource ? t.audioName = "audioSource" : t.audio && (t.audioName = H.searchDeviceNameById(e.microphoneId) || "default"), t.screen && (t.screenName = e.extensionId || "default");
  6228. try {
  6229. if (e.audio || e.video || e.screen || e.screenAudio || e.videoSource || e.audioSource) {
  6230. o.
  6231. default.debug("[".concat(t.streamId, "] Requested access to local media"));
  6232. var u = {
  6233. streamId: t.streamId
  6234. };
  6235. e.videoSource ? u.videoSource = e.videoSource:
  6236. e.screen ? u.screen = t.screenConstraint : e.video && (u.video = t.videoConstraint), e.audioSource ? u.audioSource = e.audioSource : e.screenAudio ? u.screenAudio = e.screenAudio : e.audio && (u.audio = t.audioConstraint), j(u, function(i) {
  6237. if (u.screenAudio && !i.getAudioTracks()[0] && o.
  6238. default.warning("[".concat(t.streamId, "] Audio sharing is not selected")), u.screen && o.
  6239. default.debug("[".concat(t.streamId, "] User has granted access to screen sharing")), (u.video || u.audio) && o.
  6240. default.debug("[".concat(t.streamId, "] User has granted access to local media")), null === t._streamInitID) {
  6241. i.getTracks().forEach(function(e) {
  6242. e.stop()
  6243. });
  6244. var a = {
  6245. type: "error",
  6246. msg: "STREAM_IS_CLOSED",
  6247. info: "stream is closed and cannot be initialized"
  6248. };
  6249. return o.
  6250. default.error(t.streamId, a.info), void r(a)
  6251. }
  6252. if (t._streamInitID !== d) {
  6253. i.getTracks().forEach(function(e) {
  6254. e.stop()
  6255. });
  6256. a = {
  6257. type: "error",
  6258. msg: "ABORT_OTHER_INIT",
  6259. info: "stream initialization is aborted because of another stream.init"
  6260. };
  6261. return o.
  6262. default.error(t.streamId, a.info), void r(a)
  6263. }
  6264. t.dispatchEvent({
  6265. type: "accessAllowed"
  6266. }), t.stream = i, t.initialized = !0, t.reloadDeviceName(), t.hasVideo() && Object(F.vsResHack)(i, function(e, n) {
  6267. t.videoWidth = e, t.videoHeight = n
  6268. }, function(e) {
  6269. o.
  6270. default.warning("[".concat(t.streamId, "] vsResHack failed: "), e)
  6271. }), e.screen && t.stream && t.stream.getVideoTracks()[0] && (t.stream.getVideoTracks()[0].onended = function() {
  6272. t.dispatchEvent({
  6273. type: "stopScreenSharing"
  6274. })
  6275. }), t.stream && t.stream.getTracks && t.stream.getTracks().forEach(function(e) {
  6276. e && !e.onended && (e.onended = n)
  6277. }), r()
  6278. }, function(e) {
  6279. var n = {
  6280. type: "error",
  6281. info: null
  6282. };
  6283. switch (e && (n.msg = e.name || e.code || e, e.message && (n.info = e.message), e.code && (n.info ? n.info += ". " + e.code : n.info = " " + e.code), e.constraint && (n.info ? n.info += ". Constraint: " + e.constraint : n.info = "constraint: " + e.constraint)), n.msg) {
  6284. case "Starting video failed":
  6285. case "TrackStartError":
  6286. if (t.videoConstraint && (delete t.videoConstraint.width, delete t.videoConstraint.height), c > 0) return void setTimeout(function() {
  6287. t.init(function(e) {
  6288. return r(e)
  6289. }, r, c - 1)
  6290. }, 1);
  6291. n.msg = "MEDIA_OPTION_INVALID";
  6292. break;
  6293. case "DevicesNotFoundError":
  6294. n.msg = "DEVICES_NOT_FOUND";
  6295. break;
  6296. case "NotSupportedError":
  6297. n.msg = "NOT_SUPPORTED";
  6298. break;
  6299. case "PermissionDeniedError":
  6300. case "InvalidStateError":
  6301. n.msg = "PERMISSION_DENIED", t.dispatchEvent({
  6302. type: "accessDenied"
  6303. });
  6304. break;
  6305. case "PERMISSION_DENIED":
  6306. case "NotAllowedError":
  6307. t.dispatchEvent({
  6308. type: "accessDenied"
  6309. });
  6310. break;
  6311. case "ConstraintNotSatisfiedError":
  6312. n.msg = "CONSTRAINT_NOT_SATISFIED";
  6313. break;
  6314. default:
  6315. n.msg || (n.msg = "UNDEFINED")
  6316. }
  6317. var i = "Media access ".concat(n.msg).concat(n.info ? ": " + n.info : "");
  6318. o.
  6319. default.error("[".concat(t.streamId, "] "), i), r(n)
  6320. })
  6321. } else r({
  6322. type: "warning",
  6323. msg: "STREAM_HAS_NO_MEDIA_ATTRIBUTES"
  6324. })
  6325. } catch (e) {
  6326. o.
  6327. default.error("[".concat(t.streamId, "] Stream init: "), e), r({
  6328. type: "error",
  6329. msg: e.message || e
  6330. })
  6331. }
  6332. }, t.reloadDeviceName = function() {
  6333. if (t.stream) {
  6334. if (t.stream.getVideoTracks) {
  6335. var e = t.stream.getVideoTracks()[0];
  6336. e && e.label && (t.videoName = e.label)
  6337. }
  6338. if (t.stream.getAudioTracks) {
  6339. var n = t.stream.getAudioTracks()[0];
  6340. n && n.label && (t.audioName = n.label)
  6341. }
  6342. }
  6343. }, t.close = function() {
  6344. var e = s.b.reportApiInvoke(null, {
  6345. name: "Stream.close",
  6346. options: arguments,
  6347. tag: "tracer"
  6348. });
  6349. if (o.
  6350. default.debug("[".concat(t.streamId, "] Close stream with id"), t.streamId), void 0 !== t.stream) {
  6351. var n = t.stream.getTracks();
  6352. for (var i in n) n.hasOwnProperty(i) && n[i].stop();
  6353. !t.isLowStream && t.local ? be.disableVideoEffect(t).then(function() {
  6354. t.stream = void 0
  6355. }) : (t.stream && t.stream.clean && t.stream.clean(), t.stream = void 0)
  6356. }
  6357. Object(m.isSafari)() && t.pc && t.pc.peerConnection && t.pc.peerConnection.removeTrack && t.pc.peerConnection.getSenders && t.pc.peerConnection.getSenders().forEach(function(e) {
  6358. e && (o.
  6359. default.debug("[".concat(t.streamId, "] Remove Track"), e), t.pc.peerConnection.removeTrack(e))
  6360. });
  6361. t.local && (t.initialized = !1), t._streamInitID = null, t._onAudioMute = void 0, t._onAudioUnmute = void 0, t._onVideoMute = void 0, t._onVideoUnmute = void 0, t.lowStream && t.lowStream.close(), e()
  6362. }, t.enableAudio = function() {
  6363. var e, n = s.b.reportApiInvoke(t.sid, {
  6364. name: "Stream.enableAudio",
  6365. options: arguments,
  6366. tag: "tracer"
  6367. });
  6368. return o.
  6369. default.deprecate("[".concat(t.streamId, "] Stream.enableAudio is deprecated and will be removed in the future. Use Stream.unmuteAudio instead")), t.userMuteAudio || o.
  6370. default.warning("[".concat(t.streamId, "] User already enableAudio")), t.userMuteAudio = !1, n(null, e = !t.peerMuteAudio && t._unmuteAudio()), e
  6371. }, t.disableAudio = function() {
  6372. var e = s.b.reportApiInvoke(t.sid, {
  6373. name: "Stream.disableAudio",
  6374. options: arguments,
  6375. tag: "tracer"
  6376. });
  6377. o.
  6378. default.deprecate("[".concat(t.streamId, "] Stream.disableAudio is deprecated and will be removed in the future. Use Stream.muteAudio instead")), t.userMuteAudio && o.
  6379. default.warning("[".concat(t.streamId, "] User already disableAudio")), t.userMuteAudio = !0;
  6380. var n = t._muteAudio();
  6381. return e(null, n), n
  6382. }, t.enableVideo = function() {
  6383. var e, n = s.b.reportApiInvoke(t.sid, {
  6384. name: "Stream.enableVideo",
  6385. options: arguments,
  6386. tag: "tracer"
  6387. });
  6388. return o.
  6389. default.deprecate("[".concat(t.streamId, "] Stream.enableVideo is deprecated and will be removed in the future. Use Stream.unmuteVideo instead")), t.userMuteVideo || o.
  6390. default.warning("[".concat(t.streamId, "] User already enableVideo")), t.userMuteVideo = !1, t.lowStream && (t.lowStream.userMuteVideo = !1), n(null, e = !t.peerMuteVideo && t._unmuteVideo()), e
  6391. }, t.disableVideo = function() {
  6392. var e = s.b.reportApiInvoke(t.sid, {
  6393. name: "Stream.disableVideo",
  6394. options: arguments,
  6395. tag: "tracer"
  6396. });
  6397. o.
  6398. default.deprecate("[".concat(t.streamId, "] Stream.disableVideo is deprecated and will be removed in the future. Use Stream.muteVideo instead")), t.userMuteVideo && o.
  6399. default.warning("[".concat(t.streamId, "] User already disableVideo")), t.userMuteVideo = !0, t.lowStream && (t.lowStream.userMuteVideo = !0);
  6400. var n = t._muteVideo();
  6401. return e(null, n), n
  6402. }, t.unmuteAudio = function() {
  6403. var e, n = s.b.reportApiInvoke(t.sid, {
  6404. name: "Stream.unmuteAudio",
  6405. options: arguments,
  6406. tag: "tracer"
  6407. });
  6408. return t.userMuteAudio || o.
  6409. default.warning("[".concat(t.streamId, "] User already unmuteAudio")), t.userMuteAudio = !1, n(null, e = !t.peerMuteAudio && t._unmuteAudio()), e
  6410. }, t.muteAudio = function() {
  6411. var e = s.b.reportApiInvoke(t.sid, {
  6412. name: "Stream.muteAudio",
  6413. options: arguments,
  6414. tag: "tracer"
  6415. });
  6416. t.userMuteAudio && o.
  6417. default.warning("[".concat(t.streamId, "] User already muteAudio")), t.userMuteAudio = !0;
  6418. var n = t._muteAudio();
  6419. return e(null, n), n
  6420. }, t.unmuteVideo = function() {
  6421. var e, n = s.b.reportApiInvoke(t.sid, {
  6422. name: "Stream.unmuteVideo",
  6423. options: arguments,
  6424. tag: "tracer"
  6425. });
  6426. return t.userMuteVideo || o.
  6427. default.warning("[".concat(t.streamId, "] User already unmuteVideo")), t.userMuteVideo = !1, t.lowStream && (t.lowStream.userMuteVideo = !1), n(null, e = !t.peerMuteVideo && t._unmuteVideo()), e
  6428. }, t.muteVideo = function() {
  6429. var e = s.b.reportApiInvoke(t.sid, {
  6430. name: "Stream.muteVideo",
  6431. options: arguments,
  6432. tag: "tracer"
  6433. });
  6434. t.userMuteVideo && o.
  6435. default.warning("[".concat(t.streamId, "] User already muteVideo")), t.userMuteVideo = !0, t.lowStream && (t.lowStream.userMuteVideo = !0);
  6436. var n = t._muteVideo();
  6437. return e(null, n), n
  6438. }, t._unmuteAudio = function() {
  6439. return o.
  6440. default.debug("[".concat(t.streamId, "] Unmuted audio stream with id "), t.streamId), t._flushAudioMixingMuteStatus(!1), !(!t.hasAudio() || !t.initialized || void 0 === t.stream || !0 === t.stream.getAudioTracks()[0].enabled) && (t._onAudioUnmute && t._onAudioUnmute(), t.pc && (t.pc.isAudioMute = !1), t.stream.getAudioTracks()[0].enabled = !0, !0)
  6441. }, t._isAudioMuted = function() {
  6442. if (t.stream && t.hasAudio()) {
  6443. var e = t.stream.getAudioTracks();
  6444. return e.length > 0 && !e[0].enabled
  6445. }
  6446. return !1
  6447. }, t._isVideoMuted = function() {
  6448. if (t.stream && t.hasVideo()) {
  6449. var e = t.stream.getVideoTracks();
  6450. return e.length > 0 && !e[0].enabled
  6451. }
  6452. return !1
  6453. }, t._muteAudio = function() {
  6454. return o.
  6455. default.debug("[".concat(t.streamId, "] Muted audio stream with id "), t.streamId), t._flushAudioMixingMuteStatus(!0), !! (t.hasAudio() && t.initialized && void 0 !== t.stream && t.stream.getAudioTracks()[0].enabled) && (t._onAudioMute && t._onAudioMute(), t.pc && (t.pc.isAudioMute = !0), t.stream.getAudioTracks()[0].enabled = !1, t.sid && s.b.audioSendingStopped(t.sid, {
  6456. succ: !0,
  6457. reason: "muteAudio"
  6458. }), !0)
  6459. }, t._unmuteVideo = function() {
  6460. return o.
  6461. default.debug("[".concat(t.streamId, "] Unmuted video stream with id"), t.streamId), !(!t.initialized || void 0 === t.stream || !t.stream.getVideoTracks().length || !0 === t.stream.getVideoTracks()[0].enabled) && (t._onVideoUnmute && t._onVideoUnmute(), t.pc && (t.pc.isVideoMute = !1), t.stream.getVideoTracks()[0].enabled = !0, t.lowStream && t.lowStream._unmuteVideo(), !0)
  6462. }, t._muteVideo = function() {
  6463. return o.
  6464. default.debug("[".concat(t.streamId, "] Muted video stream with id"), t.streamId), !! (t.initialized && void 0 !== t.stream && t.stream.getVideoTracks().length && t.stream.getVideoTracks()[0].enabled) && (t._onVideoMute && t._onVideoMute(), t.pc && (t.pc.isVideoMute = !0), t.stream.getVideoTracks()[0].enabled = !1, t.lowStream && t.lowStream._muteVideo(), t.sid && s.b.videoSendingStopped(t.sid, {
  6465. succ: !0,
  6466. reason: "muteVideo"
  6467. }), !0)
  6468. }, t.addTrack = function(i) {
  6469. var a = s.b.reportApiInvoke(t.sid, {
  6470. name: "Stream.addTrack",
  6471. options: arguments,
  6472. tag: "tracer"
  6473. }),
  6474. r = t.checkDualStreamEnabled();
  6475. if (r) return a(r);
  6476. if (t.pc && t.pc.addTrack(i, t.stream), "audio" == i.kind) {
  6477. t._cleanupAudioMixing();
  6478. var o = new MediaStream;
  6479. t.userMuteAudio && (i.enabled = !1), o.addTrack(i);
  6480. var c = t.stream.getVideoTracks()[0];
  6481. c && (o.addTrack(c), t.audio = !0, e.audio = !0), t.stream = o, t.audioLevelHelper = null, t.player && t.player.video && (t.player.video.srcObject = t.stream)
  6482. } else t.userMuteVideo && (i.enabled = !1), t.stream.addTrack(i), t.video = !0, e.video = !0;
  6483. i.onended || (i.onended = n), a()
  6484. }, t.removeTrack = function(n) {
  6485. var i = s.b.reportApiInvoke(t.sid, {
  6486. name: "Stream.removeTrack",
  6487. options: arguments,
  6488. tag: "tracer"
  6489. }),
  6490. a = t.checkDualStreamEnabled(),
  6491. r = be.checkVideoEffectEnabled(t);
  6492. if (a || r) return i(a);
  6493. t.pc && t.pc.removeTrack(n, t.stream), t.stream.removeTrack(n), t._cleanupAudioMixing(), "audio" === n.kind ? (t.audio = !1, e.audio = !1) : (t.video = !1, e.video = !1), t.audioLevelHelper = null, "live" == n.readyState && (n.stop(), o.
  6494. default.debug("[".concat(t.streamId, "] Track ").concat(n.kind, " Stopped"))), i()
  6495. }, t.setAudioOutput = function(e, n, i) {
  6496. var a = s.b.reportApiInvoke(t.sid, {
  6497. callback: function(e, t) {
  6498. if (e) return i && i(e);
  6499. n && n(t)
  6500. },
  6501. name: "Stream.setAudioOutput",
  6502. options: arguments,
  6503. tag: "tracer"
  6504. });
  6505. return Object(W.isValidString)(e, 1, 255) ? (t.audioOutput = e, t.player ? void t.player.setAudioOutput(e, function() {
  6506. return a()
  6507. }, a) : a()) : (o.
  6508. default.error("[".concat(t.streamId, "] setAudioOutput Invalid Parameter"), e), a(I.
  6509. default.INVALID_PARAMETER))
  6510. }, t.play = function(e, n, i) {
  6511. "function" == typeof n && (i = n, n = null), o.
  6512. default.debug("[".concat(t.streamId, "] play()."), e, n);
  6513. var a = s.b.reportApiInvoke(t.sid, {
  6514. name: "Stream.play",
  6515. options: arguments,
  6516. tag: "tracer",
  6517. callback: i
  6518. });
  6519. if (Object(W.checkValidString)(e, "elementID"), Object(W.isEmpty)(n) || (Object(W.isEmpty)(n.fit) || Object(W.checkValidEnum)(n.fit, "fit", ["cover", "contain"]), Object(W.isEmpty)(n.muted) || Object(W.checkValidBoolean)(n.muted, "muted")), t.player) o.
  6520. default.warning("[".concat(t.streamId, "] Stream.play(): Stream is already playing. Fallback to resume stream")), t.resume().then(function() {
  6521. a(null)
  6522. }).
  6523. catch (a);
  6524. else {
  6525. t.elementID = e, t.playOptions = n, !t.local || t.video || t.screen ? (t.player = new y({
  6526. id: t.getId(),
  6527. stream: t,
  6528. elementID: e,
  6529. options: n
  6530. }), t.local && be.applyEffectInPlayer(t)) : t.hasAudio() && (t.player = new y({
  6531. id: t.getId(),
  6532. stream: t,
  6533. elementID: e,
  6534. options: n
  6535. }));
  6536. var r = {
  6537. audio: null,
  6538. video: null
  6539. };
  6540. t.on("player-status-change", function e(n) {
  6541. if (r[n.mediaType] = n, r.audio && r.video) if (t.removeEventListener("player-status-change", e), r.video.isErrorState || r.audio.isErrorState) {
  6542. var i = r.video.isErrorState ? r.video : r.audio;
  6543. a({
  6544. isErrorState: !0,
  6545. status: i.status,
  6546. reason: i.reason,
  6547. video: r.video,
  6548. audio: r.audio
  6549. })
  6550. } else "aborted" === r.video.status && "aborted" === r.audio.status ? a({
  6551. status: "aborted",
  6552. reason: "stop",
  6553. video: r.video,
  6554. audio: r.audio
  6555. }) : a(null)
  6556. }), t.audioOutput && t.player.setAudioOutput(t.audioOutput), void 0 !== t.audioLevel && t.player.setAudioVolume(t.audioLevel), t._flushAudioMixingMuteStatus(!1)
  6557. }
  6558. }, t.stop = function() {
  6559. var e = s.b.reportApiInvoke(t.sid, {
  6560. name: "Stream.stop",
  6561. options: arguments,
  6562. tag: "tracer"
  6563. });
  6564. o.
  6565. default.debug("[".concat(t.streamId, "] Stop stream player with id "), t.streamId), t.player ? (be.removeEffectFromLocalPlayer(t), t.player.destroy(), delete t.player):
  6566. o.
  6567. default.error("[".concat(t.streamId, "] Stream.stop(): Stream is not playing")), t._flushAudioMixingMuteStatus(!0), e()
  6568. }, t.isPlaying = function() {
  6569. return !!t.player
  6570. }, t.isPaused = function() {
  6571. return !!t.player && ( !! (t.player.video && t.player.video.paused && t.player.mediaElemExists(t.player.video)) || !! (t.player.audio && t.player.audio.paused && t.player.mediaElemExists(t.player.audio)))
  6572. }, t.resume = function() {
  6573. var e, n;
  6574. return t.player ? (t.player.video && t.player.video.play && (e = t.player.video.play()), e = e || Promise.resolve(), t.player.audio && t.player.audio.play && (n = t.player.audio.play()), n = n || Promise.resolve(), Promise.all([e, n])) : Promise.reject("NO_PLAYER_FOUND")
  6575. }, t.getVideoTrack = function() {
  6576. var e = s.b.reportApiInvoke(t.sid, {
  6577. name: "Stream.getVideoTrack",
  6578. options: arguments,
  6579. tag: "tracer"
  6580. });
  6581. if (t.stream && t.stream.getVideoTracks) {
  6582. var n = t.stream.getVideoTracks()[0];
  6583. if (n) return o.
  6584. default.info("[".concat(t.streamId, "] getVideoTrack"), n), e(), n
  6585. }
  6586. o.
  6587. default.info("[".concat(t.streamId, "] getVideoTrack None")), e(null, "getVideoTrack None")
  6588. }, t.getAudioTrack = function() {
  6589. var e = s.b.reportApiInvoke(t.sid, {
  6590. name: "Stream.getAudioTrack",
  6591. options: arguments,
  6592. tag: "tracer"
  6593. });
  6594. if (t.stream && t.stream.getAudioTracks) {
  6595. var n = t.stream.getAudioTracks()[0];
  6596. if (n) return o.
  6597. default.info("[".concat(t.streamId, "] getAudioTracks"), n), e(), n
  6598. }
  6599. o.
  6600. default.info("[".concat(t.streamId, "] getAudioTracks None")), e(null, "getAudioTracks None")
  6601. }, t._hasVideoTracks = function() {
  6602. return !!(t.stream && t.stream.getVideoTracks && t.stream.getVideoTracks()[0])
  6603. }, t._hasAudioTracks = function() {
  6604. return !!(t.stream && t.stream.getAudioTracks && t.stream.getAudioTracks()[0])
  6605. }, t._replaceMediaStreamTrack = function(e, n, i) {
  6606. if (t.stream) {
  6607. if ("video" == e.kind) {
  6608. if (r = t.stream.getVideoTracks()[0]) return t.userMuteVideo && (e.enabled = !1), t.stream.removeTrack(r), t.stream.addTrack(e), o.
  6609. default.debug("[".concat(t.streamId, "] _replaceMediaStreamTrack ").concat(e.kind, " SUCCESS")), "live" == r.readyState && (r.stop(), o.
  6610. default.debug("[".concat(t.streamId, "] Track ").concat(r.kind, " Stopped"))), n && n();
  6611. var a = "MEDIASTREAM_TRACK_NOT_FOUND";
  6612. return o.
  6613. default.error("[".concat(t.streamId, "] MEDIASTREAM_TRACK_NOT_FOUND ").concat(e.kind)), i(a)
  6614. }
  6615. if ("audio" == e.kind) {
  6616. var r;
  6617. if (r = t.stream.getAudioTracks()[0]) {
  6618. t.userMuteAudio && (e.enabled = !1);
  6619. var s = new MediaStream;
  6620. s.addTrack(e);
  6621. var c = t.stream && t.stream.getVideoTracks()[0];
  6622. return c && s.addTrack(c), t.stream = s, t.audioLevelHelper = null, t.player && t.player.video && (t.player.video.srcObject = t.stream), o.
  6623. default.debug("[".concat(t.streamId, "] _replaceMediaStreamTrack SUCCESS")), "live" == r.readyState && (r.stop(), o.
  6624. default.debug("[".concat(t.streamId, "] Track ").concat(r.kind, " Stopped"))), n && n()
  6625. }
  6626. a = "MEDIASTREAM_TRACK_NOT_FOUND";
  6627. return o.
  6628. default.error("[".concat(t.streamId, "] MEDIASTREAM_TRACK_NOT_FOUND ").concat(e.kind)), i(a)
  6629. }
  6630. a = "INVALID_TRACK_TYPE";
  6631. return o.
  6632. default.error("[".concat(t.streamId, "] _replaceMediaStreamTrack ").concat(a, " ").concat(e.kind)), i && i(a)
  6633. }
  6634. a = "NO_STREAM_FOUND";
  6635. return o.
  6636. default.error("[".concat(t.streamId, "] _replaceMediaStreamTrack ").concat(a)), i && i(a)
  6637. }, t.replaceTrack = function(e, i, a) {
  6638. var r = s.b.reportApiInvoke(t.sid, {
  6639. callback: function(e, t) {
  6640. if (e) return a && a(e);
  6641. i && i(t)
  6642. },
  6643. name: "Stream.replaceTrack",
  6644. options: arguments,
  6645. tag: "tracer"
  6646. });
  6647. if (!e || !e.kind) return r("INVALID_TRACK");
  6648. var c = t.checkDualStreamEnabled();
  6649. return c ? r(c) : (t._cleanupAudioMixing(), e.onended || (e.onended = n), t.pc && t.pc.hasSender && t.pc.hasSender(e.kind) ? void t.pc.replaceTrack(e, function() {
  6650. return o.
  6651. default.debug("[".concat(t.streamId, "] PeerConnection.replaceTrack ").concat(e.kind, " SUCCESS")), t._replaceMediaStreamTrack(e, function(e) {
  6652. return r(null, e)
  6653. }, r)
  6654. }, function(n) {
  6655. return o.
  6656. default.error("[".concat(t.streamId, "] PeerConnection.replaceTrack ").concat(e.kind, " Failed ").concat(n)), r(n)
  6657. }) : t._replaceMediaStreamTrack(e, function(e) {
  6658. return r(null, e)
  6659. }, r))
  6660. }, t.setAudioVolume = function(e) {
  6661. var n = s.b.reportApiInvoke(t.sid, {
  6662. name: "Stream.setAudioVolume",
  6663. options: arguments,
  6664. tag: "tracer"
  6665. });
  6666. Object(W.checkValidNumber)(e, "level", 0, 100), t.audioLevel = e, t.player && t.player.setAudioVolume(e), n()
  6667. }, t.getStats = function(e, n, i) {
  6668. var a = [];
  6669. a.push(t._getPCStats(i)), a.push(new Promise(function(e) {
  6670. var n = {};
  6671. t.pc && t.pc.isSubscriber ? null !== window.navigator.userAgent.match("Firefox") && (B(n, "videoReceiveResolutionHeight", t.videoHeight), B(n, "videoReceiveResolutionWidth", t.videoWidth)) : t.pc && !t.pc.isSubscriber && ((Object(m.isSafari)() || Object(m.isFireFox)()) && (B(n, "videoSendResolutionHeight", t.videoHeight), B(n, "videoSendResolutionWidth", t.videoWidth)), (Object(m.isSafari)() || Object(m.isFireFox)()) && t.uplinkStats && B(n, "videoSendPacketsLost", t.uplinkStats.uplink_cumulative_lost)), e(n)
  6672. })), a.push(new Promise(function(e) {
  6673. var n = {};
  6674. return t.traffic_stats && t.pc && t.pc.isSubscriber ? (B(n, "accessDelay", t.traffic_stats.access_delay), B(n, "endToEndDelay", t.traffic_stats.e2e_delay), B(n, "videoReceiveDelay", t.traffic_stats.video_delay), B(n, "audioReceiveDelay", t.traffic_stats.audio_delay)) : t.traffic_stats && t.pc && !t.pc.isSubscriber && B(n, "accessDelay", t.traffic_stats.access_delay), e(n)
  6675. })), Promise.all(a).then(function(n) {
  6676. for (var i = {}, a = n.length - 1; a >= 0; a--) {
  6677. var r = n[a];
  6678. h()(i, r)
  6679. }
  6680. e && setTimeout(e.bind(t, i), 0)
  6681. }).
  6682. catch (function(e) {
  6683. n && setTimeout(n.bind(t, e), 0)
  6684. })
  6685. }, t._getPCStats = function(e) {
  6686. return new Promise(function(n, i) {
  6687. if (!t.pc || "established" !== t.pc.state || !t.pc.getStats) {
  6688. return i("PEER_CONNECTION_NOT_ESTABLISHED")
  6689. }
  6690. t.pc.getStats(function(e) {
  6691. if (!t.pc || "established" !== t.pc.state || !t.pc.getStats) {
  6692. return i("PEER_CONNECTION_STATE_CHANGE")
  6693. }
  6694. var a = t.pc.isSubscriber ?
  6695. function(e) {
  6696. var t = {};
  6697. return e.forEach(function(e) {
  6698. e.id && (-1 === e.id.indexOf("recv") && -1 === e.id.indexOf("inbound_rtp") && -1 === e.id.indexOf("inbound-rtp") && -1 === e.id.indexOf("InboundRTP") || ("audio" === e.mediaType ? (B(t, "audioReceiveBytes", e.bytesReceived), B(t, "audioReceivePackets", e.packetsReceived), B(t, "audioReceivePacketsLost", e.packetsLost)) : (B(t, "videoReceiveBytes", e.bytesReceived), B(t, "videoReceivePacketsLost", e.packetsLost), B(t, "videoReceivePackets", e.packetsReceived), B(t, "videoReceiveFrameRate", e.googFrameRateReceived), B(t, "videoReceiveDecodeFrameRate", e.googFrameRateDecoded), B(t, "videoReceiveResolutionWidth", e.googFrameWidthReceived), B(t, "videoReceiveResolutionHeight", e.googFrameHeightReceived))))
  6699. }), t
  6700. }(e) : function(e) {
  6701. var t = {};
  6702. return e.forEach(function(e) {
  6703. e.id && (-1 === e.id.indexOf("send") && -1 === e.id.indexOf("outbound_rtp") && -1 === e.id.indexOf("OutboundRTP") || ("audio" === e.mediaType ? (B(t, "audioSendBytes", e.bytesSent), B(t, "audioSendPackets", e.packetsSent), B(t, "audioSendPacketsLost", e.packetsLost)) : (B(t, "videoSendBytes", e.bytesSent), B(t, "videoSendPackets", e.packetsSent), B(t, "videoSendPacketsLost", e.packetsLost), B(t, "videoSendFrameRate", e.googFrameRateSent), B(t, "videoSendResolutionWidth", e.googFrameWidthSent), B(t, "videoSendResolutionHeight", e.googFrameHeightSent))))
  6704. }), t
  6705. }(e);
  6706. return n(a)
  6707. }, e)
  6708. }).then(function(e) {
  6709. return t.pc.isSubscriber ? (Object(m.isFireFox)() || Object(m.isSafari)()) && (e.videoReceiveResolutionHeight && "0" !== e.videoReceiveResolutionHeight || e.videoReceiveResolutionWidth && "0" !== e.videoReceiveResolutionWidth || (B(e, "videoReceiveResolutionHeight", t.videoHeight), B(e, "videoReceiveResolutionWidth", t.videoWidth))) : ((Object(m.isSafari)() || Object(m.isFireFox)()) && (e.videoSendResolutionHeight && "0" !== e.videoSendResolutionHeight || e.videoSendResolutionWidth && "0" !== e.videoSendResolutionWidth || (B(e, "videoSendResolutionHeight", t.videoHeight), B(e, "videoSendResolutionWidth", t.videoWidth))), (Object(m.isSafari)() || Object(m.isFireFox)()) && t.uplinkStats && B(e, "videoSendPacketsLost", t.uplinkStats.uplink_cumulative_lost)), Promise.resolve(e)
  6710. })
  6711. }, t.getAudioLevel = function() {
  6712. if (t.audioLevelHelper) return t.audioLevelHelper.getAudioLevel();
  6713. if (t.stream) {
  6714. if (0 !== t.stream.getAudioTracks().length) return t.audioLevelHelper = new F.audioLevelHelper(t.stream), t.audioLevelHelper.getAudioLevel();
  6715. o.
  6716. default.warning("[".concat(t.streamId, "] can't get audioLevel beacuse no audio trace in stream"))
  6717. } else o.
  6718. default.warning("[".concat(t.streamId, "] can't get audioLevel beacuse no stream exist"))
  6719. }, t.setVideoProfile("480P"), t._switchVideoDevice = function(e, n, i) {
  6720. if (e === t.cameraId) return n && n();
  6721. var a = {
  6722. video: h()({}, t.videoConstraint, {
  6723. deviceId: {
  6724. exact: e
  6725. }
  6726. }),
  6727. audio: !1
  6728. };
  6729. o.
  6730. default.debug("[".concat(t.streamId, "] ").concat(a)), j(a, function(a) {
  6731. try {
  6732. var r = function() {
  6733. t.isPlaying() && (t.stop(), t.elementID && t.play(t.elementID, t.playOptions)), t.cameraId = e, t.videoConstraint.deviceId = {
  6734. exact: e
  6735. }, t.userMuteVideo && (t.stream.getVideoTracks()[0].enabled = !1), be.restoreVideoEffect(t), n && n()
  6736. };
  6737. be.disableVideoEffect(t).then(function() {
  6738. Object(m.isSafari)() ? t.replaceTrack(a.getVideoTracks()[0], r, i) : (t.removeTrack(t.stream.getVideoTracks()[0]), t.addTrack(a.getVideoTracks()[0]), r())
  6739. })
  6740. } catch (e) {
  6741. return i && i(e)
  6742. }
  6743. }, function(e) {
  6744. return i && i(e)
  6745. })
  6746. }, t._switchAudioDevice = function(e, n, i) {
  6747. if (e === t.microphoneId) return n && n();
  6748. var a = {
  6749. video: !1,
  6750. audio: h()({}, t.audioConstraint, {
  6751. deviceId: {
  6752. exact: e
  6753. }
  6754. })
  6755. };
  6756. o.
  6757. default.debug("[".concat(t.streamId, "] "), a), j(a, function(a) {
  6758. var r = function() {
  6759. t._cleanupAudioMixing(), t.userMuteAudio && (t.stream.getAudioTracks()[0].enabled = !1), t.isPlaying() && (t.stop(), t.elementID && t.play(t.elementID)), t.microphoneId = e, t.audioConstraint.deviceId = {
  6760. exact: e
  6761. }, n && n()
  6762. };
  6763. try {
  6764. Object(m.isSafari)() ? t.replaceTrack(a.getAudioTracks()[0], r, i) : (t.removeTrack(t.stream.getAudioTracks()[0]), t.addTrack(a.getAudioTracks()[0]), r())
  6765. } catch (e) {
  6766. return i && i(e)
  6767. }
  6768. }, function(e) {
  6769. return i && i(e)
  6770. })
  6771. }, t.switchDevice = function(e, n, i, a) {
  6772. var r = s.b.reportApiInvoke(t.sid, {
  6773. callback: function(e, t) {
  6774. if (e) return a && a(e);
  6775. i && i(t)
  6776. },
  6777. name: "Stream.switchDevice",
  6778. options: arguments,
  6779. tag: "tracer"
  6780. });
  6781. Object(W.checkValidString)(n, "deviceId");
  6782. var c = function() {
  6783. return t.inSwitchDevice = !1, r()
  6784. },
  6785. d = function(e) {
  6786. t.inSwitchDevice = !1, o.
  6787. default.error("[".concat(t.streamId, "] "), e), r(e)
  6788. };
  6789. if (t.inSwitchDevice) return r("Device switch is in process.");
  6790. if (t.inSwitchDevice = !0, !t.local) return d("Only the local stream can switch the device.");
  6791. if (t.screen && "video" === e) return d("The device cannot be switched during screen-sharing.");
  6792. if (t.videoSource || t.audioSource) return d("The device cannot be switched when using videoSource or audioSource.");
  6793. if (t.lowStream) return d("The device cannot be switched when using lowstream.");
  6794. var u = !1;
  6795. for (var l in t.audioMixing.sounds) {
  6796. if (t.audioMixing.sounds[l].state !== t.audioMixing.states.IDLE) {
  6797. u = !0;
  6798. break
  6799. }
  6800. }
  6801. if (t.audioMixing.audioContextInited && u) return d("The device cannot be switched when using audio Mixing.");
  6802. H.getDeviceById(n, function() {
  6803. if ("video" === e) t._switchVideoDevice(n, c, d);
  6804. else {
  6805. if ("audio" !== e) return d("Invalid type.");
  6806. t._switchAudioDevice(n, c, d)
  6807. }
  6808. }, function() {
  6809. return d("The device does not exist.")
  6810. })
  6811. }, t
  6812. },
  6813. De = a(20),
  6814. ke = a(8),
  6815. Le = a.n(ke),
  6816. Me = ["live", "rtc", "web", "interop", "h264_interop", "web-only"],
  6817. Pe = ["vp8", "h264"],
  6818. xe = ["aes-128-xts", "aes-256-xts", "aes-128-ecb"],
  6819. Ue = a(21),
  6820. Ve = a.n(Ue),
  6821. je = function(e) {
  6822. e && e.apply(this, [].slice.call(arguments, 1))
  6823. },
  6824. Fe = a(10),
  6825. Be = function(e) {
  6826. var t = c(e);
  6827. t.needReconnect = !0, t.isTimeout = !1, t.isInit = !0, t.sendbytes = 0, t.recvbytes = 0, t.startTime = Date.now(), t.lastMsgTime = null, t.clientId = e.clientId, t.hostIndex = 0, t.requestID = 0, e.host instanceof Array ? t.host = e.host : t.host = [e.host], t.getSendBytes = function() {
  6828. return t.sendbytes
  6829. }, t.getRecvBytes = function() {
  6830. return t.recvbytes
  6831. }, t.getDuration = function() {
  6832. return Math.ceil((Date.now() - t.startTime) / 1e3)
  6833. }, t.getURL = function() {
  6834. return t.connection.url
  6835. }, t.reconnect = function() {
  6836. t.isInit = !0, t.creatConnection()
  6837. }, t.connectNext = function() {
  6838. t.isInit = !0, ++t.hostIndex, o.
  6839. default.debug("[" + t.clientId + "] Gateway length:" + t.host.length + " current index:" + t.hostIndex), t.hostIndex >= t.host.length ? t.dispatchEvent(p({
  6840. type: "recover"
  6841. })):
  6842. t.creatConnection()
  6843. }, t.replaceHost = function(e) {
  6844. t.host = e || t.host, t.hostIndex = 0, t.creatConnection()
  6845. }, t.creatConnection = function() {
  6846. if (t.needReconnect = !0, o.
  6847. default.debug("[" + t.clientId + "] start connect:" + t.host[t.hostIndex]), t.lts = (new Date).getTime(), t.connection = new WebSocket("wss://" + t.host[t.hostIndex]), t.connection.binaryType = "arraybuffer", t.turnConfig = {}, t.connection.url) {
  6848. var n = t.connection.url.match(/wss\:\/\/([^:]+):(\d+)/);
  6849. if (n) t.turnConfig.url = n[1], Object(r.getParameter)("TURN_ENABLE_TCP") && (t.turnConfig.tcpport = parseInt(n[2]) + 30), Object(r.getParameter)("TURN_ENABLE_UDP") && (t.turnConfig.udpport = parseInt(n[2]) + 30);
  6850. else {
  6851. var i = t.host[t.hostIndex].split(":");
  6852. t.turnConfig.url = i[0], Object(r.getParameter)("TURN_ENABLE_TCP") && (t.turnConfig.tcpport = parseInt(i[1]) + 30), Object(r.getParameter)("TURN_ENABLE_UDP") && (t.turnConfig.udpport = parseInt(i[1]) + 30)
  6853. }
  6854. }
  6855. t.connection.onopen = function(e) {
  6856. o.
  6857. default.debug("[" + t.clientId + "] websockect opened: " + t.host[t.hostIndex]), t.needReconnect = !0, t.isTimeout = !1, t.isInit = !1, t.sendbytes = 0, t.recvbytes = 0, t.startTime = Date.now(), Object(Fe.resetHTTPByetsCount)(), clearTimeout(t.timeoutCheck), t.dispatchEvent(p({
  6858. type: "onopen",
  6859. event: e,
  6860. socket: t
  6861. }))
  6862. }, t.connection.onmessage = function(e) {
  6863. if (e.data instanceof ArrayBuffer) t.dispatchEvent({
  6864. type: "onBinaryData",
  6865. data: e.data
  6866. });
  6867. else {
  6868. t.recvbytes += Object(F.lengthInUtf8Bytes)(e.data);
  6869. var n = JSON.parse(e.data);
  6870. t.lastMsgTime = Date.now(), n.hasOwnProperty("_id") ? t.dispatchEvent(p({
  6871. type: n._id,
  6872. msg: n
  6873. })) : n.hasOwnProperty("_type") && t.dispatchSocketEvent(p({
  6874. type: n._type,
  6875. msg: n._message
  6876. }))
  6877. }
  6878. }, t.connection.onclose = function(n) {
  6879. t.needReconnect ? t.isTimeout || t.isInit ? (o.
  6880. default.debug("[" + t.clientId + "] websockect connect timeout"), s.b.joinGateway(e.sid, {
  6881. lts: t.lts,
  6882. succ: !1,
  6883. ec: "timeout",
  6884. addr: t.connection.url
  6885. }), t.connectNext()) : t.dispatchEvent(p({
  6886. type: "disconnect",
  6887. event: n
  6888. })) : (o.
  6889. default.debug("[" + t.clientId + "] websockect closeed"), je(e.onFailure, n), clearTimeout(t.timeoutCheck), t.dispatchEvent(p({
  6890. type: "close",
  6891. event: n
  6892. })), t.connection.onopen = void 0, t.connection.onclose = void 0, t.connection.onerror = void 0, t.connection.onmessage = void 0, t.connection = void 0)
  6893. }, t.connection.onerror = function(e) {}, setTimeout(function() {
  6894. t.connection && t.connection.readyState != WebSocket.OPEN && (t.isTimeout = !0, t.connection.close())
  6895. }, 5e3)
  6896. }, t.creatConnection(), t.sendMessage = function(e, n) {
  6897. if (t.connection && t.connection.readyState == WebSocket.OPEN) {
  6898. var i = JSON.stringify(e);
  6899. t.sendbytes += Object(F.lengthInUtf8Bytes)(i), t.connection.send(i)
  6900. } else n({
  6901. error: "Gateway not connected"
  6902. })
  6903. }, t.disconnect = function() {
  6904. t.needReconnect = !0, t.connection.close()
  6905. }, t.close = function() {
  6906. t.needReconnect = !1, t.connection.onclose = void 0, t.connection.close()
  6907. }, t.sendSignalCommand = function(e, n) {
  6908. e._id = "_request_" + t.requestID, t.requestID += 1, "publish_stats" !== e._type && "subscribe_stats" !== e._type && "publish_stats_low" !== e._type && t.on(e._id, function(i) {
  6909. i.msg && n && n(i.msg._result, i.msg.message), delete t.dispatcher.eventListeners[e._id]
  6910. }), t.sendMessage(e, function(e) {
  6911. e.reason = "NOT_CONNECTED", n && n(e.reason, e)
  6912. })
  6913. }, t.requests = [];
  6914. var n = function(e) {
  6915. var n = t.requests.findIndex(function(t) {
  6916. return t.id === e.type
  6917. });
  6918. if (n >= 0) var i = t.requests.splice(n, 1)[0];
  6919. i && t.dispatcher.eventListeners[e.type] ? (delete t.dispatcher.eventListeners[e.type], e.msg && i.callback && i.callback(e.msg._result, e.msg._message)) : o.
  6920. default.warning("Detached Response", e.type, e.msg)
  6921. };
  6922. return t.sendRequest = function(e, i) {
  6923. e = h()({
  6924. _id: "_request_" + t.requestID
  6925. }, e), t.requestID += 1;
  6926. var a = {
  6927. id: e._id,
  6928. timeoutCounter: 0,
  6929. stalledAt: Date.now(),
  6930. message: e,
  6931. callback: i
  6932. };
  6933. t.requests.push(a), t.addEventListener(e._id, n), t.sendMessage(e, function(e) {
  6934. var n = this,
  6935. i = t.requests.findIndex(function(e) {
  6936. return e.id === n.id
  6937. });
  6938. i >= 0 && (n = t.requests.splice(i, 1)[0]), n && t.dispatcher.eventListeners[e.type] ? (delete t.dispatcher.eventListeners[e.type], e.reason = "NOT_CONNECTED", n.callback && n.callback(e.reason, e)) : o.
  6939. default.warning("handleSendError", n)
  6940. }.bind(a))
  6941. }, t.checkRequestTimeout = function() {
  6942. for (var e = Math.ceil(Object(r.getParameter)("SIGNAL_REQUEST_TIMEOUT") / Object(r.getParameter)("SIGNAL_REQUEST_WATCH_INTERVAL")), n = t.requests.length - 1; n >= 0; n--) {
  6943. var i = t.requests[n];
  6944. i.timeoutCounter >= e ? (t.requests.splice(n, 1), o.
  6945. default.error("Request Timeout", i.timeoutCounter, i.message), i.callback && i.callback("TIMEOUT")) : i.timeoutCounter++
  6946. }
  6947. }, clearInterval(t.requestTimer), t.requestTimer = setInterval(t.checkRequestTimeout, Object(r.getParameter)("SIGNAL_REQUEST_WATCH_INTERVAL")), t.sendReport = function(e) {
  6948. t.sendMessage(e, function() {})
  6949. }, t
  6950. },
  6951. He = function(e, t) {
  6952. var n = {
  6953. connect: function() {
  6954. t.host = e, n.signal = Be(t), n.on = n.signal.on, n.dispatchEvent = n.signal.dispatchEvent, n.signal.on("onopen", function(e) {
  6955. n.signal.onEvent = function(e) {
  6956. n.dispatchEvent(p({
  6957. type: e.event,
  6958. msg: e
  6959. }))
  6960. }, n.dispatchEvent(p({
  6961. type: "connect",
  6962. msg: e
  6963. }))
  6964. }), n.signal.on("onError", function(e) {
  6965. var t = e.msg;
  6966. onError(t.code, "error")
  6967. })
  6968. },
  6969. getLastMsgTime: function() {
  6970. return n.signal && n.signal.lastMsgTime
  6971. },
  6972. getSendBytes: function() {
  6973. return n.signal.getSendBytes()
  6974. },
  6975. getRecvBytes: function() {
  6976. return n.signal.getRecvBytes()
  6977. },
  6978. getDuration: function() {
  6979. return n.signal.getDuration()
  6980. },
  6981. disconnect: function() {
  6982. n.signal.disconnect()
  6983. },
  6984. close: function() {
  6985. n.signal.close()
  6986. },
  6987. getURL: function() {
  6988. return n.signal.getURL()
  6989. },
  6990. reconnect: function() {
  6991. n.signal.reconnect()
  6992. },
  6993. connectNext: function() {
  6994. n.signal.connectNext()
  6995. },
  6996. replaceHost: function(e) {
  6997. n.signal.replaceHost(e)
  6998. },
  6999. emitSimpleMessage: function(e, t) {
  7000. n.signal.sendSignalCommand(e, t)
  7001. },
  7002. emitRequest: function(e, t) {
  7003. n.signal.sendRequest(e, t)
  7004. },
  7005. emitReport: function(e) {
  7006. n.signal.sendReport(e)
  7007. }
  7008. };
  7009. return n.connect(), n
  7010. },
  7011. We = function(e, t) {
  7012. var n = !1,
  7013. i = 0,
  7014. a = {
  7015. command: "convergeAllocateEdge",
  7016. sid: e.sid,
  7017. appId: e.appId,
  7018. token: e.token,
  7019. uid: e.uid,
  7020. cname: e.cname,
  7021. ts: Math.floor(Date.now() / 1e3),
  7022. version: r.VERSION,
  7023. seq: 0,
  7024. requestId: 1
  7025. };
  7026. Object(r.getParameter)("PROXY_CS").map(function(c) {
  7027. var d = (new Date).getTime();
  7028. Ge("https://" + c + "/api/v1", a, function(a, u) {
  7029. if (a) return o.
  7030. default.debug("[" + e.clientId + "] Request proxy server failed: ", a), i++, s.b.requestProxyAppCenter(e.sid, {
  7031. lts: d,
  7032. succ: !1,
  7033. APAddr: c,
  7034. workerManagerList: null,
  7035. ec: JSON.stringify(a),
  7036. response: JSON.stringify({
  7037. err: a,
  7038. res: u
  7039. })
  7040. }), void(i >= Object(r.getParameter)("PROXY_CS").length && t && t("Get proxy server failed: request all failed"));
  7041. if (!n) if ((u = JSON.parse(u)).json_body) {
  7042. var l = JSON.parse(u.json_body);
  7043. if (o.
  7044. default.debug("[" + e.clientId + "] App return:", l.servers), 200 !== l.code) {
  7045. a = "Get proxy server failed: response code [" + l.code + "], reason [ " + l.reason + "]";
  7046. o.
  7047. default.debug("[" + e.clientId + "] " + a), s.b.requestProxyAppCenter(e.sid, {
  7048. lts: d,
  7049. succ: !1,
  7050. APAddr: c,
  7051. workerManagerList: null,
  7052. ec: a,
  7053. response: JSON.stringify({
  7054. err: a,
  7055. res: u
  7056. })
  7057. })
  7058. } else {
  7059. n = !0;
  7060. var p = Ye(l.servers);
  7061. s.b.requestProxyAppCenter(e.sid, {
  7062. lts: d,
  7063. succ: !0,
  7064. APAddr: c,
  7065. workerManagerList: JSON.stringify(p),
  7066. ec: null,
  7067. response: JSON.stringify({
  7068. res: u
  7069. })
  7070. }), t && t(null, p)
  7071. }
  7072. } else o.
  7073. default.debug("[" + e.clientId + "] Get proxy server failed: no json_body"), s.b.requestProxyAppCenter(e.sid, {
  7074. lts: d,
  7075. succ: !1,
  7076. APAddr: c,
  7077. workerManagerList: null,
  7078. ec: "Get proxy server failed: no json_body",
  7079. response: JSON.stringify({
  7080. res: u
  7081. })
  7082. })
  7083. })
  7084. })
  7085. },
  7086. Ge = function(e, t, n) {
  7087. var i = {
  7088. service_name: "webrtc_proxy",
  7089. json_body: JSON.stringify(t)
  7090. };
  7091. Object(Fe.post)(e, i, function(e) {
  7092. n && n(null, e)
  7093. }, function(e) {
  7094. n && n(e)
  7095. }, {
  7096. "X-Packet-Service-Type": 0,
  7097. "X-Packet-URI": 61
  7098. })
  7099. },
  7100. qe = function(e, t, n) {
  7101. var i = !1,
  7102. a = 0,
  7103. r = {
  7104. command: "request",
  7105. gatewayType: "http",
  7106. appId: e.appId,
  7107. cname: e.cname,
  7108. uid: e.uid + "",
  7109. sdkVersion: "2.3.1",
  7110. sid: e.sid,
  7111. seq: 1,
  7112. ts: +new Date,
  7113. requestId: 3,
  7114. clientRequest: {
  7115. appId: e.appId,
  7116. cname: e.cname,
  7117. uid: e.uid + "",
  7118. sid: e.sid
  7119. }
  7120. };
  7121. t.map(function(c) {
  7122. var d = (new Date).getTime();
  7123. !
  7124. function(e, t, n) {
  7125. Object(Fe.post)(e, t, function(e) {
  7126. n && n(null, e)
  7127. }, function(e) {
  7128. n && n(e)
  7129. })
  7130. }("https://" + c + ":4000/v2/machine", r, function(r, u) {
  7131. if (r) return o.
  7132. default.debug("[" + e.clientId + "] Request worker manager failed: ", r), a++, s.b.requestProxyWorkerManager(e.sid, {
  7133. lts: d,
  7134. succ: !1,
  7135. workerManagerAddr: c,
  7136. ec: JSON.stringify(r),
  7137. response: JSON.stringify({
  7138. res: u
  7139. })
  7140. }), void(a >= t.length && n && n("requeet worker manager server failed: request failed"));
  7141. if (!i) {
  7142. if (!(u = JSON.parse(u)).serverResponse) return n && n("requeet worker manager server failed: serverResponse is undefined");
  7143. i = !0, s.b.requestProxyWorkerManager(e.sid, {
  7144. lts: d,
  7145. succ: !0,
  7146. workerManagerAddr: c,
  7147. ec: JSON.stringify(r),
  7148. response: JSON.stringify({
  7149. res: u
  7150. })
  7151. }), n && n(null, {
  7152. address: c,
  7153. serverResponse: u.serverResponse
  7154. })
  7155. }
  7156. })
  7157. })
  7158. },
  7159. Ye = function(e) {
  7160. if (!e || [] instanceof Array == !1) return [];
  7161. var t = [];
  7162. return e.forEach(function(e) {
  7163. var n;
  7164. e.address && e.tcp ? (e.address.match(/^[\.\:\d]+$/) ? n = "".concat(e.address.replace(/[^\d]/g, "-"), ".edge.agora.io") : (o.
  7165. default.info("[" + joinInfo.clientId + "] " + "Cannot recognized as IP address ".concat(e.address, ". Used As Host instead")), n = "".concat(e.address, ":").concat(e.tcp)), t.push(n)) : o.
  7166. default.error("[" + joinInfo.clientId + "] Invalid address format ", e)
  7167. }), t
  7168. },
  7169. Je = function(e, t) {
  7170. var n = h()({}, e),
  7171. i = Object(r.getParameter)("CDS_AP"),
  7172. a = [],
  7173. o = !1;
  7174. (i = i.map(function(e) {
  7175. return n.proxyServer ? "https://".concat(n.proxyServer, "/ap/?url=").concat(e + "/api/v1") : "https://".concat(e, "/api/v1?action=config")
  7176. })).map(function(e) {
  7177. !
  7178. function(e, t, n) {
  7179. var i = {
  7180. flag: 64,
  7181. cipher_method: 0,
  7182. timeout: 1e3,
  7183. features: t
  7184. };
  7185. Object(Fe.post)(e, i, function(e) {
  7186. try {
  7187. var t = JSON.parse(e);
  7188. n && n(null, t)
  7189. } catch (e) {
  7190. n && n(e)
  7191. }
  7192. n && n(null, e)
  7193. }, function(e) {
  7194. n && n(e)
  7195. }, {
  7196. "X-Packet-Service-Type": 0,
  7197. "X-Packet-URI": 54
  7198. })
  7199. }(e, n, function(e, n) {
  7200. o || (e ? (a.push(e), a.length >= i.length && t && t("ALL_REQUEST_FAILED")) : (o = !0, t && t(null, n)))
  7201. })
  7202. })
  7203. },
  7204. Ke = {},
  7205. ze = {},
  7206. Xe = function(e, t, n, i) {
  7207. var a = (new Date).getTime(),
  7208. r = t,
  7209. c = "";
  7210. t.multiIP && t.multiIP.gateway_ip && (c = {
  7211. vocs_ip: [t.multiIP.uni_lbs_ip],
  7212. vos_ip: [t.multiIP.gateway_ip]
  7213. });
  7214. var d = {
  7215. opid: 133,
  7216. flag: 4096,
  7217. ts: +new Date,
  7218. key: t.token,
  7219. cname: t.cname,
  7220. sid: t.sid,
  7221. detail: {
  7222. 6: t.stringUid
  7223. },
  7224. uid: t.uid || 0
  7225. };
  7226. c && (d.detail[5] = JSON.stringify(c)), Object(Fe.post)(e + "".concat(-1 === e.indexOf("?") ? "?" : "&", "action=wrtc_gateway"), d, function(c) {
  7227. try {
  7228. var d = JSON.parse(c);
  7229. d.res && (d = d.res);
  7230. var u = d.code
  7231. } catch (e) {
  7232. var l = "requestChooseServer failed with unexpected body " + c;
  7233. return o.
  7234. default.error("[" + r.clientId + "]", l), i(l)
  7235. }
  7236. if (u) {
  7237. var p = I.APErrorCode[d.code] || u;
  7238. return s.b.joinChooseServer(t.sid, {
  7239. lts: a,
  7240. succ: !1,
  7241. csAddr: e,
  7242. serverList: null,
  7243. ec: p
  7244. }), i("Get server node failed [" + p + "]", e, p)
  7245. }
  7246. var f = [],
  7247. m = [".agora.io", ".agoraio.cn"],
  7248. g = 0;
  7249. if (e.indexOf(m[1]) > -1 && (g = 1), d.addresses.forEach(function(e) {
  7250. var t;
  7251. e.ip && e.port ? (e.ip.match(/^[\.\:\d]+$/) ? t = "".concat(e.ip.replace(/[^\d]/g, "-"), ".edge").concat(m[g++ % m.length], ":").concat(e.port) : (o.
  7252. default.info("[" + r.clientId + "] " + "Cannot recognized as IP address ".concat(e.ip, ". Used As Host instead")), t = "".concat(e.ip, ":").concat(e.port)), f.push(t)) : o.
  7253. default.error("[" + r.clientId + "] Invalid address format ", e)
  7254. }), !f.length) {
  7255. o.
  7256. default.error("[" + r.clientId + "] Empty Address response", d);
  7257. p = "EMPTY_ADDRESS_RESPONSE";
  7258. return s.b.joinChooseServer(t.sid, {
  7259. lts: a,
  7260. succ: !1,
  7261. csAddr: e,
  7262. serverList: null,
  7263. ec: p
  7264. }), i("Get server node failed [" + p + "]", e, p)
  7265. }
  7266. var v = {
  7267. gateway_addr: f,
  7268. uid: d.uid,
  7269. cid: d.cid,
  7270. vid: d.detail && d.detail[8],
  7271. res: d,
  7272. uni_lbs_ip: d.detail
  7273. };
  7274. return n(v, e)
  7275. }, function(e, n) {
  7276. "timeout" === e.type ? (s.b.joinChooseServer(t.sid, {
  7277. lts: a,
  7278. succ: !1,
  7279. csAddr: n,
  7280. serverList: null,
  7281. ec: "timeout"
  7282. }), i("Connect choose server timeout", n)) : s.b.joinChooseServer(t.sid, {
  7283. lts: a,
  7284. succ: !1,
  7285. csAddr: n,
  7286. serverList: null,
  7287. ec: "server_wrong"
  7288. })
  7289. }, {
  7290. "X-Packet-Service-Type": 0,
  7291. "X-Packet-URI": 69
  7292. })
  7293. },
  7294. Qe = function(e, t, n) {
  7295. var i = !1,
  7296. a = null,
  7297. c = 1,
  7298. d = 1,
  7299. u = null,
  7300. l = e.clientId,
  7301. p = function t(d, p) {
  7302. if (!i) {
  7303. var f = !1,
  7304. g = !1,
  7305. v = [],
  7306. S = m.getBrowserInfo() || {};
  7307. Je({
  7308. device: S.name,
  7309. system: S.os,
  7310. vendor: e.appId,
  7311. version: r.VERSION,
  7312. cname: e.cname,
  7313. sid: e.sid,
  7314. session_id: Object(s.a)(),
  7315. detail: "",
  7316. proxyServer: d
  7317. }, function(t, n) {
  7318. g = !0;
  7319. try {
  7320. var i = Object.keys(n.test_tags)[0],
  7321. a = JSON.parse(n.test_tags[i]);
  7322. u = a[1]
  7323. } catch (e) {
  7324. u = null
  7325. }
  7326. s.b.reportApiInvoke(e.sid, {
  7327. name: "_config-distribute-request",
  7328. options: {
  7329. err: t,
  7330. res: n
  7331. }
  7332. })(), ze[l] !== dt.DISCONNECTED && ze[l] !== dt.DISCONNECTING ? f && p && p(v, u) : o.
  7333. default.debug("[".concat(e.clientId, "] Request config success when connection state is ").concat(ze[l]))
  7334. }), function(e, t, n) {
  7335. for (var i = (new Date).getTime(), a = !1, c = !0, d = function(n, r) {
  7336. if (a) s.b.joinChooseServer(e.sid, {
  7337. lts: i,
  7338. succ: !0,
  7339. csAddr: r,
  7340. serverList: n.gateway_addr,
  7341. cid: n.cid + "",
  7342. uid: n.uid + "",
  7343. ec: null
  7344. }, !1);
  7345. else {
  7346. if (clearTimeout(g), a = !0, o.
  7347. default.debug("[" + e.clientId + "] Get gateway address:", n.gateway_addr), e.proxyServer) {
  7348. for (var c = n.gateway_addr, d = 0; d < c.length; d++) {
  7349. var u = c[d].split(":");
  7350. n.gateway_addr[d] = e.proxyServer + "/ws/?h=" + u[0] + "&p=" + u[1]
  7351. }
  7352. o.
  7353. default.debug("[" + e.clientId + "] Get gateway address:", n.gateway_addr)
  7354. }
  7355. t(n), s.b.joinChooseServer(e.sid, {
  7356. lts: i,
  7357. succ: !0,
  7358. csAddr: r,
  7359. serverList: n.gateway_addr,
  7360. cid: n.cid + "",
  7361. uid: n.uid + "",
  7362. ec: null
  7363. }, !0)
  7364. }
  7365. }, u = function(t, i, a) {
  7366. c && (o.
  7367. default.error("[" + e.clientId + "]", t, i, a), a && -1 === I.JOIN_CS_RETRY_LIST.indexOf(a) && (c = !1, n(a)))
  7368. }, l = Object(r.getParameter)("WEBCS_DOMAIN"), p = 0; p < l.length; ++p) {
  7369. var f;
  7370. if ("string" == typeof l[p]) {
  7371. var m = l[p];
  7372. f = e.proxyServer ? "https://".concat(e.proxyServer, "/ap/?url=").concat(m + "/api/v1") : "https://".concat(m, "/api/v1"), o.
  7373. default.debug("[" + e.clientId + "] " + "Connect to choose_server: ".concat(f)), Xe(f, e, d, u)
  7374. } else o.
  7375. default.error("[" + e.clientId + "] Invalid Host", l[p])
  7376. }
  7377. var g = setTimeout(function() {
  7378. if (!a) for (var t = Object(r.getParameter)("WEBCS_DOMAIN_BACKUP_LIST"), n = 0; n < t.length; ++n) if ("string" == typeof t[n]) {
  7379. var i = t[n];
  7380. f = e.proxyServer ? "https://".concat(e.proxyServer, "/ap/?url=").concat(i + "/api/v1") : "https://".concat(i, "/api/v1"), o.
  7381. default.debug("[" + e.clientId + "] " + "Connect to backup_choose_server: ".concat(f)), Xe(f, e, d, u)
  7382. } else o.
  7383. default.error("[" + e.clientId + "] Invalid Host", t[n])
  7384. }, 1e3);
  7385. setTimeout(function() {
  7386. !a && c && n()
  7387. }, Object(r.getParameter)("WEBCS_BACKUP_CONNECT_TIMEOUT"))
  7388. }(e, function(t) {
  7389. i = !0, f = !0, v = t, clearTimeout(a), ze[l] !== dt.DISCONNECTED && ze[l] !== dt.DISCONNECTING ? g && p && p(v, u) : o.
  7390. default.debug("[".concat(e.clientId, "] Request gateway list success when connection state is ").concat(ze[l]))
  7391. }, function(i) {
  7392. if (i) return o.
  7393. default.info("[" + e.clientId + "] Join failed: " + i), void(n && n(i));
  7394. if (ze[l] === dt.DISCONNECTED || ze[l] === dt.DISCONNECTING) return o.
  7395. default.debug("[".concat(e.clientId, "] Request gateway list falied when connection state is ").concat(ze[l])), void(n && n("OPERATION_ABORT"));
  7396. o.
  7397. default.debug("[" + e.clientId + "] Request gateway list will be restart in " + c + "s"), a = setTimeout(function() {
  7398. t(d, p)
  7399. }, 1e3 * c), Ke[l] = a;
  7400. var s = Object(r.getParameter)("AP_BACKOFF_MAX_TIME");
  7401. c = c >= s ? s:
  7402. 2 * c
  7403. })
  7404. }
  7405. };
  7406. e.useProxyServer ?
  7407. function n() {
  7408. !
  7409. function(e, t) {
  7410. We(e, function(n, i) {
  7411. if (n) return t && t(n);
  7412. o.
  7413. default.debug("[" + e.clientId + "] getProxyServerList: ", i), qe(e, i, t)
  7414. })
  7415. }(e, function(i, c) {
  7416. if (i) {
  7417. o.
  7418. default.debug("[" + e.clientId + "]", i), o.
  7419. default.debug("[" + e.clientId + "] Request proxy will be restart in " + d + "s"), a = setTimeout(function() {
  7420. n()
  7421. }, 1e3 * d), Ke[l] = a;
  7422. var u = Object(r.getParameter)("AP_BACKOFF_MAX_TIME");
  7423. d = d >= u ? u:
  7424. 2 * d
  7425. } else {
  7426. clearTimeout(a);
  7427. var f = c.address;
  7428. e.proxyServer = f, e.turnServer = {
  7429. mode: "manual",
  7430. url: c.address,
  7431. tcpport: c.serverResponse.tcpport || "3433",
  7432. udpport: c.serverResponse.udpport || "3478",
  7433. username: c.serverResponse.username || "test",
  7434. credential: c.serverResponse.password || "111111",
  7435. forceturn: !0
  7436. }, e.turnServer.tcpport += "", e.turnServer.udpport += "", s.b.setProxyServer(f), o.
  7437. default.setProxyServer(f), p(f, t)
  7438. }
  7439. })
  7440. }() : p(null, t)
  7441. },
  7442. $e = function(e, t, n, i) {
  7443. var a = Date.now();
  7444. i = i || t.stringUid;
  7445. var r = {
  7446. sid: t.sid,
  7447. opid: 10,
  7448. appid: t.appId,
  7449. string_uid: i
  7450. };
  7451. return new Promise(function(c, d) {
  7452. Object(Fe.post)(e + "".concat(-1 === e.indexOf("?") ? "?" : "&", "action=stringuid"), r, function(u) {
  7453. try {
  7454. var l = JSON.parse(u),
  7455. p = l.code
  7456. } catch (c) {
  7457. var f = "requestUserAccount failed with unexpected body " + u;
  7458. return o.
  7459. default.error("[" + t.clientId + "]", f), d({
  7460. retryable: !0,
  7461. info: f,
  7462. url: e
  7463. }), n && n.dispatchEvent({
  7464. type: "error",
  7465. reason: "USER_ACCOUNT_BODY_NOT_JSON"
  7466. }), void s.b.reqUserAccount(r.sid, {
  7467. lts: a,
  7468. success: !1,
  7469. serverAddress: e,
  7470. stringUid: i,
  7471. uid: null,
  7472. extend: u,
  7473. errorCode: "USER_ACCOUNT_BODY_NOT_JSON"
  7474. })
  7475. }
  7476. if (p) {
  7477. var m = I.StringUidErrorCode[l.code % 1e4] || "REQ_ACCOUNT_ERR_".concat(p);
  7478. return n && n.dispatchEvent({
  7479. type: "error",
  7480. reason: m
  7481. }), s.b.reqUserAccount(r.sid, {
  7482. lts: a,
  7483. success: !1,
  7484. serverAddress: e,
  7485. stringUid: i,
  7486. uid: null,
  7487. errorCode: m,
  7488. extend: r
  7489. }), d({
  7490. retryable: !1,
  7491. info: f = "Get String Uid Failed [" + m + "]",
  7492. url: e,
  7493. error: m
  7494. })
  7495. }
  7496. var g = l.uid;
  7497. if (!(g > 0 && g < Math.pow(2, 32))) {
  7498. o.
  7499. default.error("[" + t.clientId + "] " + "Invalid Uint Uid ".concat(i, " => ").concat(g), l);
  7500. m = "INVALID_UINT_UID_".concat(g);
  7501. return n && n.dispatchEvent({
  7502. type: "error",
  7503. reason: m
  7504. }), s.b.reqUserAccount(r.sid, {
  7505. lts: a,
  7506. success: !1,
  7507. serverAddress: e,
  7508. stringUid: i,
  7509. uid: null,
  7510. errorCode: m,
  7511. extend: r
  7512. }), d({
  7513. retryable: !0,
  7514. error: m,
  7515. info: "Get String Uid failed [" + m + "]",
  7516. url: e
  7517. })
  7518. }
  7519. c({
  7520. uid: g,
  7521. url: e
  7522. }), s.b.reqUserAccount(r.sid, {
  7523. lts: a,
  7524. success: !0,
  7525. serverAddress: e,
  7526. stringUid: i,
  7527. uid: g,
  7528. errorCode: null,
  7529. extend: r
  7530. })
  7531. }, function(e, t) {
  7532. if ("timeout" === e.type) {
  7533. var o = "USER_ACCOUNT_TIMEOUT";
  7534. n && n.dispatchEvent({
  7535. type: "error",
  7536. reason: o
  7537. }), s.b.reqUserAccount(r.sid, {
  7538. lts: a,
  7539. success: !1,
  7540. serverAddress: t,
  7541. stringUid: i,
  7542. uid: null,
  7543. errorCode: o,
  7544. extend: r
  7545. }), d({
  7546. retryable: !0,
  7547. info: o,
  7548. url: t
  7549. })
  7550. } else {
  7551. var c = "USER_ACCOUNT_SERVER_WRONG_".concat(e.type);
  7552. n && n.dispatchEvent({
  7553. type: "error",
  7554. reason: c
  7555. }), s.b.reqUserAccount(r.sid, {
  7556. lts: a,
  7557. success: !1,
  7558. serverAddress: t,
  7559. stringUid: i,
  7560. uid: null,
  7561. errorCode: c,
  7562. extend: r
  7563. }), d({
  7564. retryable: !0,
  7565. info: c,
  7566. url: t
  7567. })
  7568. }
  7569. }, {
  7570. "X-Packet-Service-Type": 0,
  7571. "X-Packet-URI": 72
  7572. })
  7573. })
  7574. },
  7575. Ze = function(e, t, n) {
  7576. Date.now();
  7577. var a, s = Object(r.getParameter)("ACCOUNT_REGISTER"),
  7578. c = !1,
  7579. d = Object(r.getParameter)("ACCOUNT_REGISTER_RETRY_TIMEOUT"),
  7580. u = null,
  7581. l = null,
  7582. p = new Promise(function() {
  7583. var p = K()(Y.a.mark(function p(f, m) {
  7584. var g, v, S;
  7585. return Y.a.wrap(function(p) {
  7586. for (;;) switch (p.prev = p.next) {
  7587. case 0:
  7588. u = f, l = m, a = 0;
  7589. case 3:
  7590. if (!(a < Object(r.getParameter)("ACCOUNT_REGISTER_RETRY_COUNT_MAX"))) {
  7591. p.next = 33;
  7592. break
  7593. }
  7594. if (!c) {
  7595. p.next = 6;
  7596. break
  7597. }
  7598. return p.abrupt("return");
  7599. case 6:
  7600. return g = s[a % s.length], v = e.proxyServer ? "https://".concat(e.proxyServer, "/ap/?url=").concat(s[i] + "/api/v1") : "https://".concat(g, "/api/v1"), p.prev = 8, p.delegateYield(Y.a.mark(function i() {
  7601. var a;
  7602. return Y.a.wrap(function(i) {
  7603. for (;;) switch (i.prev = i.next) {
  7604. case 0:
  7605. return i.next = 2, $e(v, e, t, n);
  7606. case 2:
  7607. if (a = i.sent, !c) {
  7608. i.next = 5;
  7609. break
  7610. }
  7611. return i.abrupt("return", {
  7612. v: void 0
  7613. });
  7614. case 5:
  7615. c = !0, setTimeout(function() {
  7616. o.
  7617. default.debug("Get UserAccount Successfully", a), u(a)
  7618. }, 0);
  7619. case 7:
  7620. case "end":
  7621. return i.stop()
  7622. }
  7623. }, i, this)
  7624. })(), "t0", 10);
  7625. case 10:
  7626. if (S = p.t0, "object" !== Ae()(S)) {
  7627. p.next = 13;
  7628. break
  7629. }
  7630. return p.abrupt("return", S.v);
  7631. case 13:
  7632. p.next = 30;
  7633. break;
  7634. case 15:
  7635. if (p.prev = 15, p.t1 = p.
  7636. catch (8), !c) {
  7637. p.next = 19;
  7638. break
  7639. }
  7640. return p.abrupt("return");
  7641. case 19:
  7642. if (!p.t1.retryable) {
  7643. p.next = 27;
  7644. break
  7645. }
  7646. return (d = Math.ceil(d * Object(r.getParameter)("ACCOUNT_REGISTER_RETRY_RATIO"))) > Object(r.getParameter)("ACCOUNT_REGISTER_RETRY_TIMEOUT_MAX") && (d = Object(r.getParameter)("ACCOUNT_REGISTER_RETRY_TIMEOUT_MAX")), o.
  7647. default.error("".concat(p.t1.info, " ").concat(p.t1.url, " Will Fetch User Account in ").concat(d / 1e3, " seconds")), p.next = 25, new Promise(function(e) {
  7648. setTimeout(e, d)
  7649. });
  7650. case 25:
  7651. p.next = 30;
  7652. break;
  7653. case 27:
  7654. o.
  7655. default.error("Get UserAccount Error: ".concat(p.t1.info, " ").concat(p.t1.url), p.t1.error), c = !0, l(p.t1);
  7656. case 30:
  7657. a++, p.next = 3;
  7658. break;
  7659. case 33:
  7660. case "end":
  7661. return p.stop()
  7662. }
  7663. }, p, this, [
  7664. [8, 15]
  7665. ])
  7666. }));
  7667. return function(e, t) {
  7668. return p.apply(this, arguments)
  7669. }
  7670. }());
  7671. return p.cancel = function() {
  7672. c || (c = !0, l({
  7673. info: "Request Cancelled",
  7674. retryable: !1
  7675. }))
  7676. }, p.isFinished = function() {
  7677. return c
  7678. }, p
  7679. },
  7680. et = {
  7681. ERR_NO_VOCS_AVAILABLE: "tryNext",
  7682. ERR_NO_VOS_AVAILABLE: "tryNext",
  7683. ERR_JOIN_CHANNEL_TIMEOUT: "tryNext",
  7684. WARN_REPEAT_JOIN: "quit",
  7685. ERR_JOIN_BY_MULTI_IP: "recover",
  7686. WARN_LOOKUP_CHANNEL_TIMEOUT: "tryNext",
  7687. WARN_OPEN_CHANNEL_TIMEOUT: "tryNext",
  7688. ERR_VOM_SERVICE_UNAVAILABLE: "tryNext",
  7689. ERR_TOO_MANY_USERS: "tryNext",
  7690. ERR_MASTER_VOCS_UNAVAILABLE: "tryNext",
  7691. ERR_INTERNAL_ERROR: "tryNext",
  7692. K_SERVICE_NOT_READY: "recover",
  7693. notification_test_recover: "recover",
  7694. notification_test_tryNext: "tryNext",
  7695. notification_test_retry: "retry"
  7696. },
  7697. tt = {
  7698. googActualEncBitrate: "A_aeb",
  7699. googAvailableSendBandwidth: "A_asb",
  7700. googRetransmitBitrate: "A_rb",
  7701. googAvailableReceiveBandwidth: "A_arb",
  7702. googTargetEncBitrate: "A_teb",
  7703. googBucketDelay: "A_bd",
  7704. googTransmitBitrate: "A_tb",
  7705. googCodecName: "A_cn",
  7706. bytesSent: "bytesSent",
  7707. packetsLost: "packetsLost",
  7708. packetsSent: "packetsSent",
  7709. googAdaptationChanges: "A_ac",
  7710. googAvgEncodeMs: "A_aem",
  7711. googEncodeUsagePercent: "A_eup",
  7712. googFirsReceived: "A_fr",
  7713. googFrameHeightInput: "A_fhi",
  7714. googFrameHeightSent: "A_fhs",
  7715. googFrameRateInput: "A_fri",
  7716. googFrameRateSent: "A_frs",
  7717. googFrameWidthInput: "A_fwi",
  7718. googFrameWidthSent: "A_fws",
  7719. googNacksReceived: "A_nr",
  7720. googPlisReceived: "A_pr",
  7721. googRtt: "A_rtt",
  7722. aecDivergentFilterFraction: "A_adff",
  7723. audioInputLevel: "A_ail",
  7724. googEchoCancellationReturnLoss: "A_ecrl",
  7725. googEchoCancellationReturnLossEnhancement: "A_ecrle",
  7726. googResidualEchoLikelihood: "A_rel",
  7727. googResidualEchoLikelihoodRecentMax: "A_relrm",
  7728. googTargetDelayMs: "A_tdm",
  7729. bytesReceived: "bytesReceived",
  7730. packetsReceived: "packetsReceived",
  7731. googDecodeMs: "A_dm",
  7732. googMaxDecodeMs: "A_mdm",
  7733. googRenderDelayMs: "A_rdm",
  7734. googFrameWidthReceived: "A_fwr",
  7735. googFrameHeightReceived: "A_fhr",
  7736. googFrameRateReceived: "A_frr",
  7737. googFrameRateDecoded: "A_frd",
  7738. googFrameRateOutput: "A_fro",
  7739. googJitterBufferMs: "A_jbm",
  7740. googCurrentDelayMs: "A_cdm",
  7741. googMinPlayoutDelayMs: "A_mpdm",
  7742. googNacksSent: "A_ns",
  7743. googPlisSent: "A_ps",
  7744. googFirsSent: "A_fs",
  7745. audioOutputLevel: "A_aol",
  7746. googAccelerateRate: "A_ar",
  7747. googDecodingCNG: "A_dcng",
  7748. googDecodingCTN: "A_dctn",
  7749. googDecodingCTSG: "A_dctsg",
  7750. googDecodingNormal: "A_dn",
  7751. googDecodingPLC: "A_dplc",
  7752. googDecodingPLCCNG: "A_dplccng",
  7753. googExpandRate: "A_er",
  7754. googJitterReceived: "A_jr",
  7755. googPreemptiveExpandRate: "A_per",
  7756. googPreferredJitterBufferMs: "A_pjbm",
  7757. googSecondaryDecodedRate: "A_sdr",
  7758. googSpeechExpandRate: "A_ser",
  7759. uplink_fraction_lost: "B_ufl",
  7760. uplink_cumulative_lost: "B_ucl",
  7761. uplink_available_bandwidth: "B_uab",
  7762. period_fir: "B_fir",
  7763. access_delay: "B_acd",
  7764. uplink_network_quality: "B_unq",
  7765. downlink_network_quality: "B_dnq",
  7766. pub_audio_lost_ratio_400ms: "B_palr4",
  7767. pub_video_lost_ratio_400ms: "B_pvlr4",
  7768. e2e_delay: "B_ed",
  7769. audio_delay: "B_ad",
  7770. video_delay: "B_vd",
  7771. stream_type: "B_st",
  7772. e2e_audio_lost_ratio_400ms: "B_ealr4",
  7773. e2e_video_lost_ratio_400ms: "B_evlr4",
  7774. downlink_estimate_bandwidth: "B_deb"
  7775. },
  7776. nt = {};
  7777. for (var it in tt) {
  7778. var at = tt[it];
  7779. nt[at] && console.error("Key Conflict: ".concat(at, ": ").concat(tt[at], "| ").concat(it)), nt[at] = it
  7780. }
  7781. var rt = function(e) {
  7782. return tt[e] || e
  7783. },
  7784. ot = function(e) {
  7785. return nt[e] || e
  7786. };
  7787. var st = function t(n) {
  7788. var i = !1,
  7789. a = function(e) {
  7790. return {
  7791. _type: "control",
  7792. _message: e
  7793. }
  7794. },
  7795. d = function(e, t) {
  7796. var n = {};
  7797. return Object.keys(t).forEach(function(e) {
  7798. Object(r.getParameter)("STATS_FILTER")[e] || (n[rt(e)] = t[e])
  7799. }), {
  7800. _type: "subscribe_related_stats",
  7801. _message: {
  7802. stream_type: "high",
  7803. stream_id: e,
  7804. stats: n
  7805. }
  7806. }
  7807. },
  7808. g = function(e) {
  7809. return {
  7810. _type: "publish",
  7811. _message: e
  7812. }
  7813. },
  7814. v = function(e, t) {
  7815. var n = {};
  7816. return Object.keys(t).forEach(function(e) {
  7817. Object(r.getParameter)("STATS_FILTER")[e] || (n[rt(e)] = t[e])
  7818. }), {
  7819. _type: "subscribe_stats",
  7820. _message: {
  7821. stream_id: e,
  7822. stats: n
  7823. }
  7824. }
  7825. },
  7826. S = t.DISCONNECTED,
  7827. _ = t.CONNECTING,
  7828. E = t.CONNECTED,
  7829. T = t.DISCONNECTING,
  7830. y = S,
  7831. b = c(n);
  7832. Object.defineProperty(b, "state", {
  7833. set: function(e) {
  7834. var n = y;
  7835. y = e, function(e, t) {
  7836. ze[e] = t
  7837. }(b.clientId, e), n !== e && b.dispatchEvent({
  7838. type: "connection-state-change",
  7839. prevState: t.connetionStateMap[n],
  7840. curState: t.connetionStateMap[e]
  7841. })
  7842. },
  7843. get: function() {
  7844. return y
  7845. }
  7846. }), b.socket = void 0, b.state = S, b.mode = n.mode, b.role = n.role, b.codec = n.codec, b.config = {}, b.timers = {}, b.timer_counter = {}, b.localStreams = {}, b.remoteStreams = {}, b.remoteMuteState = {}, b.attemps = 1, b.p2p_attemps = 1, b.audioLevel = {}, b.activeSpeaker = void 0, b.reconnectMode = "retry", b.rejoinAttempt = 0, b.hasChangeBGPAddress = !1, b.traffic_stats = {}, b.clientId = n.clientId, b.pingpongCounter = 0, b.hasInvokeLeave = !1, b.p2ps = new Map, b.liveStreams = new Map, b.injectLiveStreams = new Map, b.remoteStreamsInChannel = new Set, function(e) {
  7847. var t = je;
  7848. e.makeRequest = function(n, i, a) {
  7849. if (void 0 === e.socket) return o.
  7850. default.debug("[".concat(e.clientId, "] No socket available")), void t(a, I.
  7851. default.INVALID_OPERATION);
  7852. try {
  7853. e.socket.emitRequest(n, function(e, t) {
  7854. var n;
  7855. "success" === e ? "function" == typeof i && i(t) : "function" == typeof a && (n = t && t.error_code && I.GatewayErrorCode[t.error_code] ? I.GatewayErrorCode[t.error_code] : t && t.error_str ? t.error_str : t && t.error_code ? "UNKNOW_ERROR_".concat(t.error_code) : e, a(n, t))
  7856. })
  7857. } catch (i) {
  7858. o.
  7859. default.debug("[".concat(e.clientId, "] Socket emit message failed ").concat(JSON.stringify(n))), o.
  7860. default.debug("[".concat(e.clientId, "] "), i), t(a, I.
  7861. default.SOCKET_ERROR)
  7862. }
  7863. }, e.makeReport = function(t) {
  7864. void 0 === e.socket && o.
  7865. default.debug("[".concat(e.clientId, "] No socket available"));
  7866. try {
  7867. e.socket.emitReport(t)
  7868. } catch (n) {
  7869. o.
  7870. default.debug("[".concat(e.clientId, "] Socket emit report failed ").concat(JSON.stringify(t)))
  7871. }
  7872. }
  7873. }(b), b.inChannelInfo = {
  7874. joinAt: null,
  7875. duration: 0
  7876. }, b._sendMessage = function(e, t) {
  7877. switch (e) {
  7878. case "SubscribeStats":
  7879. b.makeReport(v.apply(void 0, Ve()(t)))
  7880. }
  7881. };
  7882. var R = je;
  7883. b.p2pCounter = Object(F.random)(1e5), b.generateP2PId = function() {
  7884. return ++b.p2pCounter
  7885. }, b.audioVolumeIndication = {
  7886. enabled: !1,
  7887. sortedAudioVolumes: [],
  7888. smooth: 3,
  7889. interval: 2e3
  7890. }, b.remoteVideoStreamTypes = {
  7891. REMOTE_VIDEO_STREAM_HIGH: 0,
  7892. REMOTE_VIDEO_STREAM_LOW: 1,
  7893. REMOTE_VIDEO_STREAM_MEDIUM: 2
  7894. }, b.streamFallbackTypes = {
  7895. STREAM_FALLBACK_OPTION_DISABLED: 0,
  7896. STREAM_FALLBACK_OPTION_VIDEO_STREAM_LOW: 1,
  7897. STREAM_FALLBACK_OPTION_AUDIO_ONLY: 2
  7898. }, b.configPublisher = function(e) {
  7899. b.config = e
  7900. }, b.getGatewayInfo = function(e, t) {
  7901. b.makeRequest({
  7902. _type: "gateway_info"
  7903. }, e, t)
  7904. }, b.setClientRole = function(e, t) {
  7905. o.
  7906. default.debug("[".concat(b.clientId, "] setClientRole to ").concat(e));
  7907. var n = s.b.reportApiInvoke(b.joinInfo.sid, {
  7908. name: "_setClientRole",
  7909. callback: t
  7910. });
  7911. b.makeRequest({
  7912. _type: "set_client_role",
  7913. _message: {
  7914. role: e
  7915. }
  7916. }, function() {
  7917. b.role = e, b.dispatchEvent({
  7918. type: "client-role-changed",
  7919. role: e
  7920. }), n && n(null, {
  7921. role: e
  7922. })
  7923. }, function(t, i) {
  7924. if (i && i.code && (t = I.GatewayErrorCode[i.code] || "UNKNOW_ERROR_" + i.code), "ERR_SET_CLIENT_ROLE_ALREADY_IN_USE" === t) return n && n(null);
  7925. o.
  7926. default.error("set Client role error to " + e + ": " + t), n && n(t)
  7927. })
  7928. }, b.join = function(e, t, i, a) {
  7929. e.useProxyServer && (b.hasChangeBGPAddress = !0);
  7930. var c = (new Date).getTime(),
  7931. d = e.uid;
  7932. if (b.inChannelInfo.joinAt && (b.inChannelInfo.duration += c - b.inChannelInfo.joinAt), b.inChannelInfo.joinAt = c, b.state !== _) return o.
  7933. default.error("[".concat(b.clientId, "] GatewayClient.join Failed: state "), b.state), a && a(I.
  7934. default.INVALID_OPERATION), void s.b.joinGateway(e.sid, {
  7935. lts: c,
  7936. succ: !1,
  7937. ec: I.
  7938. default.INVALID_OPERATION,
  7939. addr:
  7940. null
  7941. });
  7942. if (null != d && parseInt(d) !== d) return o.
  7943. default.error("[".concat(b.clientId, "] Input uid is invalid")), b.state = S, a && a(I.
  7944. default.INVALID_PARAMETER), void s.b.joinGateway(e.sid, {
  7945. lts: c,
  7946. succ: !1,
  7947. ec: I.
  7948. default.INVALID_PARAMETER,
  7949. addr:
  7950. null
  7951. });
  7952. var u = ct.register(b, {
  7953. uid: d,
  7954. cname: e && e.cname
  7955. });
  7956. if (u) return b.state = S, a && a(u), void s.b.joinGateway(e.sid, {
  7957. lts: c,
  7958. succ: !1,
  7959. ec: u,
  7960. addr: null
  7961. });
  7962. b.joinInfo = h()({}, e), b.uid = d, b.key = t, b.pingpongCounter = 0, N(e, function(t) {
  7963. if (b.state === T || b.state === S) return a && a("LEAVE_BEFORE_JOIN_SUCCESS");
  7964. var u, l, f, m;
  7965. b.state = E, o.
  7966. default.debug("[".concat(b.clientId, "] Connected to gateway server")), clearInterval(b.pingTimer), b.pingTimer = setInterval(function() {
  7967. var e = Object(r.getParameter)("PING_PONG_TIME_OUT");
  7968. if (++b.pingpongCounter >= e) {
  7969. var t = Date.now();
  7970. b.socket && o.
  7971. default.warning("PINGPONG Timeout. Last Socket Message: ".concat(t - b.socket.getLastMsgTime(), "ms")), b.socket && b.socket.getLastMsgTime() && t - b.socket.getLastMsgTime() > Object(r.getParameter)("WEBSOCKET_TIMEOUT_MIN") && (b.pingpongCounter = 0, b.socket.close(), b.socket.dispatchEvent(p({
  7972. type: "disconnect",
  7973. event: {
  7974. msg: "PING_PONG_TIME_OUT"
  7975. }
  7976. })))
  7977. }
  7978. var n = Date.now();
  7979. b.makeRequest({
  7980. _type: "ping"
  7981. }, function() {
  7982. b.pingpongCounter = 0;
  7983. var e = Date.now() - n;
  7984. setTimeout(function() {
  7985. Object(r.getParameter)("REPORT_STATS") && b.makeRequest({
  7986. _type: "ping_back",
  7987. _message: {
  7988. pingpongElapse: e
  7989. }
  7990. })
  7991. }, 1e3)
  7992. }, function(e, t) {
  7993. "TIMEOUT" !== e && (o.
  7994. default.error("Ping Error ".concat(e, " ").concat(JSON.stringify(t))), t && t.error_code && b.socket && b.socket.signal && b.socket.signal.connection && b.socket.signal.connection.readyState === WebSocket.OPEN && (o.
  7995. default.info("Disconnecting websocket connection"), b.socket.signal.connection.close()))
  7996. })
  7997. }, 3e3), b.makeRequest((u = {
  7998. role: b.role
  7999. }, l = u.role, f = h()({}, b.joinInfo.apResponse), m = {
  8000. session_id: b.joinInfo.sid,
  8001. app_id: n.appId,
  8002. channel_key: b.key,
  8003. channel_name: b.joinInfo.cname,
  8004. sdk_version: r.VERSION,
  8005. browser: navigator.userAgent,
  8006. process_id: Object(s.a)(),
  8007. mode: b.mode,
  8008. codec: b.codec,
  8009. role: l,
  8010. has_changed_gateway: Object(r.getParameter)("FORCE_CHANGED_GATEWAY_FLAG") || b.hasChangeBGPAddress,
  8011. ap_response: f,
  8012. extend: Object(r.getParameter)("JOIN_EXTEND"),
  8013. details: {}
  8014. }, b.joinInfo.hasOwnProperty("stringUid") && (m.string_uid = b.joinInfo.stringUid), b.joinInfo.aesmode && b.joinInfo.aespassword && (m.aes_mode = b.joinInfo.aesmode, m.aes_secret = b.joinInfo.aespassword), b.socket && b.socket.signal && b.socket.signal && (f.addresses[b.socket.signal.hostIndex] && (m.ap_response.ticket = f.addresses[b.socket.signal.hostIndex].ticket, delete f.addresses), b.joinInfo.turnServer && "auto" === b.joinInfo.turnServer.mode && b.socket.signal.turnConfig && (b.joinInfo.turnServer.url = b.socket.signal.turnConfig.url, b.socket.signal.turnConfig.tcpport && (b.joinInfo.turnServer.tcpport = "" + b.socket.signal.turnConfig.tcpport), b.socket.signal.turnConfig.udpport && (b.joinInfo.turnServer.udpport = "" + b.socket.signal.turnConfig.udpport)), o.
  8015. default.debug("Turn config", b.joinInfo.turnServer)), b.dispatchEvent({
  8016. type: "join-message-hook",
  8017. joinMessage: m
  8018. }, !0), {
  8019. _type: "join",
  8020. _message: m
  8021. }), function(t) {
  8022. s.b.joinGateway(e.sid, {
  8023. lts: c,
  8024. succ: !0,
  8025. ec: null,
  8026. vid: e.vid,
  8027. addr: b.socket.getURL()
  8028. }), b.rejoinAttempt = 0, i && i(t.uid), b.dispatchEvent({
  8029. type: "join"
  8030. }), clearInterval(b.timers.trafficStats), b.timers.trafficStats = setInterval(function() {
  8031. b.makeRequest({
  8032. _type: "traffic_stats"
  8033. }, function(e) {
  8034. var t = {};
  8035. for (var n in e) t[ot(n)] = e[n];
  8036. if (t.peer_delay && t.peer_delay.length) {
  8037. var i = [];
  8038. t.peer_delay.forEach(function(e) {
  8039. var t = {};
  8040. for (var n in e) t[ot(n)] = e[n];
  8041. i.push(t)
  8042. }), t.peer_delay = i
  8043. }
  8044. b.traffic_stats = t;
  8045. var a = b.joinInfo.stringUid,
  8046. r = b.localStreams[d] || b.localStreams[a];
  8047. r && (r.traffic_stats = {
  8048. access_delay: t.access_delay
  8049. }), t.peer_delay && t.peer_delay.forEach(function(e) {
  8050. var n = b.remoteStreams[e.peer_uid];
  8051. n && (n.traffic_stats = {
  8052. access_delay: t.access_delay,
  8053. e2e_delay: e.e2e_delay,
  8054. audio_delay: e.audio_delay,
  8055. video_delay: e.video_delay
  8056. })
  8057. }), b.dispatchEvent({
  8058. type: "after-getTrafficStats",
  8059. trafficStats: t
  8060. })
  8061. })
  8062. }, 3e3)
  8063. }, function(t, n) {
  8064. if (o.
  8065. default.error("[".concat(b.clientId, "] User join failed [").concat(t, "]")), "ERR_JOIN_BY_MULTI_IP" === t) return b.dispatchEvent({
  8066. type: "onMultiIP",
  8067. option: n.option
  8068. });
  8069. et[t] && b.rejoinAttempt < 4 ? b._doWithAction(et[t], i, a) : a && a(t), s.b.joinGateway(e.sid, {
  8070. lts: c,
  8071. succ: !1,
  8072. ec: t,
  8073. addr: b.socket.getURL()
  8074. })
  8075. })
  8076. }, function(t) {
  8077. o.
  8078. default.error("[".concat(b.clientId, "] User join failed [").concat(t, "]")), a && a(t), s.b.joinGateway(e.sid, {
  8079. lts: c,
  8080. succ: !1,
  8081. ec: t,
  8082. addr: b.socket.getURL()
  8083. })
  8084. }), this.remoteMuteState = {}, b.resetAudioVolumeIndication()
  8085. }, b.leave = function(e, t) {
  8086. var n = ct.unregister(b);
  8087. switch (n && o.
  8088. default.debug("[".concat(b.clientId, "] "), n), b.state) {
  8089. case S:
  8090. return o.
  8091. default.debug("[".concat(b.clientId, "] Client Already in DISCONNECTED status")), void R(e);
  8092. case T:
  8093. return o.
  8094. default.debug("[".concat(b.clientId, "] Client Already in DISCONNECTING status")), void R(t, I.
  8095. default.INVALID_OPERATION);
  8096. case _:
  8097. return 1 == b.reconnectingCS ? e && e() : (b.socket.close(), b.socket = void 0, o.
  8098. default.info("[".concat(b.clientId, "] Client connecting, Leave channel success")), b.state = S, e && e())
  8099. }
  8100. for (var i in b.state = T, b.channelMediaConfig && (b.channelMediaRelayController && b.channelMediaRelayController.dispose(), b.channelMediaConfig, b.channelMediaRelayController = null), clearInterval(b.pingTimer), b.timers) b.timers.hasOwnProperty(i) && clearInterval(b.timers[i]);
  8101. for (var i in b.inChannelInfo.joinAt && (b.inChannelInfo.duration += Date.now() - b.inChannelInfo.joinAt, b.inChannelInfo.joinAt = null), b.makeRequest({
  8102. _type: "leave"
  8103. }, function(t) {
  8104. b.socket.close(), b.socket = void 0, o.
  8105. default.info("[".concat(b.clientId, "] Leave channel success")), b.state = S, e && e(t)
  8106. }, function(e) {
  8107. "TIMEOUT" !== e && (o.
  8108. default.error("[".concat(b.clientId, "] Leave Channel Failed"), e), b.state = E, t && t(e))
  8109. }), b.localStreams) if (b.localStreams.hasOwnProperty(i)) {
  8110. var a = b.localStreams[i];
  8111. delete b.localStreams[i], void 0 !== a.pc && (a.pc.close(), a.pc = void 0)
  8112. }
  8113. k()
  8114. }, b.publish = function(e, t, n, i) {
  8115. var c = (new Date).getTime(),
  8116. d = !1;
  8117. if (e.publishLTS = c, "object" !== Ae()(e) || null === e) return o.
  8118. default.error("[".concat(b.clientId, "] Invalid local stream")), i && i(I.
  8119. default.INVALID_LOCAL_STREAM), void s.b.publish(b.joinInfo.sid, {
  8120. lts: c,
  8121. succ: !1,
  8122. audioName: e.hasAudio() && e.audioName,
  8123. videoName: e.hasVideo() && e.videoName,
  8124. screenName: e.hasScreen() && e.screenName,
  8125. ec: I.
  8126. default.INVALID_LOCAL_STREAM
  8127. });
  8128. if (!e.stream && void 0 === e.url) return o.
  8129. default.error("[".concat(b.clientId, "] Invalid local media stream")), i && i(I.
  8130. default.INVALID_LOCAL_STREAM), void s.b.publish(b.joinInfo.sid, {
  8131. lts: c,
  8132. succ: !1,
  8133. audioName: e.hasAudio() && e.audioName,
  8134. videoName: e.hasVideo() && e.videoName,
  8135. screenName: e.hasScreen() && e.screenName,
  8136. ec: I.
  8137. default.INVALID_LOCAL_STREAM
  8138. });
  8139. if (b.state !== E) return o.
  8140. default.error("[".concat(b.clientId, "] User is not in the session")), i && i(I.
  8141. default.INVALID_OPERATION), void s.b.publish(b.joinInfo.sid, {
  8142. lts: c,
  8143. succ: !1,
  8144. audioName: e.hasAudio() && e.audioName,
  8145. videoName: e.hasVideo() && e.videoName,
  8146. screenName: e.hasScreen() && e.screenName,
  8147. ec: I.
  8148. default.INVALID_OPERATION
  8149. });
  8150. var u = e.getAttributes() || {};
  8151. if (e.local && void 0 === b.localStreams[e.getId()] && (e.hasAudio() || e.hasVideo() || e.hasScreen())) {
  8152. var p = b.generateP2PId();
  8153. if (b.p2ps.set(p, e), e.p2pId = p, void 0 !== e.url) w(g({
  8154. state: "url",
  8155. audio: e.hasAudio(),
  8156. video: e.hasVideo(),
  8157. attributes: e.getAttributes()
  8158. }, e.url), function(t, n) {
  8159. "success" === t ? (e.getUserId() !== n && e.setUserId(n), b.localStreams[n] = e, e.onClose = function() {
  8160. b.unpublish(e)
  8161. }) : o.
  8162. default.error("[".concat(b.clientId, "] Publish local stream failed"), t)
  8163. });
  8164. else {
  8165. b.localStreams[e.getId()] = e, e.connectionSpec = {
  8166. callback: function(u) {
  8167. o.
  8168. default.debug("[".concat(b.clientId, "] SDP exchange in publish : send offer -- "), JSON.parse(u)), b.makeRequest(g({
  8169. state: "offer",
  8170. stream_type: 1 == t.streamType ? "low" : "high",
  8171. p2p_id: p,
  8172. sdp: u,
  8173. audio: e.audio || e.screenAudio,
  8174. video: e.screen || e.video,
  8175. screen: e.screen,
  8176. attributes: e.getAttributes(),
  8177. dtx: e.DTX,
  8178. hq: e.highQuality,
  8179. lq: e.lowQuality,
  8180. stereo: e.stereo,
  8181. speech: e.speech,
  8182. codec: b.codec,
  8183. extend: Object(r.getParameter)("PUB_EXTEND")
  8184. }), function(t) {
  8185. e.getUserId() !== t.uid && e.setUserId(t.uid), o.
  8186. default.info("[".concat(b.clientId, "] Local stream published with uid"), t.uid), e.onClose = function() {
  8187. b.unpublish(e)
  8188. }, e._onAudioUnmute = function() {
  8189. b.makeReport(a({
  8190. action: "unmute_local_audio",
  8191. stream_id: e.getId()
  8192. }))
  8193. }, e._onVideoUnmute = function() {
  8194. b.makeReport(a({
  8195. action: "unmute_local_video",
  8196. stream_id: e.getId()
  8197. }))
  8198. }, e._onAudioMute = function() {
  8199. b.makeReport(a({
  8200. action: "mute_local_audio",
  8201. stream_id: e.getId()
  8202. }))
  8203. }, e._onVideoMute = function() {
  8204. b.makeReport(a({
  8205. action: "mute_local_video",
  8206. stream_id: e.getId()
  8207. }))
  8208. }, e.getId() === e.getUserId() && (e.isAudioOn() || e.hasAudio() && (o.
  8209. default.debug("[".concat(b.clientId, "] local stream audio mute")), e._onAudioMute()), e.isVideoOn() || (e.hasVideo() || e.hasScreen()) && (o.
  8210. default.debug("[".concat(b.clientId, "] local stream video mute")), e._onVideoMute())), e.pc.oniceconnectionstatechange = function(t) {
  8211. if ("failed" === t) {
  8212. if (null != b.timers[e.getId()] && (clearInterval(b.timers[e.getId()]), clearInterval(b.timers[e.getId()] + "_RelatedStats")), o.
  8213. default.error("[".concat(b.clientId, "] Publisher connection is lost -- streamId: ").concat(e.getId(), ", p2pId: ").concat(p)), b.p2ps.delete(p), o.
  8214. default.debug("[".concat(b.clientId, "] publish p2p failed: "), b.p2ps), !d) return d = !0, s.b.publish(b.joinInfo.sid, {
  8215. lts: c,
  8216. succ: !1,
  8217. audioName: e.hasAudio() && e.audioName,
  8218. videoName: e.hasVideo() && e.videoName,
  8219. screenName: e.hasScreen() && e.screenName,
  8220. ec: I.
  8221. default.PEERCONNECTION_FAILED
  8222. }), b.dispatchEvent(l({
  8223. type: "pubP2PLost",
  8224. stream: e
  8225. })), i && i(I.
  8226. default.PEERCONNECTION_FAILED);
  8227. b.dispatchEvent(l({
  8228. type: "pubP2PLost",
  8229. stream: e
  8230. }))
  8231. } else if ("connected" === t && (o.
  8232. default.debug("[".concat(b.clientId, "] publish p2p connected: "), b.p2ps), e._isAudioMuted() ? b.makeReport(a({
  8233. action: "mute_local_audio",
  8234. stream_id: e.getId()
  8235. })):
  8236. b.makeReport(a({
  8237. action: "unmute_local_audio",
  8238. stream_id: e.getId()
  8239. })), e._isVideoMuted() ? b.makeReport(a({
  8240. action: "mute_local_video",
  8241. stream_id: e.getId()
  8242. })) : b.makeReport(a({
  8243. action: "unmute_local_video",
  8244. stream_id: e.getId()
  8245. })), !d)) return d = !0, s.b.publish(b.joinInfo.sid, {
  8246. lts: c,
  8247. succ: !0,
  8248. audioName: e.hasAudio() && e.audioName,
  8249. videoName: e.hasVideo() && e.videoName,
  8250. screenName: e.hasScreen() && e.screenName,
  8251. ec: null
  8252. }), n && n()
  8253. }, o.
  8254. default.debug("[".concat(b.clientId, "] SDP exchange in publish : receive answer -- "), JSON.parse(t.sdp)), e.pc.processSignalingMessage(t.sdp)
  8255. }, function(t, n) {
  8256. o.
  8257. default.error("Publish Failed: ".concat(t)), s.b.publish(b.joinInfo.sid, {
  8258. lts: c,
  8259. succ: !0,
  8260. audioName: e.hasAudio() && e.audioName,
  8261. videoName: e.hasVideo() && e.videoName,
  8262. screenName: e.hasScreen() && e.screenName,
  8263. ec: t
  8264. }), "TIMEOUT" != t && (b.processPublishFailure(e), i && i(t))
  8265. })
  8266. },
  8267. audio: e.hasAudio(),
  8268. video: e.hasVideo(),
  8269. screen: e.hasScreen(),
  8270. isSubscriber: !1,
  8271. stunServerUrl: b.stunServerUrl,
  8272. turnServer: b.joinInfo.turnServer,
  8273. maxAudioBW: u.maxAudioBW,
  8274. minVideoBW: u.minVideoBW,
  8275. maxVideoBW: u.maxVideoBW,
  8276. mode: b.mode,
  8277. codec: b.codec,
  8278. isVideoMute: e.userMuteVideo || e.peerMuteVideo,
  8279. isAudioMute: e.userMuteAudio || e.peerMuteAudio,
  8280. maxFrameRate: e.attributes.maxFrameRate,
  8281. clientId: b.clientId
  8282. }, e.pc = V(e.connectionSpec), e.pc.addStream(e.stream), o.
  8283. default.debug("[".concat(b.clientId, "] PeerConnection add stream :"), e.stream), e.pc.onnegotiationneeded = function(n) {
  8284. var i = {
  8285. state: "negotiation",
  8286. stream_type: 1 === t.streamType ? "low" : "high",
  8287. p2p_id: p,
  8288. sdp: n
  8289. };
  8290. b.makeRequest(g(i), function(t) {
  8291. o.
  8292. default.debug("Negotating Stream ".concat(e.getId())), e.pc.processSignalingMessage(t.sdp)
  8293. }, function(e, t) {
  8294. o.
  8295. default.error("Negotiation failed ".concat(e), t, i)
  8296. })
  8297. }, clearInterval(b.timers[e.getId()]), b.timers[e.getId()] = setInterval(function() {
  8298. if (Object(r.getParameter)("REPORT_STATS")) {
  8299. var t = 0;
  8300. e && e.pc && e.pc.getStats && e.pc.getStatsRate(function(n) {
  8301. n.forEach(function(n) {
  8302. if (n && n.id && !/_recv$/.test(n.id) && !/^time$/.test(n.id) && e.getUserId()) {
  8303. if (-1 === n.id.indexOf("outbound_rtp") && -1 === n.id.indexOf("OutboundRTP") || "video" !== n.mediaType || (n.googFrameWidthSent = e.videoWidth + "", n.googFrameHeightSent = e.videoHeight + ""), "video" === n.mediaType) try {
  8304. var i = e.stream.getVideoTracks()[0];
  8305. n.A_vstd = i.enabled ? "0" : "1"
  8306. } catch (e) {}
  8307. if ("audio" === n.mediaType) try {
  8308. var a = e.stream.getAudioTracks()[0];
  8309. n.A_astd = a.enabled ? "0" : "1"
  8310. } catch (e) {}
  8311. if (e.getId() == e.getUserId()) {
  8312. var s = 200 * t;
  8313. t++, setTimeout(function() {
  8314. var e = b.socket && b.socket.getLastMsgTime() && Date.now() - b.socket.getLastMsgTime();
  8315. e > Object(r.getParameter)("REPORT_STATS_TIMEOUT") ? o.
  8316. default.debug("PublishStats report blocked by REPORT_STATS_TIMEOUT ".concat(e)):
  8317. b.makeReport(function(e) {
  8318. var t = {};
  8319. return Object.keys(e).forEach(function(n) {
  8320. Object(r.getParameter)("STATS_FILTER")[n] || (t[rt(n)] = e[n])
  8321. }), {
  8322. _type: "publish_stats",
  8323. _message: {
  8324. stream_type: "high",
  8325. stats: t
  8326. }
  8327. }
  8328. }(n))
  8329. }, s)
  8330. } else {
  8331. s = 200 * t;
  8332. t++, setTimeout(function() {
  8333. var e = b.socket && b.socket.getLastMsgTime() && Date.now() - b.socket.getLastMsgTime();
  8334. e > Object(r.getParameter)("REPORT_STATS_TIMEOUT") ? o.
  8335. default.debug("PublishStatsLow report blocked by REPORT_STATS_TIMEOUT ".concat(e)):
  8336. b.makeReport(function(e) {
  8337. var t = {};
  8338. return Object.keys(e).forEach(function(n) {
  8339. Object(r.getParameter)("STATS_FILTER")[n] || (t[rt(n)] = e[n])
  8340. }), {
  8341. _type: "publish_stats",
  8342. _message: {
  8343. stream_type: "low",
  8344. stats: t
  8345. }
  8346. }
  8347. }(n))
  8348. }, s)
  8349. }
  8350. }
  8351. })
  8352. })
  8353. }
  8354. }, 3e3);
  8355. var f = function() {
  8356. Object(r.getParameter)("REPORT_STATS") && e && e.pc && e.pc.getVideoRelatedStats && e.pc.getVideoRelatedStats(function(t) {
  8357. var n, i, a = b.socket && b.socket.getLastMsgTime() && Date.now() - b.socket.getLastMsgTime();
  8358. a > Object(r.getParameter)("REPORT_STATS_TIMEOUT") ? o.
  8359. default.debug("PublishRelatedStats report blocked by REPORT_STATS_TIMEOUT ".concat(a)):
  8360. e.getId() === e.getUserId() ? b.makeReport((n = t, i = {}, Object.keys(n).forEach(function(e) {
  8361. Object(r.getParameter)("STATS_FILTER")[e] || (i[rt(e)] = n[e])
  8362. }), {
  8363. _type: "publish_related_stats",
  8364. _message: {
  8365. stream_type: "high",
  8366. stats: i
  8367. }
  8368. })) : b.makeReport(function(e) {
  8369. var t = {};
  8370. return Object.keys(e).forEach(function(n) {
  8371. Object(r.getParameter)("STATS_FILTER")[n] || (t[rt(n)] = e[n])
  8372. }), {
  8373. _type: "publish_related_stats",
  8374. _message: {
  8375. stream_type: "low",
  8376. stats: t
  8377. }
  8378. }
  8379. }(t))
  8380. })
  8381. };
  8382. f(), clearInterval(b.timers[e.getId() + "_RelatedStats"]), b.timers[e.getId() + "_RelatedStats"] = setInterval(f, 1e3)
  8383. }
  8384. }
  8385. }, b.unpublish = function(e, t, n, i) {
  8386. if ("object" !== Ae()(e) || null === e) return o.
  8387. default.error("[".concat(b.clientId, "] Invalid local stream")), void R(i, I.
  8388. default.INVALID_LOCAL_STREAM);
  8389. if (b.state !== E) return o.
  8390. default.error("[".concat(b.clientId, "] User not in the session")), void R(i, I.
  8391. default.INVALID_OPERATION);
  8392. if (null != b.timers[e.getId()] && (clearInterval(b.timers[e.getId()]), clearInterval(b.timers[e.getId() + "_RelatedStats"])), void 0 !== b.socket) if (e.local && void 0 !== b.localStreams[e.getId()]) {
  8393. delete b.localStreams[e.getId()];
  8394. var a = {
  8395. stream_id: e.getUserId(),
  8396. stream_type: 1 === t.streamType ? "low" : "high"
  8397. };
  8398. b.makeRequest({
  8399. _type: "unpublish",
  8400. _message: a
  8401. }), (e.hasAudio() || e.hasVideo() || e.hasScreen()) && void 0 === e.url && void 0 !== e.pc && (e.pc.close(), e.pc = void 0), e.onClose = void 0, e._onAudioMute = void 0, e._onAudioUnute = void 0, e._onVideoMute = void 0, e._onVideoUnmute = void 0, b.p2ps.delete(e.p2pId), b.dispatchEvent({
  8402. type: "stream-unpublished",
  8403. stream: e,
  8404. options: t
  8405. }), n && n()
  8406. } else o.
  8407. default.error("[".concat(b.clientId, "] Invalid local stream")), R(i, I.
  8408. default.INVALID_LOCAL_STREAM);
  8409. else o.
  8410. default.error("[".concat(b.clientId, "] User not in the session")), R(i, I.
  8411. default.INVALID_OPERATION)
  8412. }, b.subscribe = function(e, t, n) {
  8413. var i = (new Date).getTime();
  8414. e.subscribeLTS = i;
  8415. var c = !1;
  8416. if (o.
  8417. default.info("[".concat(b.clientId, "] Gatewayclient ").concat(b.uid, " Subscribe ").concat(e.getId(), ": ").concat(JSON.stringify(e.subscribeOptions))), "object" !== Ae()(e) || null === e) return o.
  8418. default.error("[".concat(b.clientId, "] Invalid remote stream")), n && n(I.
  8419. default.INVALID_REMOTE_STREAM), void s.b.subscribe(b.joinInfo.sid, {
  8420. lts: i,
  8421. succ: !1,
  8422. video: e.subscribeOptions && e.subscribeOptions.video,
  8423. audio: e.subscribeOptions && e.subscribeOptions.audio,
  8424. peerid: e.getId(),
  8425. ec: I.
  8426. default.INVALID_REMOTE_STREAM
  8427. });
  8428. if (b.state !== E && (o.
  8429. default.error("[".concat(b.clientId, "] User is not in the session")), !c)) return c = !0, s.b.subscribe(b.joinInfo.sid, {
  8430. lts: i,
  8431. succ: !1,
  8432. video: e.subscribeOptions && e.subscribeOptions.video,
  8433. audio: e.subscribeOptions && e.subscribeOptions.audio,
  8434. peerid: e.getId(),
  8435. ec: I.
  8436. default.INVALID_OPERATION
  8437. }), n && n(I.
  8438. default.INVALID_OPERATION);
  8439. if (!e.local && b.remoteStreams.hasOwnProperty(e.getId())) if (e.hasAudio() || e.hasVideo() || e.hasScreen()) {
  8440. var p = b.generateP2PId();
  8441. b.p2ps.set(p, e), e.p2pId = p, e.pc = V({
  8442. callback: function(t) {
  8443. o.
  8444. default.debug("[".concat(b.clientId, "] SDP exchange in subscribe : send offer -- "), JSON.parse(t));
  8445. var a = {
  8446. stream_id: e.getId(),
  8447. audio: !e.subscribeOptions || e.subscribeOptions.audio,
  8448. video: !e.subscribeOptions || e.subscribeOptions.video,
  8449. codec: b.codec,
  8450. p2p_id: p,
  8451. sdp: t,
  8452. tcc: Object(r.getParameter)("SUBSCRIBE_TCC"),
  8453. extend: Object(r.getParameter)("SUB_EXTEND")
  8454. };
  8455. b.makeRequest({
  8456. _type: "subscribe",
  8457. _message: a
  8458. }, function(t) {
  8459. o.
  8460. default.debug("[".concat(b.clientId, "] SDP exchange in subscribe : receive answer -- "), JSON.parse(t.sdp)), e.pc.processSignalingMessage(t.sdp)
  8461. }, function(t, a) {
  8462. o.
  8463. default.error("[".concat(b.clientId, "] Subscribe remote stream Failed: ").concat(t, ", closing stream "), e.getId(), a), s.b.subscribe(b.joinInfo.sid, {
  8464. lts: i,
  8465. succ: !1,
  8466. video: e.subscribeOptions && e.subscribeOptions.video,
  8467. audio: e.subscribeOptions && e.subscribeOptions.audio,
  8468. peerid: e.getId(),
  8469. ec: t
  8470. }), "TIMEOUT" != t && (b.processSubscribeFailure(e), n && n(t))
  8471. })
  8472. },
  8473. nop2p: !0,
  8474. audio: !0,
  8475. video: !0,
  8476. screen: e.hasScreen(),
  8477. isSubscriber: !0,
  8478. stunServerUrl: b.stunServerUrl,
  8479. turnServer: b.joinInfo.turnServer,
  8480. isVideoMute: e.userMuteVideo,
  8481. isAudioMute: e.userMuteAudio,
  8482. uid: e.getId(),
  8483. clientId: b.clientId
  8484. }), e.pc.onaddstream = function(t, n) {
  8485. if (e._onAudioUnmute = function() {
  8486. b.makeReport(a({
  8487. action: "unmute_remote_audio",
  8488. stream_id: e.getId()
  8489. }), function() {}, function() {})
  8490. }, e._onAudioMute = function() {
  8491. b.makeReport(a({
  8492. action: "mute_remote_audio",
  8493. stream_id: e.getId()
  8494. }), function() {}, function() {})
  8495. }, e._onVideoUnmute = function() {
  8496. b.makeReport(a({
  8497. action: "unmute_remote_video",
  8498. stream_id: e.getId()
  8499. }), function() {}, function() {})
  8500. }, e._onVideoMute = function() {
  8501. b.makeReport(a({
  8502. action: "mute_remote_video",
  8503. stream_id: e.getId()
  8504. }), function() {}, function() {})
  8505. }, "ontrack" === n && "video" === t.track.kind || "onaddstream" === n) {
  8506. o.
  8507. default.info("[".concat(b.clientId, "] Remote stream subscribed with uid "), e.getId());
  8508. var i = b.remoteStreams[e.getId()];
  8509. if (b.remoteStreams[e.getId()].stream = "onaddstream" === n ? t.stream : t.streams[0], b.remoteStreams[e.getId()].hasVideo()) {
  8510. if (Object(m.isFireFox)() || Object(m.isSafari)()) {
  8511. var r = b.remoteStreams[e.getId()].stream;
  8512. Object(F.vsResHack)(r, function(t, n) {
  8513. e.videoWidth = t, e.videoHeight = n
  8514. }, function(e) {
  8515. return o.
  8516. default.warning("[".concat(b.clientId, "] vsResHack failed: ") + e)
  8517. })
  8518. }
  8519. } else {
  8520. var s = b.remoteStreams[e.getId()];
  8521. s.peerMuteVideo = !0, b._adjustPCMuteStatus(s)
  8522. }
  8523. i && i.isPlaying() && i.elementID && (o.
  8524. default.debug("[".concat(b.clientId, "] Reload Player ").concat(i.elementID, " StreamId ").concat(i.getId())), e.audioOutput = i.audioOutput, i.stop(), e.play(i.elementID, i.playOptions)), delete e.audioLevelHelper;
  8525. var c = u({
  8526. type: "stream-subscribed",
  8527. stream: b.remoteStreams[e.getId()]
  8528. });
  8529. b.dispatchEvent(c)
  8530. }
  8531. }, clearInterval(b.timers[e.getId()]), b.timers[e.getId()] = setInterval(function() {
  8532. if (Object(r.getParameter)("REPORT_STATS")) {
  8533. var t = 0;
  8534. e && e.pc && e.pc.getStats && e.pc.getStatsRate(function(n) {
  8535. n.forEach(function(n) {
  8536. if (n && n.id) {
  8537. if (/_send$/.test(n.id) || /^time$/.test(n.id) || /^bweforvideo$/.test(n.id)) return; - 1 === n.id.indexOf("inbound_rtp") && -1 === n.id.indexOf("inbound-rtp") || "video" !== n.mediaType || (n.googFrameWidthReceived = e.videoWidth + "", n.googFrameHeightReceived = e.videoHeight + "");
  8538. var i = 200 * t;
  8539. t++;
  8540. var a = e.getId();
  8541. setTimeout(function() {
  8542. var e = b.socket && b.socket.getLastMsgTime() && Date.now() - b.socket.getLastMsgTime();
  8543. e > Object(r.getParameter)("REPORT_STATS_TIMEOUT") ? o.
  8544. default.debug("SubscribeStats report blocked by REPORT_STATS_TIMEOUT ".concat(e)):
  8545. b.makeReport(v(a, n))
  8546. }, i)
  8547. } else;
  8548. })
  8549. })
  8550. }
  8551. }, 3e3), clearInterval(b.timers[e.getId() + "_RelatedStats"]), b.timers[e.getId() + "_RelatedStats"] = setInterval(function() {
  8552. if (Object(r.getParameter)("REPORT_STATS") && e && e.pc) {
  8553. var t = b.socket && b.socket.getLastMsgTime() && Date.now() - b.socket.getLastMsgTime();
  8554. if (t > Object(r.getParameter)("REPORT_STATS_TIMEOUT")) return void o.
  8555. default.debug("SubscribeRelatedStats report blocked by REPORT_STATS_TIMEOUT ".concat(t));
  8556. e.pc.getVideoRelatedStats && e.pc.getVideoRelatedStats(function(t) {
  8557. b.makeReport(d(e.getId(), t))
  8558. }), e.pc.getAudioRelatedStats && e.pc.getAudioRelatedStats(function(t) {
  8559. b.makeReport(d(e.getId(), t))
  8560. })
  8561. }
  8562. }, 1e3), b.audioLevel[e.getId()] = 0, clearInterval(b.timers[e.getId() + "audio"]), b.timers[e.getId() + "audio"] = setInterval(function() {
  8563. b.hasListeners("active-speaker") && e && e.pc && "established" === e.pc.state && e.pc.getStats && e.pc.getStats(function(t) {
  8564. t.forEach(function(t) {
  8565. if ("audio" === t.mediaType) {
  8566. if (t.audioOutputLevel > 5e3) for (var n in b.audioLevel[e.getId()] < 20 && (b.audioLevel[e.getId()] += 1), b.audioLevel) n !== "" + e.getId() && b.audioLevel[n] > 0 && (b.audioLevel[n] -= 1);
  8567. var i = Object.keys(b.audioLevel).sort(function(e, t) {
  8568. return b.audioLevel[t] - b.audioLevel[e]
  8569. });
  8570. if (b.activeSpeaker !== i[0]) {
  8571. var a = l({
  8572. type: "active-speaker",
  8573. uid: i[0]
  8574. });
  8575. b.dispatchEvent(a), b.activeSpeaker = i[0], o.
  8576. default.debug("[".concat(b.clientId, "] Update active speaker: ").concat(b.activeSpeaker))
  8577. }
  8578. }
  8579. })
  8580. }, 50)
  8581. }, 50), e.pc.oniceconnectionstatechange = function(a) {
  8582. if ("failed" === a) null != b.timers[e.getId()] && (clearInterval(b.timers[e.getId()]), clearInterval(b.timers[e.getId()] + "audio")), o.
  8583. default.error("[".concat(b.clientId, "] Subscriber connection is lost -- streamId: ").concat(e.getId(), ", p2pId: ").concat(p)), o.
  8584. default.debug("[".concat(b.clientId, "] subscribe p2p failed: "), b.p2ps), c || (c = !0, n && n(I.
  8585. default.PEERCONNECTION_FAILED), s.b.subscribe(b.joinInfo.sid, {
  8586. lts: i,
  8587. succ: !1,
  8588. video: e.subscribeOptions && e.subscribeOptions.video,
  8589. audio: e.subscribeOptions && e.subscribeOptions.audio,
  8590. peerid: e.getId(),
  8591. ec: I.
  8592. default.PEERCONNECTION_FAILED
  8593. })), b.remoteStreams[e.getId()] && b.p2ps.has(p) && (b.p2ps.delete(p), b.dispatchEvent(l({
  8594. type: "subP2PLost",
  8595. stream: e
  8596. })));
  8597. else if ("connected" === a && (o.
  8598. default.debug("[".concat(b.clientId, "] subscribe p2p connected: "), b.p2ps), !c)) {
  8599. c = !0, s.b.subscribe(b.joinInfo.sid, {
  8600. lts: i,
  8601. succ: !0,
  8602. video: e.subscribeOptions && e.subscribeOptions.video,
  8603. audio: e.subscribeOptions && e.subscribeOptions.audio,
  8604. peerid: e.getId(),
  8605. ec: null
  8606. }), b._adjustPCMuteStatus(e);
  8607. var r = !1,
  8608. d = setInterval(function() {
  8609. e.pc ? e.pc.getStats(function(t) {
  8610. t.forEach(function(t) {
  8611. -1 !== t.id.indexOf("recv") && "audio" === t.mediaType && (parseInt(t.googDecodingNormal) > 0 || parseInt(t.audioOutputLevel) > 0) && (r || (r = !0, b.dispatchEvent({
  8612. type: "first-audio-frame-decode",
  8613. stream: e
  8614. }), clearInterval(d), s.b.reportApiInvoke(b.joinInfo.sid, {
  8615. name: "firstAudioDecode"
  8616. })(null, {
  8617. elapse: Date.now() - e.subscribeLTS
  8618. })))
  8619. })
  8620. }, 100) : clearInterval(d)
  8621. }, 100),
  8622. u = !1,
  8623. f = setInterval(function() {
  8624. e.pc ? e.pc.getStats(function(t) {
  8625. t.forEach(function(t) {
  8626. -1 === t.id.indexOf("recv") && -1 === t.id.indexOf("inbound_rtp") && -1 === t.id.indexOf("inbound-rtp") && -1 === t.id.indexOf("InboundRTP") || "video" === t.mediaType && (t.framesDecoded > 0 || t.googFramesDecoded > 0) && (u || (u = !0, b.dispatchEvent({
  8627. type: "first-video-frame-decode",
  8628. stream: e
  8629. }), clearInterval(f), e.firstFrameTime = (new Date).getTime() - e.subscribeLTS, s.b.firstRemoteFrame(b.joinInfo.sid, {
  8630. lts: (new Date).getTime(),
  8631. peerid: e.getId(),
  8632. succ: !0,
  8633. width: +t.googFrameWidthReceived,
  8634. height: +t.googFrameHeightReceived
  8635. })))
  8636. })
  8637. }, 100) : clearInterval(f)
  8638. }, 100);
  8639. return e.sid = b.joinInfo.sid, t && t()
  8640. }
  8641. }
  8642. } else o.
  8643. default.error("[".concat(b.clientId, "] Invalid remote stream")), c || (c = !0, n && n(I.
  8644. default.INVALID_REMOTE_STREAM), s.b.subscribe(b.joinInfo.sid, {
  8645. lts: i,
  8646. succ: !1,
  8647. video: e.subscribeOptions && e.subscribeOptions.video,
  8648. audio: e.subscribeOptions && e.subscribeOptions.audio,
  8649. peerid: e.getId(),
  8650. ec: I.
  8651. default.INVALID_REMOTE_STREAM
  8652. }));
  8653. else o.
  8654. default.error("[".concat(b.clientId, "] No such remote stream")), c || (c = !0, n && n(I.
  8655. default.NO_SUCH_REMOTE_STREAM), s.b.subscribe(b.joinInfo.sid, {
  8656. lts: i,
  8657. succ: !1,
  8658. video: e.subscribeOptions && e.subscribeOptions.video,
  8659. audio: e.subscribeOptions && e.subscribeOptions.audio,
  8660. peerid: e.getId(),
  8661. ec: I.
  8662. default.NO_SUCH_REMOTE_STREAM
  8663. }))
  8664. }, b.subscribeChange = function(e, t, n) {
  8665. var i = Date.now();
  8666. o.
  8667. default.info("[".concat(b.clientId, "] Gatewayclient ").concat(b.uid, " SubscribeChange ").concat(e.getId(), ": ").concat(JSON.stringify(e.subscribeOptions))), b._adjustPCMuteStatus(e);
  8668. var a = {
  8669. stream_id: e.getId(),
  8670. audio: e.subscribeOptions.audio,
  8671. video: e.subscribeOptions.video
  8672. };
  8673. b.makeRequest({
  8674. _type: "subscribe_change",
  8675. _message: a
  8676. }, function(n) {
  8677. var a = u({
  8678. type: "stream-subscribe-changed",
  8679. stream: b.remoteStreams[e.getId()]
  8680. });
  8681. s.b.subscribe(b.joinInfo.sid, {
  8682. lts: i,
  8683. succ: !0,
  8684. video: e.subscribeOptions && e.subscribeOptions.video,
  8685. audio: e.subscribeOptions && e.subscribeOptions.audio,
  8686. peerid: e.getId(),
  8687. ec: null
  8688. }), b.dispatchEvent(a), t && t()
  8689. }, function(t, i) {
  8690. o.
  8691. default.error("[".concat(b.clientId, "] Subscribe Change Failed ").concat(e.getId()), t, i), n && n(t, i)
  8692. })
  8693. }, b.processPublishFailure = function(e) {
  8694. e.publishLTS = null, e.p2pId && b.p2ps.get(e.p2pId) === e && b.p2ps.delete(e.p2pId), b.localStreams[e.getUserId()] === e && delete b.localStreams[e.getUserId()], b.localStreams[e.getId()] === e && delete b.localStreams[e.getId()], e.pc && (e.pc.processSignalingMessage = function() {}, e.pc.oniceconnectionstatechange = function() {}, e.pc.close(), delete e.pc), delete e.onClose, delete e._onAudioUnmute, delete e._onVideoUnmute, delete e._onAudioMute, delete e._onVideoMute, delete e._onAudioUnmute
  8695. }, b.processSubscribeFailure = function(e) {
  8696. e.p2pId && b.p2ps.get(e.p2pId) === e && b.p2ps.delete(e.p2pId), b.remoteStreams[e.getId()] === e && delete b.remoteStreams[e.getId()], b.remoteStreams[e.getId()] === e && delete b.remoteStreams[e.getId()], e.pc && (e.pc.onaddstream = function() {}, e.pc.processSignalingMessage = function() {}, e.pc.oniceconnectionstatechange = function() {}, e.pc.close(), delete e.pc), delete e.onClose, delete e._onAudioUnmute, delete e._onVideoUnmute, delete e._onAudioMute, delete e._onVideoMute, delete e._onAudioUnmute
  8697. }, b._adjustPCMuteStatus = function(e) {
  8698. !e.local && e.pc && e.pc.peerConnection.getReceivers && e.pc.peerConnection.getReceivers().forEach(function(t) {
  8699. if (t && t.track && "audio" === t.track.kind) {
  8700. var n = !e.userMuteAudio && !e.peerMuteAudio;
  8701. e.subscribeOptions && !e.subscribeOptions.audio && (n = !1), t.track.enabled = !! n
  8702. } else if (t && t.track && "video" === t.track.kind) {
  8703. var i = !e.userMuteVideo && !e.peerMuteVideo;
  8704. e.subscribeOptions && !e.subscribeOptions.video && (i = !1), t.track.enabled = !! i
  8705. }
  8706. })
  8707. }, b.unsubscribe = function(e, t, n) {
  8708. if ("object" !== Ae()(e) || null === e) return o.
  8709. default.error("[".concat(b.clientId, "] Invalid remote stream")), void R(n, I.
  8710. default.INVALID_REMOTE_STREAM);
  8711. if (b.state !== E) return o.
  8712. default.error("[".concat(b.clientId, "] User is not in the session")), void R(n, I.
  8713. default.INVALID_OPERATION);
  8714. if (null != b.timers[e.getId()] && (clearInterval(b.timers[e.getId()]), clearInterval(b.timers[e.getId()] + "audio")), null != b.audioLevel[e.getId()] && delete b.audioLevel[e.getId()], null != b.timer_counter[e.getId()] && delete b.timer_counter[e.getId()], b.remoteStreams.hasOwnProperty(e.getId())) {
  8715. if (!b.socket) return o.
  8716. default.error("[".concat(b.clientId, "] User is not in the session")), void R(n, I.
  8717. default.INVALID_OPERATION);
  8718. if (e.local) return o.
  8719. default.error("[".concat(b.clientId, "] Invalid remote stream")), void R(n, I.
  8720. default.INVALID_REMOTE_STREAM);
  8721. e.close();
  8722. var i = {
  8723. stream_id: e.getId()
  8724. };
  8725. b.makeRequest({
  8726. _type: "unsubscribe",
  8727. _message: i
  8728. }), void 0 !== e.pc && (e.pc.close(), e.pc = void 0), e.onClose = void 0, e._onAudioMute = void 0, e._onAudioUnute = void 0, e._onVideoMute = void 0, e._onVideoUnmute = void 0, delete e.subscribeOptions, b.p2ps.delete(e.p2pId), o.
  8729. default.info("[".concat(b.clientId, "] Unsubscribe stream success")), t && t()
  8730. } else R(n, I.
  8731. default.NO_SUCH_REMOTE_STREAM)
  8732. }, b.setRemoteVideoStreamType = function(e, t) {
  8733. if (o.
  8734. default.debug("[".concat(b.clientId, "] Switching remote video stream ").concat(e.getId(), " to ").concat(t)), "object" === Ae()(e) && null !== e) if (b.state === E) {
  8735. if (!e.local) {
  8736. switch (t) {
  8737. case b.remoteVideoStreamTypes.REMOTE_VIDEO_STREAM_HIGH:
  8738. case b.remoteVideoStreamTypes.REMOTE_VIDEO_STREAM_LOW:
  8739. case b.remoteVideoStreamTypes.REMOTE_VIDEO_STREAM_MEDIUM:
  8740. break;
  8741. default:
  8742. return
  8743. }
  8744. var n = {
  8745. stream_id: e.getId(),
  8746. stream_type: t
  8747. };
  8748. b.makeRequest({
  8749. _type: "switch_video_stream",
  8750. _message: n
  8751. }, function() {
  8752. o.
  8753. default.debug("SwitchVideoStream Success ".concat(n.stream_id, " ").concat(n.stream_type))
  8754. }, function(e, t) {
  8755. o.
  8756. default.error("SwitchVideoStream Error ".concat(e, " ").concat(n.stream_id, " ").concat(n.stream_type), t)
  8757. })
  8758. }
  8759. } else o.
  8760. default.error("[".concat(b.clientId, "] User is not in the session"));
  8761. else o.
  8762. default.error("[".concat(b.clientId, "] Invalid remote stream"))
  8763. }, b.renewToken = function(e, t, n) {
  8764. e ? b.key ? b.state !== E ? (o.
  8765. default.debug("[".concat(b.clientId, "] Client is not connected. Trying to rejoin")), b.key = e, b.rejoin(), t && t()) : (o.
  8766. default.debug("[".concat(b.clientId, "] renewToken from ").concat(b.key, " to ").concat(e)), b.makeRequest({
  8767. _type: "renew_token",
  8768. _message: {
  8769. token: e
  8770. }
  8771. }, t, n)) : (o.
  8772. default.error("[".concat(b.clientId, "] Client is previously joined without token")), n && n(I.
  8773. default.INVALID_PARAMETER)) : (o.
  8774. default.error("[".concat(b.clientId, "] Invalid Token ").concat(e)), n && n(I.
  8775. default.INVALID_PARAMETER))
  8776. }, b.setStreamFallbackOption = function(e, t) {
  8777. if (o.
  8778. default.debug("[".concat(b.clientId, "] Set stream fallback option ").concat(e.getId(), " to ").concat(t)), "object" === Ae()(e) && null !== e) if (b.state === E) {
  8779. if (!e.local) {
  8780. switch (t) {
  8781. case b.streamFallbackTypes.STREAM_FALLBACK_OPTION_DISABLED:
  8782. case b.streamFallbackTypes.STREAM_FALLBACK_OPTION_VIDEO_STREAM_LOW:
  8783. case b.streamFallbackTypes.STREAM_FALLBACK_OPTION_AUDIO_ONLY:
  8784. break;
  8785. default:
  8786. return
  8787. }
  8788. var n = {
  8789. stream_id: e.getId(),
  8790. fallback_type: t
  8791. };
  8792. b.makeRequest({
  8793. _type: "set_fallback_option",
  8794. _message: n
  8795. }, function() {
  8796. o.
  8797. default.debug("SetStreamFallbackOption success ".concat(n.stream_id, " ").concat(t))
  8798. }, function(e, i) {
  8799. o.
  8800. default.error("Failed to SetStreamFallbackOption ".concat(n.stream_id, " ").concat(t, " ").concat(e), i)
  8801. })
  8802. }
  8803. } else o.
  8804. default.error("[".concat(b.clientId, "] User is not in the session"));
  8805. else o.
  8806. default.error("[".concat(b.clientId, "] Invalid remote stream"))
  8807. }, b.enableAudioVolumeIndicator = function(e, t) {
  8808. b.audioVolumeIndication.enabled = !0, b.audioVolumeIndication.interval = e, b.audioVolumeIndication.smooth = t, b.resetAudioVolumeIndication()
  8809. }, b.resetAudioVolumeIndication = function() {
  8810. if (clearInterval(b.timers.audioVolumeIndication), clearInterval(b.timers.audioVolumeSampling), b.audioVolumeIndication.enabled && b.audioVolumeIndication.interval) {
  8811. var e = Math.floor(1e3 * b.audioVolumeIndication.smooth / 100);
  8812. clearInterval(b.timers.audioVolumeSampling), b.timers.audioVolumeSampling = setInterval(function() {
  8813. b.audioVolumeSampling || (b.audioVolumeSampling = {});
  8814. var t = {};
  8815. for (var n in b.remoteStreams) {
  8816. var i = b.remoteStreams[n];
  8817. if (i.stream && i.hasAudio()) {
  8818. var a = i.getAudioLevel();
  8819. a > 0 && a < 1 && (a *= 100);
  8820. var r = b.audioVolumeSampling[n] || [];
  8821. for (r.push(a); r.length > e;) r.shift();
  8822. t[n] = r
  8823. }
  8824. }
  8825. b.audioVolumeSampling = t
  8826. }, 100), clearInterval(b.timers.audioVolumeIndication), b.timers.audioVolumeIndication = setInterval(function() {
  8827. if (b.socket && b.socket.signal && b.socket.signal.connection && b.socket.signal.connection.readyState === WebSocket.OPEN) {
  8828. var e = [];
  8829. for (var t in b.remoteStreams) if (b.audioVolumeSampling && b.audioVolumeSampling[t]) {
  8830. var n = b.audioVolumeSampling[t],
  8831. i = 0;
  8832. n.forEach(function(e) {
  8833. i += e
  8834. });
  8835. var a = {
  8836. uid: t,
  8837. level: Math.floor(i / n.length)
  8838. };
  8839. a.level && e.push(a)
  8840. }
  8841. var r = e.sort(function(e, t) {
  8842. return e.level - t.level
  8843. });
  8844. o.
  8845. default.debug("[".concat(b.clientId, "] volume-indicator "), JSON.stringify(r)), b.audioVolumeIndication.sortedAudioVolumes = r;
  8846. var s = l({
  8847. type: "volume-indicator",
  8848. attr: r
  8849. });
  8850. b.dispatchEvent(s)
  8851. }
  8852. }, b.audioVolumeIndication.interval)
  8853. }
  8854. }, b.closeGateway = function() {
  8855. o.
  8856. default.debug("[".concat(b.clientId, "] close gateway")), b.state = S, b.socket.close(), O()
  8857. }, b.startChannelMediaRelay = function() {
  8858. var e = K()(Y.a.mark(function e(t) {
  8859. var n, i, a, r;
  8860. return Y.a.wrap(function(e) {
  8861. for (;;) switch (e.prev = e.next) {
  8862. case 0:
  8863. if (!b.channelMediaRelayController) {
  8864. e.next = 2;
  8865. break
  8866. }
  8867. throw new ke.ChannelMediaError("RELAY_ALREADY_START", "", ke.CHANNEL_MEDIA_RELAY_ERROR.RELAY_ALREADY_START);
  8868. case 2:
  8869. return n = function(e) {
  8870. b.dispatchEvent({
  8871. type: "channel-media-relay-event",
  8872. code: e
  8873. })
  8874. }, i = function(e, t, n) {
  8875. e === ke.CHANNEL_MEDIA_RELAY_STATE.RELAY_STATE_FAILURE && t === ke.CHANNEL_MEDIA_RELAY_ERROR.SERVER_CONNECTION_LOST && (b.channelMediaRelayController.dispose(), b.channelMediaRelayController = null), b.dispatchEvent({
  8876. type: "channel-media-relay-state",
  8877. state: e,
  8878. code: t,
  8879. data: n
  8880. })
  8881. }, b.channelMediaRelayController = new Le.a(b.joinInfo, b.clientId), b.channelMediaRelayController.on("event", n), b.channelMediaRelayController.on("state", i), e.prev = 7, e.next = 10, b.channelMediaRelayController.startChannelMediaRelay(t);
  8882. case 10:
  8883. e.next = 22;
  8884. break;
  8885. case 12:
  8886. throw e.prev = 12, e.t0 = e.
  8887. catch (7), o.
  8888. default.debug("[".concat(b.clientId, "] startChannelMediaRelay exception: ").concat(JSON.stringify(e.t0))), a = ke.CHANNEL_MEDIA_RELAY_STATE.RELAY_STATE_FAILURE, r = "", r = e.t0 instanceof ke.ChannelMediaError ? "SetSourceChannelStatus" === e.t0.data || e.t0.data && e.t0.data.serverResponse && "SetSourceChannel" === e.t0.data.serverResponse.command ? "FAILED_JOIN_SRC":
  8889. "SetDestChannelStatus" === e.t0.data || e.t0.data && e.t0.data.serverResponse && "SetDestChannel" === e.t0.data.serverResponse.command ? "FAILED_JOIN_DEST" : e.t0.data && e.t0.data.serverResponse && "StartPacketTransfer" === e.t0.data.serverResponse.command ? "FAILED_PACKET_SENT_TO_DEST" : e.t0.message === ke.CHANNEL_MEDIA_ERROR.REQUEST_TIMEOUT || e.t0.message === ke.CHANNEL_MEDIA_ERROR.WAIT_STATUS_TIMEOUT ? "SERVER_NO_RESPONSE" : e.t0.message === ke.CHANNEL_MEDIA_ERROR.REQUEST_FAILED || e.t0.message === ke.CHANNEL_MEDIA_ERROR.WAIT_STATUS_ERROR ? "SERVER_ERROR_RESPONSE" : e.t0.message === ke.CHANNEL_MEDIA_ERROR.AP_REQUEST_TIMEOUT ? "NO_RESOURCE_AVAILABLE" : e.t0.message === ke.CHANNEL_MEDIA_ERROR.WS_ABORT || e.t0.message === ke.CHANNEL_MEDIA_ERROR.AP_REQUEST_ABORT ? "OPERATION_ABORT" : "INTERNAL_ERROR" : "INTERNAL_ERROR", b.dispatchEvent({
  8890. type: "channel-media-relay-state",
  8891. state: a,
  8892. code: ke.CHANNEL_MEDIA_RELAY_ERROR[r]
  8893. }), b.channelMediaRelayController && (b.channelMediaRelayController.dispose(), b.channelMediaConfig = null, b.channelMediaRelayController = null), b.dispatchEvent({
  8894. type: "channel-media-relay-state",
  8895. state: ke.CHANNEL_MEDIA_RELAY_STATE.RELAY_STATE_IDLE
  8896. }), new ke.ChannelMediaError(r, null, ke.CHANNEL_MEDIA_RELAY_ERROR[r]);
  8897. case 22:
  8898. b.dispatchEvent({
  8899. type: "channel-media-relay-state",
  8900. state: ke.CHANNEL_MEDIA_RELAY_STATE.RELAY_STATE_RUNNING,
  8901. code: ke.CHANNEL_MEDIA_RELAY_ERROR.RELAY_OK
  8902. }), b.channelMediaConfig = t;
  8903. case 24:
  8904. case "end":
  8905. return e.stop()
  8906. }
  8907. }, e, this, [
  8908. [7, 12]
  8909. ])
  8910. }));
  8911. return function(t) {
  8912. return e.apply(this, arguments)
  8913. }
  8914. }(), b.updateChannelMediaRelay = function() {
  8915. var t = K()(Y.a.mark(function t(n) {
  8916. var i, a;
  8917. return Y.a.wrap(function(t) {
  8918. for (;;) switch (t.prev = t.next) {
  8919. case 0:
  8920. if (b.channelMediaRelayController) {
  8921. t.next = 2;
  8922. break
  8923. }
  8924. throw new ke.ChannelMediaError("RELAY_NOT_START", null, ke.CHANNEL_MEDIA_RELAY_ERROR.RELAY_NOT_START);
  8925. case 2:
  8926. return t.prev = 2, t.next = 5, b.channelMediaRelayController.updateChannelMediaRelay(n);
  8927. case 5:
  8928. t.next = 18;
  8929. break;
  8930. case 7:
  8931. throw t.prev = 7, t.t0 = t.
  8932. catch (2), o.
  8933. default.debug("[".concat(b.clientId, "] updateChannelMediaRelay exception: ").concat(JSON.stringify(e))), i = ke.CHANNEL_MEDIA_RELAY_STATE.RELAY_STATE_FAILURE, a = "", a = e instanceof ke.ChannelMediaError ? e.message === ke.CHANNEL_MEDIA_ERROR.REQUEST_TIMEOUT || e.message === ke.CHANNEL_MEDIA_ERROR.WAIT_STATUS_TIMEOUT ? "SERVER_NO_RESPONSE":
  8934. e.message === ke.CHANNEL_MEDIA_ERROR.REQUEST_FAILED || e.message === ke.CHANNEL_MEDIA_ERROR.WAIT_STATUS_ERROR ? "SERVER_ERROR_RESPONSE" : e.message === ke.CHANNEL_MEDIA_ERROR.WS_ABORT || e.message === ke.CHANNEL_MEDIA_ERROR.AP_REQUEST_ABORT ? "OPERATION_ABORT" : "INTERNAL_ERROR" : "INTERNAL_ERROR", b.dispatchEvent({
  8935. type: "channel-media-relay-event",
  8936. code: ke.CHANNEL_MEDIA_RELAY_EVENT.PACKET_UPDATE_DEST_CHANNEL_REFUSED
  8937. }), b.dispatchEvent({
  8938. type: "channel-media-relay-state",
  8939. state: i,
  8940. code: ke.CHANNEL_MEDIA_RELAY_ERROR[a]
  8941. }), b.channelMediaRelayController && (b.channelMediaRelayController.dispose(), b.channelMediaConfig = null, b.channelMediaRelayController = null), b.dispatchEvent({
  8942. type: "channel-media-relay-state",
  8943. state: ke.CHANNEL_MEDIA_RELAY_STATE.RELAY_STATE_IDLE
  8944. }), new ke.ChannelMediaError(a, null, ke.CHANNEL_MEDIA_RELAY_ERROR[a]);
  8945. case 18:
  8946. b.channelMediaConfig = n;
  8947. case 19:
  8948. case "end":
  8949. return t.stop()
  8950. }
  8951. }, t, this, [
  8952. [2, 7]
  8953. ])
  8954. }));
  8955. return function(e) {
  8956. return t.apply(this, arguments)
  8957. }
  8958. }(), b.stopChannelMediaRelay = K()(Y.a.mark(function t() {
  8959. var n, i;
  8960. return Y.a.wrap(function(t) {
  8961. for (;;) switch (t.prev = t.next) {
  8962. case 0:
  8963. if (b.channelMediaRelayController) {
  8964. t.next = 2;
  8965. break
  8966. }
  8967. throw new ke.ChannelMediaError("RELAY_NOT_START", null, ke.CHANNEL_MEDIA_RELAY_ERROR.RELAY_NOT_START);
  8968. case 2:
  8969. return t.prev = 2, t.next = 5, b.channelMediaRelayController.stopChannelMediaRelay();
  8970. case 5:
  8971. t.next = 17;
  8972. break;
  8973. case 7:
  8974. throw t.prev = 7, t.t0 = t.
  8975. catch (2), o.
  8976. default.debug("[".concat(b.clientId, "] stopChannelMediaRelay exception: ").concat(JSON.stringify(e))), n = ke.CHANNEL_MEDIA_RELAY_STATE.RELAY_STATE_FAILURE, i = "", i = e instanceof ke.ChannelMediaError ? e.message === ke.CHANNEL_MEDIA_ERROR.REQUEST_TIMEOUT || e.message === ke.CHANNEL_MEDIA_ERROR.WAIT_STATUS_TIMEOUT ? "SERVER_NO_RESPONSE":
  8977. e.message === ke.CHANNEL_MEDIA_ERROR.REQUEST_FAILED || e.message === ke.CHANNEL_MEDIA_ERROR.WAIT_STATUS_ERROR ? "SERVER_ERROR_RESPONSE" : "INTERNAL_ERROR" : "INTERNAL_ERROR", b.dispatchEvent({
  8978. type: "channel-media-relay-state",
  8979. state: n,
  8980. code: ke.CHANNEL_MEDIA_RELAY_ERROR[i]
  8981. }), b.channelMediaRelayController && (b.channelMediaRelayController.dispose(), b.channelMediaConfig = null, b.channelMediaRelayController = null), b.dispatchEvent({
  8982. type: "channel-media-relay-state",
  8983. state: ke.CHANNEL_MEDIA_RELAY_STATE.RELAY_STATE_IDLE
  8984. }), new ke.ChannelMediaError(i, null, ke.CHANNEL_MEDIA_RELAY_ERROR[i]);
  8985. case 17:
  8986. b.channelMediaConfig = null, b.channelMediaRelayController = null;
  8987. case 19:
  8988. case "end":
  8989. return t.stop()
  8990. }
  8991. }, t, this, [
  8992. [2, 7]
  8993. ])
  8994. }));
  8995. var A = function() {
  8996. o.
  8997. default.debug("[".concat(b.clientId, "] Reconnect gateway")), b.state = S, b.socket.close(), O(), b.reconnectMode = "recover", b.state = _, C()
  8998. };
  8999. b.recover = A;
  9000. var O = function() {
  9001. for (var e in b.dispatchEvent({
  9002. type: "before-clear-connection"
  9003. }), b.timers) b.timers.hasOwnProperty(e) && clearInterval(b.timers[e]);
  9004. for (var e in b.remoteStreams) if (b.remoteStreams.hasOwnProperty(e)) {
  9005. var t = b.remoteStreams[e],
  9006. n = l({
  9007. type: "stream-removed",
  9008. uid: t.getId(),
  9009. stream: t
  9010. });
  9011. b.dispatchEvent(n)
  9012. }
  9013. b.p2ps.clear(), k(), D(), clearInterval(b.pingTimer)
  9014. };
  9015. b.rejoin = function() {
  9016. b.socket && (clearInterval(b.pingTimer), b.socket.close(), b.socket = void 0), b.state = _, C()
  9017. };
  9018. var C = function(e, t) {
  9019. b.dispatchEvent(l({
  9020. type: "rejoin-start"
  9021. })), e = e ||
  9022. function(e) {
  9023. o.
  9024. default.info("[".concat(b.clientId, "] User ").concat(e, " is re-joined to ").concat(b.joinInfo.cname)), b.dispatchEvent(l({
  9025. type: "rejoin"
  9026. })), b.channelMediaConfig && b.startChannelMediaRelay(b.channelMediaConfig).then(function() {
  9027. o.
  9028. default.debug("[".concat(b.clientId, "] restartChannelMediaRelay success"))
  9029. }).
  9030. catch (function(e) {
  9031. o.
  9032. default.debug("[".concat(b.clientId, "] restartChannelMediaRelay failed: ").concat(JSON.stringify(e)))
  9033. }), b.liveStreams && b.liveStreams.size && b.liveStreams.forEach(function(e, t) {
  9034. e && b.setLiveTranscoding(b.transcoding), b.startLiveStreaming(t, e)
  9035. }), b.injectLiveStreams && b.injectLiveStreams.size && b.injectLiveStreams.forEach(function(e, t) {
  9036. b.addInjectStreamUrl(t, e)
  9037. })
  9038. }, t = t ||
  9039. function(e) {
  9040. o.
  9041. default.error("[".concat(b.clientId, "] Re-join to channel failed "), e), b.dispatchEvent(u({
  9042. type: "error",
  9043. reason: e
  9044. }))
  9045. }, b.key ? (++b.rejoinAttempt, b.join(b.joinInfo, b.key, e, t)) : o.
  9046. default.error("[".concat(b.clientId, "] Connection recover failed [Invalid channel key]"))
  9047. },
  9048. N = function(e, t, n) {
  9049. if (b.onConnect = t, b.socket) {
  9050. if (b.dispatchEvent({
  9051. type: "reconnect"
  9052. }), "retry" === b.reconnectMode) o.
  9053. default.debug("[".concat(b.clientId, "] Retry current gateway")), b.socket.reconnect();
  9054. else if ("tryNext" === b.reconnectMode) o.
  9055. default.debug("[".concat(b.clientId, "] Try next gateway")), b.socket.connectNext();
  9056. else if ("recover" === b.reconnectMode) {
  9057. o.
  9058. default.debug("[".concat(b.clientId, "] Recover gateway")), o.
  9059. default.debug("[".concat(b.clientId, "] Try to reconnect choose server and get gateway list again ")), b.reconnectingCS = !0;
  9060. var a = b.joinInfo && b.joinInfo.sid;
  9061. 0, Qe(b.joinInfo, function(e) {
  9062. o.
  9063. default.debug("[".concat(b.clientId, "] session: ").concat(a, " get gateway list success")), b.joinInfo.apResponse = e.res, b.reconnectingCS ? b.socket.replaceHost(e.gateway_addr):
  9064. o.
  9065. default.debug("[".concat(b.clientId, "] session: ").concat(a, " already leave"))
  9066. })
  9067. }
  9068. } else c = e.gatewayAddr, b.socket = He(c, {
  9069. sid: b.joinInfo.sid,
  9070. clientId: b.clientId
  9071. }), b.socket.on("start-connection", function(e) {
  9072. b.ticket = e && e.msg && e.msg.ticket
  9073. }), b.socket.on("on_uplink_stats", function(e) {
  9074. var t = {};
  9075. for (var n in e) t[ot(n)] = e[n];
  9076. if (b.OutgoingAvailableBandwidth = t.uplink_available_bandwidth, b.localStreams[b.uid]) {
  9077. var i = b.localStreams[b.uid].uplinkStats;
  9078. i && i.period_fir === t.period_fir || o.
  9079. default.debug("[".concat(b.clientId, "]: Period fir change to: ").concat(t.period_fir)), b.localStreams[b.uid].uplinkStats = t
  9080. }
  9081. }), b.socket.on("connect", function() {
  9082. b.dispatchEvent({
  9083. type: "connected"
  9084. }), b.attemps = 1, b.onConnect()
  9085. }), b.socket.on("recover", function() {
  9086. b.state = _, o.
  9087. default.debug("[".concat(b.clientId, "] Try to reconnect choose server and get gateway list again ")), b.reconnectingCS = !0;
  9088. var e = b.joinInfo && b.joinInfo.sid;
  9089. Qe(b.joinInfo, function(t) {
  9090. o.
  9091. default.debug("[".concat(b.clientId, "] session: ").concat(e, " get gateway list success")), b.reconnectingCS ? b.socket.replaceHost(t.gateway_addr):
  9092. o.
  9093. default.debug("[".concat(b.clientId, "] session: ").concat(e, " already leave"))
  9094. })
  9095. }), b.socket.on("disconnect", function(e) {
  9096. if (o.
  9097. default.debug("[".concat(b.clientId, "] Receive disconnect message")), b.state !== S) {
  9098. b.state = S;
  9099. var t = u({
  9100. type: "error",
  9101. reason: I.
  9102. default.SOCKET_DISCONNECTED
  9103. });
  9104. if (b.dispatchEvent(t), 0 === b.p2ps.size ? b.reconnectMode = "tryNext" : b.reconnectMode = "retry", O(), b.channelMediaRelayController && b.channelMediaRelayController.dispose(), b.channelMediaRelayController = null, 1 != i) {
  9105. var n, a = (n = b.attemps, 1e3 * Math.min(30, Math.pow(2, n) - 1));
  9106. if (o.
  9107. default.error("[".concat(b.clientId, "] Disconnect from server [").concat(JSON.stringify(e), "], attempt to recover [#").concat(b.attemps, "] after ").concat(a / 1e3, " seconds")), b.hasInvokeLeave) return o.
  9108. default.debug("[".concat(b.clientId, "] No reconnection becase client.leave has been invoked")), void(b.hasInvokeLeave = !1);
  9109. setTimeout(function() {
  9110. b.attemps++, b.state = _, b.inChannelInfo && Date.now() - b.inChannelInfo.joinAt > Object(r.getParameter)("TICKET_RENEW_TIMEOUT") ? (o.
  9111. default.debug("Recovering to renew ticket"), A()) : C()
  9112. }, a)
  9113. }
  9114. }
  9115. }), b.socket.on("on_add_audio_stream", function(e) {
  9116. if (o.
  9117. default.info("[".concat(b.clientId, "] Newly added audio stream with uid ").concat(e.uid)), b.joinInfo.stringUid && "string" != typeof e.uid && o.
  9118. default.error("StringUID is Mixed with UintUID"), b.remoteStreamsInChannel.has(e.uid) || b.remoteStreamsInChannel.add(e.uid), void 0 === b.remoteStreams[e.uid]) {
  9119. var t = we({
  9120. streamID: e.uid,
  9121. local: !1,
  9122. audio: e.audio,
  9123. video: e.video
  9124. });
  9125. t.peerMuteVideo = !0, b.remoteStreams[e.uid] = t;
  9126. var n = u({
  9127. type: "stream-added",
  9128. stream: t
  9129. });
  9130. b.dispatchEvent(n);
  9131. var i = b.remoteMuteState[e.uid];
  9132. if (i && i.audio) {
  9133. n = l({
  9134. type: "mute-audio",
  9135. uid: e.uid
  9136. });
  9137. b.dispatchEvent(n)
  9138. }
  9139. if (i && i.video) {
  9140. n = l({
  9141. type: "mute-video",
  9142. uid: e.uid
  9143. });
  9144. b.dispatchEvent(n)
  9145. }
  9146. }
  9147. }), b.socket.on("on_update_stream", function(e) {
  9148. var t = b.remoteStreams[e.uid];
  9149. if (b.joinInfo.stringUid && "string" != typeof e.uid && o.
  9150. default.error("StringUID is Mixed with UintUID"), t) {
  9151. t.audio = e.audio, t.video = e.video, t.screen = e.screen, t.pc && b._adjustPCMuteStatus(t);
  9152. var n = u({
  9153. type: "stream-updated",
  9154. stream: t
  9155. });
  9156. b.dispatchEvent(n)
  9157. } else o.
  9158. default.debug("[".concat(b.clientId, "] Ignoring onUpdateStream event before onAddStream for uid ").concat(e.uid))
  9159. }), b.socket.on("on_add_video_stream", function(e) {
  9160. if (o.
  9161. default.info("[".concat(b.clientId, "] Newly added remote stream with uid ").concat(e.uid, ".")), b.joinInfo.stringUid && "string" != typeof e.uid && o.
  9162. default.error("StringUID is Mixed with UintUID"), b.remoteStreamsInChannel.has(e.uid) || b.remoteStreamsInChannel.add(e.uid), void 0 === b.remoteStreams[e.uid]) {
  9163. var t = we({
  9164. streamID: e.uid,
  9165. local: !1,
  9166. audio: e.audio,
  9167. video: e.video
  9168. });
  9169. b.remoteStreams[e.uid] = t;
  9170. var n = u({
  9171. type: "stream-added",
  9172. stream: t
  9173. });
  9174. b.dispatchEvent(n);
  9175. var i = b.remoteMuteState[e.uid];
  9176. if (i && i.audio) {
  9177. n = l({
  9178. type: "mute-audio",
  9179. uid: e.uid
  9180. });
  9181. b.dispatchEvent(n)
  9182. }
  9183. if (i && i.video) {
  9184. n = l({
  9185. type: "mute-video",
  9186. uid: e.uid
  9187. });
  9188. b.dispatchEvent(n)
  9189. }
  9190. } else {
  9191. var a = b.remoteStreams[e.uid];
  9192. if (void 0 !== a.stream) {
  9193. if ((t = b.remoteStreams[e.uid]).video = !0, t.peerMuteVideo = !1, t.pc && b._adjustPCMuteStatus(t), o.
  9194. default.info("[".concat(b.clientId, "] Stream changed: enable video ").concat(e.uid)), t.isPlaying()) {
  9195. var r = t.player.elementID;
  9196. t.stop(), t.play(r, t.playOptions)
  9197. }
  9198. } else if (a.p2pId) b.remoteStreams[e.uid].video = !0;
  9199. else {
  9200. t = we({
  9201. streamID: e.uid,
  9202. local: !1,
  9203. audio: !0,
  9204. video: !0
  9205. });
  9206. b.remoteStreams[e.uid] = t, o.
  9207. default.info("[".concat(b.clientId, "] Stream changed: modify video ").concat(e.uid))
  9208. }
  9209. }
  9210. }), b.socket.on("on_remove_stream", function(e) {
  9211. b.remoteStreamsInChannel.has(e.uid) && b.remoteStreamsInChannel.delete(e.uid);
  9212. var t = b.remoteStreams[e.uid];
  9213. if (t) {
  9214. delete b.remoteStreams[e.uid], delete b.remoteMuteState[e.uid];
  9215. var n = u({
  9216. type: "stream-removed",
  9217. stream: t
  9218. });
  9219. b.dispatchEvent(n), t.close(), void 0 !== t.pc && (t.pc.close(), t.pc = void 0, b.p2ps.delete(t.p2pId))
  9220. } else o.
  9221. default.error("ERROR stream ", e.uid, " not found onRemoveStream ", e)
  9222. }), b.socket.on("on_publish_stream", function(e) {
  9223. var t = b.localStreams[e.uid],
  9224. n = u({
  9225. type: "streamPublished",
  9226. stream: t
  9227. });
  9228. b.dispatchEvent(n)
  9229. }), b.socket.on("mute_audio", function(e) {
  9230. o.
  9231. default.info("[".concat(b.clientId, "] rcv peer mute audio: ").concat(e.uid)), b.remoteMuteState[e.uid] = b.remoteMuteState[e.uid] || {
  9232. audio: !1,
  9233. video: !1
  9234. }, b.remoteMuteState[e.uid].audio = !0;
  9235. var t = l({
  9236. type: "mute-audio",
  9237. uid: e.uid
  9238. }),
  9239. n = b.remoteStreams[e.uid];
  9240. n ? (n.peerMuteAudio = !0, n.pc && b._adjustPCMuteStatus(n), b.dispatchEvent(t)):
  9241. o.
  9242. default.debug("Ignoring event ".concat(e.type), e)
  9243. }), b.socket.on("unmute_audio", function(e) {
  9244. o.
  9245. default.info("[".concat(b.clientId, "] rcv peer unmute audio: ").concat(e.uid)), b.remoteMuteState[e.uid] = b.remoteMuteState[e.uid] || {
  9246. audio: !1,
  9247. video: !1
  9248. }, b.remoteMuteState[e.uid].audio = !1;
  9249. var t = l({
  9250. type: "unmute-audio",
  9251. uid: e.uid
  9252. }),
  9253. n = b.remoteStreams[e.uid];
  9254. n ? (n.peerMuteAudio = !1, n.pc && b._adjustPCMuteStatus(n), b.dispatchEvent(t)):
  9255. o.
  9256. default.debug("Ignoring event ".concat(e.type), e)
  9257. }), b.socket.on("mute_video", function(e) {
  9258. o.
  9259. default.info("[".concat(b.clientId, "] rcv peer mute video: ").concat(e.uid)), b.remoteMuteState[e.uid] = b.remoteMuteState[e.uid] || {
  9260. audio: !1,
  9261. video: !1
  9262. }, b.remoteMuteState[e.uid].video = !0;
  9263. var t = l({
  9264. type: "mute-video",
  9265. uid: e.uid
  9266. }),
  9267. n = b.remoteStreams[e.uid];
  9268. n ? (n.peerMuteVideo = !0, n.pc && b._adjustPCMuteStatus(n), b.dispatchEvent(t)):
  9269. o.
  9270. default.debug("Ignoring event ".concat(e.type), e)
  9271. }), b.socket.on("unmute_video", function(e) {
  9272. o.
  9273. default.info("[".concat(b.clientId, "] rcv peer unmute video: ").concat(e.uid)), b.remoteMuteState[e.uid] = b.remoteMuteState[e.uid] || {
  9274. audio: !1,
  9275. video: !1
  9276. }, b.remoteMuteState[e.uid].video = !1;
  9277. var t = l({
  9278. type: "unmute-video",
  9279. uid: e.uid
  9280. }),
  9281. n = b.remoteStreams[e.uid];
  9282. n ? (n.peerMuteVideo = !1, n.pc && b._adjustPCMuteStatus(n), b.dispatchEvent(t)):
  9283. o.
  9284. default.debug("Ignoring event ".concat(e.type), e)
  9285. }), b.socket.on("on_crypt_error", function(e) {
  9286. o.
  9287. default.warning("[".concat(b.clientId, "] stream crypt error"));
  9288. var t = l({
  9289. type: "crypt-error",
  9290. cryptType: e.crypt_type
  9291. });
  9292. b.dispatchEvent(t)
  9293. }), b.socket.on("on_user_banned", function(e) {
  9294. o.
  9295. default.info("[".concat(b.clientId, "] user banned uid: ").concat(e.uid, " error: ").concat(e.error_code));
  9296. var t = l({
  9297. type: "client-banned",
  9298. uid: e.uid,
  9299. attr: e.error_code
  9300. });
  9301. b.dispatchEvent(t), i = !0
  9302. }), b.socket.on("on_stream_fallback_update", function(e) {
  9303. o.
  9304. default.info("[".concat(b.clientId, "] stream fallback peerId: ").concat(e.stream_id, " type: ").concat(e.stream_type));
  9305. var t = l({
  9306. type: "stream-fallback",
  9307. uid: e.stream_id,
  9308. stream: e.stream_id,
  9309. attr: e.stream_type
  9310. });
  9311. b.dispatchEvent(t)
  9312. }), b.socket.on("stream_recover", function(e) {
  9313. o.
  9314. default.info("[".concat(b.clientId, "] stream recover uid: ").concat(e.id, " peerId: ").concat(e.peerid, " type: ").concat(e.type));
  9315. var t = l({
  9316. type: "stream-recover",
  9317. uid: e.id,
  9318. stream: e.peerid,
  9319. attr: e.type
  9320. });
  9321. b.dispatchEvent(t)
  9322. }), b.socket.on("on_p2p_lost", function(e) {
  9323. o.
  9324. default.debug("[".concat(b.clientId, "] p2plost: "), e, "p2ps:", b.p2ps);
  9325. var t, n = "DTLS failed";
  9326. (t = b.localStreams[e.uid] || b.remoteStreams[e.uid]) ? (t.pc && t.pc.offerCandidates && 0 === t.pc.offerCandidates.length && (n = "NO_CANDIDATES_IN_OFFER"), "publish" === e.event && s.b.publish(b.joinInfo.sid, {
  9327. lts: t.publishLTS,
  9328. succ: !1,
  9329. audioName: t.hasAudio() && t.audioName,
  9330. videoName: t.hasVideo() && t.videoName,
  9331. screenName: t.hasScreen() && t.screenName,
  9332. ec: n
  9333. }), "subscribe" === e.event && s.b.subscribe(b.joinInfo.sid, {
  9334. lts: t.subscribeLTS,
  9335. succ: !1,
  9336. video: t.subscribeOptions && t.subscribeOptions.video,
  9337. audio: t.subscribeOptions && t.subscribeOptions.audio,
  9338. peerid: e.uid + "",
  9339. ec: n
  9340. })):
  9341. o.
  9342. default.warning("P2PLost Stream Not found", e), o.
  9343. default.debug("[".concat(b.clientId, "] p2plost:"), e.p2pid), (t = b.p2ps.get(e.p2pid)) && (b.p2ps.delete(e.p2pid), t.local ? b.dispatchEvent(l({
  9344. type: "pubP2PLost",
  9345. stream: t,
  9346. attr: n
  9347. })) : b.remoteStreams[t.getId()] && b.dispatchEvent(l({
  9348. type: "subP2PLost",
  9349. stream: t,
  9350. attr: n
  9351. })))
  9352. }), b.socket.on("on_token_privilege_will_expire", function(e) {
  9353. o.
  9354. default.debug("[".concat(b.clientId, "] Received Message onTokenPrivilegeWillExpire")), b.dispatchEvent(l({
  9355. type: "onTokenPrivilegeWillExpire"
  9356. }))
  9357. }), b.socket.on("on_token_privilege_did_expire", function() {
  9358. o.
  9359. default.warning("[".concat(b.clientId, "] Received Message onTokenPrivilegeDidExpire, please get new token and join again")), b.closeGateway(), b.dispatchEvent(l({
  9360. type: "onTokenPrivilegeDidExpire"
  9361. }))
  9362. }), b.socket.on("enable_local_video", function(e) {
  9363. b.dispatchEvent(l({
  9364. type: "enable-local-video",
  9365. uid: e.uid
  9366. }))
  9367. }), b.socket.on("disable_local_video", function(e) {
  9368. b.dispatchEvent(l({
  9369. type: "disable-local-video",
  9370. uid: e.uid
  9371. }))
  9372. }), b._doWithAction = function(e, t, n) {
  9373. "tryNext" === e ?
  9374. function(e, t) {
  9375. o.
  9376. default.debug("[".concat(b.clientId, "] Connect next gateway")), b.state = S, b.socket.close(), O(), b.reconnectMode = "tryNext", C(e, t)
  9377. }(t, n) : "retry" === e ?
  9378. function(e, t) {
  9379. o.
  9380. default.debug("[".concat(b.clientId, "] Reconnect gateway")), b.state = S, b.socket.close(), O(), b.reconnectMode = "retry", C(e, t)
  9381. }(t, n) : "quit" === e ? (o.
  9382. default.debug("[".concat(b.clientId, "] quit gateway")), b.state = S, b.socket.close(), O()) : "recover" === e && A()
  9383. },
  9384. b.socket.on("on_notification", function(e) {
  9385. if(e.detail === "ERR_REPEAT_JOIN") {
  9386. var t = l({
  9387. type: "client-banned",
  9388. uid: e.uid,
  9389. attr: "onMultiIP"
  9390. });
  9391. b.dispatchEvent(t)
  9392. }
  9393. if (o.
  9394. default.debug("[".concat(b.clientId, "] Receive notification: "), e), "ERR_JOIN_BY_MULTI_IP" === I.GatewayErrorCode[e.code]) {
  9395. return b.dispatchEvent({
  9396. type: "onMultiIP",
  9397. option: e.option
  9398. });
  9399. }
  9400. e.detail ? b._doWithAction(et[I.GatewayErrorCode[e.code]]) : e.action && b._doWithAction(e.action)
  9401. }),
  9402. b.socket.on("on_user_offline", function(e) {
  9403. var t = l({
  9404. type: "peer-leave",
  9405. uid: e.uid
  9406. });
  9407. if (b.remoteStreamsInChannel.has(e.uid) && b.remoteStreamsInChannel.delete(e.uid), b.remoteStreams.hasOwnProperty(e.uid) && (t.stream = b.remoteStreams[e.uid]), t.reason = e.reason, b.dispatchEvent(t), b.remoteStreams.hasOwnProperty(e.uid)) {
  9408. o.
  9409. default.info("[".concat(b.clientId, "] closing stream on peer leave"), e.uid);
  9410. var n = b.remoteStreams[e.uid];
  9411. n.close(), delete b.remoteStreams[e.uid], void 0 !== n.pc && (n.pc.close(), n.pc = void 0, b.p2ps.delete(n.p2pId))
  9412. }
  9413. b.timers.hasOwnProperty(e.uid) && (clearInterval(b.timers[e.uid]), clearInterval(b.timers[e.uid] + "_RelatedStats"), delete b.timers[e.uid]), null != b.audioLevel[e.uid] && delete b.audioLevel[e.uid], null != b.timer_counter[e.uid] && delete b.timer_counter[e.uid]
  9414. }), b.socket.on("onUplinkStats", function(e) {}), b.socket.on("liveStreamingStarted", function(e) {
  9415. var t = f({
  9416. type: "liveStreamingStarted",
  9417. url: e.url
  9418. });
  9419. b.dispatchEvent(t)
  9420. }), b.socket.on("liveStreamingFailed", function(e) {
  9421. var t = f({
  9422. type: "liveStreamingFailed",
  9423. url: e.url
  9424. });
  9425. b.dispatchEvent(t)
  9426. }), b.socket.on("liveStreamingStopped", function(e) {
  9427. var t = f({
  9428. type: "liveStreamingStopped",
  9429. url: e.url
  9430. });
  9431. b.dispatchEvent(t)
  9432. }), b.socket.on("liveTranscodingUpdated", function(e) {
  9433. var t = f({
  9434. type: "liveTranscodingUpdated",
  9435. reason: e.reason
  9436. });
  9437. b.dispatchEvent(t)
  9438. }), b.socket.on("streamInjectedStatus", function(e) {
  9439. var t = f({
  9440. type: "streamInjectedStatus",
  9441. url: e.url,
  9442. uid: e.uid,
  9443. status: e.status
  9444. });
  9445. b.dispatchEvent(t)
  9446. }), b.socket.on("on_user_online", function(e) {
  9447. b.joinInfo.stringUid && "string" != typeof e.uid && o.
  9448. default.error("StringUID is Mixed with UintUID"), b.dispatchEvent({
  9449. type: "peer-online",
  9450. uid: e.uid
  9451. })
  9452. });
  9453. var c
  9454. },
  9455. w = function(e, t) {
  9456. if (void 0 !== b.socket) try {
  9457. b.socket.emitSimpleMessage(e, function(e, n) {
  9458. t && t(e, n)
  9459. })
  9460. } catch (e) {
  9461. o.
  9462. default.error("[".concat(b.clientId, "] Error in sendSimpleSdp [").concat(e, "]"))
  9463. } else o.
  9464. default.error("[".concat(b.clientId, "] Error in sendSimpleSdp [socket not ready]"))
  9465. },
  9466. D = function() {
  9467. for (var e in b.localStreams) if (void 0 !== b.localStreams[e]) {
  9468. var t = b.localStreams[e];
  9469. delete b.localStreams[e], void 0 !== t.pc && (t.pc.close(), t.pc = void 0)
  9470. }
  9471. },
  9472. k = function() {
  9473. for (var e in b.remoteStreamsInChannel.clear(), b.remoteStreams) if (b.remoteStreams.hasOwnProperty(e)) {
  9474. var t = b.remoteStreams[e];
  9475. t.isPlaying() && t.stop(), t.close(), delete b.remoteStreams[e], void 0 !== t.pc && (t.pc.close(), t.pc = void 0)
  9476. }
  9477. };
  9478. return b
  9479. },
  9480. ct = {
  9481. _gatewayClients: {},
  9482. register: function(e, t) {
  9483. if (!t.uid) {
  9484. var n = "NO_UID_PROVIDED";
  9485. return o.
  9486. default.error("[".concat(e.clientId, "] "), n, t), n
  9487. }
  9488. if (t.cname) {
  9489. if (this._gatewayClients[t.cname] && this._gatewayClients[t.cname][t.uid] && this._gatewayClients[t.cname][t.uid] !== e) {
  9490. n = "UID_CONFLICT";
  9491. return o.
  9492. default.error("[".concat(e.clientId, "] "), n, t), n
  9493. }
  9494. return o.
  9495. default.debug("[".concat(e.clientId, "] register client Channel"), t.cname, "Uid", t.uid), this._gatewayClients[t.cname] || (this._gatewayClients[t.cname] = {}), this._gatewayClients[t.cname][t.uid] = e, null
  9496. }
  9497. var n = "NO_CHANNEL_PROVIDED";
  9498. return o.
  9499. default.error("[".concat(e.clientId, "] "), n, t), n
  9500. },
  9501. unregister: function(e) {
  9502. var t = e && e.uid,
  9503. n = e.joinInfo && e.joinInfo.cname;
  9504. if (!t || !n) {
  9505. var i = "INVALID_GATEWAYCLIENT";
  9506. return o.
  9507. default.error("[".concat(e.clientId, "] "), i), i
  9508. }
  9509. if (this._gatewayClients[n] && this._gatewayClients[n][t]) {
  9510. if (this._gatewayClients[n][t] !== e) {
  9511. i = "GATEWAYCLIENT_UID_CONFLICT";
  9512. return o.
  9513. default.error("[".concat(e.clientId, "] "), i), i
  9514. }
  9515. return o.
  9516. default.debug("[".concat(e.clientId, "] unregister client "), e.uid), delete this._gatewayClients[n][t], null
  9517. }
  9518. var i = "GATEWEAY_CLIENT_UNREGISTERED";
  9519. o.
  9520. default.error("[".concat(e.clientId, "] "), i)
  9521. }
  9522. }; st.DISCONNECTED = 0, st.CONNECTING = 1, st.CONNECTED = 2, st.DISCONNECTING = 3, st.connetionStateMap = {
  9523. 0: "DISCONNECTED",
  9524. 1: "CONNECTING",
  9525. 2: "CONNECTED",
  9526. 3: "DISCONNECTING"
  9527. };
  9528. var dt = st, ut = function(e) {
  9529. var t;
  9530. switch (e) {
  9531. case "120p":
  9532. case "120p_1":
  9533. t = ["120p_1", "120p_1", "120p_1"];
  9534. break;
  9535. case "120p_3":
  9536. t = ["120p_3", "120p_3", "120p_3"];
  9537. break;
  9538. case "180p":
  9539. case "180p_1":
  9540. t = ["90p_1", "90p_1", "180p_1"];
  9541. break;
  9542. case "180p_3":
  9543. t = ["120p_3", "120p_3", "180p_3"];
  9544. break;
  9545. case "180p_4":
  9546. t = ["120p_1", "120p_1", "180p_4"];
  9547. break;
  9548. case "240p":
  9549. case "240p_1":
  9550. t = ["120p_1", "120p_1", "240p_1"];
  9551. break;
  9552. case "240p_3":
  9553. t = ["120p_3", "120p_3", "240p_3"];
  9554. break;
  9555. case "240p_4":
  9556. t = ["120p_4", "120p_4", "240p_4"];
  9557. break;
  9558. case "360p":
  9559. case "360p_1":
  9560. case "360p_4":
  9561. case "360p_9":
  9562. case "360p_10":
  9563. case "360p_11":
  9564. t = ["90p_1", "90p_1", "360p_1"];
  9565. break;
  9566. case "360p_3":
  9567. case "360p_6":
  9568. t = ["120p_3", "120p_3", "360p_3"];
  9569. break;
  9570. case "360p_7":
  9571. case "360p_8":
  9572. t = ["120p_1", "120p_1", "360p_7"];
  9573. break;
  9574. case "480p":
  9575. case "480p_1":
  9576. case "480p_2":
  9577. case "480p_4":
  9578. case "480p_10":
  9579. t = ["120p_1", "120p_1", "480p_1"];
  9580. break;
  9581. case "480p_3":
  9582. case "480p_6":
  9583. t = ["120p_3", "120p_3", "480p_3"];
  9584. break;
  9585. case "480p_8":
  9586. case "480p_9":
  9587. t = ["120p_4", "120p_4", "480p_8"];
  9588. break;
  9589. case "720p":
  9590. case "720p_1":
  9591. case "720p_2":
  9592. case "720p_3":
  9593. t = ["90p_1", "90p_1", "720p_1"];
  9594. break;
  9595. case "720p_5":
  9596. case "720p_6":
  9597. t = ["120p_1", "120p_1", "720p_5"];
  9598. break;
  9599. case "1080p":
  9600. case "1080p_1":
  9601. case "1080p_2":
  9602. case "1080p_3":
  9603. case "1080p_5":
  9604. t = ["90p_1", "90p_1", "1080p_1"];
  9605. break;
  9606. case "1440p":
  9607. case "1440p_1":
  9608. case "1440p_2":
  9609. t = ["90p_1", "90p_1", "1440p_1"];
  9610. break;
  9611. case "4k":
  9612. case "4k_1":
  9613. case "4k_3":
  9614. t = ["90p_1", "90p_1", "4k_1"];
  9615. break;
  9616. default:
  9617. t = ["120p_1", "120p_1", "360p_7"]
  9618. }
  9619. return Object(m.isOpera)() ? [e, 15, 50] : Object(m.isFireFox)() ? [t[1], 15, 100] : Object(m.isSafari)() ? [t[2], 15, 50] : [t[0], 15, 50]
  9620. },
  9621. lt = {
  9622. 1001: "FRAMERATE_INPUT_TOO_LOW",
  9623. 1002: "FRAMERATE_SENT_TOO_LOW",
  9624. 1003: "SEND_VIDEO_BITRATE_TOO_LOW",
  9625. 1005: "RECV_VIDEO_DECODE_FAILED",
  9626. 2001: "AUDIO_INPUT_LEVEL_TOO_LOW",
  9627. 2002: "AUDIO_OUTPUT_LEVEL_TOO_LOW",
  9628. 2003: "SEND_AUDIO_BITRATE_TOO_LOW",
  9629. 2005: "RECV_AUDIO_DECODE_FAILED",
  9630. 3001: "FRAMERATE_INPUT_TOO_LOW_RECOVER",
  9631. 3002: "FRAMERATE_SENT_TOO_LOW_RECOVER",
  9632. 3003: "SEND_VIDEO_BITRATE_TOO_LOW_RECOVER",
  9633. 3005: "RECV_VIDEO_DECODE_FAILED_RECOVER",
  9634. 4001: "AUDIO_INPUT_LEVEL_TOO_LOW_RECOVER",
  9635. 4002: "AUDIO_OUTPUT_LEVEL_TOO_LOW_RECOVER",
  9636. 4003: "SEND_AUDIO_BITRATE_TOO_LOW_RECOVER",
  9637. 4005: "RECV_AUDIO_DECODE_FAILED_RECOVER"
  9638. },
  9639. pt = {
  9640. FramerateInput: 1001,
  9641. FramerateSent: 1002,
  9642. SendVideoBitrate: 1003,
  9643. VideoDecode: 1005,
  9644. AudioIntputLevel: 2001,
  9645. AudioOutputLevel: 2002,
  9646. SendAudioBitrate: 2003,
  9647. AudioDecode: 2005
  9648. },
  9649. ft = function(e) {
  9650. var t = {
  9651. remoteStreamStorage: {},
  9652. localStreamStorage: {}
  9653. };
  9654. return t.gatewayClient = e, t.checkAudioOutputLevel = function(e) {
  9655. return !(e && parseInt(e.audioRecvBytesDelta) > 0 && parseInt(e.audioDecodingNormalDelta) > 0 && 0 === parseInt(e.audioOutputLevel))
  9656. }, t.checkAudioIntputLevel = function(e) {
  9657. return !e || 0 !== parseInt(e.audioInputLevel)
  9658. }, t.checkFramerateInput = function(e, t) {
  9659. if (!e || !t.attributes) return !0;
  9660. var n = parseInt(t.attributes.maxFrameRate),
  9661. i = parseInt(e.googFrameRateInput);
  9662. return !n || !i || !(n > 10 && i < 5 || n < 10 && n >= 5 && i <= 1)
  9663. }, t.checkFramerateSent = function(e) {
  9664. return !(e && parseInt(e.googFrameRateInput) > 5 && parseInt(e.googFrameRateSent) <= 1)
  9665. }, t.checkSendVideoBitrate = function(e) {
  9666. return !e || 0 !== parseInt(e.videoSendBytesDelta)
  9667. }, t.checkSendAudioBitrate = function(e) {
  9668. return !e || 0 !== parseInt(e.audioSendBytesDelta)
  9669. }, t.checkVideoDecode = function(e) {
  9670. return !e || 0 === parseInt(e.videoRecvBytesDelta) || 0 !== parseInt(e.googFrameRateDecoded)
  9671. }, t.checkAudioDecode = function(e) {
  9672. return !e || 0 === parseInt(e.audioRecvBytesDelta) || 0 !== parseInt(e.audioDecodingNormalDelta)
  9673. }, t.record = function(e, n, i, a, r) {
  9674. i[e] || (i[e] = {
  9675. isPrevNormal: !0,
  9676. record: []
  9677. });
  9678. var o = i[e],
  9679. s = t["check" + e](n, r);
  9680. if (o.record.push(s), o.record.length >= 5) {
  9681. o.isCurNormal = -1 !== o.record.indexOf(!0);
  9682. var c = pt[e];
  9683. o.isPrevNormal && !o.isCurNormal && t.gatewayClient.dispatchEvent({
  9684. type: "exception",
  9685. code: c,
  9686. msg: lt[c],
  9687. uid: a
  9688. }), !o.isPrevNormal && o.isCurNormal && t.gatewayClient.dispatchEvent({
  9689. type: "exception",
  9690. code: c + 2e3,
  9691. msg: lt[c + 2e3],
  9692. uid: a
  9693. }), o.isPrevNormal = o.isCurNormal, o.record = []
  9694. }
  9695. }, t.setLocalStats = function(e) {
  9696. var n = {};
  9697. Object.keys(e).map(function(i) {
  9698. var a = e[i],
  9699. r = t.gatewayClient.localStreams[parseInt(i)],
  9700. o = t.localStreamStorage[i] || {};
  9701. r && r.hasVideo() && (t.record("SendVideoBitrate", a.videoStats, o, i), t.record("FramerateInput", a.videoStats, o, i, r), t.record("FramerateSent", a.videoStats, o, i)), r && r.hasAudio() && (t.record("AudioIntputLevel", a.audioStats, o, i), t.record("SendAudioBitrate", a.audioStats, o, i)), n[i] = o
  9702. }), t.localStreamStorage = n
  9703. }, t.setRemoteStats = function(n) {
  9704. var i = {};
  9705. Object.keys(n).map(function(a) {
  9706. var r = n[a],
  9707. o = e.remoteStreams[a],
  9708. s = t.remoteStreamStorage[a] || {};
  9709. o && o.hasVideo() && o.isPlaying() && t.record("VideoDecode", r.videoStats, s, a), o && o.hasAudio() && o.isPlaying() && (t.record("AudioOutputLevel", r.audioStats, s, a), t.record("AudioDecode", r.audioStats, s, a)), i[a] = s
  9710. }), t.remoteStreamStorage = i
  9711. }, t
  9712. },
  9713. mt = new function() {
  9714. var e = c();
  9715. return e.states = {
  9716. UNINIT: "UNINIT",
  9717. INITING: "INITING",
  9718. INITED: "INITED"
  9719. }, e.state = e.states.UNINIT, e.type = null, e.lastConnectedAt = null, e.lastDisconnectedAt = null, e.lastTypeChangedAt = null, e.networkChangeTimer = null, e._init = function(t, n) {
  9720. if (e.state = e.states.INITING, navigator.connection && navigator.connection.addEventListener) {
  9721. var i = e._getNetworkInfo();
  9722. e.type = i && i.type, e.state = e.states.INITED, t && t()
  9723. } else e.state = e.states.UNINIT, n && n("DO_NOT_SUPPORT")
  9724. }, e._getNetworkInfo = function() {
  9725. return navigator.connection
  9726. }, e._reloadNetworkInfo = function() {
  9727. var t = e._getNetworkInfo(),
  9728. n = t && t.type || "UNSUPPORTED",
  9729. i = Date.now();
  9730. if (n !== e.type) {
  9731. e.lastTypeChangedAt = i, "none" == n ? e.lastDisconnectedAt = i : "none" == e.type && (e.lastConnectedAt = i), e.type = n;
  9732. var a = {
  9733. type: "networkTypeChanged",
  9734. networkType: n
  9735. };
  9736. e.dispatchEvent(a)
  9737. }
  9738. }, e.getStats = function(t, n) {
  9739. var i = {},
  9740. a = e._getNetworkInfo();
  9741. a && (i.NetworkType = a.type || "UNSUPPORTED"), setTimeout(function() {
  9742. t(i)
  9743. }, 0)
  9744. }, e._init(function() {
  9745. navigator.connection.addEventListener("change", function() {
  9746. e._reloadNetworkInfo()
  9747. }), e.networkChangeTimer = setInterval(function() {
  9748. e._reloadNetworkInfo()
  9749. }, 5e3)
  9750. }, function(e) {}), e
  9751. },
  9752. gt = "DISCONNECTING", vt = "DISCONNECTED", St = "CONNECTED", ht = "INIT", _t = [], Et = (setInterval(function() {
  9753. Date.now();
  9754. _t.forEach(function(e) {
  9755. for (var t = e.requests.length - 1; t >= 0; t--) {
  9756. var n = e.requests[t];
  9757. n.timeoutCnt++, n.timeoutCnt >= 15 && (e.requests.splice(t, 1), n.promises.reject({
  9758. reason: "TIMEOUT",
  9759. code: 499
  9760. }))
  9761. }
  9762. })
  9763. }, 1e3), 1), It = 1, Tt = 1, yt = function() {
  9764. var e = K()(Y.a.mark(function e(t) {
  9765. var n, i, a, s, c, d, u;
  9766. return Y.a.wrap(function(e) {
  9767. for (;;) switch (e.prev = e.next) {
  9768. case 0:
  9769. return n = t.uid, i = t.url, a = t.serviceName, s = t.sid, c = t.appId, d = t.cname, u = t.timeout, e.abrupt("return", new Promise(function(e, t) {
  9770. var l = !1,
  9771. p = new XMLHttpRequest;
  9772. p.open("POST", i, !0), p.setRequestHeader("Content-Type", "application/json; charset=utf-8"), p.setRequestHeader("X-Packet-Service-Type", "0"), p.setRequestHeader("X-Packet-URI", "61"), p.onload = function() {
  9773. if (!l) {
  9774. var n = null,
  9775. i = null;
  9776. try {
  9777. n = JSON.parse(p.responseText)
  9778. } catch (e) {
  9779. var a = "Invalid text ".concat(p.responseText);
  9780. return o.
  9781. default.error(a), l = !0, t(a)
  9782. }
  9783. if (n.code) {
  9784. var r = "AP_ERR_".concat(n.code);
  9785. return o.
  9786. default.error(r, n), l = !0, t(r)
  9787. }
  9788. try {
  9789. i = JSON.parse(n.json_body || n.json)
  9790. } catch (e) {
  9791. var s = "Invalid json_body ".concat(p.responseText);
  9792. return o.
  9793. default.error(s), l = !0, t(s)
  9794. }
  9795. if (200 !== i.code) {
  9796. var c = "APPCENTER_CODE_".concat(i.code);
  9797. return o.
  9798. default.error(c, i), l = !0, t(c)
  9799. }
  9800. if (!(i.servers && i.servers.length > 0)) {
  9801. return o.
  9802. default.error("APPCENTER_EMPTY_SERVER", i), l = !0, t("APPCENTER_EMPTY_SERVER")
  9803. }
  9804. return l = !0, e(i)
  9805. }
  9806. }, p.onerror = function(e) {
  9807. var n = "AP_REUEST_".concat(e.type);
  9808. o.
  9809. default.error(n, i, e), l || (l = !0, t(n))
  9810. }, p.ontimeout = function(e) {
  9811. o.
  9812. default.error("AP_REUEST_TIMEOUT", i, e), l || (l = !0, t("AP_REUEST_TIMEOUT"))
  9813. }, u && (p.timeout = u), p.send(JSON.stringify({
  9814. service_name: a,
  9815. json_body: JSON.stringify({
  9816. command: "convergeAllocateEdge",
  9817. sid: s,
  9818. uid: n + "",
  9819. appId: c,
  9820. ts: Math.floor(Date.now() / 1e3),
  9821. seq: Et++,
  9822. cname: d,
  9823. version: r.VERSION,
  9824. requestId: It++
  9825. })
  9826. }))
  9827. }));
  9828. case 2:
  9829. case "end":
  9830. return e.stop()
  9831. }
  9832. }, e, this)
  9833. }));
  9834. return function(t) {
  9835. return e.apply(this, arguments)
  9836. }
  9837. }(), bt = function() {
  9838. var e = K()(Y.a.mark(function e(t) {
  9839. var n, i, a, s, c, d, u, l, p, f, m, g;
  9840. return Y.a.wrap(function(e) {
  9841. for (;;) switch (e.prev = e.next) {
  9842. case 0:
  9843. n = t.serviceName, i = t.sid, a = t.appId, s = t.cname, c = t.uid, d = null, e.t0 = Y.a.keys(Object(r.getParameter)("UAP_AP"));
  9844. case 3:
  9845. if ((e.t1 = e.t0()).done) {
  9846. e.next = 34;
  9847. break
  9848. }
  9849. return u = e.t1.value, l = "https://".concat(Object(r.getParameter)("UAP_AP")[u], "/api/v1?action=uap"), p = void 0, e.prev = 7, e.next = 10, yt({
  9850. uid: c,
  9851. url: l,
  9852. appId: a,
  9853. sid: i,
  9854. serviceName: n,
  9855. cname: s,
  9856. timeout: Object(r.getParameter)("HTTP_CONNECT_TIMEOUT")
  9857. });
  9858. case 10:
  9859. p = e.sent, e.next = 18;
  9860. break;
  9861. case 13:
  9862. return e.prev = 13, e.t2 = e.
  9863. catch (7), o.
  9864. default.error(e.t2), d = e.t2, e.abrupt("continue", 3);
  9865. case 18:
  9866. f = Y.a.mark(function e(t) {
  9867. var i, a, r;
  9868. return Y.a.wrap(function(e) {
  9869. for (;;) switch (e.prev = e.next) {
  9870. case 0:
  9871. if (i = p.servers[t], a = "wss://".concat(i.address.replace(/\./g, "-"), ".edge.").concat(t % 2 == 0 ? "agora.io" : "agoraio.cn", ":").concat(i.wss, "?serviceName=").concat(encodeURIComponent(n)), i.wss) {
  9872. e.next = 5;
  9873. break
  9874. }
  9875. return o.
  9876. default.error("Invalid server response", i), e.abrupt("return", "continue");
  9877. case 5:
  9878. return e.prev = 5, e.next = 8, new Promise(function(e, t) {
  9879. var n = new WebSocket(a),
  9880. i = !1;
  9881. n.addEventListener("open", function() {
  9882. i || (i = !0, e(n))
  9883. }), n.addEventListener("error", function(e) {
  9884. i || (i = !0, t(e))
  9885. })
  9886. });
  9887. case 8:
  9888. return (r = e.sent).workerToken = p.workerToken, e.abrupt("return", {
  9889. v: r
  9890. });
  9891. case 13:
  9892. e.prev = 13, e.t0 = e.
  9893. catch (5), o.
  9894. default.error(e.t0), d = e.t0;
  9895. case 17:
  9896. case "end":
  9897. return e.stop()
  9898. }
  9899. }, e, this, [
  9900. [5, 13]
  9901. ])
  9902. }), m = 0;
  9903. case 20:
  9904. if (!(m < p.servers.length)) {
  9905. e.next = 32;
  9906. break
  9907. }
  9908. return e.delegateYield(f(m), "t3", 22);
  9909. case 22:
  9910. g = e.t3, e.t4 = g, e.next = "continue" === e.t4 ? 26 : 27;
  9911. break;
  9912. case 26:
  9913. return e.abrupt("continue", 29);
  9914. case 27:
  9915. if ("object" !== Ae()(g)) {
  9916. e.next = 29;
  9917. break
  9918. }
  9919. return e.abrupt("return", g.v);
  9920. case 29:
  9921. m++, e.next = 20;
  9922. break;
  9923. case 32:
  9924. e.next = 3;
  9925. break;
  9926. case 34:
  9927. throw d;
  9928. case 35:
  9929. case "end":
  9930. return e.stop()
  9931. }
  9932. }, e, this, [
  9933. [7, 13]
  9934. ])
  9935. }));
  9936. return function(t) {
  9937. return e.apply(this, arguments)
  9938. }
  9939. }(), Rt = {},
  9940. At = function(e) {
  9941. return Rt[e] ? (Rt[e] += 1, Rt[e]) : (Rt[e] = 1, Rt[e])
  9942. },
  9943. Ot = {},
  9944. Ct = function(e) {
  9945. return Ot[e] ? (Ot[e] += 1, Ot[e]) : (Ot[e] = 1, Ot[e])
  9946. },
  9947. Nt = function(e) {
  9948. var t = e.appId,
  9949. n = e.cname,
  9950. i = e.uid,
  9951. a = e.sid,
  9952. s = c();
  9953. return s.status = ht, s.pingpongTimer = null, s.connection = null, s.requests = [], s.appId = t, s.cname = n, s.uid = i, s.sid = a, s.connection = null, s.connectionId = Tt++, s.connect = function() {
  9954. var e = K()(Y.a.mark(function e(t) {
  9955. var n;
  9956. return Y.a.wrap(function(e) {
  9957. for (;;) switch (e.prev = e.next) {
  9958. case 0:
  9959. if (n = t.wsClient, s.status === ht) {
  9960. e.next = 4;
  9961. break
  9962. }
  9963. return o.
  9964. default.debug("Ignored UapConnection.connect: ".concat(s.status)), e.abrupt("return");
  9965. case 4:
  9966. s.connection = n, s.status = St, s._flush(), s.startPingpong(), n.addEventListener("close", function(e) {
  9967. if (console.log("Weboskcet closed", e), n === s.connection) {
  9968. var t = {
  9969. type: "close",
  9970. evt: e
  9971. };
  9972. s.dispatchEvent(t)
  9973. }
  9974. }), n.addEventListener("message", function(e) {
  9975. if (e.data) {
  9976. var t = null;
  9977. try {
  9978. t = JSON.parse(e.data)
  9979. } catch (e) {
  9980. return void o.
  9981. default.error("Invalid data from worker manager", t)
  9982. }
  9983. if (t.requestId) for (var n = s.requests.length - 1; n >= 0; n--) {
  9984. var i = s.requests[n];
  9985. if (i.reqData.requestId === t.requestId) {
  9986. s.requests.splice(n, 1), t.code < 400 && t.code >= 200 ? i.promises.resolve(t) : i.promises.reject(t);
  9987. break
  9988. }
  9989. } else t.type = "notification", s.dispatchEvent(t)
  9990. }
  9991. });
  9992. case 10:
  9993. case "end":
  9994. return e.stop()
  9995. }
  9996. }, e, this)
  9997. }));
  9998. return function(t) {
  9999. return e.apply(this, arguments)
  10000. }
  10001. }(), s.disconnect = K()(Y.a.mark(function e() {
  10002. var t;
  10003. return Y.a.wrap(function(e) {
  10004. for (;;) switch (e.prev = e.next) {
  10005. case 0:
  10006. for (t in s.status = gt, clearInterval(s.pingpongTimer), s.pingpongTimer = null, s.requests) s.requests[t].promises.reject("DISCONNECTED");
  10007. return s.requests = [], null, s.connection && (s.connection.close(), s.connection = null), s.status = vt, e.abrupt("return", null);
  10008. case 9:
  10009. case "end":
  10010. return e.stop()
  10011. }
  10012. }, e, this)
  10013. })), s.request = function() {
  10014. var e = K()(Y.a.mark(function e(t) {
  10015. var n, i, a, c;
  10016. return Y.a.wrap(function(e) {
  10017. for (;;) switch (e.prev = e.next) {
  10018. case 0:
  10019. if (n = h()({
  10020. command: "request",
  10021. sdkVersion: r.VERSION,
  10022. seq: Ct(s.sid),
  10023. appId: s.appId,
  10024. cname: s.cname,
  10025. uid: "" + s.uid,
  10026. sid: s.sid,
  10027. requestId: At(s.sid),
  10028. ts: Math.floor(Date.now() / 1e3)
  10029. }, t), "INIT" !== s.status) {
  10030. e.next = 5;
  10031. break
  10032. }
  10033. return e.abrupt("return", new Promise(function(e, t) {
  10034. var i = {
  10035. reqData: n,
  10036. stalledTs: Date.now(),
  10037. timeoutCnt: 0,
  10038. promises: {
  10039. resolve: e,
  10040. reject: t
  10041. }
  10042. };
  10043. s.requests.push(i)
  10044. }));
  10045. case 5:
  10046. if (s.connection) {
  10047. e.next = 11;
  10048. break
  10049. }
  10050. throw i = "NO_WEBSOCKET_CONNECTION", o.
  10051. default.error(i), new Error(i);
  10052. case 11:
  10053. if (s.status !== gt || t.clientRequest && "DestroyWorker" === t.clientRequest.command) {
  10054. e.next = 17;
  10055. break
  10056. }
  10057. throw a = "WEBSOCKET_DISCONNECTING", o.
  10058. default.error(a), new Error(a);
  10059. case 17:
  10060. if ("DISCONNECTED" !== s.status) {
  10061. e.next = 23;
  10062. break
  10063. }
  10064. throw c = "WEBSOCKET_DISCONNECTED", o.
  10065. default.error(c), new Error(c);
  10066. case 23:
  10067. return e.abrupt("return", new Promise(function(e, t) {
  10068. var i = {
  10069. reqData: n,
  10070. stalledTs: Date.now(),
  10071. timeoutCnt: 0,
  10072. promises: {
  10073. resolve: e,
  10074. reject: t
  10075. }
  10076. };
  10077. s.requests.push(i), s._flush()
  10078. }));
  10079. case 24:
  10080. case "end":
  10081. return e.stop()
  10082. }
  10083. }, e, this)
  10084. }));
  10085. return function(t) {
  10086. return e.apply(this, arguments)
  10087. }
  10088. }(), s._flush = function() {
  10089. s.connection && s.status === St && s.requests.forEach(function(e) {
  10090. e.sentTs || (e.sentTs = Date.now(), e.reqData.clientRequest && (e.reqData.clientRequest.workerToken = s.connection.workerToken), s.connection.send(JSON.stringify(e.reqData)))
  10091. })
  10092. }, s.startPingpong = function() {
  10093. clearInterval(s.pingpongTimer), s.pingpongTimer = setInterval(K()(Y.a.mark(function e() {
  10094. return Y.a.wrap(function(e) {
  10095. for (;;) switch (e.prev = e.next) {
  10096. case 0:
  10097. if (s.status !== St || !s.connection || 1 !== s.connection.readyState) {
  10098. e.next = 9;
  10099. break
  10100. }
  10101. return e.prev = 1, e.next = 4, s.request({
  10102. command: "ping"
  10103. });
  10104. case 4:
  10105. e.next = 9;
  10106. break;
  10107. case 6:
  10108. e.prev = 6, e.t0 = e.
  10109. catch (1), console.error("pingpong", e.t0);
  10110. case 9:
  10111. case "end":
  10112. return e.stop()
  10113. }
  10114. }, e, this, [
  10115. [1, 6]
  10116. ])
  10117. })), 6e3)
  10118. }, s._flush(), s.startPingpong(), _t.push(s), s
  10119. },
  10120. wt = function(e) {
  10121. e.disconnect();
  10122. var t = _t.find(function(t) {
  10123. return e.connectionId === t.connectionId
  10124. });
  10125. _t.splice(t, 1)
  10126. },
  10127. Dt = function(e) {
  10128. return "number" == typeof e && 0 <= e && e <= 4294967295
  10129. };
  10130. var kt = function(e) {
  10131. var t = e;
  10132. if (Object(r.getParameter)("LIVESTREAMING_ALIGN")) switch (e) {
  10133. case 200:
  10134. t = I.INJECT_STREAM_STATUS.INJECT_STREAM_STATUS_START_SUCCESS;
  10135. break;
  10136. case 451:
  10137. t = I.INJECT_STREAM_STATUS.INJECT_STREAM_STATUS_START_ALREADY_EXISTS;
  10138. break;
  10139. case 453:
  10140. t = I.INJECT_STREAM_STATUS.INJECT_STREAM_STATUS_START_UNAUTHORIZED;
  10141. break;
  10142. case 470:
  10143. t = I.INJECT_STREAM_STATUS.INJECT_STREAM_STATUS_BROKEN;
  10144. break;
  10145. case 499:
  10146. t = I.INJECT_STREAM_STATUS.INJECT_STREAM_STATUS_START_TIMEDOUT;
  10147. break;
  10148. default:
  10149. t = I.INJECT_STREAM_STATUS.INJECT_STREAM_STATUS_START_FAILED
  10150. }
  10151. return t
  10152. },
  10153. Lt = function(e) {
  10154. var t = e;
  10155. if (Object(r.getParameter)("LIVESTREAMING_ALIGN")) switch (e) {
  10156. case 200:
  10157. t = I.INJECT_STREAM_STATUS.INJECT_STREAM_STATUS_STOP_SUCCESS;
  10158. break;
  10159. case 404:
  10160. case 452:
  10161. t = I.INJECT_STREAM_STATUS.INJECT_STREAM_STATUS_STOP_NOT_FOUND;
  10162. break;
  10163. case 453:
  10164. t = I.INJECT_STREAM_STATUS.INJECT_STREAM_STATUS_STOP_UNAUTHORIZED;
  10165. break;
  10166. case 499:
  10167. t = I.INJECT_STREAM_STATUS.INJECT_STREAM_STATUS_STOP_TIMEDOUT;
  10168. break;
  10169. default:
  10170. t = I.INJECT_STREAM_STATUS.INJECT_STREAM_STATUS_STOP_FAILED
  10171. }
  10172. return t
  10173. },
  10174. Mt = a(22), Pt = a.n(Mt), xt = function(e) {
  10175. var t = {
  10176. key: void 0,
  10177. highStream: null,
  10178. lowStream: null,
  10179. lowStreamParameter: null,
  10180. isDualStream: !1,
  10181. highStreamState: 2,
  10182. lowStreamState: 2,
  10183. proxyServer: null
  10184. };
  10185. t.turnServer = {
  10186. mode: "auto",
  10187. username: "test",
  10188. credential: "111111",
  10189. forceturn: Object(r.getParameter)("FORCE_TURN")
  10190. }, t.useProxyServer = !1, t.mode = e.mode, t.codec = e.codec, t.clientId = Object(F.generateSessionId)().slice(0, 5), t.uintUid = null;
  10191. e = h()({}, e);
  10192. return t.aespassword = null, t.aesmode = "none", t.hasPublished = !1, t.getSessionId = function() {
  10193. return e.sessionId
  10194. }, t.startChannelMediaRelay = function(n, i) {
  10195. var a = s.b.reportApiInvoke(e.sessionId, {
  10196. callback: function(e) {
  10197. if (e) return i && i(e);
  10198. i && i()
  10199. },
  10200. name: "Client.startChannelMediaRelay",
  10201. options: arguments,
  10202. tag: "tracer"
  10203. });
  10204. if (!(n instanceof ke.ChannelMediaRelayConfiguration)) throw "Configration should be instance of [ChannelMediaRelayConfiguration]";
  10205. var r = n.getSrcChannelMediaInfo(),
  10206. o = n.getDestChannelMediaInfos();
  10207. if (Object(W.isEmpty)(r)) throw "srcChannelMediaInfo should not be empty";
  10208. if (Object(W.isEmpty)(o) || 0 === o.length) throw "destChannelMediaInfos should not be empty";
  10209. if (!Object(F.is32Uint)(r.uid)) throw "Invalid uid in srcChannelMediaInfo";
  10210. if (!Object(W.isValidChannelName)(r.channelName)) throw "Invalid channelName in srcChannelMediaInfo";
  10211. if (r.token && !Object(W.isValidToken)(r.token)) throw "Invalid token in srcChannelMediaInfo";
  10212. if (o.forEach(function(e) {
  10213. if (!Object(F.is32Uint)(e.uid)) throw "Invalid uid in destChannelMediaInfo";
  10214. if (!Object(W.isValidChannelName)(e.channelName)) throw "Invalid channelName in destChannelMediaInfo";
  10215. if (e.token && !Object(W.isValidToken)(e.token)) throw "Invalid token in destChannelMediaInfo"
  10216. }), t.gatewayClient.state !== dt.CONNECTED) throw "startChannelMediaRelay should be used after join";
  10217. t.gatewayClient.startChannelMediaRelay(n).then(function() {
  10218. a && a()
  10219. }).
  10220. catch (function(e) {
  10221. a && a(e)
  10222. })
  10223. }, t.updateChannelMediaRelay = function(n, i) {
  10224. var a = s.b.reportApiInvoke(e.sessionId, {
  10225. callback: function(e) {
  10226. if (e) return i && i(e);
  10227. i && i()
  10228. },
  10229. name: "Client.updateChannelMediaRelay",
  10230. options: arguments,
  10231. tag: "tracer"
  10232. });
  10233. if (!(n instanceof ke.ChannelMediaRelayConfiguration)) throw "Configration should be instance of [ChannelMediaRelayConfiguration]";
  10234. var r = n.getSrcChannelMediaInfo(),
  10235. o = n.getDestChannelMediaInfos();
  10236. if (Object(W.isEmpty)(r)) throw "srcChannelMediaInfo should not be empty";
  10237. if (Object(W.isEmpty)(o) || 0 === o.length) throw "destChannelMediaInfos should not be empty";
  10238. if (!Object(F.is32Uint)(r.uid)) throw "Invalid uid in srcChannelMediaInfo";
  10239. if (!Object(W.isValidChannelName)(r.channelName)) throw "Invalid channelName in srcChannelMediaInfo";
  10240. if (r.token && !Object(W.isValidToken)(r.token)) throw "Invalid token in srcChannelMediaInfo";
  10241. if (o.forEach(function(e) {
  10242. if (!Object(F.is32Uint)(e.uid)) throw "Invalid uid in destChannelMediaInfo";
  10243. if (!Object(W.isValidChannelName)(e.channelName)) throw "Invalid channelName in destChannelMediaInfo";
  10244. if (e.token && !Object(W.isValidToken)(e.token)) throw "Invalid token in destChannelMediaInfo"
  10245. }), t.gatewayClient.state !== dt.CONNECTED) throw "updateChannelMediaRelay should be used after join";
  10246. t.gatewayClient.updateChannelMediaRelay(n).then(function() {
  10247. a && a()
  10248. }).
  10249. catch (function(e) {
  10250. a && a(e)
  10251. })
  10252. }, t.stopChannelMediaRelay = function(n) {
  10253. var i = s.b.reportApiInvoke(e.sessionId, {
  10254. callback: function(e) {
  10255. if (e) return n && n(e);
  10256. n && n()
  10257. },
  10258. name: "Client.stopChannelMediaRelay",
  10259. options: arguments,
  10260. tag: "tracer"
  10261. });
  10262. t.gatewayClient.stopChannelMediaRelay().then(function() {
  10263. i && i()
  10264. }).
  10265. catch (function(e) {
  10266. i && i(e)
  10267. })
  10268. }, t.getConnectionState = function() {
  10269. var n = s.b.reportApiInvoke(e.sessionId, {
  10270. name: "Client.getConnectionState",
  10271. options: arguments,
  10272. tag: "tracer"
  10273. }),
  10274. i = dt.connetionStateMap[t.gatewayClient.state];
  10275. return n(), i
  10276. }, t.setClientRole = function(n, i) {
  10277. var a = s.b.reportApiInvoke(e.sessionId, {
  10278. callback: i,
  10279. name: "Client.setClientRole",
  10280. options: arguments,
  10281. tag: "tracer"
  10282. });
  10283. if (Object(W.checkValidEnum)(n, "setClientRole", ["host", "audience"]), "rtc" === t.mode) {
  10284. var r = "RTC mode can not use setClientRole";
  10285. return o.
  10286. default.warning("[".concat(t.clientId, "] ").concat(r)), a && a(r)
  10287. }
  10288. t.gatewayClient && t.gatewayClient.state === dt.CONNECTED ? ("audience" === n && (0 === this.highStreamState ? this._unpublish(this.highStream, function() {
  10289. a && a(null, {
  10290. role: n
  10291. })
  10292. }, function(e) {
  10293. a && a(e)
  10294. }) : t.gatewayClient.setClientRole("audience", a)), "host" === n && t.gatewayClient.setClientRole("host", a)) : (t.gatewayClient.role = n, a && a(null, {
  10295. role: n
  10296. }))
  10297. }, t.getGatewayInfo = function(e) {
  10298. if (t.gatewayClient.state !== dt.CONNECTED) {
  10299. var n = "Client is not in connected state";
  10300. return o.
  10301. default.error("[".concat(t.clientId, "] ").concat(n)), void e(n)
  10302. }
  10303. t.gatewayClient.getGatewayInfo(function(t) {
  10304. e(null, t)
  10305. }, e)
  10306. }, t.renewToken = function(n, i, a) {
  10307. var r = s.b.reportApiInvoke(e.sessionId, {
  10308. callback: function(e, t) {
  10309. if (e) return o.
  10310. default.error("Failed to renew token ".concat(e), t), a && a(e);
  10311. i && i(t)
  10312. },
  10313. name: "Client.renewToken",
  10314. options: arguments,
  10315. tag: "tracer"
  10316. });
  10317. if (!Object(W.isValidToken)(n)) throw new Error("Invalid token: Token is of the string type .Length of the string: [1,255]. ASCII characters only.");
  10318. return t.gatewayClient ? t.key ? (t.key = n, void t.gatewayClient.renewToken(n, function(e) {
  10319. return r(null, e)
  10320. }, r)) : (o.
  10321. default.error("[".concat(t.clientId, "] renewToken should not be called before user join")), r(I.
  10322. default.INVALID_OPERATION)) : (o.
  10323. default.error("[".concat(t.clientId, "] renewToken Failed. GatewayClient not Exist")), r(I.
  10324. default.INVALID_OPERATION))
  10325. }, t.setLowStreamParameter = function(n) {
  10326. var i = s.b.reportApiInvoke(e.sessionId, {
  10327. name: "Client.setLowStreamParameter",
  10328. options: arguments,
  10329. tag: "tracer"
  10330. });
  10331. Object(W.checkValidObject)(n, "param");
  10332. var a = n.width,
  10333. r = n.height,
  10334. c = n.framerate,
  10335. d = n.bitrate;
  10336. Object(W.isEmpty)(a) || Object(W.checkValidNumber)(a, "width"), Object(W.isEmpty)(r) || Object(W.checkValidNumber)(r, "height"), Object(W.isEmpty)(c) || Object(W.checkValidNumber)(c, "framerate"), Object(W.isEmpty)(d) || Object(W.checkValidNumber)(d, "bitrate", 1, 1e7), (!a && r || a && !r) && o.
  10337. default.warning("[".concat(t.clientId, "] The width and height parameters take effect only when both are set")), t.lowStreamParameter = n, i()
  10338. }, t.init = function(n, i, a) {
  10339. var r = s.b.reportApiInvoke(e.sessionId, {
  10340. callback: function(e, t) {
  10341. if (e) return a && a(e);
  10342. i && i(t)
  10343. },
  10344. name: "Client.init",
  10345. options: arguments,
  10346. tag: "tracer"
  10347. });
  10348. Object(W.checkValidString)(n), Object(m.isChromeKernel)() && Object(m.getChromeKernelVersion)() <= 48 ? a ? r(I.
  10349. default.BAD_ENVIRONMENT) : Object(F.popBanTip)() : (o.
  10350. default.info("[".concat(t.clientId, "] Initializing AgoraRTC client, appId: ").concat(n, ".")), e.appId = n, e.sessionId = Object(F.generateSessionId)(), r())
  10351. }, t.setTurnServer = function(n) {
  10352. var i = s.b.reportApiInvoke(e.sessionId, {
  10353. name: "Client.setTurnServer",
  10354. options: arguments,
  10355. tag: "tracer"
  10356. });
  10357. if (t.gatewayClient && t.gatewayClient.state !== dt.DISCONNECTED) throw new Error("Set turn server before join channel");
  10358. if (t.useProxyServer) throw new Error("You have already set the proxy");
  10359. Object(W.checkValidObject)(n, "turnServer");
  10360. var a = n.turnServerURL,
  10361. r = n.username,
  10362. c = n.password,
  10363. d = n.udpport,
  10364. u = n.forceturn,
  10365. l = n.tcpport;
  10366. Object(W.checkValidString)(a, "turnServerURL"), Object(W.checkValidString)(r, "username"), Object(W.checkValidString)(c, "password"), Object(W.checkValidString)(d, "udpport"), Object(W.isEmpty)(u) || Object(W.checkValidBoolean)(u, "forceturn"), t.turnServer.mode = "manual", t.turnServer.url = a, t.turnServer.udpport = d, t.turnServer.username = r, t.turnServer.credential = c, t.turnServer.forceturn = u || !1, Object(W.isEmpty)(l) || (Object(W.checkValidString)(l, "tcpport"), t.turnServer.tcpport = l, o.
  10367. default.info("[".concat(t.clientId, "] Set turnserver tcpurl. ").concat(t.turnServer.url, ":").concat(t.turnServer.tcpport))), o.
  10368. default.info("[".concat(t.clientId, "] Set turnserver udpurl. ").concat(t.turnServer.url, ":").concat(t.turnServer.udpport, ",username: ").concat(t.turnServer.uername, ",password: ").concat(t.turnServer.credential)), i()
  10369. }, t.setProxyServer = function(n) {
  10370. var i = s.b.reportApiInvoke(e.sessionId, {
  10371. name: "Client.setProxyServer",
  10372. options: arguments,
  10373. tag: "tracer"
  10374. });
  10375. if (t.gatewayClient && t.gatewayClient.state !== dt.DISCONNECTED) throw new Error("Set proxy server before join channel");
  10376. if (!n) throw new Error("Do not set the proxyServer parameter as empty");
  10377. if (t.useProxyServer) throw new Error("You have already set the proxy");
  10378. Object(W.checkValidString)(n, "proxyServer"), t.proxyServer = n, s.b.setProxyServer(n), o.
  10379. default.setProxyServer(n), i()
  10380. }, t.startProxyServer = function() {
  10381. var n = s.b.reportApiInvoke(e.sessionId, {
  10382. name: "Client.startProxyServer",
  10383. options: arguments,
  10384. tag: "tracer"
  10385. });
  10386. if (t.gatewayClient && t.gatewayClient.state !== dt.DISCONNECTED) throw new Error("Start proxy server before join channel");
  10387. if (t.proxyServer || t.turnServer.url) throw new Error("You have already set the proxy");
  10388. t.useProxyServer = !0, n()
  10389. }, t.stopProxyServer = function() {
  10390. var n = s.b.reportApiInvoke(e.sessionId, {
  10391. name: "Client.stopProxyServer",
  10392. options: arguments,
  10393. tag: "tracer"
  10394. });
  10395. if (t.gatewayClient && t.gatewayClient.state !== dt.DISCONNECTED) throw new Error("Stop proxy server after leave channel");
  10396. s.b.setProxyServer(), o.
  10397. default.setProxyServer(), t.turnServer = {}, t.proxyServer = null, t.useProxyServer = !1, n()
  10398. }, t.setEncryptionSecret = function(n) {
  10399. var i = s.b.reportApiInvoke(e.sessionId, {
  10400. name: "Client.setEncryptionSecret",
  10401. options: arguments,
  10402. tag: "tracer"
  10403. });
  10404. Object(W.checkValidString)(n, "password"), t.aespassword = n, i()
  10405. }, t.setEncryptionMode = function(n) {
  10406. var i = s.b.reportApiInvoke(e.sessionId, {
  10407. name: "Client.setEncryptionMode",
  10408. options: arguments,
  10409. tag: "tracer"
  10410. });
  10411. if (Object(W.checkValidString)(n, "encryptionMode"), -1 === xe.indexOf(n)) throw new Error('Invalid encryptionMode: encryptionMode should be "aes-128-xts" | "aes-256-xts" | "aes-128-ecb"');
  10412. t.aesmode = n, i()
  10413. }, t.configPublisher = function(n) {
  10414. var i = s.b.reportApiInvoke(e.sessionId, {
  10415. name: "Client.configPublisher",
  10416. options: arguments,
  10417. tag: "tracer"
  10418. });
  10419. Object(W.checkValidObject)(n, "config");
  10420. var a = n.width,
  10421. r = n.height,
  10422. o = n.framerate,
  10423. c = n.bitrate,
  10424. d = n.publisherUrl;
  10425. Object(W.checkValidNumber)(a, "width"), Object(W.checkValidNumber)(r, "height"), Object(W.checkValidNumber)(o, "framerate"), Object(W.checkValidNumber)(c, "bitrate", 1, 1e7), d && Object(W.checkValidString)(d, "publisherUrl"), t.gatewayClient.configPublisher(n), i()
  10426. }, t.enableDualStream = function(n, i) {
  10427. var a = s.b.reportApiInvoke(e.sessionId, {
  10428. callback: function(e, t) {
  10429. if (e) return i && i(e);
  10430. n && n(t)
  10431. },
  10432. name: "Client.enableDualStream",
  10433. options: arguments,
  10434. tag: "tracer"
  10435. });
  10436. return "iOS" === Object(m.getBrowserOS)() ? (s.b.streamSwitch(e.sessionId, {
  10437. lts: (new Date).getTime(),
  10438. isdual: !0,
  10439. succ: !1
  10440. }), a(I.
  10441. default.IOS_NOT_SUPPORT)) : Object(m.isWeChatBrowser)() ? (s.b.streamSwitch(e.sessionId, {
  10442. lts: (new Date).getTime(),
  10443. isdual: !0,
  10444. succ: !1
  10445. }), a(I.
  10446. default.WECHAT_NOT_SUPPORT)) : (s.b.streamSwitch(e.sessionId, {
  10447. lts: (new Date).getTime(),
  10448. isdual: !0,
  10449. succ: !0
  10450. }), t.isDualStream = !0, t.highStream && (t.highStream.isDualStream = !0), void(0 === t.highStreamState ? t._publishLowStream(function(e) {
  10451. return a(null, e)
  10452. }, function(e) {
  10453. o.
  10454. default.warning("[".concat(t.clientId, "]"), e), a(I.
  10455. default.ENABLE_DUALSTREAM_FAILED)
  10456. }) : 1 === t.highStreamState ? a(I.
  10457. default.STILL_ON_PUBLISHING) : a(null)))
  10458. }, t.disableDualStream = function(n, i) {
  10459. var a = s.b.reportApiInvoke(e.sessionId, {
  10460. callback: function(e, t) {
  10461. if (e) return i && i(e);
  10462. n && n(t)
  10463. },
  10464. name: "Client.disableDualStream",
  10465. options: arguments,
  10466. tag: "tracer"
  10467. });
  10468. s.b.streamSwitch(e.sessionId, {
  10469. lts: (new Date).getTime(),
  10470. isdual: !1,
  10471. succ: !0
  10472. }), t.isDualStream = !1, t.highStream && (t.highStream.isDualStream = !1), 0 === t.highStreamState ? t._unpublishLowStream(function() {
  10473. t.highStream.lowStream = null, a()
  10474. }, function(e) {
  10475. o.
  10476. default.warning("[".concat(t.clientId, "]"), e), a(I.
  10477. default.DISABLE_DUALSTREAM_FAILED)
  10478. }) : 1 === t.highStreamState ? a(I.
  10479. default.STILL_ON_PUBLISHING) : a()
  10480. }, t._createLowStream = function(e, n) {
  10481. if (t.highStream && t.highStream.stream) {
  10482. var i = h()({}, t.highStream.params);
  10483. if (i.streamID += 1, i.audio = !1, i.video) {
  10484. var a = t.highStream.stream.getVideoTracks()[0];
  10485. a ? H.getVideoCameraIdByLabel(a.label, function(a) {
  10486. i.cameraId = a;
  10487. var s = new we(i);
  10488. if (s.isLowStream = !0, s.streamId = t.highStream.getId() + 1, t.lowStreamParameter) {
  10489. var c = h()({}, t.lowStreamParameter);
  10490. if (!c.width || !c.height) {
  10491. var d = ut(t.highStream.profile),
  10492. u = r.SUPPORT_RESOLUTION_LIST[d[0]];
  10493. c.width = u[0], c.height = u[1]
  10494. }
  10495. if (c.framerate = c.framerate || 5, c.bitrate = c.bitrate || 50, Object(m.isSafari)() || Object(m.isOpera)()) {
  10496. o.
  10497. default.debug("[".concat(t.clientId, "] Shimming lowStreamParameter"));
  10498. u = r.SUPPORT_RESOLUTION_LIST[t.highStream.profile];
  10499. c.width = u[0], c.height = u[1]
  10500. }
  10501. s.setVideoProfileCustomPlus(c)
  10502. } else s.setVideoProfileCustom(ut(t.highStream.profile));
  10503. s.init(function() {
  10504. t.highStream.lowStream = s, t.highStream.userMuteVideo && s.muteVideo(), e && e(s)
  10505. }, n)
  10506. }, n) : n && n(I.
  10507. default.HIGH_STREAM_NOT_VIDEO_TRACE)
  10508. } else n && n(I.
  10509. default.HIGH_STREAM_NOT_VIDEO_TRACE)
  10510. } else n && n(I.
  10511. default.HIGH_STREAM_NOT_VIDEO_TRACE)
  10512. }, t._getLowStream = function(e, n) {
  10513. t.lowStream ? e(t.lowStream) : t.highStream.videoSource ? t._createSourceLowStream(function(n) {
  10514. t.lowStream = n, e(t.lowStream)
  10515. }, n) : t._createLowStream(function(n) {
  10516. t.lowStream = n, e(t.lowStream)
  10517. }, n)
  10518. }, t._createSourceLowStream = function(e, n) {
  10519. var i = h()({}, t.highStream.params);
  10520. i.streamID += 1, i.audio = !1;
  10521. var a = new we(i);
  10522. if (a.isLowStream = !0, a.streamId = t.highStream.getId() + 1, !t.lowStreamParameter) return o.
  10523. default.debug("NOT_SET_LOW_STREAM_PARAMETER"), n && n("NOT_SET_LOW_STREAM_PARAMETER");
  10524. var r = h()({}, t.lowStreamParameter);
  10525. r.width && r.height || (r.width = 320, r.height = 240), r.framerate = r.framerate || 15, r.bitrate = r.bitrate || 200, a.setVideoProfileCustomPlus(r);
  10526. try {
  10527. var s = Pt()(t.highStream.stream, {
  10528. width: r.width,
  10529. height: r.height,
  10530. framerate: r.framerate
  10531. });
  10532. return a.stream = s, t.highStream.lowStream = a, t.highStream.userMuteVideo && a.muteVideo(), e && e(a)
  10533. } catch (e) {
  10534. return n && n(e)
  10535. }
  10536. }, t._publishLowStream = function(e, n) {
  10537. return 2 !== t.lowStreamState ? n && n(I.
  10538. default.LOW_STREAM_ALREADY_PUBLISHED) : t.highStream && t.highStream.hasScreen() ? n && n(I.
  10539. default.SHARING_SCREEN_NOT_SUPPORT) : void t._getLowStream(function(i) {
  10540. t.lowStreamState = 1, t.gatewayClient.publish(i, {
  10541. streamType: 1
  10542. }, function() {
  10543. t.lowStreamState = 0, e && e()
  10544. }, function(e) {
  10545. 1 === t.lowStreamState && (t.lowStreamState = 2), o.
  10546. default.debug("[".concat(t.clientId, "] publish low stream failed")), n && n(e)
  10547. })
  10548. }, n)
  10549. }, t._unpublishLowStream = function(e, n) {
  10550. if (0 !== t.lowStreamState) return n && n(I.
  10551. default.LOW_STREAM_NOT_YET_PUBLISHED);
  10552. t.lowStream && (t.gatewayClient.unpublish(t.lowStream, {
  10553. streamType: 1
  10554. }, function() {}, function(e) {
  10555. o.
  10556. default.debug("[".concat(t.clientId, "] unpublish low stream failed")), n && n(e)
  10557. }), t.lowStream.close(), t.lowStream = null, t.lowStreamState = 2, e && e())
  10558. }, t.join = function(n, i, a, r, c) {
  10559. var d = s.b.reportApiInvoke(e.sessionId, {
  10560. callback: function(e, t) {
  10561. if (e) return c && c(e);
  10562. r && r(t)
  10563. },
  10564. name: "Client.join",
  10565. options: arguments,
  10566. tag: "tracer"
  10567. });
  10568. if (n && !Object(W.isValidToken)(n)) return o.
  10569. default.warning("[".concat(t.clientId, "] Param channelKey should be string")), d(I.
  10570. default.INVALID_PARAMETER);
  10571. if (!Object(W.isValidChannelName)(i)) return o.
  10572. default.error("Invalid Channel Name ".concat(i)), o.
  10573. default.warning("[".concat(t.clientId, "] The length must be within 64 bytes. The supported characters: a-z,A-Z,0-9,space,!, #, $, %, &, (, ), +, -, :, ;, <, =, ., >, ?, @, [, ], ^, _, {, }, |, ~, ,")), d(I.
  10574. default.INVALID_PARAMETER);
  10575. if ("string" == typeof i && "" === i) return o.
  10576. default.warning("[".concat(t.clientId, "] Param channel should not be empty")), d(I.
  10577. default.INVALID_PARAMETER);
  10578. if (a && !Object(F.is32Uint)(a) && !Object(W.isValidString)(a, 1, 255)) return o.
  10579. default.error("Invalid UID ".concat(a, " ").concat(Ae()(a))), o.
  10580. default.warning("[".concat(t.clientId, "] [String uid] Length of the string: [1,255]. ASCII characters only. [Number uid] The value range is [0,10000]")), d(I.
  10581. default.INVALID_PARAMETER);
  10582. if ("string" == typeof a && 0 == a.length) return o.
  10583. default.warning("[".concat(t.clientId, "] String uid should not be empty")), d(I.
  10584. default.INVALID_PARAMETER);
  10585. if ("string" == typeof a && a.length > 256) return o.
  10586. default.warning("[".concat(t.clientId, "] Length of string uid should be less than 255")), d(I.
  10587. default.INVALID_PARAMETER);
  10588. t.highStream = null, t.lowStream = null, t.lowStreamParameter = null, t.isDualStream = !1, t.highStreamState = 2, t.lowStreamState = 2;
  10589. var u = {
  10590. clientId: t.clientId,
  10591. appId: e.appId,
  10592. sid: e.sessionId,
  10593. cname: i,
  10594. uid: a,
  10595. turnServer: t.turnServer,
  10596. proxyServer: t.proxyServer,
  10597. token: n || e.appId,
  10598. useProxyServer: t.useProxyServer
  10599. };
  10600. if ("string" == typeof a && (u.stringUid = a, t.uintUid ? (u.uid = t.uintUid, delete t.uintUid) : u.uid = 0), t.aespassword && "none" !== t.aesmode && h()(u, {
  10601. aespassword: t.aespassword,
  10602. aesmode: t.aesmode
  10603. }), s.b.sessionInit(e.sessionId, {
  10604. lts: (new Date).getTime(),
  10605. cname: i,
  10606. appid: e.appId,
  10607. mode: e.mode,
  10608. succ: !0
  10609. }), t.onSuccess = function(e) {
  10610. t.rtcStatsCollector.startNetworkQualityTimer(), t.onSuccess = null, d(null, e)
  10611. }, t.onFailure = function(e) {
  10612. return d(e)
  10613. }, t.channel = i, t.gatewayClient.state !== dt.DISCONNECTED) return o.
  10614. default.error("[".concat(t.clientId, "] Client already in connecting/connected state")), d(I.
  10615. default.INVALID_OPERATION), void s.b.joinGateway(e.sessionId, {
  10616. lts: Date.now(),
  10617. succ: !1,
  10618. ec: I.
  10619. default.INVALID_OPERATION,
  10620. addr:
  10621. null
  10622. });
  10623. t.gatewayClient.state = dt.CONNECTING;
  10624. var l = function(a, r) {
  10625. o.
  10626. default.info("[".concat(t.clientId, "] Joining channel: ").concat(i)), t.gatewayClient.dispatchEvent({
  10627. type: "config-distribute",
  10628. config: r,
  10629. joinInfo: u
  10630. }), t.key = n || e.appId, u.cid = a.cid, u.uid || (u.uid = a.uid), u.vid = a.vid, u.clientId = t.clientId, u.apResponse = a.res, a.uni_lbs_ip && a.uni_lbs_ip[1] && (u.uni_lbs_ip = a.uni_lbs_ip[1]), u.gatewayAddr = a.gateway_addr, t.joinInfo = u, t.gatewayClient.join(u, t.key, function(e) {
  10631. o.
  10632. default.info("[".concat(t.clientId, "] Join channel ").concat(i, " success, join with uid: ").concat(e, ".")), t.onSuccess = null, t.rtcStatsCollector.startNetworkQualityTimer(), d(null, e)
  10633. }, function(e) {
  10634. return d(e)
  10635. })
  10636. };
  10637. u.stringUid && !u.uid ? (t.userAccountReq && !t.userAccountReq.isFinished() && t.userAccountReq.cancel(), t.userAccountReq = Ze(u, t.gatewayClient), t.userAccountReq.then(function(e) {
  10638. o.
  10639. default.debug("getUserAccount Success ".concat(e.url, " ").concat(u.stringUid, " => ").concat(e.uid)), u.uid = e.uid, Qe(u, l, function(e) {
  10640. return d(e)
  10641. })
  10642. }).
  10643. catch (function(e) {
  10644. o.
  10645. default.error("getUserAccount rejected", e), d(e)
  10646. })):
  10647. Qe(u, l, function(e) {
  10648. return d(e)
  10649. })
  10650. }, t.renewChannelKey = function(n, i, a) {
  10651. var r = s.b.reportApiInvoke(e.sessionId, {
  10652. callback: function(e, t) {
  10653. if (e) return a && a(e);
  10654. i && i(t)
  10655. },
  10656. name: "Client.renewChannelKey",
  10657. options: arguments,
  10658. tag: "tracer"
  10659. });
  10660. Object(W.checkValidString)(n, "key", 1, 2047), void 0 === t.key ? (o.
  10661. default.error("[".concat(t.clientId, "] renewChannelKey should not be called before user join")), r(I.
  10662. default.INVALID_OPERATION)) : (t.key = n, t.gatewayClient.joinInfo.token = n, t.gatewayClient.key = n, t.gatewayClient.recover(), r())
  10663. }, t.leave = function(n, i) {
  10664. t.gatewayClient.hasInvokeLeave = !0;
  10665. var a = !1,
  10666. c = s.b.reportApiInvoke(e.sessionId, {
  10667. callback: function(e, a) {
  10668. if (e) return i && i(e);
  10669. var r;
  10670. t.gatewayClient.reconnectingCS = !1, t.gatewayClient.state = dt.DISCONNECTED, clearTimeout((r = t.clientId, Ke[r])), t._renewSession(), t.rtcStatsCollector.clearNetworkQualityTimer(), n && n(a)
  10671. },
  10672. name: "Client.leave",
  10673. options: arguments,
  10674. tag: "tracer"
  10675. });
  10676. o.
  10677. default.info("[".concat(t.clientId, "] Leaving channel")), t.userAccountReq && !t.userAccountReq.isFinished() && (t.userAccountReq.cancel(), t.gatewayClient.state === dt.CONNECTING && (t.gatewayClient.state = dt.DISCONNECTED)), t.gatewayClient.leave(function(e) {
  10678. a = !0, c(null, e)
  10679. }, c), setTimeout(function() {
  10680. a || (t.gatewayClient.socket && (t.gatewayClient.socket.close(), t.gatewayClient.socket = null), t.gatewayClient.state = dt.DISCONNECTED, c(null, "LEAVE_MSG_TIMEOUT"))
  10681. }, Object(r.getParameter)("LEAVE_MSG_TIMEOUT"))
  10682. }, t._renewSession = function() {
  10683. var n = Object(F.generateSessionId)();
  10684. if (o.
  10685. default.debug("renewSession ".concat(e.sessionId, " => ").concat(n)), e.sessionId = n, t.joinInfo && (t.joinInfo.sid = n), t.gatewayClient && (t.gatewayClient.joinInfo && (t.gatewayClient.joinInfo.sid = n), t.gatewayClient.localStreams)) for (var i in t.gatewayClient.localStreams) {
  10686. var a = t.gatewayClient.localStreams[i];
  10687. a && (a.sid = n)
  10688. }
  10689. }, t._publish = function(n, i, a, s) {
  10690. if (2 !== t.highStreamState) return o.
  10691. default.warning("[".concat(t.clientId, "] Can't publish stream when stream already publish ").concat(n.getId())), a && a(I.
  10692. default.STREAM_ALREADY_PUBLISHED);
  10693. if ("auto" === t.turnServer.mode && Object(r.getParameter)("FORCE_TURN") && !Object(r.getParameter)("TURN_ENABLE_TCP") && !Object(r.getParameter)("TURN_ENABLE_UDP")) throw new Error("force TURN With No TURN Configuration");
  10694. o.
  10695. default.info("[".concat(t.clientId, "] Publishing stream, uid ").concat(n.getId())), t.highStream = n, t.highStreamState = 1, t.highStream.streamId = t.joinInfo.stringUid || t.joinInfo.uid, t.hasPublished = !1;
  10696. var c = function(n, i, a) {
  10697. t.gatewayClient.publish(n, {
  10698. streamType: 0
  10699. }, function() {
  10700. n.sid = e.sessionId, t.highStreamState = 0, o.
  10701. default.info("[".concat(t.clientId, "] Publish success, uid: ").concat(n.getId())), t.highStream && (t.highStream.isDualStream = t.isDualStream), t.isDualStream ? t._publishLowStream(function() {
  10702. i && i()
  10703. }, function(e) {
  10704. o.
  10705. default.warning("[".concat(t.clientId, "] "), e), be.replaceWithCanvasTrack(n), i && i()
  10706. }):
  10707. (be.replaceWithCanvasTrack(n), i && i())
  10708. }, a)
  10709. };
  10710. "audience" !== t.gatewayClient.role || "live" !== t.mode || s ? c(n, i, a):
  10711. t.gatewayClient.setClientRole("host", function(e) {
  10712. if (e) return a && a(e);
  10713. c(n, i, a)
  10714. })
  10715. }, t._unpublish = function(e, n, i, a) {
  10716. if (0 !== t.highStreamState) return o.
  10717. default.warning("[".concat(t.clientId, "] Can't unpublish stream when stream not publish")), i && i(I.
  10718. default.STREAM_NOT_YET_PUBLISHED);
  10719. o.
  10720. default.info("[".concat(t.clientId, "] Unpublish stream, uid ").concat(e.getId()));
  10721. var r = function(e, n, i) {
  10722. t.isDualStream && t.lowStream && t._unpublishLowStream(null, i), t.gatewayClient.unpublish(e, {
  10723. streamType: 0
  10724. }, function() {
  10725. t.highStreamState = 2, o.
  10726. default.info("[".concat(t.clientId, "] Unpublish stream success, uid: ").concat(e.getId())), n && n()
  10727. }, function(n) {
  10728. o.
  10729. default.info("[".concat(t.clientId, "] Unpublish stream fail, uid: ").concat(e.getId())), i && i(n)
  10730. })
  10731. };
  10732. "host" !== t.gatewayClient.role || "live" !== t.mode || a ? r(e, n, i):
  10733. t.gatewayClient.setClientRole("audience", function(t) {
  10734. if (t) return i && i(t);
  10735. r(e, n, i)
  10736. })
  10737. }, t.publish = function(n, i) {
  10738. var a = s.b.reportApiInvoke(e.sessionId, {
  10739. callback: function(e, n) {
  10740. if (e) return 1 === t.highStreamState && (t.highStreamState = 2), i && i(e)
  10741. },
  10742. name: "Client.publish",
  10743. tag: "tracer",
  10744. options: {
  10745. stream: "too long to show",
  10746. onFailure: !! i
  10747. }
  10748. });
  10749. 2 === t.highStreamState ? n._hasVideoTracks() || n._hasAudioTracks() ? t._publish(n, function(e) {
  10750. return a(null, e)
  10751. }, function(e) {
  10752. return a(e)
  10753. }) : a(I.
  10754. default.NO_TRACK_IN_STREAM) : a(I.
  10755. default.STREAM_ALREADY_PUBLISHED)
  10756. }, t.unpublish = function(n, i, a) {
  10757. var r = s.b.reportApiInvoke(e.sessionId, {
  10758. callback: function(e, t) {
  10759. if (e) return i && i(e);
  10760. a && a(t)
  10761. },
  10762. name: "Client.unpublish",
  10763. tag: "tracer",
  10764. options: {
  10765. stream: "too long to show",
  10766. onFailure: !! i
  10767. }
  10768. });
  10769. 0 === t.highStreamState ? t._unpublish(n, function(e) {
  10770. return r(null, e)
  10771. }, function(e) {
  10772. return r(e)
  10773. }) : r(I.
  10774. default.STREAM_NOT_YET_PUBLISHED)
  10775. }, t.subscribe = function(n, i, a) {
  10776. var r = s.b.reportApiInvoke(e.sessionId, {
  10777. callback: function(e, t) {
  10778. if (e) return a && a(e)
  10779. },
  10780. name: "Client.subscribe",
  10781. tag: "tracer",
  10782. options: {
  10783. stream: "too long to show",
  10784. options: i,
  10785. onFailure: !! a
  10786. }
  10787. });
  10788. "function" == typeof i && (a = i, i = null), Object(W.checkValidObject)(n, "stream"), Object(W.isEmpty)(i) || (Object(W.checkValidObject)(i, "options"), Object(W.isEmpty)(i.video) || Object(W.checkValidBoolean)(i.video, "options.video"), Object(W.isEmpty)(i.audio) || Object(W.checkValidBoolean)(i.audio, "options.audio"));
  10789. var c = {
  10790. video: !0,
  10791. audio: !0
  10792. };
  10793. if (!Object(W.isEmpty)(i)) {
  10794. if (Object(m.isSafari)() && (!i.video || !i.audio)) {
  10795. var d = "SAFARI_NOT_SUPPORTED_FOR_TRACK_SUBSCRIPTION";
  10796. return o.
  10797. default.error("[".concat(t.clientId, "] "), d), void r(d)
  10798. }
  10799. if (!Object(W.isEmpty)(i.video) && !Object(W.isValidBoolean)(i.video) || !Object(W.isEmpty)(i.audio) && !Object(W.isValidBoolean)(i.audio) || !1 === i.audio && !1 === i.video) {
  10800. d = "INVALID_PARAMETER ".concat(JSON.stringify(i));
  10801. return o.
  10802. default.error("[".concat(t.clientId, "] "), d), void r(d)
  10803. }
  10804. }
  10805. n.subscribeOptions ? (h()(n.subscribeOptions, c, i), t.gatewayClient.subscribeChange(n, function(e) {
  10806. return r(null, e)
  10807. }, r)) : (n.subscribeOptions = h()({}, c, i), t.gatewayClient.subscribe(n, function(e) {
  10808. return r(null, e)
  10809. }, r))
  10810. }, t.unsubscribe = function(n, i) {
  10811. var a = s.b.reportApiInvoke(e.sessionId, {
  10812. callback: function(e, t) {
  10813. if (e) return i && i(e)
  10814. },
  10815. name: "Client.unsubscribe",
  10816. tag: "tracer",
  10817. options: {
  10818. stream: "too long to show",
  10819. onFailure: !! i
  10820. }
  10821. });
  10822. o.
  10823. default.info("[".concat(t.clientId, "] Unsubscribe stream, uid: ").concat(n.getId())), t.gatewayClient.unsubscribe(n, function(e) {
  10824. return a(null, e)
  10825. }, a)
  10826. }, t.setRemoteVideoStreamType = function(n, i) {
  10827. var a = s.b.reportApiInvoke(e.sessionId, {
  10828. name: "Client.setRemoteVideoStreamType",
  10829. tag: "tracer",
  10830. options: {
  10831. stream: "too long to show",
  10832. streamType: i
  10833. }
  10834. });
  10835. Object(W.checkValidEnum)(i, "streamType", [0, 1]), t.gatewayClient.setRemoteVideoStreamType(n, i), a()
  10836. }, t.setStreamFallbackOption = function(n, i) {
  10837. var a = s.b.reportApiInvoke(e.sessionId, {
  10838. name: "Client.setStreamFallbackOption",
  10839. tag: "tracer",
  10840. options: {
  10841. stream: "too long to show",
  10842. fallbackType: i
  10843. }
  10844. });
  10845. Object(W.checkValidEnum)(i, "fallbackType", [0, 1, 2]), t.gatewayClient.setStreamFallbackOption(n, i), a()
  10846. }, t.enableAudioVolumeIndicator = function(n, i) {
  10847. var a = s.b.reportApiInvoke(e.sessionId, {
  10848. name: "Client.enableAudioVolumeIndicator",
  10849. options: arguments,
  10850. tag: "tracer"
  10851. });
  10852. n = n || 2e3, i = i || 3, Object(W.checkValidNumber)(i, "smooth", 1, 100), Object(W.checkValidNumber)(n, "interval", 50, 1e5), t.audioVolumeIndication = t.audioVolumeIndication || {
  10853. enabled: !0
  10854. }, t.audioVolumeIndication.interval = n, t.audioVolumeIndication.smooth = i, t.audioVolumeIndication = {
  10855. interval: n,
  10856. smooth: i
  10857. }, o.
  10858. default.info("[".concat(t.clientId, "] enableAudioVolumeIndicator interval ").concat(n, " smooth ").concat(i)), t.gatewayClient.enableAudioVolumeIndicator(n, i), a()
  10859. }, t.getNetworkStats = function(e, n) {
  10860. return o.
  10861. default.deprecate("[".concat(t.clientId, "] client.getNetworkStats is deprecated. Use client.getTransportStats instead.")), mt.getStats(e, n)
  10862. }, t.getSystemStats = function(e, t) {
  10863. return v.getStats(e, t)
  10864. }, t.getRecordingDevices = function(e, t) {
  10865. return H.getRecordingDevices(e, t)
  10866. }, t.getPlayoutDevices = function(e, t) {
  10867. return H.getPlayoutDevices(e, t)
  10868. }, t.getCameras = function(e, t) {
  10869. return H.getCameras(e, t)
  10870. }, t.getRemoteAudioStats = function(e, n) {
  10871. return t.rtcStatsCollector.getRemoteAudioStats(e, n)
  10872. }, t.getLocalAudioStats = function(e, n) {
  10873. return t.rtcStatsCollector.getLocalAudioStats(e, n)
  10874. }, t.getRemoteVideoStats = function(e, n) {
  10875. return t.rtcStatsCollector.getRemoteVideoStats(e, n)
  10876. }, t.getLocalVideoStats = function(e, n) {
  10877. return t.rtcStatsCollector.getLocalVideoStats(e, n)
  10878. }, t._getRemoteVideoQualityStats = function(e, n) {
  10879. return t.rtcStatsCollector.getRemoteVideoQualityStats(e, n)
  10880. }, t._getRemoteAudioQualityStats = function(e, n) {
  10881. return t.rtcStatsCollector.getRemoteAudioQualityStats(e, n)
  10882. }, t.getTransportStats = function(e, n) {
  10883. return t.rtcStatsCollector.getTransportStats(function(t) {
  10884. return mt.getStats(function(n) {
  10885. var i = h()({}, t, n);
  10886. e && e(i)
  10887. }, n)
  10888. }, n)
  10889. }, t.getSessionStats = function(e, n) {
  10890. return t.rtcStatsCollector.getSessionStats(e, n)
  10891. }, t.onNetworkQuality = function() {
  10892. return t.rtcStatsCollector.onNetworkQuality(onSuccess, onFailure)
  10893. }, e.clientId = t.clientId, t.gatewayClient = dt(e), t.listenerLoggerTimer = null, t.listenerLoggerCache = [], t.on = function(e, n) {
  10894. t.gatewayClient.on(e, n), t.listenerLoggerCache.push("".concat(e).concat(n.name ? ":" + n.name : "")), t.listenerLoggerTimer ? clearTimeout(t.listenerLoggerTimer) : o.
  10895. default.info("[".concat(t.clientId, "] Adding event handler on ").concat(e)), t.listenerLoggerTimer = setTimeout(function() {
  10896. t.listenerLoggerCache.length && (t.listenerLoggerTimer = null, o.
  10897. default.info("[".concat(t.clientId, "] Added event handler on ").concat(t.listenerLoggerCache.join(", "))), t.listenerLoggerCache = [])
  10898. }, 0)
  10899. }, t.off = function(e, n) {
  10900. o.
  10901. default.info("remove event handler from [".concat(e, "]")), t.gatewayClient.removeEventListener(e, n)
  10902. }, t.rtcStatsCollector = function(e) {
  10903. var t = c();
  10904. return t.gatewayClient = e, t.exceptionMonitor = new ft(e), t.localStats = {}, t.remoteStats = {}, t.session = {
  10905. sendBytes: 0,
  10906. recvBytes: 0,
  10907. WSSendBytes: 0,
  10908. WSSendBytesDelta: 0,
  10909. WSRecvBytes: 0,
  10910. WSRecvBytesDelta: 0,
  10911. HTTPSendBytes: 0,
  10912. HTTPSendBytesDelta: 0,
  10913. HTTPRecvBytes: 0,
  10914. HTTPRecvBytesDelta: 0
  10915. }, t.getRemoteAudioStats = function(e) {
  10916. var n = {};
  10917. for (var i in t.remoteStats) {
  10918. var a = {},
  10919. r = t.remoteStats[i];
  10920. B(a, "End2EndDelay", r.peer_delay && r.peer_delay.audio_delay), B(a, "TransportDelay", r.peer_delay && r.peer_delay.e2e_delay), B(a, "PacketLossRate", r.peer_delay && r.peer_delay.e2e_audio_lost_ratio_400ms), B(a, "RecvLevel", r.audioStats && r.audioStats.audioOutputLevel), B(a, "RecvBitrate", r.audioRecvBitrate), B(a, "CodecType", r.audioStats && r.audioStats.googCodecName), B(a, "MuteState", r.audioDisabled), B(a, "TotalFreezeTime", r.audioStats && r.audioStats.audioTotalFreezeTime), B(a, "TotalPlayDuration", r.audioStats && r.audioStats.audioTotalPlayDuration), n[i] = a
  10921. }
  10922. e && e(n)
  10923. }, t.getLocalAudioStats = function(e) {
  10924. var n = {};
  10925. for (var i in t.localStats) {
  10926. var a = {},
  10927. r = t.localStats[i];
  10928. B(a, "RecordingLevel", r.audioStats && r.audioStats.audioInputLevel), B(a, "SendLevel", r.audioStats && r.audioStats.totalAudioEnergy), B(a, "SamplingRate", r.audioStats && r.audioStats.totalSamplesDuration), B(a, "SendBitrate", r.audioSendBitrate), B(a, "CodecType", r.audioStats && r.audioStats.googCodecName), B(a, "MuteState", r.audioDisabled);
  10929. var o = t.gatewayClient.localStreams[i];
  10930. o && o.isPlaying() && B(a, "MuteState", o.userMuteAudio ? "1" : "0"), n[i] = a
  10931. }
  10932. e && e(n)
  10933. }, t.getRemoteVideoStats = function(e) {
  10934. var n = {};
  10935. for (var i in t.remoteStats) {
  10936. var a = {},
  10937. r = t.remoteStats[i];
  10938. B(a, "End2EndDelay", r.peer_delay && r.peer_delay.video_delay), B(a, "TransportDelay", r.peer_delay && r.peer_delay.e2e_delay), B(a, "PacketLossRate", r.peer_delay && r.peer_delay.e2e_video_lost_ratio_400ms), B(a, "RecvBitrate", r.videoRecvBitrate), B(a, "RecvResolutionWidth", r.videoStats && r.videoStats.googFrameWidthReceived), B(a, "RecvResolutionHeight", r.videoStats && r.videoStats.googFrameHeightReceived), B(a, "RenderResolutionWidth", r.videoStats && r.videoStats.renderRemoteWidth), B(a, "RenderResolutionHeight", r.videoStats && r.videoStats.renderRemoteHeight), B(a, "RenderFrameRate", r.videoStats && r.videoStats.googFrameRateOutput), B(a, "MuteState", r.videoDisabled), B(a, "TotalFreezeTime", r.videoStats && r.videoStats.videoTotalFreezeTime), B(a, "TotalPlayDuration", r.videoStats && r.videoStats.videoTotalPlayDuration), n[i] = a
  10939. }
  10940. e && e(n)
  10941. }, t.getLocalVideoStats = function(e) {
  10942. var n = {};
  10943. for (var i in t.localStats) {
  10944. var a = {},
  10945. r = t.localStats[i];
  10946. B(a, "TargetSendBitrate", r.videoTargetSendBitrate), B(a, "SendFrameRate", r.videoStats && r.videoStats.googFrameRateSent), B(a, "SendBitrate", r.videoSendBitrate), B(a, "SendResolutionWidth", r.videoStats && r.videoStats.googFrameWidthSent), B(a, "SendResolutionHeight", r.videoStats && r.videoStats.googFrameHeightSent), B(a, "CaptureResolutionWidth", r.videoStats && r.videoStats.googFrameWidthInput), B(a, "CaptureResolutionHeight", r.videoStats && r.videoStats.googFrameHeightInput), B(a, "EncodeDelay", r.videoStats && r.videoStats.googAvgEncodeMs), B(a, "MuteState", r.videoDisabled), B(a, "TotalFreezeTime", r.videoStats && r.videoStats.videoTotalFreezeTime), B(a, "TotalDuration", r.videoStats && r.videoStats.videoTotalPlayDuration), B(a, "CaptureFrameRate", r.videoStats && r.videoStats.googFrameRateSent), r.videoStats && !r.videoStats.googFrameWidthInput && B(a, "CaptureResolutionWidth", r.videoStats && r.videoStats.renderLocalWidth), r.videoStats && !r.videoStats.googFrameHeightInput && B(a, "CaptureResolutionHeight", r.videoStats && r.videoStats.renderLocalHeight), n[i] = a, e && e(n)
  10947. }
  10948. }, t.getRemoteVideoQualityStats = function(e) {
  10949. var n = {};
  10950. for (var i in t.remoteStats) {
  10951. var a = {},
  10952. r = t.remoteStats[i];
  10953. B(a, "videoReceiveDelay", r.videoStats && r.videoStats.googCurrentDelayMs), B(a, "VideoFreezeRate", r.videoStats && r.videoStats.videoFreezeRate), B(a, "FirstFrameTime", r.firstFrameTime), n[i] = a
  10954. }
  10955. e && e(n)
  10956. }, t.getRemoteAudioQualityStats = function(e) {
  10957. var n = {};
  10958. for (var i in t.remoteStats) {
  10959. var a = {},
  10960. r = t.remoteStats[i];
  10961. B(a, "audioReceiveDelay", r.audioStats && r.audioStats.googCurrentDelayMs), B(a, "AudioFreezeRate", r.videoStats && r.videoStats.videoFreezeRate), n[i] = a
  10962. }
  10963. e && e(n)
  10964. }, t.getTransportStats = function(e) {
  10965. var n = {},
  10966. i = {},
  10967. a = t.gatewayClient.traffic_stats,
  10968. r = a.peer_delay;
  10969. if (B(n, "OutgoingAvailableBandwidth", t.gatewayClient.OutgoingAvailableBandwidth / 1e3), B(n, "RTT", a && a.access_delay), r) {
  10970. var o = !0,
  10971. s = !1,
  10972. c = void 0;
  10973. try {
  10974. for (var d, u = r[Symbol.iterator](); !(o = (d = u.next()).done); o = !0) {
  10975. var l = d.value;
  10976. l.downlink_estimate_bandwidth && (i[l.peer_uid] = l.downlink_estimate_bandwidth / 1e3 + "")
  10977. }
  10978. } catch (e) {
  10979. s = !0, c = e
  10980. } finally {
  10981. try {
  10982. o || null == u.
  10983. return ||u.
  10984. return ()
  10985. } finally {
  10986. if (s) throw c
  10987. }
  10988. }
  10989. }
  10990. n.IncomingAvailableBandwidth = i, e && e(n)
  10991. }, t.getSessionStats = function(e) {
  10992. var n = {},
  10993. i = t.gatewayClient.traffic_stats,
  10994. a = t.gatewayClient.socket,
  10995. r = 0,
  10996. o = 0;
  10997. for (var s in t.remoteStats)(c = t.remoteStats[s]) && c.videoStats && c.videoStats.videoRecvBytesDelta && (o += parseInt(c.videoStats.videoRecvBytesDelta)), c && c.audioStats && c.audioStats.audioRecvBytesDelta && (o += parseInt(c.audioStats.audioRecvBytesDelta));
  10998. for (var s in t.localStats) {
  10999. var c;
  11000. (c = t.localStats[s]) && c.videoStats && c.videoStats.videoSendBytesDelta && (r += parseInt(c.videoStats.videoSendBytesDelta)), c && c.audioStats && c.audioStats.audioSendBytesDelta && (r += parseInt(c.audioStats.audioSendBytesDelta))
  11001. }
  11002. var d = r + t.session.WSSendBytesDelta + t.session.HTTPSendBytesDelta,
  11003. u = o + t.session.WSRecvBytesDelta + t.session.HTTPRecvBytesDelta,
  11004. l = t.session.sendBytes + Object(Fe.getHTTPSendBytes)(),
  11005. p = t.session.recvBytes + Object(Fe.getHTTPRecvBytes)();
  11006. t.gatewayClient.socket && t.gatewayClient.socket.state === t.gatewayClient.CONNECTED && (l += a.getSendBytes(), p += a.getRecvBytes());
  11007. var f = 1;
  11008. i.peer_delay && (f = i.peer_delay.length, f += 1), B(n, "Duration", a.getDuration()), B(n, "UserCount", f), B(n, "SendBytes", l), B(n, "RecvBytes", p), B(n, "SendBitrate", 8 * d / 1e3), B(n, "RecvBitrate", 8 * u / 1e3), e && e(n)
  11009. }, t.isLocalVideoFreeze = function(e, t) {
  11010. var n = 0,
  11011. i = 0;
  11012. if (!e || !t) return !1;
  11013. if (Object(m.isChrome)() || Object(m.isOpera)()) n = e.googFrameRateInput, i = e.googFrameRateSent;
  11014. else if (Object(m.isSafari)()) n = parseInt(e.framerateMean), i = parseInt(e.framesEncoded) - parseInt(t.framesEncoded);
  11015. else {
  11016. if (!Object(m.isFireFox)()) return !1;
  11017. n = parseInt(e.framerateMean), i = parseInt(e.framesEncoded) - parseInt(t.framesEncoded)
  11018. }
  11019. return n > 5 && i < 3
  11020. }, t.isRemoteVideoFreeze = function(e, t) {
  11021. var n = 0,
  11022. i = 0;
  11023. if (!e || !t) return !1;
  11024. if (Object(m.isChrome)() || Object(m.isOpera)()) n = e.googFrameRateReceived, i = e.googFrameRateDecoded;
  11025. else if (Object(m.isSafari)()) n = e.framerateMean, i = parseInt(e.framesDecoded) - parseInt(t.framesDecoded);
  11026. else {
  11027. if (!Object(m.isFireFox)()) return !1;
  11028. n = parseInt(e.framesReceived) - parseInt(t.framesReceived), i = parseInt(e.framesDecoded) - parseInt(t.framesDecoded)
  11029. }
  11030. return n > 5 && n < 10 && i < 3 || n > 10 && n < 20 && i < 4 || n > 20 && i < 5
  11031. }, t.isAudioFreeze = function(e) {
  11032. if (Object(m.isChrome)() && e) {
  11033. if (e.googDecodingPLC && e.googDecodingPLCCNG && e.googDecodingCTN) return (parseInt(e.googDecodingPLC) + parseInt(e.googDecodingPLCCNG)) / parseInt(e.googDecodingCTN) > .2
  11034. } else if ((Object(m.isSafari)() || Object(m.isFireFox)()) && e.packetsLost && e.packetsReceived) return parseInt(e.packetsLost) / (parseInt(e.packetsLost) + parseInt(e.packetsReceived)) > .2;
  11035. return !1
  11036. }, t.isAudioDecodeFailed = function(e) {
  11037. return !!((Object(m.isChrome)() || Object(m.isOpera)()) && e && parseInt(e.bytesReceived) > 0 && 0 === parseInt(e.googDecodingNormal))
  11038. }, t.startNetworkQualityTimer = function() {
  11039. t.clearNetworkQualityTimer(), t.networkQualityTimer = setInterval(function() {
  11040. if (t.gatewayClient.state !== dt.CONNECTED) t.gatewayClient.dispatchEvent({
  11041. type: "network-quality",
  11042. uplinkNetworkQuality: 0,
  11043. downlinkNetworkQuality: 0
  11044. });
  11045. else {
  11046. var e = t.gatewayClient.traffic_stats;
  11047. t.gatewayClient.dispatchEvent({
  11048. type: "network-quality",
  11049. uplinkNetworkQuality: t.networkQualityTrans(e.uplink_network_quality),
  11050. downlinkNetworkQuality: t.networkQualityTrans(e.downlink_network_quality)
  11051. })
  11052. }
  11053. }, 2e3)
  11054. }, t.clearNetworkQualityTimer = function() {
  11055. t.networkQualityTimer && clearInterval(t.networkQualityTimer)
  11056. }, t.networkQualityTrans = function(e) {
  11057. return e >= 0 && e < .17 ? 1 : e >= .17 && e < .36 ? 2 : e >= .36 && e < .59 ? 3 : e >= .59 && e <= 1 ? 4 : e > 1 ? 5 : 0
  11058. }, t.getStatsTimer = setInterval(function() {
  11059. var e = t.gatewayClient.traffic_stats,
  11060. n = Date.now();
  11061. t.gatewayClient.dispatchEvent({
  11062. type: "_testException"
  11063. }), Object.keys(t.localStats).length && t.exceptionMonitor.setLocalStats(t.localStats), Object.keys(t.remoteStats).length && t.exceptionMonitor.setRemoteStats(t.remoteStats);
  11064. var i = {};
  11065. Object.keys(t.gatewayClient.remoteStreams).forEach(function(a) {
  11066. var r = t.gatewayClient.remoteStreams[a],
  11067. o = t.remoteStats[a],
  11068. s = {
  11069. id: a,
  11070. updatedAt: n
  11071. };
  11072. i[a] = s, s.firstFrameTime = r.firstFrameTime, o ? (s.audioTotalPlayDuration = o.audioTotalPlayDuration + 1, s.audioTotalFreezeTime = o.audioTotalFreezeTime, s.isAudioFreeze = !1, s.isAudioDecodeFailed = !1, s.videoTotalPlayDuration = o.videoTotalPlayDuration + 1, s.videoTotalFreezeTime = o.videoTotalFreezeTime, s.isVideoFreeze = !1) : (s.audioTotalPlayDuration = 1, s.audioTotalFreezeTime = 0, s.videoTotalPlayDuration = 1, s.videoTotalFreezeTime = 0);
  11073. var c = e && e.peer_delay && e.peer_delay.find(function(e) {
  11074. return e.peer_uid == a
  11075. });
  11076. c && (s.peer_delay = c), r && (r.isPlaying() && (s.audioDisabled = r.userMuteAudio || r.peerMuteAudio ? "1" : "0", s.videoDisabled = r.userMuteVideo || r.peerMuteVideo ? "1" : "0"), o && o.peer_delay && c && o.peer_delay.stream_type !== c.stream_type && t.gatewayClient.dispatchEvent({
  11077. type: "streamTypeChange",
  11078. uid: a,
  11079. streamType: c.stream_type
  11080. }), r.pc && "established" == r.pc.state && r.pc.getStats(function(e) {
  11081. if (s.pcStats = e, s.audioStats = e.find(function(e) {
  11082. return "audio" == e.mediaType && (e.id.indexOf("_recv") > -1 || e.id.toLowerCase().indexOf("inbound") > -1)
  11083. }), s.videoStats = e.find(function(e) {
  11084. return "video" == e.mediaType && (e.id.indexOf("_recv") > -1 || e.id.toLowerCase().indexOf("inbound") > -1)
  11085. }), o && o.audioStats && s.audioStats) {
  11086. var n = parseInt(s.audioStats.bytesReceived) - parseInt(o.audioStats.bytesReceived),
  11087. i = parseInt(s.audioStats.googDecodingNormal) - parseInt(o.audioStats.googDecodingNormal);
  11088. if (s.audioStats.audioRecvBytesDelta = n, s.audioStats.audioDecodingNormalDelta = i, t.session.recvBytes += n, isFinite(n) && s.audioStats.timestamp) {
  11089. var a = s.audioStats.timestamp.getTime() - o.audioStats.timestamp.getTime();
  11090. s.audioRecvBitrate = Math.floor(8 * n / a)
  11091. }
  11092. t.isAudioFreeze(s.audioStats) && s.audioTotalPlayDuration > 10 && (s.audioTotalFreezeTime++, s.isAudioFreeze = !0), t.isAudioDecodeFailed(s.audioStats) && s.audioTotalPlayDuration > 10 && (s.isAudioDecodeFailed = !0), s.audioStats.audioTotalFreezeTime = s.audioTotalFreezeTime, s.audioStats.audioTotalPlayDuration = s.audioTotalPlayDuration, s.audioStats.audioFreezeRate = Math.ceil(100 * s.audioTotalFreezeTime / s.audioTotalPlayDuration)
  11093. }
  11094. if (o && o.videoStats && s.videoStats) {
  11095. var c = parseInt(s.videoStats.bytesReceived) - parseInt(o.videoStats.bytesReceived);
  11096. s.videoStats.videoRecvBytesDelta = c, t.session.recvBytes += c, isFinite(c) && s.videoStats.timestamp && (a = s.videoStats.timestamp.getTime() - o.videoStats.timestamp.getTime(), s.videoRecvBitrate = Math.floor(8 * c / a)), t.isRemoteVideoFreeze(s.videoStats, o.videoStats) && (s.videoTotalFreezeTime++, s.isVideoFreeze = !0), s.videoStats.videoTotalFreezeTime = s.videoTotalFreezeTime, s.videoStats.videoTotalPlayDuration = s.videoTotalPlayDuration, s.videoStats.videoFreezeRate = Math.ceil(100 * s.videoTotalFreezeTime / s.videoTotalPlayDuration), r.player && r.player.video && r.player.video.videoWidth && r.player.video.videoHeight ? (s.videoStats.renderRemoteWidth = r.player.video.videoWidth, s.videoStats.renderRemoteHeight = r.player.video.videoHeight) : (s.videoStats.renderRemoteWidth = r.videoWidth || s.videoStats.googFrameWidthReceived, s.videoStats.renderRemoteHeight = r.videoHeight || s.videoStats.googFrameHeightReceived)
  11097. }
  11098. }))
  11099. }), t.remoteStats = i;
  11100. var a = {};
  11101. if (Object.keys(t.gatewayClient.localStreams).forEach(function(e) {
  11102. var i = t.gatewayClient.localStreams[e],
  11103. r = t.localStats[e],
  11104. o = {
  11105. id: e,
  11106. updatedAt: n
  11107. };
  11108. a[e] = o, r ? (o.videoTotalPlayDuration = r.videoTotalPlayDuration + 1, o.videoTotalFreezeTime = r.videoTotalFreezeTime, o.isVideoFreeze = !1) : (o.videoTotalPlayDuration = 1, o.videoTotalFreezeTime = 0), i && (i.isPlaying() && (o.audioDisabled = i.userMuteAudio ? "1" : "0", o.videoDisabled = i.userMuteVideo ? "1" : "0"), i.video && i.attributes.maxVideoBW ? o.videoTargetSendBitrate = i.attributes.maxVideoBW : i.video && i.screenAttributes && (o.videoTargetSendBitrate = i.screenAttributes.maxVideoBW), i.pc && "established" == i.pc.state && i.pc.getStats(function(e) {
  11109. if (o.pcStats = e.reverse(), o.audioStats = e.find(function(e) {
  11110. return "audio" == e.mediaType && (e.id.indexOf("_send") > -1 || e.id.toLowerCase().indexOf("outbound") > -1)
  11111. }), o.videoStats = e.find(function(e) {
  11112. return "video" == e.mediaType && (e.id.indexOf("_send") > -1 || e.id.toLowerCase().indexOf("outbound") > -1)
  11113. }), o.audioStats && r && r.audioStats) {
  11114. var n = parseInt(o.audioStats.bytesSent) - parseInt(r.audioStats.bytesSent);
  11115. if (o.audioStats.audioSendBytesDelta = n, t.session.sendBytes += n, isFinite(n) && o.audioStats.timestamp) {
  11116. var a = o.audioStats.timestamp.getTime() - r.audioStats.timestamp.getTime();
  11117. o.audioSendBitrate = Math.floor(8 * n / a)
  11118. }
  11119. }
  11120. if (o.videoStats && r && r.videoStats) {
  11121. var s = parseInt(o.videoStats.bytesSent) - parseInt(r.videoStats.bytesSent);
  11122. o.videoStats.videoSendBytesDelta = s, t.session.sendBytes += s, isFinite(s) && o.videoStats.timestamp && (a = o.videoStats.timestamp.getTime() - r.videoStats.timestamp.getTime(), o.videoSendBitrate = Math.floor(8 * s / a)), t.isLocalVideoFreeze(o.videoStats, r.videoStats) && (o.videoTotalFreezeTime++, o.isVideoFreeze = !0), o.videoStats.videoTotalFreezeTime = o.videoTotalFreezeTime, o.videoStats.videoTotalPlayDuration = o.videoTotalPlayDuration, o.videoStats.videoFreezeRate = Math.ceil(100 * o.videoTotalFreezeTime / o.videoTotalPlayDuration), o.videoStats.renderLocalWidth = i.videoWidth || o.videoStats.googFrameWidthSent, o.videoStats.renderLocalHeight = i.videoHeight || o.videoStats.googFrameHeightSent
  11123. }
  11124. }))
  11125. }), t.localStats = a, t.session.HTTPSendBytesDelta = Object(Fe.getHTTPSendBytes)() - t.session.HTTPSendBytes, t.session.HTTPSendBytes = Object(Fe.getHTTPSendBytes)(), t.session.HTTPRecvBytesDelta = Object(Fe.getHTTPRecvBytes)() - t.session.HTTPRecvBytes, t.session.HTTPRecvBytes = Object(Fe.getHTTPRecvBytes)(), t.gatewayClient.socket && t.gatewayClient.socket.state === t.gatewayClient.CONNECTED) {
  11126. var r = t.gatewayClient.socket;
  11127. t.session.WSSendBytesDelta = r.getSendBytes() - t.session.WSSendBytes, t.session.WSSendBytes = r.getSendBytes(), t.session.WSRecvBytesDelta = r.getRecvBytes() - t.session.WSRecvBytes, t.session.WSRecvBytes = r.getRecvBytes()
  11128. }
  11129. }, 1e3), t.gatewayClient.on("join", function() {
  11130. t.session = {
  11131. sendBytes: 0,
  11132. recvBytes: 0,
  11133. WSSendBytes: 0,
  11134. WSSendBytesDelta: 0,
  11135. WSRecvBytes: 0,
  11136. WSRecvBytesDelta: 0,
  11137. HTTPSendBytes: 0,
  11138. HTTPSendBytesDelta: 0,
  11139. HTTPRecvBytes: 0,
  11140. HTTPRecvBytesDelta: 0
  11141. }
  11142. }), t
  11143. }(t.gatewayClient), t.configDistributManager = function(e) {
  11144. var t = {};
  11145. return t.client = e, t.client.gatewayClient && t.client.gatewayClient.on("config-distribute", function(n) {
  11146. var i = n.joinInfo,
  11147. a = n.config;
  11148. if (a) {
  11149. Object(W.isEmpty)(a.uploadLog) || (Object(r.setParameter)("UPLOAD_LOG", a.uploadLog), s.b.reportApiInvoke(i.sid, {
  11150. name: "_configDistribute",
  11151. options: {
  11152. feature: "uploadLog",
  11153. value: a.uploadLog
  11154. }
  11155. })()), Object(W.isEmpty)(a.dualStream) || (e.isDualStream = a.dualStream, s.b.reportApiInvoke(i.sid, {
  11156. name: "_configDistribute",
  11157. options: {
  11158. feature: "dualStream",
  11159. value: a.dualStream
  11160. }
  11161. })()), Object(W.isEmpty)(a.streamFallbackOption) || t.client.gatewayClient && t.client.gatewayClient.on("stream-subscribed", function(e) {
  11162. var n = e.stream;
  11163. n ? (t.client.gatewayClient.setStreamFallbackOption(n, a.streamFallbackOption), s.b.reportApiInvoke(i.sid, {
  11164. name: "_configDistribute",
  11165. options: {
  11166. feature: "streamFallbackOption",
  11167. value: a.streamFallbackOption,
  11168. streamId: n.getId()
  11169. }
  11170. })()) : s.b.reportApiInvoke(i.sid, {
  11171. name: "_configDistribute",
  11172. options: {
  11173. feature: "streamFallbackOption",
  11174. value: a.streamFallbackOption,
  11175. streamId: n.getId(),
  11176. err: "invalid stream"
  11177. }
  11178. })()
  11179. });
  11180. try {
  11181. o.
  11182. default.debug("[".concat(e.clientId, "] setParameter in distribution: ").concat(JSON.stringify(a))), Object.keys(a).map(function(e) {
  11183. return Object(r.setParameter)(e, a[e])
  11184. })
  11185. } catch (t) {
  11186. o.
  11187. default.debug("[".concat(e.clientId, "] setParameter in distribution failed: ").concat(JSON.stringify(a)))
  11188. }
  11189. }
  11190. }), t
  11191. }(t), function(e, t) {
  11192. var n = arguments;
  11193. e.liveStreaming = c(), e.liveStreaming.connections = {
  11194. inject_streaming: null,
  11195. mix_streaming: null,
  11196. raw_streaming: null
  11197. }, e.liveStreaming.connectionTypes = {
  11198. inject_streaming: "pull",
  11199. mix_streaming: "push",
  11200. raw_streaming: "push"
  11201. }, e.liveStreaming.pushStates = {}, e.liveStreaming.pullStates = {}, e.gatewayClient.addEventListener("join", function(t) {
  11202. e.liveStreaming.resumeStates("pull")
  11203. }), e.gatewayClient.addEventListener("stream-unpublished", function(t) {
  11204. if (t.options && 0 === t.options.streamType) for (var n in e.liveStreaming.pushStates) {
  11205. var i = e.liveStreaming.pushStates[n];
  11206. i.url && e._stopLiveStreaming(i.url, i.transcodingEnabled, !0)
  11207. }
  11208. }), e.gatewayClient.addEventListener("stream-published", function(t) {
  11209. e.liveStreaming.resumeStates("push")
  11210. }), e.liveStreaming.connect = (m = K()(Y.a.mark(function n(i) {
  11211. var a, r;
  11212. return Y.a.wrap(function(n) {
  11213. for (;;) switch (n.prev = n.next) {
  11214. case 0:
  11215. if (e.joinInfo && e.joinInfo.uid && parseInt(e.joinInfo.vid, 10)) {
  11216. n.next = 3;
  11217. break
  11218. }
  11219. throw new Error("CLIENT_NOT_JOINED");
  11220. case 3:
  11221. return a = new Nt({
  11222. appId: t.appId,
  11223. cname: e.channel,
  11224. sid: t.sessionId,
  11225. uid: e.joinInfo.uid
  11226. }), e.liveStreaming.connections[i] = a, n.next = 7, bt({
  11227. appId: t.appId,
  11228. cname: e.channel,
  11229. serviceName: i,
  11230. sid: t.sessionId,
  11231. uid: e.joinInfo.uid
  11232. });
  11233. case 7:
  11234. return r = n.sent, n.next = 10, a.connect({
  11235. wsClient: r
  11236. });
  11237. case 10:
  11238. return a.on("notification", function(t) {
  11239. if (t.serviceName = i, e.liveStreaming.dispatchEvent(t), 503 === t.code);
  11240. else switch (t.serviceName) {
  11241. case "inject_streaming":
  11242. var n = {
  11243. reason: t && t.reason,
  11244. status: kt(t && t.code),
  11245. type: "streamInjectedStatus",
  11246. uid: t && t.serverStatus && t.serverStatus.inject_uid,
  11247. url: t && t.serverStatus && t.serverStatus.url
  11248. };
  11249. e.gatewayClient.dispatchEvent(n);
  11250. break;
  11251. case "raw_streaming":
  11252. case "mix_streaming":
  11253. var a = {
  11254. reason: t && t.reason,
  11255. status: t && t.code,
  11256. type: t && 200 === t.code ? "liveStreamingStarted" : "liveStreamingFailed",
  11257. uid: t && t.serverStatus && t.uid,
  11258. url: t && t.serverStatus && t.serverStatus.url
  11259. };
  11260. e.gatewayClient.dispatchEvent(a)
  11261. }
  11262. }), a.on("close", function(t) {
  11263. wt(a), o.
  11264. default.debug("Reconnect ".concat(i)), e.liveStreaming.connect(i).
  11265. catch (function(t) {
  11266. e.liveStreaming.connections[i] = null, e.gatewayClient.dispatchEvent({
  11267. type: "".concat(i.replace("_", "-"), "-disconnected")
  11268. })
  11269. })
  11270. }), o.
  11271. default.debug("".concat(i, " connected")), n.abrupt("return", a);
  11272. case 14:
  11273. case "end":
  11274. return n.stop()
  11275. }
  11276. }, n, this)
  11277. })), function(e) {
  11278. return m.apply(this, arguments)
  11279. }), e.liveStreaming.disconnect = (f = K()(Y.a.mark(function t(n) {
  11280. var i, a;
  11281. return Y.a.wrap(function(t) {
  11282. for (;;) switch (t.prev = t.next) {
  11283. case 0:
  11284. t.t0 = Y.a.keys(e.liveStreaming.connections);
  11285. case 1:
  11286. if ((t.t1 = t.t0()).done) {
  11287. t.next = 13;
  11288. break
  11289. }
  11290. if (i = t.t1.value, !e.liveStreaming.connections.hasOwnProperty(i)) {
  11291. t.next = 11;
  11292. break
  11293. }
  11294. if (!(a = e.liveStreaming.connections[i]) || n && n !== i) {
  11295. t.next = 11;
  11296. break
  11297. }
  11298. return o.
  11299. default.info("Disconnecting liveStreaming ".concat(i)), t.next = 9, a.disconnect();
  11300. case 9:
  11301. t.sent, e.liveStreaming.connections[i] = null;
  11302. case 11:
  11303. t.next = 1;
  11304. break;
  11305. case 13:
  11306. case "end":
  11307. return t.stop()
  11308. }
  11309. }, t, this)
  11310. })), function(e) {
  11311. return f.apply(this, arguments)
  11312. }), e.liveStreaming.resumeStates = (p = K()(Y.a.mark(function t(n) {
  11313. var i, a, r, s, c, d, u, l;
  11314. return Y.a.wrap(function(t) {
  11315. for (;;) switch (t.prev = t.next) {
  11316. case 0:
  11317. t.t0 = Y.a.keys(e.liveStreaming.connections);
  11318. case 1:
  11319. if ((t.t1 = t.t0()).done) {
  11320. t.next = 8;
  11321. break
  11322. }
  11323. if (i = t.t1.value, !n || e.liveStreaming.connectionTypes[i] === n) {
  11324. t.next = 5;
  11325. break
  11326. }
  11327. return t.abrupt("continue", 1);
  11328. case 5:
  11329. e.liveStreaming.connections.hasOwnProperty(i) && (a = e.liveStreaming.connections[i]) && (o.
  11330. default.info("LiveStreaming closing connection ".concat(i)), a.disconnect(), e.liveStreaming.connections[i] = null), t.next = 1;
  11331. break;
  11332. case 8:
  11333. t.t2 = Y.a.keys(e.liveStreaming.pushStates);
  11334. case 9:
  11335. if ((t.t3 = t.t2()).done) {
  11336. t.next = 37;
  11337. break
  11338. }
  11339. if (r = t.t3.value, !n || "push" === n) {
  11340. t.next = 13;
  11341. break
  11342. }
  11343. return t.abrupt("continue", 9);
  11344. case 13:
  11345. if (!e.liveStreaming.pushStates.hasOwnProperty(r)) {
  11346. t.next = 35;
  11347. break
  11348. }
  11349. if (s = e.liveStreaming.pushStates[r], "audience" !== e.gatewayClient.role) {
  11350. t.next = 19;
  11351. break
  11352. }
  11353. o.
  11354. default.warning("Cannot resume LiveStreaming in audience mode. ".concat(s.url), s), t.next = 35;
  11355. break;
  11356. case 19:
  11357. if (!s) {
  11358. t.next = 35;
  11359. break
  11360. }
  11361. return o.
  11362. default.debug("Resuming LiveStreaming ".concat(s.url), s), t.prev = 21, t.next = 24, e._startLiveStreaming(s.url, s.transcodingEnabled);
  11363. case 24:
  11364. c = t.sent, o.
  11365. default.debug("Resumed LiveStreaming ".concat(s.url, ": ").concat(c.reason)), t.next = 35;
  11366. break;
  11367. case 28:
  11368. if (t.prev = 28, t.t4 = t.
  11369. catch (21), 454 !== t.t4.code) {
  11370. t.next = 34;
  11371. break
  11372. }
  11373. o.
  11374. default.debug("Resumed LiveStreaming ".concat(s.url, ": ").concat(t.t4.reason)), t.next = 35;
  11375. break;
  11376. case 34:
  11377. throw t.t4;
  11378. case 35:
  11379. t.next = 9;
  11380. break;
  11381. case 37:
  11382. t.t5 = Y.a.keys(e.liveStreaming.pullStates);
  11383. case 38:
  11384. if ((t.t6 = t.t5()).done) {
  11385. t.next = 62;
  11386. break
  11387. }
  11388. if (d = t.t6.value, !n || "pull" === n) {
  11389. t.next = 42;
  11390. break
  11391. }
  11392. return t.abrupt("continue", 38);
  11393. case 42:
  11394. if (!e.liveStreaming.pullStates.hasOwnProperty(d)) {
  11395. t.next = 60;
  11396. break
  11397. }
  11398. if (u = e.liveStreaming.pullStates[d], "audience" !== e.gatewayClient.role) {
  11399. t.next = 48;
  11400. break
  11401. }
  11402. o.
  11403. default.warning("Cannot resume addInjectStreamUrl in audience mode. ".concat(u.url), u), t.next = 60;
  11404. break;
  11405. case 48:
  11406. if (!u) {
  11407. t.next = 60;
  11408. break
  11409. }
  11410. return o.
  11411. default.debug("Resuming LiveStreaming pullStream ".concat(u.url), u), t.prev = 50, t.next = 53, e._addInjectStreamUrl(u.url, u.transcodingConfig);
  11412. case 53:
  11413. l = t.sent, o.
  11414. default.debug("Resumed LiveStreaming pullStream ".concat(u.url, ": ").concat(l.reason)), t.next = 60;
  11415. break;
  11416. case 57:
  11417. t.prev = 57, t.t7 = t.
  11418. catch (50), 451 === t.t7.code && o.
  11419. default.debug("Resumed LiveStreaming pullStream ".concat(u.url, ": ").concat(t.t7.reason));
  11420. case 60:
  11421. t.next = 38;
  11422. break;
  11423. case 62:
  11424. case "end":
  11425. return t.stop()
  11426. }
  11427. }, t, this, [
  11428. [21, 28],
  11429. [50, 57]
  11430. ])
  11431. })), function(e) {
  11432. return p.apply(this, arguments)
  11433. }), e.liveStreaming.startOptions = {
  11434. autoDestroyTime: 30
  11435. }, e.liveStreaming.transcodingConfig = {
  11436. audioBitrate: 48,
  11437. audioChannels: 1,
  11438. audioSampleRate: 48e3,
  11439. backgroundColor: 0,
  11440. height: 360,
  11441. images: [],
  11442. lowLatency: !1,
  11443. metadata: "",
  11444. userConfigExtraInfo: "",
  11445. userConfigs: [],
  11446. videoBitrate: 400,
  11447. videoCodecProfile: 100,
  11448. videoCodecType: 1,
  11449. videoFramerate: 15,
  11450. videoGop: 30,
  11451. width: 640
  11452. }, e.startLiveStreaming = function(n, i) {
  11453. Object(W.isEmpty)(i) || Object(W.checkValidBoolean)(i, "transcodingEnabled"), Object(W.checkValidString)(n, "url", 1, 1024);
  11454. var a = s.b.reportApiInvoke(t.sessionId, {
  11455. name: "Client.startLiveStreaming",
  11456. options: arguments,
  11457. tag: "tracer"
  11458. });
  11459. if (e.gatewayClient && "audience" === e.gatewayClient.role) {
  11460. var r = {
  11461. code: 403,
  11462. reason: "AUDIENCE_STREAMING_FORBIDDEN"
  11463. };
  11464. throw a(r), r
  11465. }
  11466. var o = e._startLiveStreaming(n, i);
  11467. return o.then(function(e) {
  11468. a(null, e)
  11469. }).
  11470. catch (function(e) {
  11471. a(e)
  11472. }), o
  11473. }, e._startLiveStreaming = (l = K()(Y.a.mark(function n(i, a) {
  11474. var r, s, c, d;
  11475. return Y.a.wrap(function(n) {
  11476. for (;;) switch (n.prev = n.next) {
  11477. case 0:
  11478. return r = h()({
  11479. allocate: !0,
  11480. clientRequest: {
  11481. command: "PublishStream"
  11482. },
  11483. command: "request"
  11484. }), o.
  11485. default.debug("startLiveStreaming ".concat(i, ", ").concat(a)), h()(r.clientRequest, e.liveStreaming.startOptions, {
  11486. ts: Date.now(),
  11487. url: i,
  11488. vid: parseInt(e.joinInfo.vid, 10)
  11489. }), s = null, a ? (e.liveStreaming.connections.mix_streaming || e.liveStreaming.connect("mix_streaming"), r.clientRequest.transcodingConfig = JSON.parse(JSON.stringify(e.liveStreaming.transcodingConfig)), s = e.liveStreaming.connections.mix_streaming):
  11490. ("vp8" === t.codec && o.
  11491. default.warning("VP8 is not supported by raw_streaming. Subscriber side will suffer"), "rtc" === t.mode && o.
  11492. default.warning("RTC mode is not supported by raw_streaming. Subscriber side will suffer"), e.liveStreaming.connections.raw_streaming || e.liveStreaming.connect("raw_streaming"), s = e.liveStreaming.connections.raw_streaming), c = null, d = {}, n.prev = 7, n.next = 10, s.request(r);
  11493. case 10:
  11494. c = n.sent, d.type = "liveStreamingStarted", d.reason = c && c.reason, d.status = c && c.code, d.url = c && c.serverResponse && c.serverResponse.url, e.gatewayClient.dispatchEvent(d), n.next = 26;
  11495. break;
  11496. case 18:
  11497. throw n.prev = 18, n.t0 = n.
  11498. catch (7), d.type = "liveStreamingFailed", d.reason = n.t0 && n.t0.reason, d.status = n.t0 && n.t0.code, d.url = n.t0 && n.t0.serverResponse && n.t0.serverResponse.url, e.gatewayClient.dispatchEvent(d), n.t0;
  11499. case 26:
  11500. return e.liveStreaming.pushStates[i] = {
  11501. transcodingEnabled: a,
  11502. url: i
  11503. }, n.abrupt("return", c);
  11504. case 28:
  11505. case "end":
  11506. return n.stop()
  11507. }
  11508. }, n, this, [
  11509. [7, 18]
  11510. ])
  11511. })), function(e, t) {
  11512. return l.apply(this, arguments)
  11513. }), e.setLiveTranscoding = function(n, i) {
  11514. o.
  11515. default.debug("setLiveTranscoding: ".concat(JSON.stringify(n))), Object(W.checkValidObject)(n, "transcoding");
  11516. var a = n,
  11517. r = a.width,
  11518. c = a.height,
  11519. d = a.videoBitrate,
  11520. u = a.videoFramerate,
  11521. l = a.lowLatency,
  11522. p = a.audioSampleRate,
  11523. f = a.audioBitrate,
  11524. m = a.audioChannels,
  11525. g = a.videoGop,
  11526. v = a.images,
  11527. S = a.videoCodecProfile,
  11528. h = a.userCount,
  11529. _ = a.backgroundColor,
  11530. E = a.transcodingUsers;
  11531. if (E || (E = n.userConfigs), Object(W.isEmpty)(r) || Object(W.checkValidNumber)(r, "width"), Object(W.isEmpty)(c) || Object(W.checkValidNumber)(c, "height"), Object(W.isEmpty)(d) || Object(W.checkValidNumber)(d, "videoBitrate", 1, 1e6), Object(W.isEmpty)(u) || Object(W.checkValidNumber)(u, "videoFramerate"), Object(W.isEmpty)(l) || Object(W.checkValidBoolean)(l, "lowLatency"), Object(W.isEmpty)(p) || Object(W.checkValidEnum)(p, "audioSampleRate", [32e3, 44100, 48e3]), Object(W.isEmpty)(f) || Object(W.checkValidNumber)(f, "audioBitrate", 1, 128), Object(W.isEmpty)(m) || Object(W.checkValidEnum)(m, "audioChannels", [1, 2, 3, 4, 5]), Object(W.isEmpty)(g) || Object(W.checkValidNumber)(g, "videoGop"), Object(W.isEmpty)(S) || Object(W.checkValidEnum)(S, "videoCodecProfile", [66, 77, 100]), Object(W.isEmpty)(h) || Object(W.checkValidNumber)(h, "userCount", 0, 17), Object(W.isEmpty)(_) || Object(W.checkValidNumber)(_, "backgroundColor", 0, 16777215), !Object(W.isEmpty)(E)) {
  11532. if (!Object(W.isArray)(E)) throw new Error("[transcodingUsers]: transcodingUsers should be Array");
  11533. if (E.length > 17) throw new Error("The length of transcodingUsers cannot greater than 17");
  11534. E.map(function(e, t) {
  11535. if (!Object(W.isEmpty)(e.uid) && !Dt(e.uid) && !Object(W.isValidString)(e.uid, 1, 255)) throw new Error("[String uid] Length of the string: [1,255]. ASCII characters only. [Number uid] The value range is [0,10000]");
  11536. if (Object(W.isEmpty)(e.x) || Object(W.checkValidNumber)(e.x, "transcodingUser[".concat(t, "].x"), 0, 1e4), Object(W.isEmpty)(e.y) || Object(W.checkValidNumber)(e.y, "transcodingUser[".concat(t, "].y"), 0, 1e4), Object(W.isEmpty)(e.width) || Object(W.checkValidNumber)(e.width, "transcodingUser[".concat(t, "].width"), 0, 1e4), Object(W.isEmpty)(e.height) || Object(W.checkValidNumber)(e.height, "transcodingUser[".concat(t, "].height"), 0, 1e4), Object(W.isEmpty)(e.zOrder) || Object(W.checkValidNumber)(e.zOrder, "transcodingUser[".concat(t, "].zOrder"), 0, 100), !(Object(W.isEmpty)(e.alpha) || Object(W.isNumber)(e.alpha) && e.alpha <= 1 && e.alpha >= 0)) throw new Error("transcodingUser[${index}].alpha: The value range is [0, 1]")
  11537. })
  11538. }
  11539. if (!Object(W.isEmpty)(v)) {
  11540. if (!Object(W.isArray)(v)) throw new Error("[images]: images should be Array");
  11541. v.map(function(e, t) {
  11542. if (Object(W.checkValidString)(e.url, "images[".concat(t, "].url"), 1, 1024), Object(W.isEmpty)(e.x) ? e.x = 0 : Object(W.checkValidNumber)(e.x, "images[".concat(t, "].x"), 0, 1e4), Object(W.isEmpty)(e.y) ? e.y = 0 : Object(W.checkValidNumber)(e.y, "images[".concat(t, "].y"), 0, 1e4), Object(W.isEmpty)(e.width) ? e.width = 160 : Object(W.checkValidNumber)(e.width, "images[".concat(t, "].width"), 0, 1e4), Object(W.isEmpty)(e.height) ? e.height = 160 : Object(W.checkValidNumber)(e.height, "images[".concat(t, "].height"), 0, 1e4), Object(W.isEmpty)(e.zOrder) ? e.zOrder = 0 : Object(W.checkValidNumber)(e.zOrder, "images[".concat(t, "].zOrder"), 0, 100), Object(W.isEmpty)(e.alpha)) e.alpha = 1;
  11543. else if (!(Object(W.isNumber)(e.alpha) && e.alpha <= 1 && e.alpha >= 0)) throw new Error("image[${index}].alpha: The value range is [0, 1]")
  11544. })
  11545. }
  11546. var I = s.b.reportApiInvoke(t.sessionId, {
  11547. name: "Client.setLiveTranscoding",
  11548. options: arguments,
  11549. tag: "tracer"
  11550. });
  11551. if ((n = JSON.parse(JSON.stringify(n))).transcodingUsers && (n.userConfigs = n.transcodingUsers, delete n.transcodingUsers), e.joinInfo.stringUid && n.userConfigs && n.userConfigs.length) {
  11552. var T = [];
  11553. n.userConfigs.forEach(function(t) {
  11554. T.push(Ze(e.joinInfo, e.gatewayClient, t.uid).then(function(e) {
  11555. t.uid = e.uid
  11556. }))
  11557. });
  11558. var y = Promise.all(T).then(function() {
  11559. return e._setLiveTranscoding(n, i)
  11560. });
  11561. return y.then(function(e) {
  11562. I(null, e)
  11563. }).
  11564. catch (function(e) {
  11565. I(e)
  11566. }), y
  11567. }
  11568. var b = e._setLiveTranscoding(n, i);
  11569. return b.then(function(e) {
  11570. I(null, e)
  11571. }).
  11572. catch (function(e) {
  11573. I(e)
  11574. }), b
  11575. }, e._setLiveTranscoding = (u = K()(Y.a.mark(function t(n, i) {
  11576. var a, r, o;
  11577. return Y.a.wrap(function(t) {
  11578. for (;;) switch (t.prev = t.next) {
  11579. case 0:
  11580. if (e.liveStreaming.transcodingConfig = h()(e.liveStreaming.transcodingConfig, n), "boolean" != typeof i && (i = !! e.liveStreaming.connections.mix_streaming), a = JSON.parse(JSON.stringify({
  11581. allocate: !1,
  11582. clientRequest: {
  11583. command: "UpdateTranscoding",
  11584. transcodingConfig: e.liveStreaming.transcodingConfig
  11585. },
  11586. command: "request"
  11587. })), r = {}, !i) {
  11588. t.next = 16;
  11589. break
  11590. }
  11591. return e.liveStreaming.connections.mix_streaming || e.liveStreaming.connect("mix_streaming"), t.next = 8, e.liveStreaming.connections.mix_streaming.request(a);
  11592. case 8:
  11593. return o = t.sent, r.type = "liveTranscodingUpdated", r.reason = o.reason, r.status = o.code, e.gatewayClient.dispatchEvent(r), t.abrupt("return", o);
  11594. case 16:
  11595. return t.abrupt("return", {
  11596. code: 200,
  11597. reason: "success"
  11598. });
  11599. case 17:
  11600. case "end":
  11601. return t.stop()
  11602. }
  11603. }, t, this)
  11604. })), function(e, t) {
  11605. return u.apply(this, arguments)
  11606. }), e.stopLiveStreaming = function(n, i) {
  11607. Object(W.checkValidString)(n, "url", 1, 1024);
  11608. var a = s.b.reportApiInvoke(t.sessionId, {
  11609. name: "Client.stopLiveStreaming",
  11610. options: arguments,
  11611. tag: "tracer"
  11612. }),
  11613. r = e._stopLiveStreaming(n, i);
  11614. return r.then(function(e) {
  11615. a(null, e)
  11616. }).
  11617. catch (function(e) {
  11618. a(e)
  11619. }), r
  11620. }, e._stopLiveStreaming = (d = K()(Y.a.mark(function t(n, i, a) {
  11621. var r, o, s, c, d, u;
  11622. return Y.a.wrap(function(t) {
  11623. for (;;) switch (t.prev = t.next) {
  11624. case 0:
  11625. return r = null, o = e.liveStreaming.pushStates[n], r = o ? o.transcodingEnabled ? "mix_streaming" : "raw_streaming" : i ? "mix_streaming" : "raw_streaming", s = {
  11626. allocate: !1,
  11627. clientRequest: {
  11628. command: "UnpublishStream",
  11629. url: n
  11630. },
  11631. command: "request"
  11632. }, e.liveStreaming.connections[r] || e.liveStreaming.connect(r), c = null, t.prev = 6, t.next = 9, e.liveStreaming.connections[r].request(s);
  11633. case 9:
  11634. c = t.sent, (d = {}).type = "liveStreamingStopped", d.reason = c && c.reason, d.status = c && c.code, d.url = c && c.serverResponse && c.serverResponse.url, e.gatewayClient.dispatchEvent(d), t.next = 27;
  11635. break;
  11636. case 18:
  11637. throw t.prev = 18, t.t0 = t.
  11638. catch (6), (u = {}).type = "liveStreamingStopped", u.reason = t.t0 && t.t0.reason, u.status = t.t0 && t.t0.code, u.url = t.t0 && t.t0.serverResponse && t.t0.serverResponse.url, e.gatewayClient.dispatchEvent(u), t.t0;
  11639. case 27:
  11640. return a || delete e.liveStreaming.pushStates[n], t.abrupt("return", c);
  11641. case 29:
  11642. case "end":
  11643. return t.stop()
  11644. }
  11645. }, t, this, [
  11646. [6, 18]
  11647. ])
  11648. })), function(e, t, n) {
  11649. return d.apply(this, arguments)
  11650. }), e.liveStreaming.injectStreamTranscodingConfig = {
  11651. autoDestroyTime: 30,
  11652. audioBitrate: 48,
  11653. audioChannels: 1,
  11654. audioSampleRate: 44100,
  11655. height: 0,
  11656. videoBitrate: 400,
  11657. videoFramerate: 15,
  11658. videoGop: 30,
  11659. width: 0
  11660. }, e.addInjectStreamUrl = function(i, a) {
  11661. Object(W.checkValidString)(i, "url", 1, 1024), Object(W.checkValidObject)(a, "config"), !Object(W.isEmpty)(a && a.width) && Object(W.checkValidNumber)(a.width, "config.width", 0, 1e4), !Object(W.isEmpty)(a && a.height) && Object(W.checkValidNumber)(a.height, "config.height", 0, 1e4), !Object(W.isEmpty)(a && a.videoGop) && Object(W.checkValidNumber)(a.videoGop, "config.videoGop", 1, 1e4), !Object(W.isEmpty)(a && a.videoFramerate) && Object(W.checkValidNumber)(a.videoFramerate, "config.videoFramerate", 1, 1e4), !Object(W.isEmpty)(a && a.videoBitrate) && Object(W.checkValidNumber)(a.videoBitrate, "config.videoBitrate", 1, 1e4), !Object(W.isEmpty)(a && a.audioSampleRate) && Object(W.checkValidEnum)(a.audioSampleRate, "config.audioSampleRate", [32e3, 44100, 48e3]), !Object(W.isEmpty)(a && a.audioBitrate) && Object(W.checkValidNumber)(a.audioBitrate, "config.audioBitrate", 1, 1e4), !Object(W.isEmpty)(a && a.audioChannels) && Object(W.checkValidNumber)(a.audioChannels, "config.audioChannels", 1, 2);
  11662. var r = s.b.reportApiInvoke(t.sessionId, {
  11663. name: "Client.addInjectStreamUrl",
  11664. options: n,
  11665. tag: "tracer"
  11666. });
  11667. if ("audience" === e.gatewayClient.role) {
  11668. var o = {
  11669. code: 403,
  11670. reason: "AUDIENCE_INJECTING_FORBIDDEN"
  11671. };
  11672. throw r(o), o
  11673. }
  11674. var c = e._addInjectStreamUrl(i, a);
  11675. return c.then(function(e) {
  11676. r(null, e)
  11677. }).
  11678. catch (function(e) {
  11679. r(e)
  11680. }), c
  11681. }, e._addInjectStreamUrl = (r = K()(Y.a.mark(function n(i, a) {
  11682. var r, o, s, c, d;
  11683. return Y.a.wrap(function(n) {
  11684. for (;;) switch (n.prev = n.next) {
  11685. case 0:
  11686. return r = h()({}, e.liveStreaming.injectStreamTranscodingConfig, a), o = {
  11687. allocate: !0,
  11688. clientRequest: {
  11689. cname: e.channel,
  11690. command: "InjectStream",
  11691. sid: t.sessionId,
  11692. transcodingConfig: r,
  11693. ts: Date.now(),
  11694. url: i,
  11695. vid: parseInt(e.joinInfo.vid, 10)
  11696. },
  11697. command: "request"
  11698. }, e.liveStreaming.connections.inject_streaming || e.liveStreaming.connect("inject_streaming"), s = null, n.prev = 4, n.next = 7, e.liveStreaming.connections.inject_streaming.request(o);
  11699. case 7:
  11700. s = n.sent, c = {
  11701. reason: s && s.reason,
  11702. status: kt(s && s.code),
  11703. type: "streamInjectedStatus",
  11704. uid: s && s.serverResponse && s.serverResponse.inject_uid,
  11705. url: s && s.serverResponse && s.serverResponse.url
  11706. }, e.gatewayClient.dispatchEvent(c), n.next = 17;
  11707. break;
  11708. case 12:
  11709. throw n.prev = 12, n.t0 = n.
  11710. catch (4), d = {
  11711. reason: n.t0 && n.t0.reason,
  11712. status: kt(n.t0 && n.t0.code),
  11713. type: "streamInjectedStatus",
  11714. uid: n.t0 && n.t0.serverResponse && n.t0.serverResponse.inject_uid,
  11715. url: n.t0 && n.t0.serverResponse && n.t0.serverResponse.url
  11716. }, e.gatewayClient.dispatchEvent(d), n.t0;
  11717. case 17:
  11718. return e.liveStreaming.pullStates[i] = {
  11719. transcodingConfig: r,
  11720. url: i
  11721. }, n.abrupt("return", s);
  11722. case 19:
  11723. case "end":
  11724. return n.stop()
  11725. }
  11726. }, n, this, [
  11727. [4, 12]
  11728. ])
  11729. })), function(e, t) {
  11730. return r.apply(this, arguments)
  11731. }), e.removeInjectStreamUrl = (a = K()(Y.a.mark(function n(i) {
  11732. var a, r, o = arguments;
  11733. return Y.a.wrap(function(n) {
  11734. for (;;) switch (n.prev = n.next) {
  11735. case 0:
  11736. return Object(W.checkValidString)(i, "url", 1, 255), a = s.b.reportApiInvoke(t.sessionId, {
  11737. name: "Client.removeInjectStreamUrl",
  11738. options: o,
  11739. tag: "tracer"
  11740. }), (r = e._removeInjectStreamUrl(i)).then(function(e) {
  11741. a(null, e)
  11742. }).
  11743. catch (function(e) {
  11744. a(e)
  11745. }), n.abrupt("return", r);
  11746. case 5:
  11747. case "end":
  11748. return n.stop()
  11749. }
  11750. }, n, this)
  11751. })), function(e) {
  11752. return a.apply(this, arguments)
  11753. }), e._removeInjectStreamUrl = (i = K()(Y.a.mark(function t(n) {
  11754. var i, a, r, o;
  11755. return Y.a.wrap(function(t) {
  11756. for (;;) switch (t.prev = t.next) {
  11757. case 0:
  11758. return i = {
  11759. allocate: !1,
  11760. clientRequest: {
  11761. command: "UninjectStream",
  11762. url: n
  11763. },
  11764. command: "request"
  11765. }, e.liveStreaming.connections.inject_streaming || e.liveStreaming.connect("inject_streaming"), a = null, t.prev = 3, t.next = 6, e.liveStreaming.connections.inject_streaming.request(i);
  11766. case 6:
  11767. a = t.sent, r = {
  11768. reason: a && a.reason,
  11769. status: Lt(a && a.code),
  11770. type: "streamInjectedStatus",
  11771. uid: a && a.serverResponse && a.serverResponse.inject_uid,
  11772. url: a && a.serverResponse && a.serverResponse.url
  11773. }, e.gatewayClient.dispatchEvent(r), t.next = 16;
  11774. break;
  11775. case 11:
  11776. throw t.prev = 11, t.t0 = t.
  11777. catch (3), o = {
  11778. reason: t.t0 && t.t0.reason,
  11779. status: Lt(t.t0 && t.t0.code),
  11780. type: "streamInjectedStatus",
  11781. uid: t.t0 && t.t0.serverResponse && t.t0.serverResponse.inject_uid,
  11782. url: t.t0 && t.t0.serverResponse && t.t0.serverResponse.url
  11783. }, e.gatewayClient.dispatchEvent(o), t.t0;
  11784. case 16:
  11785. return delete e.liveStreaming.pullStates[n], t.abrupt("return", a);
  11786. case 18:
  11787. case "end":
  11788. return t.stop()
  11789. }
  11790. }, t, this, [
  11791. [3, 11]
  11792. ])
  11793. })), function(e) {
  11794. return i.apply(this, arguments)
  11795. });
  11796. var i;
  11797. var a;
  11798. var r;
  11799. var d;
  11800. var u;
  11801. var l;
  11802. var p;
  11803. var f;
  11804. var m
  11805. }(t, e), Object(W.isEmpty)(e.turnServer) || t.setTurnServer(e.turnServer), Object(W.isEmpty)(e.proxyServer) || t.setProxyServer(e.proxyServer), "live" === t.mode && (t.gatewayClient.role = "audience"), "rtc" === t.mode && (t.gatewayClient.role = "host"), t.gatewayClient.on("onMultiIP", function(e) {
  11806. t.gatewayClient.closeGateway(), t.gatewayClient.socket = void 0, t.gatewayClient.hasChangeBGPAddress = !0, t.joinInfo.multiIP = e.option, t.gatewayClient.state = dt.CONNECTING;
  11807. var n = function(e) {
  11808. o.
  11809. default.info("[".concat(t.clientId, "] Joining channel: ").concat(t.channel)), t.joinInfo.cid = e.cid, t.joinInfo.uid || (t.joinInfo.uid = e.uid), t.joinInfo.uni_lbs_ip = e.uni_lbs_ip, t.joinInfo.gatewayAddr = e.gateway_addr, t.onSuccess ? t.gatewayClient.join(t.joinInfo, t.key, function(e) {
  11810. o.
  11811. default.info("[".concat(t.clientId, "] Join channel ").concat(t.channel, " success"));
  11812. var n = t.onSuccess;
  11813. t.onSuccess = null, t.onFailure = null, n(e)
  11814. }, t.onFailure):
  11815. (t.gatewayClient.joinInfo = h()({}, t.joinInfo), t.gatewayClient.rejoin())
  11816. };
  11817. t.joinInfo.stringUid && !t.joinInfo.uid ? (t.userAccountReq && !t.userAccountReq.isFinished() && t.userAccountReq.cancel(), t.userAccountReq = Ze(joinInfo, t.gatewayClient), t.userAccountReq.then(function(e) {
  11818. o.
  11819. default.error("getUserAccount Success ".concat(e.url, " ").concat(joinInfo.stringUid, " => ").concat(e.uid)), t.joinInfo.uid = e.uid, Qe(t.joinInfo, n, t.onFailure)
  11820. }).
  11821. catch (function(e) {
  11822. o.
  11823. default.error("getUserAccount rejected", e), t.onFailure(e)
  11824. })) : Qe(t.joinInfo, n, t.onFailure)
  11825. }), t.gatewayClient.on("rejoin-start", function() {
  11826. t._renewSession(), s.b.sessionInit(e.sessionId, {
  11827. lts: (new Date).getTime(),
  11828. extend: {
  11829. rejoin: !0
  11830. },
  11831. cname: t.channel,
  11832. appid: e.appId,
  11833. mode: e.mode,
  11834. succ: !0
  11835. })
  11836. }), t.gatewayClient.on("recover", function() {
  11837. t._renewSession(), console.log("recover", e.sessionId), s.b.sessionInit(e.sessionId, {
  11838. lts: (new Date).getTime(),
  11839. extend: {
  11840. recover: !0
  11841. },
  11842. cname: t.channel,
  11843. appid: e.appId,
  11844. mode: e.mode,
  11845. succ: !0
  11846. })
  11847. }), t.gatewayClient.on("rejoin", function() {
  11848. var e = t.highStreamState;
  11849. if (o.
  11850. default.debug("[".concat(t.clientId, "] Client local stream preState: ").concat(e)), t.onSuccess) {
  11851. var n = t.onSuccess;
  11852. t.onSuccess = null, t.onFailure = null, n()
  11853. }!t.highStream || 0 !== e && 1 !== e || (o.
  11854. default.info("[".concat(t.clientId, "] publish after rejoin")), t.highStreamState = 2, t.lowStreamState = 2, t.publish(t.highStream, function(e) {
  11855. e && o.
  11856. default.info("[".concat(t.clientId, "] "), e)
  11857. }))
  11858. }), t.gatewayClient.on("streamPublished", function(e) {
  11859. t.hasPublished || (t.hasPublished = !0, t.gatewayClient.dispatchEvent(u({
  11860. type: "stream-published",
  11861. stream: e.stream
  11862. })))
  11863. }), t.gatewayClient.on("pubP2PLost", function(e) {
  11864. o.
  11865. default.debug("[".concat(t.clientId, "] Start reconnect local peerConnection: ").concat(t.highStream.getId())), t.gatewayClient.dispatchEvent({
  11866. type: "stream-reconnect-start",
  11867. uid: t.highStream.getId()
  11868. }), 1 === t.highStreamState && (t.highStreamState = 0, t.lowStreamState = 0), t._unpublish(t.highStream, function() {
  11869. t._publish(t.highStream, function() {
  11870. o.
  11871. default.debug("[".concat(t.clientId, "] Reconnect local peerConnection success: ").concat(t.highStream.getId())), t.gatewayClient.dispatchEvent({
  11872. type: "stream-reconnect-end",
  11873. uid: t.highStream.getId(),
  11874. success: !0,
  11875. reason: ""
  11876. })
  11877. }, function(e) {
  11878. o.
  11879. default.debug("[".concat(t.clientId, "] Reconnect local peerConnection failed: ").concat(e)), t.gatewayClient.dispatchEvent({
  11880. type: "stream-reconnect-end",
  11881. uid: t.highStream.getId(),
  11882. success: !1,
  11883. reason: e
  11884. })
  11885. }, !0)
  11886. }, function(e) {
  11887. o.
  11888. default.debug("[".concat(t.clientId, "] Reconnect local peerConnection failed: ").concat(e)), t.gatewayClient.dispatchEvent({
  11889. type: "stream-reconnect-end",
  11890. uid: t.highStream.getId(),
  11891. success: !1,
  11892. reason: e
  11893. })
  11894. }, !0)
  11895. }), t.gatewayClient.on("subP2PLost", function(e) {
  11896. o.
  11897. default.debug("[".concat(t.clientId, "] Start reconnect remote peerConnection: ").concat(e.stream.getId(), " ").concat(e.stream.subscribeOptions)), t.gatewayClient.dispatchEvent({
  11898. type: "stream-reconnect-start",
  11899. uid: e.stream.getId()
  11900. });
  11901. var n = e.stream.subscribeOptions;
  11902. console.log("Re-subscribe stream", n, e.stream), t.gatewayClient.unsubscribe(e.stream, function() {
  11903. e.stream.subscribeOptions = n, t.gatewayClient.subscribe(e.stream, function() {
  11904. o.
  11905. default.debug("[".concat(t.clientId, "] Reconnect remote peerConnection success: ").concat(e.stream.getId())), t.gatewayClient.dispatchEvent({
  11906. type: "stream-reconnect-end",
  11907. uid: e.stream.getId(),
  11908. success: !1,
  11909. reason: ""
  11910. })
  11911. }, function(n) {
  11912. o.
  11913. default.debug("[".concat(t.clientId, "] Reconnect remote peerConnection failed: "), n), t.gatewayClient.dispatchEvent({
  11914. type: "stream-reconnect-end",
  11915. uid: e.stream.getId(),
  11916. success: !1,
  11917. reason: n
  11918. })
  11919. })
  11920. }, function(n) {
  11921. o.
  11922. default.debug("[".concat(t.clientId, "] Reconnect remote peerConnection failed: "), n), t.gatewayClient.dispatchEvent({
  11923. type: "stream-reconnect-end",
  11924. uid: e.stream.getId(),
  11925. success: !1,
  11926. reason: n
  11927. })
  11928. })
  11929. }), mt.on("networkTypeChanged", function(e) {
  11930. t.gatewayClient && t.gatewayClient.dispatchEvent(e);
  11931. var n = h()({}, e, {
  11932. type: "network-type-changed"
  11933. });
  11934. t.gatewayClient.dispatchEvent(n)
  11935. }), H.on("recordingDeviceChanged", function(e) {
  11936. t.gatewayClient && t.gatewayClient.dispatchEvent(e);
  11937. var n = h()({}, e, {
  11938. type: "recording-device-changed"
  11939. });
  11940. t.gatewayClient.dispatchEvent(n)
  11941. }), H.on("playoutDeviceChanged", function(e) {
  11942. t.gatewayClient && t.gatewayClient.dispatchEvent(e);
  11943. var n = h()({}, e, {
  11944. type: "playout-device-changed"
  11945. });
  11946. t.gatewayClient.dispatchEvent(n)
  11947. }), H.on("cameraChanged", function(e) {
  11948. t.gatewayClient && t.gatewayClient.dispatchEvent(e);
  11949. var n = h()({}, e, {
  11950. type: "camera-changed"
  11951. });
  11952. t.gatewayClient.dispatchEvent(n)
  11953. }), t.gatewayClient.on("streamTypeChange", function(n) {
  11954. var i = h()({}, n, {
  11955. type: "stream-type-changed"
  11956. });
  11957. t.gatewayClient.dispatchEvent(i), s.b.reportApiInvoke(e.sessionId, {
  11958. name: "streamTypeChange"
  11959. })(null, JSON.stringify(n))
  11960. }), t
  11961. },
  11962. Ut = {
  11963. width: 640,
  11964. height: 360,
  11965. videoBitrate: 400,
  11966. videoFramerate: 15,
  11967. lowLatency: !1,
  11968. audioSampleRate: 48e3,
  11969. audioBitrate: 48,
  11970. audioChannels: 1,
  11971. videoGop: 30,
  11972. videoCodecProfile: 100,
  11973. userCount: 0,
  11974. userConfigExtraInfo: {},
  11975. backgroundColor: 0,
  11976. transcodingUsers: []
  11977. },
  11978. Vt = H.getDevices, jt = M, Ft = JSON.parse(JSON.stringify(r.SUPPORT_RESOLUTION_LIST)); n.
  11979. default = {
  11980. TranscodingUser: {
  11981. uid: 0,
  11982. x: 0,
  11983. y: 0,
  11984. width: 0,
  11985. height: 0,
  11986. zOrder: 0,
  11987. alpha: 1
  11988. },
  11989. LiveTranscoding: Ut,
  11990. createClient: function(e) {
  11991. var t = s.b.reportApiInvoke(null, {
  11992. name: "createClient",
  11993. options: arguments,
  11994. tag: "tracer"
  11995. });
  11996. (e = h()({}, e || {})).codec || (e.codec = function(e) {
  11997. switch (e) {
  11998. case "h264_interop":
  11999. return "h264";
  12000. default:
  12001. return "vp8"
  12002. }
  12003. }(e.mode));
  12004. var n = function(e) {
  12005. return -1 === Me.indexOf(e.mode) ? I.
  12006. default.INVALID_CLIENT_MODE:
  12007. -1 === Pe.indexOf(e.codec) ? I.
  12008. default.INVALID_CLIENT_CODEC:
  12009. "h264_interop" == e.mode && "h264" !== e.codec && I.
  12010. default.CLIENT_MODE_CODEC_MISMATCH
  12011. }(e);
  12012. if (n) throw o.
  12013. default.error("Invalid parameter setting MODE: ".concat(e.mode, " CODEC: ").concat(e.codec, " ERROR ").concat(n)), t(n), new Error(n);
  12014. return o.
  12015. default.info("Creating client, MODE: ".concat(e.mode, " CODEC: ").concat(e.codec)), function(e) {
  12016. switch (e.mode) {
  12017. case "interop":
  12018. case "h264_interop":
  12019. e.mode = "live";
  12020. break;
  12021. case "web-only":
  12022. e.mode = "rtc"
  12023. }
  12024. }(e), t(null, e), xt(e)
  12025. },
  12026. createStream: function(e) {
  12027. var t = s.b.reportApiInvoke(null, {
  12028. name: "createStream",
  12029. options: arguments,
  12030. tag: "tracer",
  12031. getStates: function() {
  12032. return {
  12033. audioTrackEnable: e && e.audioSource ? e.audioSource.enabled : null,
  12034. videoTrackEnable: e && e.videoSource ? e.videoSource.enabled : null
  12035. }
  12036. }
  12037. });
  12038. Object(W.checkValidObject)(e, "StreamSpec");
  12039. var n = e.streamID,
  12040. i = e.audio,
  12041. a = e.video,
  12042. r = e.screen,
  12043. c = e.screenAudio,
  12044. d = (e.audioSource, e.videoSource, e.cameraId),
  12045. u = e.facingMode,
  12046. l = e.microphoneId,
  12047. p = e.mirror,
  12048. f = e.extensionId,
  12049. m = e.mediaSource,
  12050. g = e.audioProcessing;
  12051. if (!Object(W.isEmpty)(n) && !Object(F.is32Uint)(n) && !Object(W.isValidString)(n, 1, 255)) throw new Error("[String streamID] Length of the string: [1,255]. ASCII characters only. [Number streamID] The value range is Uint32");
  12052. if (Object(W.checkValidBoolean)(i, "audio"), Object(W.checkValidBoolean)(a, "video"), Object(W.isEmpty)(r) || Object(W.checkValidBoolean)(r, "screen"), Object(W.isEmpty)(c) || Object(W.checkValidBoolean)(c, "screenAudio"), Object(W.isEmpty)(d) || Object(W.checkValidString)(d, "cameraId", 0, 255, !1), Object(W.isEmpty)(u) || Object(W.checkValidEnum)(u, "facingMode", ["user", "environment", "left", "right"]), Object(W.isEmpty)(l) || Object(W.checkValidString)(l, "microphoneId", 0, 255, !1), Object(W.isEmpty)(f) || Object(W.checkValidString)(f, "extensionId"), Object(W.isEmpty)(m) || Object(W.checkValidEnum)(m, "mediaSource", ["screen", "application", "window"]), Object(W.isEmpty)(p) || Object(W.checkValidBoolean)(p, "mirror"), !Object(W.isEmpty)(g)) {
  12053. var v = g.AGC,
  12054. S = g.AEC,
  12055. h = g.ANS;
  12056. Object(W.isEmpty)(v) || Object(W.checkValidBoolean)(v, "AGC"), Object(W.isEmpty)(S) || Object(W.checkValidBoolean)(S, "AEC"), Object(W.isEmpty)(h) || Object(W.checkValidBoolean)(h, "ANS")
  12057. }
  12058. o.
  12059. default.debug("Create stream"), !0 === c && !0 === i && o.
  12060. default.warning("Do not set both 'screenAudio' and 'audio' to true at the same time");
  12061. var _ = we(e);
  12062. return t(), _
  12063. },
  12064. Logger: o.
  12065. default,
  12066. report:
  12067. s.b,
  12068. getDevices: Vt,
  12069. getScreenSources: jt,
  12070. getParameter: r.getParameter,
  12071. setParameter: r.setParameter,
  12072. checkSystemRequirements: function() {
  12073. var e = s.b.reportApiInvoke(null, {
  12074. name: "checkSystemRequirements",
  12075. options: arguments,
  12076. tag: "tracer"
  12077. }),
  12078. t = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection,
  12079. n = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.msGetUserMedia || navigator.mozGetUserMedia || navigator.mediaDevices && navigator.mediaDevices.getUserMedia,
  12080. i = window.WebSocket,
  12081. a = !! t && !! n && !! i,
  12082. r = !1;
  12083. o.
  12084. default.debug(m.getBrowserInfo(), "isAPISupport:" + a), m.isChrome() && m.getBrowserVersion() >= 58 && "iOS" !== m.getBrowserOS() && (r = !0), m.isFireFox() && m.getBrowserVersion() >= 56 && (r = !0), m.isOpera() && m.getBrowserVersion() >= 45 && (r = !0), m.isSafari() && m.getBrowserVersion() >= 11 && (r = !0), m.isEdge() && (r = !0), (m.isWeChatBrowser() || m.isQQBrowser()) && "iOS" !== m.getBrowserOS() && (r = !0), m.isSupportedPC() || m.isSupportedMobile() || (r = !1);
  12085. var c = a && r;
  12086. return e(null, c), c
  12087. },
  12088. getSupportedCodec: De.getSupportedCodec,
  12089. ChannelMediaRelayConfiguration: ke.ChannelMediaRelayConfiguration,
  12090. VERSION: r.VERSION,
  12091. BUILD: r.BUILD,
  12092. PROFILE_TABLE: Ft,
  12093. AUDIO_SAMPLE_RATE_32000: 32e3,
  12094. AUDIO_SAMPLE_RATE_44100: 44100,
  12095. AUDIO_SAMPLE_RATE_48000: 48e3,
  12096. VIDEO_CODEC_PROFILE_BASELINE: 66,
  12097. VIDEO_CODEC_PROFILE_MAIN: 77,
  12098. VIDEO_CODEC_PROFILE_HIGH: 100,
  12099. REMOTE_VIDEO_STREAM_HIGH: 0,
  12100. REMOTE_VIDEO_STREAM_LOW: 1,
  12101. REMOTE_VIDEO_STREAM_MEDIUM: 2
  12102. }
  12103. }]).
  12104. default
  12105. });