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

AgoraRTCSDK.min.js 551KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545954695479548954995509551955295539554955595569557955895599560956195629563956495659566956795689569957095719572957395749575957695779578957995809581958295839584958595869587958895899590959195929593959495959596959795989599960096019602960396049605960696079608960996109611961296139614961596169617961896199620962196229623962496259626962796289629963096319632963396349635963696379638963996409641964296439644964596469647964896499650965196529653965496559656965796589659966096619662966396649665966696679668966996709671967296739674967596769677967896799680968196829683968496859686968796889689969096919692969396949695969696979698969997009701970297039704970597069707970897099710971197129713971497159716971797189719972097219722972397249725972697279728972997309731973297339734973597369737973897399740974197429743974497459746974797489749975097519752975397549755975697579758975997609761976297639764976597669767976897699770977197729773977497759776977797789779978097819782978397849785978697879788978997909791979297939794979597969797979897999800980198029803980498059806980798089809981098119812981398149815981698179818981998209821982298239824982598269827982898299830983198329833983498359836983798389839984098419842984398449845984698479848984998509851985298539854985598569857985898599860986198629863986498659866986798689869987098719872987398749875987698779878987998809881988298839884988598869887988898899890989198929893989498959896989798989899990099019902990399049905990699079908990999109911991299139914991599169917991899199920992199229923992499259926992799289929993099319932993399349935993699379938993999409941994299439944994599469947994899499950995199529953995499559956995799589959996099619962996399649965996699679968996999709971997299739974997599769977997899799980998199829983998499859986998799889989999099919992999399949995999699979998999910000100011000210003100041000510006100071000810009100101001110012100131001410015100161001710018100191002010021100221002310024100251002610027100281002910030100311003210033100341003510036100371003810039100401004110042100431004410045100461004710048100491005010051100521005310054100551005610057100581005910060100611006210063100641006510066100671006810069100701007110072100731007410075100761007710078100791008010081100821008310084100851008610087100881008910090100911009210093100941009510096100971009810099101001010110102101031010410105101061010710108101091011010111101121011310114101151011610117101181011910120101211012210123101241012510126101271012810129101301013110132101331013410135101361013710138101391014010141101421014310144101451014610147101481014910150101511015210153101541015510156101571015810159101601016110162101631016410165101661016710168101691017010171101721017310174101751017610177101781017910180101811018210183101841018510186101871018810189101901019110192101931019410195101961019710198101991020010201102021020310204102051020610207102081020910210102111021210213102141021510216102171021810219102201022110222102231022410225102261022710228102291023010231102321023310234102351023610237102381023910240102411024210243102441024510246102471024810249102501025110252102531025410255102561025710258102591026010261102621026310264102651026610267102681026910270102711027210273102741027510276102771027810279102801028110282102831028410285102861028710288102891029010291102921029310294102951029610297102981029910300103011030210303103041030510306103071030810309103101031110312103131031410315103161031710318103191032010321103221032310324103251032610327103281032910330103311033210333103341033510336103371033810339103401034110342103431034410345103461034710348103491035010351103521035310354103551035610357103581035910360103611036210363103641036510366103671036810369103701037110372103731037410375103761037710378103791038010381103821038310384103851038610387103881038910390103911039210393103941039510396103971039810399104001040110402104031040410405104061040710408104091041010411104121041310414104151041610417104181041910420104211042210423104241042510426104271042810429104301043110432104331043410435104361043710438104391044010441104421044310444104451044610447104481044910450104511045210453104541045510456104571045810459104601046110462104631046410465104661046710468104691047010471104721047310474104751047610477104781047910480104811048210483104841048510486104871048810489104901049110492104931049410495104961049710498104991050010501105021050310504105051050610507105081050910510105111051210513105141051510516105171051810519105201052110522105231052410525105261052710528105291053010531105321053310534105351053610537105381053910540105411054210543105441054510546105471054810549105501055110552105531055410555105561055710558105591056010561105621056310564105651056610567105681056910570105711057210573105741057510576105771057810579105801058110582105831058410585105861058710588105891059010591105921059310594105951059610597105981059910600106011060210603106041060510606106071060810609106101061110612106131061410615106161061710618106191062010621106221062310624106251062610627106281062910630106311063210633106341063510636106371063810639106401064110642106431064410645106461064710648106491065010651106521065310654106551065610657106581065910660106611066210663106641066510666106671066810669106701067110672106731067410675106761067710678106791068010681106821068310684106851068610687106881068910690106911069210693106941069510696106971069810699107001070110702107031070410705107061070710708107091071010711107121071310714107151071610717107181071910720107211072210723107241072510726107271072810729107301073110732107331073410735107361073710738107391074010741107421074310744107451074610747107481074910750107511075210753107541075510756107571075810759107601076110762107631076410765107661076710768107691077010771107721077310774107751077610777107781077910780107811078210783107841078510786107871078810789107901079110792107931079410795107961079710798107991080010801108021080310804108051080610807108081080910810108111081210813108141081510816108171081810819108201082110822108231082410825108261082710828108291083010831108321083310834108351083610837108381083910840108411084210843108441084510846108471084810849108501085110852108531085410855108561085710858108591086010861108621086310864108651086610867108681086910870108711087210873108741087510876108771087810879108801088110882108831088410885108861088710888108891089010891108921089310894108951089610897108981089910900109011090210903109041090510906109071090810909109101091110912109131091410915109161091710918109191092010921109221092310924109251092610927109281092910930109311093210933109341093510936109371093810939109401094110942109431094410945109461094710948109491095010951109521095310954109551095610957109581095910960109611096210963109641096510966109671096810969109701097110972109731097410975109761097710978109791098010981109821098310984109851098610987109881098910990109911099210993109941099510996109971099810999110001100111002110031100411005110061100711008110091101011011110121101311014110151101611017110181101911020110211102211023110241102511026110271102811029110301103111032110331103411035110361103711038110391104011041110421104311044110451104611047110481104911050110511105211053110541105511056110571105811059110601106111062110631106411065110661106711068110691107011071110721107311074110751107611077110781107911080110811108211083110841108511086110871108811089110901109111092110931109411095110961109711098110991110011101111021110311104111051110611107111081110911110111111111211113111141111511116111171111811119111201112111122111231112411125111261112711128111291113011131111321113311134111351113611137111381113911140111411114211143111441114511146111471114811149111501115111152111531115411155111561115711158111591116011161111621116311164111651116611167111681116911170111711117211173111741117511176111771117811179111801118111182111831118411185111861118711188111891119011191111921119311194111951119611197111981119911200112011120211203112041120511206112071120811209112101121111212112131121411215112161121711218112191122011221112221122311224112251122611227112281122911230112311123211233112341123511236112371123811239112401124111242112431124411245112461124711248112491125011251112521125311254112551125611257112581125911260112611126211263112641126511266112671126811269112701127111272112731127411275112761127711278112791128011281112821128311284112851128611287112881128911290112911129211293112941129511296112971129811299113001130111302113031130411305113061130711308113091131011311113121131311314113151131611317113181131911320113211132211323113241132511326113271132811329113301133111332113331133411335113361133711338113391134011341113421134311344113451134611347113481134911350113511135211353113541135511356113571135811359113601136111362113631136411365113661136711368113691137011371113721137311374113751137611377113781137911380113811138211383113841138511386113871138811389113901139111392113931139411395113961139711398113991140011401114021140311404114051140611407114081140911410114111141211413114141141511416114171141811419114201142111422114231142411425114261142711428114291143011431114321143311434114351143611437114381143911440114411144211443114441144511446114471144811449114501145111452114531145411455114561145711458114591146011461114621146311464114651146611467114681146911470114711147211473114741147511476114771147811479114801148111482114831148411485114861148711488114891149011491114921149311494114951149611497114981149911500115011150211503115041150511506115071150811509115101151111512115131151411515115161151711518115191152011521115221152311524115251152611527115281152911530115311153211533115341153511536115371153811539115401154111542115431154411545115461154711548115491155011551115521155311554115551155611557115581155911560115611156211563115641156511566115671156811569115701157111572115731157411575115761157711578115791158011581115821158311584115851158611587115881158911590115911159211593115941159511596115971159811599116001160111602116031160411605116061160711608116091161011611116121161311614116151161611617116181161911620116211162211623116241162511626116271162811629116301163111632116331163411635116361163711638116391164011641116421164311644116451164611647116481164911650116511165211653116541165511656116571165811659116601166111662116631166411665116661166711668116691167011671116721167311674116751167611677116781167911680116811168211683116841168511686116871168811689116901169111692116931169411695116961169711698116991170011701117021170311704117051170611707117081170911710117111171211713117141171511716117171171811719117201172111722117231172411725117261172711728117291173011731117321173311734117351173611737117381173911740117411174211743117441174511746117471174811749117501175111752117531175411755117561175711758117591176011761117621176311764117651176611767117681176911770117711177211773117741177511776117771177811779117801178111782117831178411785117861178711788117891179011791117921179311794117951179611797117981179911800118011180211803118041180511806118071180811809118101181111812118131181411815118161181711818118191182011821118221182311824118251182611827118281182911830118311183211833118341183511836118371183811839118401184111842118431184411845118461184711848118491185011851118521185311854118551185611857118581185911860118611186211863118641186511866118671186811869118701187111872118731187411875118761187711878118791188011881118821188311884118851188611887118881188911890118911189211893118941189511896118971189811899119001190111902119031190411905119061190711908119091191011911119121191311914119151191611917119181191911920119211192211923119241192511926119271192811929119301193111932119331193411935119361193711938119391194011941119421194311944119451194611947119481194911950119511195211953119541195511956119571195811959119601196111962119631196411965119661196711968119691197011971119721197311974119751197611977119781197911980119811198211983119841198511986119871198811989119901199111992119931199411995119961199711998119991200012001120021200312004120051200612007120081200912010120111201212013120141201512016120171201812019120201202112022120231202412025120261202712028120291203012031120321203312034120351203612037120381203912040120411204212043120441204512046120471204812049120501205112052120531205412055120561205712058120591206012061120621206312064120651206612067120681206912070120711207212073120741207512076120771207812079120801208112082120831208412085120861208712088120891209012091120921209312094120951209612097120981209912100121011210212103121041210512106121071210812109121101211112112121131211412115121161211712118121191212012121121221212312124121251212612127121281212912130121311213212133121341213512136121371213812139121401214112142121431214412145121461214712148121491215012151121521215312154121551215612157121581215912160121611216212163121641216512166121671216812169121701217112172121731217412175121761217712178121791218012181121821218312184121851218612187
  1. /*! AgoraRTC|BUILD v3.0.2-0-geb536be */
  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. f = 0;
  64. setInterval(function() {
  65. Object(o.getParameter)("UPLOAD_LOG") && p.info("console log upload")
  66. }, 9e5);
  67. var p = function() {
  68. var e, t, n, i, p, 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. f = 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. }, f++ < 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. }, p = 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: p
  175. }
  176. }();
  177. t.
  178. default = p
  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 f
  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 (!f(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 (!p(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. f = function(e, t, n) {
  248. return h(e) && e >= t && e <= n
  249. },
  250. p = 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 f = {
  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. p = null,
  316. m = function() {
  317. return p || (p = "process-" + l()(), c.
  318. default.info("processId: " + p)), p
  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()({}, f);
  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. f = n.callback,
  432. p = n.reportResult,
  433. m = void 0 === p || p,
  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), f && f(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")), f && f(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. f = t.success,
  501. p = 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 - p,
  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: f,
  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 (t.data) {
  562. var n = t.data;
  563. e._lastLts && e._lastLts >= n.lts && (n.lts = e._lastLts + 1), e._lastLts = n.lts
  564. }
  565. if (e.sendCache.push(t), null === e.sendTimer) {
  566. return function t() {
  567. e.sendTimer = setTimeout(function() {
  568. if (0 !== e.sendCache.length) return e._send(e.sendCache.shift()), t();
  569. e.sendTimer = null
  570. }, Object(s.getParameter)("EVENT_REPORT_SEND_INTERVAL"))
  571. }()
  572. }
  573. }, e
  574. }()
  575. }, function(e, t, n) {
  576. "use strict";
  577. Object.defineProperty(t, "__esModule", {
  578. value: !0
  579. });
  580. t.BUILD = "v3.0.2-0-geb536be";
  581. t.VERSION = "3.0.2";
  582. t.SUPPORT_RESOLUTION_LIST = {
  583. "90p_1": [160, 90, null, null, null, null],
  584. "120p_1": [160, 120, 15, 15, 30, 65],
  585. "120p_3": [120, 120, 15, 15, 30, 50],
  586. "120p_4": [212, 120, null, null, null, null],
  587. "180p_1": [320, 180, 15, 15, 30, 140],
  588. "180p_3": [180, 180, 15, 15, 30, 100],
  589. "180p_4": [240, 180, 15, 15, 30, 120],
  590. "240p_1": [320, 240, 15, 15, 40, 200],
  591. "240p_3": [240, 240, 15, 15, 40, 140],
  592. "240p_4": [424, 240, 15, 15, 40, 220],
  593. "360p_1": [640, 360, 15, 15, 80, 400],
  594. "360p_3": [360, 360, 15, 15, 80, 260],
  595. "360p_4": [640, 360, 30, 30, 80, 600],
  596. "360p_6": [360, 360, 30, 30, 80, 400],
  597. "360p_7": [480, 360, 15, 15, 80, 320],
  598. "360p_8": [480, 360, 30, 30, 80, 490],
  599. "360p_9": [640, 360, 15, 15, 80, 800],
  600. "360p_10": [640, 360, 24, 24, 80, 800],
  601. "360p_11": [640, 360, 24, 24, 80, 1e3],
  602. "480p_1": [640, 480, 15, 15, 100, 500, 1, 5],
  603. "480p_2": [640, 480, 30, 30, 100, 1e3, 25, 30],
  604. "480p_3": [480, 480, 15, 15, 100, 400],
  605. "480p_4": [640, 480, 30, 30, 100, 750],
  606. "480p_6": [480, 480, 30, 30, 100, 600],
  607. "480p_8": [848, 480, 15, 15, 100, 610],
  608. "480p_9": [848, 480, 30, 30, 100, 930],
  609. "480p_10": [640, 480, 10, 10, 100, 400],
  610. "720p_1": [1280, 720, 15, 15, 120, 1130, 1, 5],
  611. "720p_2": [1280, 720, 30, 30, 120, 2e3, 25, 30],
  612. "720p_3": [1280, 720, 30, 30, 120, 1710],
  613. "720p_5": [960, 720, 15, 15, 120, 910],
  614. "720p_6": [960, 720, 30, 30, 120, 1380],
  615. "1080p_1": [1920, 1080, 15, 15, 120, 2080, 1, 5],
  616. "1080p_2": [1920, 1080, 30, 30, 120, 3e3, 25, 30],
  617. "1080p_3": [1920, 1080, 30, 30, 120, 3150],
  618. "1080p_5": [1920, 1080, 60, 60, 120, 4780],
  619. "1440p_1": [2560, 1440, 30, 30, 120, 4850],
  620. "1440p_2": [2560, 1440, 60, 60, 120, 7350],
  621. "4k_1": [3840, 2160, 30, 30, 120, 8910],
  622. "4k_3": [3840, 2160, 60, 60, 120, 13500]
  623. };
  624. t.AUDIO_PROFILE_SETTINGS = {
  625. speech_low_quality: [!1, !1, !0, !0],
  626. speech_standard: [!1, !1, !0, !1],
  627. music_standard: [!1, !1, !1, !1],
  628. standard_stereo: [!1, !0, !1, !1],
  629. high_quality: [!0, !1, !1, !1],
  630. high_quality_stereo: [!0, !0, !1, !1],
  631. default:
  632. [!1, !1, !1, !1]
  633. };
  634. var i = {
  635. WEBCS_DOMAIN: ["webrtc2-ap-web-1.agora.io", "webrtc2-ap-web-2.agoraio.cn"],
  636. WEBCS_DOMAIN_BACKUP_LIST: ["webrtc2-ap-web-3.agora.io", "webrtc2-ap-web-4.agoraio.cn"],
  637. PROXY_CS: ["ap-proxy-1.agora.io", "ap-proxy-2.agora.io"],
  638. 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"],
  639. 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"],
  640. 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"],
  641. ACCOUNT_REGISTER_RETRY_TIMEOUT: 1,
  642. ACCOUNT_REGISTER_RETRY_RATIO: 2,
  643. ACCOUNT_REGISTER_RETRY_TIMEOUT_MAX: 6e4,
  644. ACCOUNT_REGISTER_RETRY_COUNT_MAX: 1e5,
  645. AUDIO_CONTEXT: null,
  646. LOG_UPLOAD_SERVER: "logservice.agora.io",
  647. EVENT_REPORT_DOMAIN: "webcollector-1.agora.io",
  648. EVENT_REPORT_BACKUP_DOMAIN: "webcollector-2.agoraio.cn",
  649. WEBCS_BACKUP_CONNECT_TIMEOUT: 6e3,
  650. LIVESTREAMING_ALIGN: !0,
  651. HTTP_CONNECT_TIMEOUT: 5e3,
  652. PLAYER_STATE_DEFER: 2e3,
  653. SIGNAL_REQUEST_TIMEOUT: 1e4,
  654. SIGNAL_REQUEST_WATCH_INTERVAL: 1e3,
  655. REPORT_STATS: !0,
  656. REPORT_STATS_TIMEOUT: 3e3,
  657. UPLOAD_LOG: !1,
  658. NOT_REPORT_EVENT: [],
  659. FILEPATH_LENMAX: 255,
  660. SUBSCRIBE_TCC: !1,
  661. PING_PONG_TIME_OUT: 10,
  662. DUALSTREAM_OPERATION_CHECK: !0,
  663. WEBSOCKET_TIMEOUT_MIN: 1e4,
  664. EVENT_REPORT_SEND_INTERVAL: 1e3,
  665. MEDIA_ELEMENT_EXISTS_DEPTH: 3,
  666. CANDIDATE_TIMEOUT: 2e3,
  667. SHIM_CANDIDATE: !1,
  668. LEAVE_MSG_TIMEOUT: 2e3,
  669. TICKET_RENEW_TIMEOUT: 828e5,
  670. SHOW_REPORT_INVOKER_LOG: !1,
  671. STATS_FILTER: {
  672. transportId: !0,
  673. googTrackId: !0
  674. },
  675. FORCE_TURN: !1,
  676. TURN_ENABLE_TCP: !0,
  677. TURN_ENABLE_UDP: !0,
  678. FORCE_CHANGED_GATEWAY_FLAG: !1,
  679. JOIN_EXTEND: "",
  680. PUB_EXTEND: "",
  681. SUB_EXTEND: "",
  682. CHROME_NEW_STATS: !1,
  683. AP_BACKOFF_MAX_TIME: 8
  684. };
  685. t.setParameter = function(e, t) {
  686. return void 0 !== i[e] && (i[e] = t, !0)
  687. };
  688. t.getParameter = function(e) {
  689. return void 0 !== i[e] ? i[e] : null
  690. }
  691. }, function(e, t, n) {
  692. "use strict";
  693. n.r(t), n.d(t, "APErrorCode", function() {
  694. return i
  695. }), n.d(t, "GatewayErrorCode", function() {
  696. return a
  697. }), n.d(t, "StringUidErrorCode", function() {
  698. return r
  699. }), n.d(t, "JOIN_GS_TRYNEXT_LIST", function() {
  700. return o
  701. }), n.d(t, "JOIN_CS_RETRY_LIST", function() {
  702. return s
  703. }), n.d(t, "INJECT_STREAM_STATUS", function() {
  704. return c
  705. });
  706. var i = {
  707. 101100: "NO_FLAG_SET",
  708. 101101: "FLAG_SET_BUT_EMPTY",
  709. 101102: "INVALID_FALG_SET",
  710. 101203: "NO_SERVICE_AVIABLE",
  711. 0: "OK_CODE",
  712. 5: "INVALID_VENDOR_KEY",
  713. 7: "INVALID_CHANNEL_NAME",
  714. 8: "INTERNAL_ERROR",
  715. 9: "NO_AUTHORIZED",
  716. 10: "DYNAMIC_KEY_TIMEOUT",
  717. 11: "NO_ACTIVE_STATUS",
  718. 13: "DYNAMIC_KEY_EXPIRED",
  719. 14: "STATIC_USE_DYANMIC_KEY",
  720. 15: "DYNAMIC_USE_STATIC_KEY",
  721. 1010100: "NO_FLAG_SET",
  722. 1010101: "FLAG_SET_BUT_EMPTY",
  723. 1010102: "INVALID_FALG_SET",
  724. 1010200: "NO_SERVICE_AVAILABLE",
  725. 1010203: "NO_SERVICE_AVAILABLE_WEBRTC",
  726. 1010205: "NO_SERVICE_AVAILABLE_DISPATCHER",
  727. 1010208: "NO_SERVICE_AVAILABLE_APPCENTER",
  728. 1010211: "NO_SERVICE_AVAILABLE_SUA",
  729. 2010005: "INVALID_VENDOR_KEY",
  730. 2010007: "INVALID_CHANNEL_NAME",
  731. 2010008: "INTERNAL_ERROR",
  732. 2010009: "NO_AUTHORIZED",
  733. 2010010: "DYNAMIC_KEY_TIMEOUT",
  734. 2010011: "NO_ACTIVE_STATUS",
  735. 2010013: "DYNAMIC_KEY_EXPIRED",
  736. 2010014: "STATIC_USE_DYANMIC_KEY",
  737. 2010015: "DYNAMIC_USE_STATIC_KEY"
  738. },
  739. a = {
  740. 2000: "ERR_NO_VOCS_AVAILABLE",
  741. 2001: "ERR_NO_VOS_AVAILABLE",
  742. 2002: "ERR_JOIN_CHANNEL_TIMEOUT",
  743. 2003: "WARN_REPEAT_JOIN",
  744. 2004: "ERR_JOIN_BY_MULTI_IP",
  745. 2011: "ERR_NOT_JOINED",
  746. 2012: "WARN_REPEAT_JOIN",
  747. 2013: "ERR_INVALID_VENDOR_KEY",
  748. 2014: "ERR_INVALID_CHANNEL_NAME",
  749. 2015: "ERR_INVALID_STRINGUID",
  750. 2016: "ERR_TOO_MANY_USERS",
  751. 2017: "ERR_SET_CLIENT_ROLE_TIMEOUT",
  752. 2018: "ERR_SET_CLIENT_ROLE_NO_PERMISSION",
  753. 2019: "ERR_SET_CLIENT_ROLE_ALREADY_IN_USE",
  754. 2020: "ERR_PUBLISH_REQUEST_INVALID",
  755. 2021: "ERR_SUBSCRIBE_REQUEST_INVALID",
  756. 2022: "ERR_NOT_SUPPORTED_MESSAGE",
  757. 2023: "ERR_ILLEAGAL_PLUGIN",
  758. 101: "ERR_INVALID_VENDOR_KEY",
  759. 102: "ERR_INVALID_CHANNEL_NAME",
  760. 103: "WARN_NO_AVAILABLE_CHANNEL",
  761. 104: "WARN_LOOKUP_CHANNEL_TIMEOUT",
  762. 105: "WARN_LOOKUP_CHANNEL_REJECTED",
  763. 106: "WARN_OPEN_CHANNEL_TIMEOUT",
  764. 107: "WARN_OPEN_CHANNEL_REJECTED",
  765. 108: "WARN_REQUEST_DEFERRED",
  766. 109: "ERR_DYNAMIC_KEY_TIMEOUT",
  767. 110: "ERR_NO_AUTHORIZED",
  768. 111: "ERR_VOM_SERVICE_UNAVAILABLE",
  769. 112: "ERR_NO_CHANNEL_AVAILABLE_CODE",
  770. 113: "ERR_TOO_MANY_USERS",
  771. 114: "ERR_MASTER_VOCS_UNAVAILABLE",
  772. 115: "ERR_INTERNAL_ERROR",
  773. 116: "ERR_NO_ACTIVE_STATUS",
  774. 117: "ERR_INVALID_UID",
  775. 118: "ERR_DYNAMIC_KEY_EXPIRED",
  776. 119: "ERR_STATIC_USE_DYANMIC_KE",
  777. 120: "ERR_DYNAMIC_USE_STATIC_KE",
  778. 2: "K_TIMESTAMP_EXPIRED",
  779. 3: "K_CHANNEL_PERMISSION_INVALID",
  780. 4: "K_CERTIFICATE_INVALID",
  781. 5: "K_CHANNEL_NAME_EMPTY",
  782. 6: "K_CHANNEL_NOT_FOUND",
  783. 7: "K_TICKET_INVALID",
  784. 8: "K_CHANNEL_CONFLICTED",
  785. 9: "K_SERVICE_NOT_READY",
  786. 10: "K_SERVICE_TOO_HEAVY",
  787. 14: "K_UID_BANNED",
  788. 15: "K_IP_BANNED",
  789. 16: "K_CHANNEL_BANNED"
  790. },
  791. r = {
  792. 1: "ERROR_ILLEAGAL_APPID",
  793. 2: "ERROR_ILLEAGAL_UID",
  794. 3: "INTERNAL_SERVER_ERROR"
  795. },
  796. 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"],
  797. s = ["NO_FLAG_SET", "NO_SERVICE_AVIABLE", "FLAG_SET_BUT_EMPTY", "EMPTY_ADDRESS_RESPONSE"],
  798. c = {
  799. INJECT_STREAM_STATUS_START_SUCCESS: 0,
  800. INJECT_STREAM_STATUS_START_ALREADY_EXISTS: 1,
  801. INJECT_STREAM_STATUS_START_UNAUTHORIZED: 2,
  802. INJECT_STREAM_STATUS_START_TIMEDOUT: 3,
  803. INJECT_STREAM_STATUS_START_FAILED: 4,
  804. INJECT_STREAM_STATUS_STOP_SUCCESS: 5,
  805. INJECT_STREAM_STATUS_STOP_NOT_FOUND: 6,
  806. INJECT_STREAM_STATUS_STOP_UNAUTHORIZED: 7,
  807. INJECT_STREAM_STATUS_STOP_TIMEDOUT: 8,
  808. INJECT_STREAM_STATUS_STOP_FAILED: 9,
  809. INJECT_STREAM_STATUS_BROKEN: 10
  810. };
  811. t.
  812. default = {
  813. FAILED: "FAILED",
  814. INVALID_KEY: "INVALID_KEY",
  815. INVALID_CLIENT_MODE: "INVALID_CLIENT_MODE",
  816. INVALID_CLIENT_CODEC: "INVALID_CLIENT_CODEC",
  817. CLIENT_MODE_CODEC_MISMATCH: "CLIENT_MODE_CODEC_MISMATCH",
  818. WEB_API_NOT_SUPPORTED: "WEB_API_NOT_SUPPORTED",
  819. INVALID_PARAMETER: "INVALID_PARAMETER",
  820. NO_TRACK_IN_STREAM: "NO_TRACK_IN_STREAM",
  821. INVALID_OPERATION: "INVALID_OPERATION",
  822. INVALID_LOCAL_STREAM: "INVALID_LOCAL_STREAM",
  823. INVALID_REMOTE_STREAM: "INVALID_REMOTE_STREAM",
  824. INVALID_DYNAMIC_KEY: "INVALID_DYNAMIC_KEY",
  825. DYNAMIC_KEY_TIMEOUT: "DYNAMIC_KEY_TIMEOUT",
  826. NO_VOCS_AVAILABLE: "NO_VOCS_AVAILABLE",
  827. NO_VOS_AVAILABLE: "ERR_NO_VOS_AVAILABLE",
  828. JOIN_CHANNEL_TIMEOUT: "ERR_JOIN_CHANNEL_TIMEOUT",
  829. NO_AVAILABLE_CHANNEL: "NO_AVAILABLE_CHANNEL",
  830. LOOKUP_CHANNEL_TIMEOUT: "LOOKUP_CHANNEL_TIMEOUT",
  831. LOOKUP_CHANNEL_REJECTED: "LOOKUP_CHANNEL_REJECTED",
  832. OPEN_CHANNEL_TIMEOUT: "OPEN_CHANNEL_TIMEOUT",
  833. OPEN_CHANNEL_REJECTED: "OPEN_CHANNEL_REJECTED",
  834. REQUEST_DEFERRED: "REQUEST_DEFERRED",
  835. STREAM_ALREADY_PUBLISHED: "STREAM_ALREADY_PUBLISHED",
  836. STREAM_NOT_YET_PUBLISHED: "STREAM_NOT_YET_PUBLISHED",
  837. JOIN_TOO_FREQUENT: "JOIN_TOO_FREQUENT",
  838. SOCKET_ERROR: "SOCKET_ERROR",
  839. SOCKET_DISCONNECTED: "SOCKET_DISCONNECTED",
  840. PEERCONNECTION_FAILED: "PEERCONNECTION_FAILED",
  841. CONNECT_GATEWAY_ERROR: "CONNECT_GATEWAY_ERROR",
  842. SERVICE_NOT_AVAILABLE: "SERVICE_NOT_AVAILABLE",
  843. JOIN_CHANNEL_FAILED: "JOIN_CHANNEL_FAILED",
  844. PUBLISH_STREAM_FAILED: "PUBLISH_STREAM_FAILED",
  845. UNPUBLISH_STREAM_FAILED: "UNPUBLISH_STREAM_FAILED",
  846. SUBSCRIBE_STREAM_FAILED: "SUBSCRIBE_STREAM_FAILED",
  847. UNSUBSCRIBE_STREAM_FAILED: "UNSUBSCRIBE_STREAM_FAILED",
  848. NO_SUCH_REMOTE_STREAM: "NO_SUCH_REMOTE_STREAM",
  849. ERR_FAILED: "1",
  850. ERR_INVALID_VENDOR_KEY: "101",
  851. ERR_INVALID_CHANNEL_NAME: "102",
  852. WARN_NO_AVAILABLE_CHANNEL: "103",
  853. WARN_LOOKUP_CHANNEL_TIMEOUT: "104",
  854. WARN_LOOKUP_CHANNEL_REJECTED: "105",
  855. WARN_OPEN_CHANNEL_TIMEOUT: "106",
  856. WARN_OPEN_CHANNEL_REJECTED: "107",
  857. WARN_REQUEST_DEFERRED: "108",
  858. ERR_DYNAMIC_KEY_TIMEOUT: "109",
  859. ERR_INVALID_DYNAMIC_KEY: "110",
  860. ERR_NO_VOCS_AVAILABLE: "2000",
  861. ERR_NO_VOS_AVAILABLE: "2001",
  862. ERR_JOIN_CHANNEL_TIMEOUT: "2002",
  863. IOS_NOT_SUPPORT: "IOS_NOT_SUPPORT",
  864. WECHAT_NOT_SUPPORT: "WECHAT_NOT_SUPPORT",
  865. SHARING_SCREEN_NOT_SUPPORT: "SHARING_SCREEN_NOT_SUPPORT",
  866. STILL_ON_PUBLISHING: "STILL_ON_PUBLISHING",
  867. LOW_STREAM_ALREADY_PUBLISHED: "LOW_STREAM_ALREADY_PUBLISHED",
  868. LOW_STREAM_NOT_YET_PUBLISHED: "LOW_STREAM_ALREADY_PUBLISHED",
  869. HIGH_STREAM_NOT_VIDEO_TRACE: "HIGH_STREAM_NOT_VIDEO_TRACE",
  870. NOT_FIND_DEVICE_BY_LABEL: "NOT_FIND_DEVICE_BY_LABEL",
  871. ENABLE_DUALSTREAM_FAILED: "ENABLE_DUALSTREAM_FAILED",
  872. DISABLE_DUALSTREAM_FAILED: "DISABLE_DUALSTREAM_FAILED",
  873. PLAYER_NOT_FOUND: "PLAYER_NOT_FOUND",
  874. ELECTRON_NOT_SUPPORT_SHARING_SCREEN: "ELECTRON_NOT_SUPPORT_SHARING_SCREEN",
  875. BAD_ENVIRONMENT: "BAD_ENVIRONMENT",
  876. LOAD_AUDIO_FAILED: "LOAD_AUDIO_FAILED"
  877. }
  878. }, function(e, t, n) {
  879. "use strict";
  880. n.r(t), n.d(t, "getBrowserInfo", function() {
  881. return h
  882. }), n.d(t, "getBrowserVersion", function() {
  883. return f
  884. }), n.d(t, "getBrowserOS", function() {
  885. return p
  886. }), n.d(t, "isChrome", function() {
  887. return i
  888. }), n.d(t, "isSafari", function() {
  889. return a
  890. }), n.d(t, "isFireFox", function() {
  891. return o
  892. }), n.d(t, "isOpera", function() {
  893. return s
  894. }), n.d(t, "isEdge", function() {
  895. return r
  896. }), n.d(t, "isQQBrowser", function() {
  897. return c
  898. }), n.d(t, "isWeChatBrowser", function() {
  899. return d
  900. }), n.d(t, "isLegacyChrome", function() {
  901. return g
  902. }), n.d(t, "isSupportedPC", function() {
  903. return u
  904. }), n.d(t, "isSupportedMobile", function() {
  905. return l
  906. }), n.d(t, "getChromeKernelVersion", function() {
  907. return S
  908. }), n.d(t, "isChromeKernel", function() {
  909. return m
  910. });
  911. var i = function() {
  912. var e = h();
  913. return e.name && "Chrome" === e.name
  914. },
  915. a = function() {
  916. var e = h();
  917. return e.name && "Safari" === e.name
  918. },
  919. r = function() {
  920. var e = h();
  921. return e.name && "Edge" === e.name
  922. },
  923. o = function() {
  924. var e = h();
  925. return e.name && "Firefox" === e.name
  926. },
  927. s = function() {
  928. var e = h();
  929. return e.name && "OPR" === e.name
  930. },
  931. c = function() {
  932. var e = h();
  933. return e.name && "QQBrowser" === e.name
  934. },
  935. d = function() {
  936. var e = h();
  937. return e.name && "MicroMessenger" === e.name
  938. },
  939. u = function() {
  940. var e = p();
  941. return "Linux" === e || "Mac OS X" === e || "Mac OS" === e || -1 !== e.indexOf("Windows")
  942. },
  943. l = function() {
  944. var e = p();
  945. return "Android" === e || "iOS" === e
  946. },
  947. f = function() {
  948. return h().version
  949. },
  950. p = function() {
  951. return h().os
  952. },
  953. m = function() {
  954. return !!navigator.userAgent.match(/chrome\/[\d]./i)
  955. };
  956. function g() {
  957. return window.navigator.appVersion && null !== window.navigator.appVersion.match(/Chrome\/([\w\W]*?)\./) && window.navigator.appVersion.match(/Chrome\/([\w\W]*?)\./)[1] <= 35
  958. }
  959. var v, S = function() {
  960. var e = navigator.userAgent.match(/chrome\/[\d]./i);
  961. return e && e[0] && e[0].split("/")[1]
  962. },
  963. h = (v = function() {
  964. var e, t = navigator.userAgent,
  965. n = t.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
  966. "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]]);
  967. var i = void 0,
  968. a = [{
  969. s: "Windows 10",
  970. r: /(Windows 10.0|Windows NT 10.0)/
  971. }, {
  972. s: "Windows 8.1",
  973. r: /(Windows 8.1|Windows NT 6.3)/
  974. }, {
  975. s: "Windows 8",
  976. r: /(Windows 8|Windows NT 6.2)/
  977. }, {
  978. s: "Windows 7",
  979. r: /(Windows 7|Windows NT 6.1)/
  980. }, {
  981. s: "Windows Vista",
  982. r: /Windows NT 6.0/
  983. }, {
  984. s: "Windows Server 2003",
  985. r: /Windows NT 5.2/
  986. }, {
  987. s: "Windows XP",
  988. r: /(Windows NT 5.1|Windows XP)/
  989. }, {
  990. s: "Windows 2000",
  991. r: /(Windows NT 5.0|Windows 2000)/
  992. }, {
  993. s: "Windows ME",
  994. r: /(Win 9x 4.90|Windows ME)/
  995. }, {
  996. s: "Windows 98",
  997. r: /(Windows 98|Win98)/
  998. }, {
  999. s: "Windows 95",
  1000. r: /(Windows 95|Win95|Windows_95)/
  1001. }, {
  1002. s: "Windows NT 4.0",
  1003. r: /(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/
  1004. }, {
  1005. s: "Windows CE",
  1006. r: /Windows CE/
  1007. }, {
  1008. s: "Windows 3.11",
  1009. r: /Win16/
  1010. }, {
  1011. s: "Android",
  1012. r: /Android/
  1013. }, {
  1014. s: "Open BSD",
  1015. r: /OpenBSD/
  1016. }, {
  1017. s: "Sun OS",
  1018. r: /SunOS/
  1019. }, {
  1020. s: "Linux",
  1021. r: /(Linux|X11)/
  1022. }, {
  1023. s: "iOS",
  1024. r: /(iPhone|iPad|iPod)/
  1025. }, {
  1026. s: "Mac OS X",
  1027. r: /Mac OS X/
  1028. }, {
  1029. s: "Mac OS",
  1030. r: /(MacPPC|MacIntel|Mac_PowerPC|Macintosh)/
  1031. }, {
  1032. s: "QNX",
  1033. r: /QNX/
  1034. }, {
  1035. s: "UNIX",
  1036. r: /UNIX/
  1037. }, {
  1038. s: "BeOS",
  1039. r: /BeOS/
  1040. }, {
  1041. s: "OS/2",
  1042. r: /OS\/2/
  1043. }, {
  1044. s: "Search Bot",
  1045. r: /(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\/Teoma|ia_archiver)/
  1046. }];
  1047. for (var r in a) {
  1048. var o = a[r];
  1049. if (o.r.test(navigator.userAgent)) {
  1050. i = o.s;
  1051. break
  1052. }
  1053. }
  1054. return {
  1055. name: n[1],
  1056. version: n[2],
  1057. os: i
  1058. }
  1059. }(), function() {
  1060. return v
  1061. })
  1062. }, function(e, t) {
  1063. function n() {
  1064. return e.exports = n = Object.assign ||
  1065. function(e) {
  1066. for (var t = 1; t < arguments.length; t++) {
  1067. var n = arguments[t];
  1068. for (var i in n) Object.prototype.hasOwnProperty.call(n, i) && (e[i] = n[i])
  1069. }
  1070. return e
  1071. }, n.apply(this, arguments)
  1072. }
  1073. e.exports = n
  1074. }, function(e, t, n) {
  1075. e.exports = n(26)
  1076. }, function(e, t, n) {
  1077. "use strict";
  1078. var i, a = this && this.__extends || (i = function(e, t) {
  1079. return (i = Object.setPrototypeOf || {
  1080. __proto__: []
  1081. }
  1082. instanceof Array &&
  1083. function(e, t) {
  1084. e.__proto__ = t
  1085. } ||
  1086. function(e, t) {
  1087. for (var n in t) t.hasOwnProperty(n) && (e[n] = t[n])
  1088. })(e, t)
  1089. }, function(e, t) {
  1090. function n() {
  1091. this.constructor = e
  1092. }
  1093. i(e, t), e.prototype = null === t ? Object.create(t) : (n.prototype = t.prototype, new n)
  1094. }),
  1095. r = this && this.__awaiter ||
  1096. function(e, t, n, i) {
  1097. return new(n || (n = Promise))(function(a, r) {
  1098. function o(e) {
  1099. try {
  1100. c(i.next(e))
  1101. } catch (e) {
  1102. r(e)
  1103. }
  1104. }
  1105. function s(e) {
  1106. try {
  1107. c(i.
  1108. throw (e))
  1109. } catch (e) {
  1110. r(e)
  1111. }
  1112. }
  1113. function c(e) {
  1114. e.done ? a(e.value) : new n(function(t) {
  1115. t(e.value)
  1116. }).then(o, s)
  1117. }
  1118. c((i = i.apply(e, t || [])).next())
  1119. })
  1120. }, o = this && this.__generator ||
  1121. function(e, t) {
  1122. var n, i, a, r, o = {
  1123. label: 0,
  1124. sent: function() {
  1125. if (1 & a[0]) throw a[1];
  1126. return a[1]
  1127. },
  1128. trys: [],
  1129. ops: []
  1130. };
  1131. return r = {
  1132. next: s(0),
  1133. throw :s(1),
  1134. return :s(2)
  1135. }, "function" == typeof Symbol && (r[Symbol.iterator] = function() {
  1136. return this
  1137. }), r;
  1138. function s(r) {
  1139. return function(s) {
  1140. return function(r) {
  1141. if (n) throw new TypeError("Generator is already executing.");
  1142. for (; o;) try {
  1143. if (n = 1, i && (a = 2 & r[0] ? i.
  1144. return :r[0] ? i.
  1145. throw ||((a = i.
  1146. return) && a.call(i), 0) : i.next) && !(a = a.call(i, r[1])).done) return a;
  1147. switch (i = 0, a && (r = [2 & r[0], a.value]), r[0]) {
  1148. case 0:
  1149. case 1:
  1150. a = r;
  1151. break;
  1152. case 4:
  1153. return o.label++, {
  1154. value: r[1],
  1155. done: !1
  1156. };
  1157. case 5:
  1158. o.label++, i = r[1], r = [0];
  1159. continue;
  1160. case 7:
  1161. r = o.ops.pop(), o.trys.pop();
  1162. continue;
  1163. default:
  1164. if (!(a = (a = o.trys).length > 0 && a[a.length - 1]) && (6 === r[0] || 2 === r[0])) {
  1165. o = 0;
  1166. continue
  1167. }
  1168. if (3 === r[0] && (!a || r[1] > a[0] && r[1] < a[3])) {
  1169. o.label = r[1];
  1170. break
  1171. }
  1172. if (6 === r[0] && o.label < a[1]) {
  1173. o.label = a[1], a = r;
  1174. break
  1175. }
  1176. if (a && o.label < a[2]) {
  1177. o.label = a[2], o.ops.push(r);
  1178. break
  1179. }
  1180. a[2] && o.ops.pop(), o.trys.pop();
  1181. continue
  1182. }
  1183. r = t.call(e, o)
  1184. } catch (e) {
  1185. r = [6, e], i = 0
  1186. } finally {
  1187. n = a = 0
  1188. }
  1189. if (5 & r[0]) throw r[1];
  1190. return {
  1191. value: r[0] ? r[1] : void 0,
  1192. done: !0
  1193. }
  1194. }([r, s])
  1195. }
  1196. }
  1197. }, s = this && this.__importDefault ||
  1198. function(e) {
  1199. return e && e.__esModule ? e : {
  1200. default:
  1201. e
  1202. }
  1203. };
  1204. Object.defineProperty(t, "__esModule", {
  1205. value: !0
  1206. });
  1207. var c = s(n(32)),
  1208. d = n(3),
  1209. u = s(n(0)),
  1210. l = n(1),
  1211. f = n(10),
  1212. p = n(11),
  1213. m = function(e) {
  1214. function t(t, n) {
  1215. var i = e.call(this) || this;
  1216. return i._state = _.RELAY_STATE_IDLE, i._onStatus = function(e) {
  1217. u.
  1218. 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 ? {
  1219. came: e.channelName
  1220. } : null)))
  1221. }, i._onClose = function() {
  1222. return r(i, void 0, void 0, function() {
  1223. var e;
  1224. return o(this, function(t) {
  1225. switch (t.label) {
  1226. case 0:
  1227. if (u.
  1228. default.debug("[" + this.clientId + "] ChannelMediaSocket onClose"), this.emit("event", h.NETWORK_DISCONNECTED), this.state = _.RELAY_STATE_IDLE, !this._prevChannelMediaConfig) return [3, 4];
  1229. t.label = 1;
  1230. case 1:
  1231. return t.trys.push([1, 3, , 4]), [4, this.startChannelMediaRelay(this._prevChannelMediaConfig)];
  1232. case 2:
  1233. return t.sent(), [3, 4];
  1234. case 3:
  1235. 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]);
  1236. case 4:
  1237. return [2]
  1238. }
  1239. })
  1240. })
  1241. }, i.token = t.appId, i.appId = t.appId, i.cname = t.cname, i.uid = t.uid, i.sid = t.sid, i.clientId = n, i
  1242. }
  1243. return a(t, e), Object.defineProperty(t.prototype, "state", {
  1244. get: function() {
  1245. return this._state
  1246. },
  1247. set: function(e) {
  1248. var t = this._state;
  1249. this._state = e, t !== e && this.emit("state", e)
  1250. },
  1251. enumerable: !0,
  1252. configurable: !0
  1253. }), t.prototype.startChannelMediaRelay = function(e) {
  1254. return r(this, void 0, void 0, function() {
  1255. return o(this, function(t) {
  1256. switch (t.label) {
  1257. case 0:
  1258. if (this.state !== _.RELAY_STATE_IDLE) throw new T(v.BAD_STATE);
  1259. return this.state = _.RELAY_STATE_CONNECTING, [4, this._connect()];
  1260. case 1:
  1261. return t.sent(), u.
  1262. default.debug("[" + this.clientId + "] startChannelMediaRelay: connect success"), [4, this._sendStartRelayMessage(e)];
  1263. case 2:
  1264. return t.sent(), this._prevChannelMediaConfig = e, [2]
  1265. }
  1266. })
  1267. })
  1268. }, t.prototype.updateChannelMediaRelay = function(e) {
  1269. return r(this, void 0, void 0, function() {
  1270. return o(this, function(t) {
  1271. switch (t.label) {
  1272. case 0:
  1273. if (this.state !== _.RELAY_STATE_RUNNING) throw new T(v.BAD_STATE);
  1274. return [4, this._sendUpdateMessage(e)];
  1275. case 1:
  1276. return t.sent(), this._prevChannelMediaConfig = e, [2]
  1277. }
  1278. })
  1279. })
  1280. }, t.prototype.stopChannelMediaRelay = function() {
  1281. return r(this, void 0, void 0, function() {
  1282. return o(this, function(e) {
  1283. switch (e.label) {
  1284. case 0:
  1285. return [4, this._sendStopRelayMessage()];
  1286. case 1:
  1287. return e.sent(), u.
  1288. default.debug("[" + this.clientId + "] stopChannelMediaRelay: send stop message success"), this.state = _.RELAY_STATE_IDLE, this.dispose(), [2]
  1289. }
  1290. })
  1291. })
  1292. }, t.prototype.dispose = function() {
  1293. u.
  1294. default.debug("[" + this.clientId + "] disposeChannelMediaRelay"), this.state = _.RELAY_STATE_IDLE, this.emit("dispose"), this._signal && this._signal.dispose(), this._prevChannelMediaConfig = null, this.removeEvent()
  1295. }, t.prototype._requestOneAP = function(e) {
  1296. var t = this;
  1297. return new Promise(function(n, i) {
  1298. var a = {
  1299. command: "convergeAllocateEdge",
  1300. sid: t.sid,
  1301. appId: t.appId,
  1302. token: "",
  1303. ts: +new Date,
  1304. version: d.VERSION,
  1305. cname: t.cname,
  1306. uid: t.uid + "",
  1307. seq: 1,
  1308. requestId: 1
  1309. },
  1310. r = {
  1311. service_name: "tele_channel",
  1312. json_body: JSON.stringify(a)
  1313. },
  1314. o = "https://" + e;
  1315. f.post(o, r, function(e) {
  1316. var t = null,
  1317. a = null;
  1318. try {
  1319. t = JSON.parse(e)
  1320. } catch (e) {
  1321. i(new T(v.AP_JSON_PARSE_ERROR, e))
  1322. }
  1323. 0 !== t.code && i(new T(v.AP_REQUEST_ERROR, t));
  1324. try {
  1325. a = JSON.parse(t.json_body)
  1326. } catch (e) {
  1327. i(new T(v.AP_JSON_PARSE_ERROR, e))
  1328. }
  1329. 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))
  1330. }, function(e) {
  1331. return i(e)
  1332. }, {
  1333. "X-Packet-Service-Type": 0,
  1334. "X-Packet-URI": 61
  1335. })
  1336. })
  1337. }, t.prototype._requestAP = function() {
  1338. var e = this,
  1339. t = d.getParameter("UAP_AP");
  1340. return new Promise(function(n, i) {
  1341. setTimeout(function() {
  1342. i(new T(v.AP_REQUEST_TIMEOUT))
  1343. }, 3e3), e.on("dispose", function() {
  1344. i(new T(v.AP_REQUEST_ABORT))
  1345. }), t.forEach(function(t) {
  1346. t += "/api/v1", e._requestOneAP(t).then(function(i) {
  1347. u.
  1348. default.debug("[" + e.clientId + "] startChannelMediaRelay request AP " + t + " success: " + JSON.stringify(i));
  1349. var a = i[0],
  1350. r = "wss://" + a.address.replace(/\./g, "-") + ".edge.agora.io:" + a.wss;
  1351. n(r)
  1352. }).
  1353. catch (function(n) {
  1354. u.
  1355. default.debug("[" + e.clientId + "] startChannelMediaRelay request AP " + t + " failed: " + JSON.stringify(n))
  1356. })
  1357. })
  1358. })
  1359. }, t.prototype._connectWebsocket = function(e) {
  1360. return this._signal = new I(this.appId, this.cname, this.uid, this.sid), this._signal.connect(e)
  1361. }, t.prototype._connect = function() {
  1362. return r(this, void 0, void 0, function() {
  1363. var e;
  1364. return o(this, function(t) {
  1365. switch (t.label) {
  1366. case 0:
  1367. return [4, this._requestAP()];
  1368. case 1:
  1369. return e = t.sent(), [4, this._connectWebsocket(e)];
  1370. case 2:
  1371. 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]
  1372. }
  1373. })
  1374. })
  1375. }, t.prototype._sendStartRelayMessage = function(e) {
  1376. return r(this, void 0, void 0, function() {
  1377. var t, n, i, a, r, s;
  1378. return o(this, function(o) {
  1379. switch (o.label) {
  1380. case 0:
  1381. return this._checkSignal(), t = this._genMessage(S.StopPacketTransfer), [4, this._signal.request(t)];
  1382. case 1:
  1383. return o.sent(), [4, this._signal.waitStatus("Normal Quit")];
  1384. case 2:
  1385. return o.sent(), u.
  1386. default.debug("[" + this.clientId + "] startChannelMediaRelay: StopPacketTransfer success"), n = this._genMessage(S.SetSdkProfile, e), [4, this._signal.request(n)];
  1387. case 3:
  1388. return o.sent(), u.
  1389. default.debug("[" + this.clientId + "] startChannelMediaRelay: SetSdkProfile success"), i = this._genMessage(S.SetSourceChannel, e), [4, this._signal.request(i)];
  1390. case 4:
  1391. return o.sent(), [4, this._signal.waitStatus("SetSourceChannelStatus")];
  1392. case 5:
  1393. return o.sent(), this.emit("event", h.PACKET_JOINED_SRC_CHANNEL), u.
  1394. default.debug("[" + this.clientId + "] startChannelMediaRelay: SetSourceChannel success"), a = this._genMessage(S.SetSourceUserId, e), [4, this._signal.request(a)];
  1395. case 6:
  1396. return o.sent(), u.
  1397. default.debug("[" + this.clientId + "] startChannelMediaRelay: SetSourceUserId success"), r = this._genMessage(S.SetDestChannel, e), [4, this._signal.request(r)];
  1398. case 7:
  1399. return o.sent(), [4, this._signal.waitStatus("SetDestChannelStatus")];
  1400. case 8:
  1401. return o.sent(), this.emit("event", h.PACKET_JOINED_DEST_CHANNEL), u.
  1402. default.debug("[" + this.clientId + "] startChannelMediaRelay: SetDestChannel success"), s = this._genMessage(S.StartPacketTransfer, e), [4, this._signal.request(s)];
  1403. case 9:
  1404. return o.sent(), this.emit("event", h.PACKET_SENT_TO_DEST_CHANNEL), this.state = _.RELAY_STATE_RUNNING, u.
  1405. default.debug("[" + this.clientId + "] startChannelMediaRelay: StartPacketTransfer success"), [2]
  1406. }
  1407. })
  1408. })
  1409. }, t.prototype._sendReconnectMessage = function(e) {
  1410. return r(this, void 0, void 0, function() {
  1411. var t;
  1412. return o(this, function(n) {
  1413. switch (n.label) {
  1414. case 0:
  1415. return this._checkSignal(), t = this._genMessage(S.Reconnect, e), [4, this._signal.request(t)];
  1416. case 1:
  1417. return n.sent(), [2]
  1418. }
  1419. })
  1420. })
  1421. }, t.prototype._sendUpdateMessage = function(e) {
  1422. return r(this, void 0, void 0, function() {
  1423. var t;
  1424. return o(this, function(n) {
  1425. switch (n.label) {
  1426. case 0:
  1427. return this._checkSignal(), t = this._genMessage(S.UpdateDestChannel, e), [4, this._signal.request(t)];
  1428. case 1:
  1429. return n.sent(), this.emit("event", h.PACKET_UPDATE_DEST_CHANNEL), u.
  1430. default.debug("[" + this.clientId + "] sendUpdateMessage: UpdateDestChannel success"), [2]
  1431. }
  1432. })
  1433. })
  1434. }, t.prototype._sendStopRelayMessage = function() {
  1435. return r(this, void 0, void 0, function() {
  1436. var e;
  1437. return o(this, function(t) {
  1438. switch (t.label) {
  1439. case 0:
  1440. return this._checkSignal(), e = this._genMessage(S.StopPacketTransfer), [4, this._signal.request(e)];
  1441. case 1:
  1442. return t.sent(), u.
  1443. default.debug("[" + this.clientId + "] sendStopRelayMessage: StopPacketTransfer success"), [2]
  1444. }
  1445. })
  1446. })
  1447. }, t.prototype._genMessage = function(e, t) {
  1448. var n = this,
  1449. i = [],
  1450. a = [],
  1451. r = [],
  1452. o = {
  1453. appId: this.appId,
  1454. cname: this.cname,
  1455. uid: this.uid + "",
  1456. sdkVersion: d.VERSION,
  1457. sid: this.sid,
  1458. ts: +new Date,
  1459. requestId: 0,
  1460. seq: 0,
  1461. allocate: !0,
  1462. clientRequest: {}
  1463. },
  1464. s = null;
  1465. switch (e) {
  1466. case S.SetSdkProfile:
  1467. return o.clientRequest = {
  1468. command: "SetSdkProfile",
  1469. type: "multi_channel"
  1470. }, o;
  1471. case S.SetSourceChannel:
  1472. return s = t.getSrcChannelMediaInfo(), o.clientRequest = {
  1473. command: "SetSourceChannel",
  1474. uid: s.uid + "",
  1475. channelName: s.channelName,
  1476. token: s.token || this.appId
  1477. }, o;
  1478. case S.SetSourceUserId:
  1479. return s = t.getSrcChannelMediaInfo(), o.clientRequest = {
  1480. command: "SetSourceUserId",
  1481. uid: this.uid + ""
  1482. }, o;
  1483. case S.SetDestChannel:
  1484. return t.getDestChannelMediaInfos().forEach(function(e) {
  1485. i.push(e.channelName), a.push(e.uid + ""), r.push(e.token || n.appId)
  1486. }), o.clientRequest = {
  1487. command: "SetDestChannel",
  1488. channelName: i,
  1489. uid: a,
  1490. token: r
  1491. }, o;
  1492. case S.StartPacketTransfer:
  1493. return o.clientRequest = {
  1494. command: "StartPacketTransfer"
  1495. }, o;
  1496. case S.Reconnect:
  1497. return o.clientRequest = {
  1498. command: "Reconnect"
  1499. }, o;
  1500. case S.StopPacketTransfer:
  1501. return o.clientRequest = {
  1502. command: "StopPacketTransfer"
  1503. }, o;
  1504. case S.UpdateDestChannel:
  1505. return t.getDestChannelMediaInfos().forEach(function(e) {
  1506. i.push(e.channelName), a.push(e.uid + ""), r.push(e.token || n.appId)
  1507. }), o.clientRequest = {
  1508. command: "UpdateDestChannel",
  1509. channelName: i,
  1510. uid: a,
  1511. token: r
  1512. }, o
  1513. }
  1514. }, t.prototype._checkSignal = function() {
  1515. if (!this._signal || !this._signal.isConnect()) throw new T(v.WS_DISCONNECTED)
  1516. }, t
  1517. }(c.
  1518. default);
  1519. t.
  1520. default = m;
  1521. var g = function() {
  1522. function e() {
  1523. this.destChannelMediaInfos = new Map
  1524. }
  1525. return e.prototype.setSrcChannelInfo = function(e) {
  1526. l.checkValidObject(e, "srcInfo");
  1527. var t = e.uid,
  1528. n = e.channelName,
  1529. i = e.token;
  1530. if (i && !l.isValidToken(i)) throw new Error("Invalid token in SrcChannelInfo");
  1531. if (!l.isValidChannelName(n)) throw new Error("Invalid channelName in SrcChannelInfo");
  1532. if (!p.is32Uint(t)) throw new Error("Invalid uid in SrcChannelInfo");
  1533. this.srcChannelMediaInfo = e
  1534. }, e.prototype.setDestChannelInfo = function(e, t) {
  1535. if (!l.isValidChannelName(e)) throw new Error("Invalid channelName in DestChannelInfo");
  1536. l.checkValidObject(t, "destInfo");
  1537. var n = t.uid,
  1538. i = t.token,
  1539. a = t.channelName;
  1540. if (i && !l.isValidToken(i)) throw new Error("Invalid token in DestChannelInfo");
  1541. if (!l.isValidChannelName(a)) throw new Error("Invalid channelName in DestChannelInfo");
  1542. if (!p.is32Uint(n)) throw new Error("Invalid uid in DestChannelInfo");
  1543. this.destChannelMediaInfos.set(e, t)
  1544. }, e.prototype.removeDestChannelInfo = function(e) {
  1545. if (!l.isValidChannelName(e)) throw new Error("Invalid channelName when invoke removeDestChannelInfo");
  1546. this.destChannelMediaInfos.delete(e)
  1547. }, e.prototype.getSrcChannelMediaInfo = function() {
  1548. return this.srcChannelMediaInfo
  1549. }, e.prototype.getDestChannelMediaInfos = function() {
  1550. return this.destChannelMediaInfos
  1551. }, e
  1552. }();
  1553. t.ChannelMediaRelayConfiguration = g;
  1554. var v, S, h, _, E, I = function(e) {
  1555. function t(t, n, i, a) {
  1556. var r = e.call(this) || this;
  1557. return r._onOpen = function() {
  1558. r.emit("open")
  1559. }, r._onClose = function(e) {
  1560. r.emit("close"), r.dispose()
  1561. }, r._onMessage = function(e) {
  1562. var t = JSON.parse(e.data);
  1563. 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;
  1564. r.emit("req_" + t.requestId, t)
  1565. }, r._requestId = 1, r.appId = t, r.cname = n, r.uid = i, r.sid = a, r
  1566. }
  1567. return a(t, e), t.prototype.isConnect = function() {
  1568. return this._ws && this._ws.readyState === WebSocket.OPEN
  1569. }, t.prototype.sendMessage = function(e) {
  1570. if (!this._ws || this._ws.readyState !== WebSocket.OPEN) throw new T(v.WS_DISCONNECTED);
  1571. var t = this._requestId++;
  1572. return e.requestId = t, e.seq = t, this._ws.send(JSON.stringify(e)), t
  1573. }, t.prototype.waitStatus = function(e) {
  1574. var t = this;
  1575. return new Promise(function(n, i) {
  1576. var a = window.setTimeout(function() {
  1577. i(new T(v.WAIT_STATUS_TIMEOUT, e))
  1578. }, 5e3);
  1579. t.once(e, function(t) {
  1580. clearTimeout(a), t.state && 0 !== t.state ? i(new T(v.WAIT_STATUS_ERROR, e)) : n()
  1581. }), t.once("dispose", function() {
  1582. clearTimeout(a), i(new T(v.WS_ABORT))
  1583. })
  1584. })
  1585. }, t.prototype.request = function(e) {
  1586. var t = this;
  1587. return new Promise(function(n, i) {
  1588. var a = t.sendMessage(e),
  1589. r = window.setTimeout(function() {
  1590. t.removeAllListeners("req_" + a), i(new T(v.REQUEST_TIMEOUT))
  1591. }, 3e3);
  1592. t.once("req_" + a, function(e) {
  1593. clearTimeout(r), e && 200 === e.code ? n(e) : i(new T(v.REQUEST_FAILED, e))
  1594. }), t.once("dispose", function() {
  1595. clearTimeout(r), i(new T(v.WS_ABORT))
  1596. })
  1597. })
  1598. }, t.prototype.connect = function(e) {
  1599. var t = this;
  1600. return new Promise(function(n, i) {
  1601. t._ws = new WebSocket(e), t._ws.onopen = function() {
  1602. t._onOpen(), t._prvUrl = e, t._ws.onmessage = t._onMessage, t._ws.onclose = t._onClose, t._startHeartBeatCheck(), n()
  1603. }, t._ws.onclose = function(e) {
  1604. t._ws = null, i(new T(v.CONNECT_FAILED, "websocket error code: " + e.code))
  1605. }, setTimeout(function() {
  1606. 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)))
  1607. }, 5e3), t.once("dispose", function() {
  1608. i(new T(v.WS_ABORT))
  1609. })
  1610. })
  1611. }, t.prototype.dispose = function() {
  1612. 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
  1613. }, t.prototype._sendPing = function(e) {
  1614. if (!this._ws || this._ws.readyState !== WebSocket.OPEN) throw new T(v.WS_DISCONNECTED);
  1615. var t = this._requestId++;
  1616. return e.requestId = t, this._ws.send(JSON.stringify(e)), t
  1617. }, t.prototype._startHeartBeatCheck = function() {
  1618. var e = this;
  1619. this._heartBeatTimer = window.setInterval(function() {
  1620. e._sendPing({
  1621. command: "ping",
  1622. appId: e.appId,
  1623. cname: e.cname,
  1624. uid: e.uid + "",
  1625. sid: e.sid,
  1626. ts: +new Date,
  1627. requestId: 0
  1628. })
  1629. }, 3e3)
  1630. }, t.prototype._clearHeartBeatCheck = function() {
  1631. window.clearInterval(this._heartBeatTimer)
  1632. }, t
  1633. }(c.
  1634. default),
  1635. T = function() {
  1636. return function(e, t, n) {
  1637. void 0 === e && (e = ""), this.code = n, this.data = t, this.message = e
  1638. }
  1639. }();
  1640. t.ChannelMediaError = T, function(e) {
  1641. 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"
  1642. }(v = t.CHANNEL_MEDIA_ERROR || (t.CHANNEL_MEDIA_ERROR = {})), function(e) {
  1643. 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"
  1644. }(S || (S = {})), function(e) {
  1645. 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"
  1646. }(h = t.CHANNEL_MEDIA_RELAY_EVENT || (t.CHANNEL_MEDIA_RELAY_EVENT = {})), function(e) {
  1647. 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"
  1648. }(_ = t.CHANNEL_MEDIA_RELAY_STATE || (t.CHANNEL_MEDIA_RELAY_STATE = {})), function(e) {
  1649. 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"
  1650. }(E = t.CHANNEL_MEDIA_RELAY_ERROR || (t.CHANNEL_MEDIA_RELAY_ERROR = {}))
  1651. }, function(e, t) {
  1652. function n(e) {
  1653. return (n = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ?
  1654. function(e) {
  1655. return typeof e
  1656. } : function(e) {
  1657. return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
  1658. })(e)
  1659. }
  1660. function i(t) {
  1661. return "function" == typeof Symbol && "symbol" === n(Symbol.iterator) ? e.exports = i = function(e) {
  1662. return n(e)
  1663. } : e.exports = i = function(e) {
  1664. return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : n(e)
  1665. }, i(t)
  1666. }
  1667. e.exports = i
  1668. }, function(e, t, n) {
  1669. "use strict";
  1670. n.r(t), n.d(t, "post", function() {
  1671. return u
  1672. }), n.d(t, "shouldUseHttps", function() {
  1673. return l
  1674. }), n.d(t, "getHTTPSendBytes", function() {
  1675. return s
  1676. }), n.d(t, "getHTTPRecvBytes", function() {
  1677. return c
  1678. }), n.d(t, "resetHTTPByetsCount", function() {
  1679. return d
  1680. });
  1681. var i = n(3),
  1682. a = n(11),
  1683. r = 0,
  1684. o = 0,
  1685. s = function() {
  1686. return r
  1687. },
  1688. c = function() {
  1689. return o
  1690. },
  1691. d = function() {
  1692. r = 0, o = 0
  1693. },
  1694. u = function(e, t, n, s, c) {
  1695. var d = new XMLHttpRequest;
  1696. 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]);
  1697. d.onload = function(e) {
  1698. o += Object(a.lengthInUtf8Bytes)(d.responseText), n && n(d.responseText)
  1699. }, d.onerror = function(t) {
  1700. s && s(t, e)
  1701. }, d.ontimeout = function(t) {
  1702. s && s(t, e)
  1703. };
  1704. var l = JSON.stringify(t);
  1705. r += Object(a.lengthInUtf8Bytes)(l), d.send(l)
  1706. },
  1707. l = function() {
  1708. return "https:" == document.location.protocol
  1709. }
  1710. }, function(e, t, n) {
  1711. "use strict";
  1712. n.r(t), n.d(t, "isLiveTranscodingValid", function() {
  1713. return v
  1714. }), n.d(t, "generateSessionId", function() {
  1715. return p
  1716. }), n.d(t, "audioLevelHelper", function() {
  1717. return f
  1718. }), n.d(t, "vsResHack", function() {
  1719. return m
  1720. }), n.d(t, "is32Uint", function() {
  1721. return g
  1722. }), n.d(t, "safeCall", function() {
  1723. return l
  1724. }), n.d(t, "random", function() {
  1725. return h
  1726. }), n.d(t, "popBanTip", function() {
  1727. return E
  1728. }), n.d(t, "lengthInUtf8Bytes", function() {
  1729. return _
  1730. });
  1731. var i = n(9),
  1732. a = n.n(i),
  1733. r = n(5),
  1734. o = n(0),
  1735. s = n(16),
  1736. c = n.n(s),
  1737. d = n(15),
  1738. u = n(13),
  1739. l = function() {
  1740. var e = arguments[0];
  1741. if ("function" == typeof e) {
  1742. var t = Array.prototype.slice.call(arguments, 1);
  1743. e.apply(null, t)
  1744. }
  1745. },
  1746. f = function(e) {
  1747. 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() {
  1748. if (this.analyser) {
  1749. this.analyser.getByteTimeDomainData(this.timeDomainData);
  1750. for (var e = 0, t = 0; t < this.timeDomainData.length; t++) e = Math.max(e, Math.abs(this.timeDomainData[t] - 128));
  1751. return e / 128
  1752. }
  1753. return o.
  1754. default.warning("can't find analyser in audioLevelHelper"), 0
  1755. }, this
  1756. };
  1757. function p() {
  1758. return c()().replace(/-/g, "").toUpperCase()
  1759. }
  1760. var m = function(e, t, n) {
  1761. try {
  1762. o.
  1763. default.debug("start vsResHack", e);
  1764. var i = document.createElement("video");
  1765. 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) {
  1766. r.isFireFox() ? i.videoWidth && (o.
  1767. default.debug("[vsResHack] get stream resolution: ", "".concat(i.videoWidth, " x ").concat(i.videoHeight), e), t(i.videoWidth, i.videoHeight), document.body.removeChild(i)) : (o.
  1768. default.debug("[vsResHack] get stream resolution: ", "".concat(i.videoWidth, " x ").concat(i.videoHeight), e), t(i.videoWidth, i.videoHeight), document.body.removeChild(i))
  1769. }), Object(u.setSrcObject)(i, e)
  1770. } catch (e) {
  1771. n(e)
  1772. }
  1773. },
  1774. g = function(e) {
  1775. return "number" == typeof e && 0 <= e && e <= 4294967295
  1776. },
  1777. v = function(e) {
  1778. var t = ["lowLatency", "userConfigExtraInfo", "transcodingUsers"];
  1779. 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");
  1780. return !0
  1781. },
  1782. S = function(e) {
  1783. 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");
  1784. return !0
  1785. },
  1786. h = function(e) {
  1787. isNaN(e) && (e = 1e3);
  1788. var t = +new Date,
  1789. n = (t = (9301 * t + 49297) % 233280) / 233280;
  1790. return Math.ceil(n * e)
  1791. },
  1792. _ = function(e) {
  1793. var t = encodeURIComponent(e).match(/%[89ABab]/g);
  1794. return e.length + (t ? t.length : 0)
  1795. },
  1796. E = function() {
  1797. if (!document.getElementById("agora-ban-tip")) {
  1798. var e = document.createElement("div");
  1799. 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);
  1800. var t = document.createElement("div");
  1801. 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);
  1802. var n = document.createElement("div");
  1803. n.style = "height: 76px; display: flex; justify-content: center; align-items: center;";
  1804. var i = document.createElement("span");
  1805. 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 = "!";
  1806. var a = document.createElement("span");
  1807. a.innerText = "This browser does not support webRTC", n.append(i), n.append(a);
  1808. var r = document.createElement("div");
  1809. 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() {
  1810. var e = document.getElementById("agora-ban-tip");
  1811. e.parentNode.removeChild(e)
  1812. }
  1813. }
  1814. }
  1815. }, function(e, t) {
  1816. function n(e, t, n, i, a, r, o) {
  1817. try {
  1818. var s = e[r](o),
  1819. c = s.value
  1820. } catch (e) {
  1821. return void n(e)
  1822. }
  1823. s.done ? t(c) : Promise.resolve(c).then(i, a)
  1824. }
  1825. e.exports = function(e) {
  1826. return function() {
  1827. var t = this,
  1828. i = arguments;
  1829. return new Promise(function(a, r) {
  1830. var o = e.apply(t, i);
  1831. function s(e) {
  1832. n(o, a, r, s, c, "next", e)
  1833. }
  1834. function c(e) {
  1835. n(o, a, r, s, c, "throw", e)
  1836. }
  1837. s(void 0)
  1838. })
  1839. }
  1840. }
  1841. }, function(e, t, n) {
  1842. "use strict";
  1843. n.r(t), n.d(t, "RTCPeerConnection", function() {
  1844. return y
  1845. }), n.d(t, "getUserMedia", function() {
  1846. return o
  1847. }), n.d(t, "attachMediaStream", function() {
  1848. return s
  1849. }), n.d(t, "reattachMediaStream", function() {
  1850. return c
  1851. }), n.d(t, "setSrcObject", function() {
  1852. return p
  1853. }), n.d(t, "getSrcObject", function() {
  1854. return m
  1855. }), n.d(t, "webrtcDetectedBrowser", function() {
  1856. return d
  1857. }), n.d(t, "webrtcDetectedVersion", function() {
  1858. return u
  1859. }), n.d(t, "webrtcMinimumVersion", function() {
  1860. return l
  1861. }), n.d(t, "webrtcTesting", function() {
  1862. return b
  1863. }), n.d(t, "webrtcUtils", function() {
  1864. return S
  1865. });
  1866. var i = n(9),
  1867. a = n.n(i),
  1868. r = n(5),
  1869. o = null,
  1870. s = null,
  1871. c = null,
  1872. d = null,
  1873. u = null,
  1874. l = null,
  1875. f = null,
  1876. p = null,
  1877. m = null,
  1878. g = null,
  1879. v = {
  1880. addStream: null
  1881. },
  1882. S = {
  1883. log: function() {},
  1884. extractVersion: function(e, t, n) {
  1885. var i = e.match(t);
  1886. return i && i.length >= n && parseInt(i[n])
  1887. }
  1888. };
  1889. if ("object" == ("undefined" == typeof window ? "undefined" : a()(window)) ? (!window.HTMLMediaElement || "srcObject" in window.HTMLMediaElement.prototype ? (p = function(e, t) {
  1890. e.srcObject = t
  1891. }, m = function(e) {
  1892. return e.srcObject
  1893. }) : (p = function(e, t) {
  1894. "mozSrcObject" in e ? e.mozSrcObject = t : (e._srcObject = t, e.src = t ? URL.createObjectURL(t) : null)
  1895. }, m = function(e) {
  1896. return "mozSrcObject" in e ? e.mozSrcObject : e._srcObject
  1897. }), o = window.navigator && window.navigator.getUserMedia) : (p = function(e, t) {
  1898. e.srcObject = t
  1899. }, m = function(e) {
  1900. return e.srcObject
  1901. }), s = function(e, t) {
  1902. p(e, t)
  1903. }, c = function(e, t) {
  1904. p(e, m(t))
  1905. }, "undefined" != typeof window && window.navigator) if (navigator.mozGetUserMedia && window.mozRTCPeerConnection) {
  1906. 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];
  1907. if (f = function(e, t) {
  1908. if (u < 38 && e && e.iceServers) {
  1909. for (var n = [], i = 0; i < e.iceServers.length; i++) {
  1910. var a = e.iceServers[i];
  1911. if (a.hasOwnProperty("urls")) for (var r = 0; r < a.urls.length; r++) {
  1912. var o = {
  1913. url: a.urls[r]
  1914. };
  1915. 0 === a.urls[r].indexOf("turn") && (o.username = a.username, o.credential = a.credential), n.push(o)
  1916. } else n.push(e.iceServers[i])
  1917. }
  1918. e.iceServers = n
  1919. }
  1920. var s = new g(e, t);
  1921. for (var c in v) s[c] = v[c];
  1922. return s
  1923. }, window.RTCSessionDescription || (window.RTCSessionDescription = mozRTCSessionDescription), window.RTCIceCandidate || (window.RTCIceCandidate = mozRTCIceCandidate), o = function(e, t, n) {
  1924. var i = function(e) {
  1925. if ("object" !== a()(e) || e.require) return e;
  1926. var t = [];
  1927. return Object.keys(e).forEach(function(n) {
  1928. if ("require" !== n && "advanced" !== n && "mediaSource" !== n) {
  1929. var i = e[n] = "object" === a()(e[n]) ? e[n] : {
  1930. ideal: e[n]
  1931. };
  1932. 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) {
  1933. e.advanced = e.advanced || [];
  1934. var r = {};
  1935. "number" == typeof i.ideal ? r[n] = {
  1936. min: i.ideal,
  1937. max: i.ideal
  1938. } : r[n] = i.ideal, e.advanced.push(r), delete i.ideal, Object.keys(i).length || delete e[n]
  1939. }
  1940. }
  1941. }), t.length && (e.require = t), e
  1942. };
  1943. 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)
  1944. }, navigator.getUserMedia = o, navigator.mediaDevices || (navigator.mediaDevices = {
  1945. getUserMedia: T,
  1946. addEventListener: function() {},
  1947. removeEventListener: function() {}
  1948. }), navigator.mediaDevices.enumerateDevices = navigator.mediaDevices.enumerateDevices ||
  1949. function() {
  1950. return new Promise(function(e) {
  1951. e([{
  1952. kind: "audioinput",
  1953. deviceId: "default",
  1954. label: "",
  1955. groupId: ""
  1956. }, {
  1957. kind: "videoinput",
  1958. deviceId: "default",
  1959. label: "",
  1960. groupId: ""
  1961. }])
  1962. })
  1963. }, u < 41) {
  1964. var _ = navigator.mediaDevices.enumerateDevices.bind(navigator.mediaDevices);
  1965. navigator.mediaDevices.enumerateDevices = function() {
  1966. return _().then(void 0, function(e) {
  1967. if ("NotFoundError" === e.name) return [];
  1968. throw e
  1969. })
  1970. }
  1971. }
  1972. } else if (navigator.webkitGetUserMedia && window.webkitRTCPeerConnection) {
  1973. 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];
  1974. f = function(e, t) {
  1975. e && e.iceTransportPolicy && (e.iceTransports = e.iceTransportPolicy);
  1976. var n = new g(e, t);
  1977. for (var i in v) n[i] = v[i];
  1978. var a = n.getStats.bind(n);
  1979. return n.getStats = function(e, t, n) {
  1980. var i = arguments;
  1981. i.length > 0 && "function" == typeof e && (t ? (n = t, t = e, i = [e = null, t, n]) : (t = e, i = [e = null, t]));
  1982. if (i.length >= 2) {
  1983. return a.apply(this, [function(e) {
  1984. i[1](function(e) {
  1985. var t = {};
  1986. return e.result().forEach(function(e) {
  1987. var n = {
  1988. id: e.id,
  1989. timestamp: e.timestamp,
  1990. type: e.type
  1991. };
  1992. e.names().forEach(function(t) {
  1993. n[t] = e.stat(t)
  1994. }), t[n.id] = n
  1995. }), t
  1996. }(e))
  1997. },
  1998. i[0]])
  1999. }
  2000. return a()
  2001. }, n
  2002. }, ["createOffer", "createAnswer"].forEach(function(e) {
  2003. var t = webkitRTCPeerConnection.prototype[e];
  2004. webkitRTCPeerConnection.prototype[e] = function() {
  2005. var e = this;
  2006. if (arguments.length < 1 || 1 === arguments.length && "object" === a()(arguments[0])) {
  2007. var n = 1 === arguments.length ? arguments[0] : void 0;
  2008. return new Promise(function(i, a) {
  2009. t.apply(e, [i, a, n])
  2010. })
  2011. }
  2012. return t.apply(this, arguments)
  2013. }
  2014. }), ["setLocalDescription", "setRemoteDescription", "addIceCandidate"].forEach(function(e) {
  2015. var t = webkitRTCPeerConnection.prototype[e];
  2016. webkitRTCPeerConnection.prototype[e] = function() {
  2017. var e = arguments,
  2018. n = this;
  2019. return new Promise(function(i, a) {
  2020. t.apply(n, [e[0], function() {
  2021. i(), e.length >= 2 && e[1].apply(null, [])
  2022. }, function(t) {
  2023. a(t), e.length >= 3 && e[2].apply(null, [t])
  2024. }])
  2025. })
  2026. }
  2027. });
  2028. var E = function(e) {
  2029. if ("object" !== a()(e) || e.mandatory || e.optional) return e;
  2030. var t = {};
  2031. return Object.keys(e).forEach(function(n) {
  2032. if ("require" !== n && "advanced" !== n && "mediaSource" !== n) {
  2033. var i = "object" === a()(e[n]) ? e[n] : {
  2034. ideal: e[n]
  2035. };
  2036. void 0 !== i.exact && "number" == typeof i.exact && (i.min = i.max = i.exact);
  2037. var r = function(e, t) {
  2038. return e ? e + t.charAt(0).toUpperCase() + t.slice(1) : "deviceId" === t ? "sourceId" : t
  2039. };
  2040. if (void 0 !== i.ideal) {
  2041. t.optional = t.optional || [];
  2042. var o = {};
  2043. "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))
  2044. }
  2045. void 0 !== i.exact && "number" != typeof i.exact ? (t.mandatory = t.mandatory || {}, t.mandatory[r("", n)] = i.exact) : ["min", "max"].forEach(function(e) {
  2046. void 0 !== i[e] && (t.mandatory = t.mandatory || {}, t.mandatory[r(e, n)] = i[e])
  2047. })
  2048. }
  2049. }), e.advanced && (t.optional = (t.optional || []).concat(e.advanced)), t
  2050. };
  2051. if (o = function(e, t, n) {
  2052. 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)
  2053. }, navigator.getUserMedia = o, navigator.mediaDevices || (navigator.mediaDevices = {
  2054. getUserMedia: T,
  2055. enumerateDevices: function() {
  2056. return new Promise(function(e) {
  2057. var t = {
  2058. audio: "audioinput",
  2059. video: "videoinput"
  2060. };
  2061. return MediaStreamTrack.getSources(function(n) {
  2062. e(n.map(function(e) {
  2063. return {
  2064. label: e.label,
  2065. kind: t[e.kind],
  2066. deviceId: e.id,
  2067. groupId: ""
  2068. }
  2069. }))
  2070. })
  2071. })
  2072. }
  2073. }), navigator.mediaDevices.getUserMedia) {
  2074. if ((Object(r.getBrowserVersion)() ? Number(Object(r.getBrowserVersion)().split(".")[0]) : void 0) < 46) {
  2075. var I = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);
  2076. navigator.mediaDevices.getUserMedia = function(e) {
  2077. 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)
  2078. }
  2079. }
  2080. } else navigator.mediaDevices.getUserMedia = function(e) {
  2081. return T(e)
  2082. };
  2083. void 0 === navigator.mediaDevices.addEventListener && (navigator.mediaDevices.addEventListener = function() {
  2084. S.log("Dummy mediaDevices.addEventListener called.")
  2085. }), void 0 === navigator.mediaDevices.removeEventListener && (navigator.mediaDevices.removeEventListener = function() {
  2086. S.log("Dummy mediaDevices.removeEventListener called.")
  2087. }), s = function(e, t) {
  2088. u >= 43 ? p(e, t) : void 0 !== e.src ? e.src = t ? URL.createObjectURL(t) : null : S.log("Error attaching stream to element.")
  2089. }, c = function(e, t) {
  2090. u >= 43 ? p(e, m(t)) : e.src = t.src
  2091. }
  2092. } 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");
  2093. else S.log("This does not appear to be a browser"), d = "not a browser";
  2094. function T(e) {
  2095. return new Promise(function(t, n) {
  2096. o(e, t, n)
  2097. })
  2098. }
  2099. var y, b = {};
  2100. try {
  2101. Object.defineProperty(b, "version", {
  2102. set: function(e) {
  2103. u = e
  2104. }
  2105. })
  2106. } catch (e) {}
  2107. f ? y = f : "undefined" != typeof window && (y = window.RTCPeerConnection)
  2108. }, function(e, t, n) {
  2109. var i = n(25);
  2110. e.exports = function(e) {
  2111. for (var t = 1; t < arguments.length; t++) {
  2112. var n = null != arguments[t] ? arguments[t] : {},
  2113. a = Object.keys(n);
  2114. "function" == typeof Object.getOwnPropertySymbols && (a = a.concat(Object.getOwnPropertySymbols(n).filter(function(e) {
  2115. return Object.getOwnPropertyDescriptor(n, e).enumerable
  2116. }))), a.forEach(function(t) {
  2117. i(e, t, n[t])
  2118. })
  2119. }
  2120. return e
  2121. }
  2122. }, function(e, t, n) {
  2123. "use strict";
  2124. n.d(t, "a", function() {
  2125. return s
  2126. });
  2127. var i = window.AudioContext || window.webkitAudioContext,
  2128. a = n(3),
  2129. r = a.getParameter,
  2130. o = a.setParameter,
  2131. s = function() {
  2132. return r("AUDIO_CONTEXT") || (console.log("Creating Audio Context"), o("AUDIO_CONTEXT", function() {
  2133. if (i) return new i;
  2134. throw new Error("AUDIO_CONTEXT_NOT_SUPPORTED")
  2135. }())), r("AUDIO_CONTEXT")
  2136. }
  2137. }, function(e, t, n) {
  2138. var i = n(23),
  2139. a = n(24);
  2140. e.exports = function(e, t, n) {
  2141. var r = t && n || 0;
  2142. "string" == typeof e && (t = "binary" === e ? new Array(16) : null, e = null);
  2143. var o = (e = e || {}).random || (e.rng || i)();
  2144. 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];
  2145. return t || a(o)
  2146. }
  2147. }, function(e, t, n) {
  2148. "use strict";
  2149. var i = this && this.__importDefault ||
  2150. function(e) {
  2151. return e && e.__esModule ? e : {
  2152. default:
  2153. e
  2154. }
  2155. };
  2156. Object.defineProperty(t, "__esModule", {
  2157. value: !0
  2158. });
  2159. var a, r = i(n(0)),
  2160. o = n(13);
  2161. !
  2162. function(e) {
  2163. e.NEW = "new", e.PREPARING_OFFER = "preparing-offer", e.OFFER_SENT = "offer-sent", e.ESTABLISHED = "established", e.CLOSED = "closed"
  2164. }(a || (a = {}));
  2165. var s = function() {
  2166. function e(e) {
  2167. 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({
  2168. offerToReceiveAudio: !0,
  2169. offerToReceiveVideo: !0
  2170. }).then(this.setLocalSDP.bind(this)), this.sendVideoStats = {
  2171. id: "",
  2172. type: "",
  2173. mediaType: "",
  2174. googCodecName: "h264" === this.config.codec ? "H264" : "VP8",
  2175. bytesSent: "0",
  2176. packetsLost: "0",
  2177. packetsSent: "0",
  2178. googAdaptationChanges: "0",
  2179. googAvgEncodeMs: "0",
  2180. googEncodeUsagePercent: "0",
  2181. googFirsReceived: "0",
  2182. googFrameHeightSent: "0",
  2183. googFrameHeightInput: "0",
  2184. googFrameRateInput: "0",
  2185. googFrameRateSent: "0",
  2186. googFrameWidthSent: "0",
  2187. googFrameWidthInput: "0",
  2188. googNacksReceived: "0",
  2189. googPlisReceived: "0",
  2190. googRtt: "0",
  2191. googFramesEncoded: "0"
  2192. }, this.sendAudioStats = {
  2193. id: "",
  2194. type: "",
  2195. mediaType: "",
  2196. googCodecName: "opus",
  2197. aecDivergentFilterFraction: "0",
  2198. audioInputLevel: "0",
  2199. bytesSent: "0",
  2200. packetsSent: "0",
  2201. googEchoCancellationReturnLoss: "0",
  2202. googEchoCancellationReturnLossEnhancement: "0"
  2203. }, this.receiveAudioStats = {
  2204. id: "",
  2205. type: "",
  2206. mediaType: "",
  2207. audioOutputLevel: "0",
  2208. bytesReceived: "0",
  2209. packetsLost: "0",
  2210. packetsReceived: "0",
  2211. googAccelerateRate: "0",
  2212. googCurrentDelayMs: "0",
  2213. googDecodingCNG: "0",
  2214. googDecodingCTN: "0",
  2215. googDecodingCTSG: "0",
  2216. googDecodingNormal: "0",
  2217. googDecodingPLC: "0",
  2218. googDecodingPLCCNG: "0",
  2219. googExpandRate: "0",
  2220. googJitterBufferMs: "0",
  2221. googJitterReceived: "0",
  2222. googPreemptiveExpandRate: "0",
  2223. googPreferredJitterBufferMs: "0",
  2224. googSecondaryDecodedRate: "0",
  2225. googSpeechExpandRate: "0"
  2226. }, this.receiveVideoStats = {
  2227. id: "",
  2228. type: "",
  2229. mediaType: "",
  2230. googTargetDelayMs: "0",
  2231. packetsLost: "0",
  2232. googDecodeMs: "0",
  2233. googMaxDecodeMs: "0",
  2234. googRenderDelayMs: "0",
  2235. googFrameWidthReceived: "0",
  2236. googFrameHeightReceived: "0",
  2237. googFrameRateReceived: "0",
  2238. googFrameRateDecoded: "0",
  2239. googFrameRateOutput: "0",
  2240. googFramesDecoded: "0",
  2241. googFrameReceived: "0",
  2242. googJitterBufferMs: "0",
  2243. googCurrentDelayMs: "0",
  2244. googMinPlayoutDelayMs: "0",
  2245. googNacksSent: "0",
  2246. googPlisSent: "0",
  2247. googFirsSent: "0",
  2248. bytesReceived: "0",
  2249. packetsReceived: "0"
  2250. }
  2251. }
  2252. return e.prototype.addStream = function(e) {
  2253. this.peerConnection.addStream(e)
  2254. }, e.prototype.setAnswer = function(e) {
  2255. var t = JSON.parse(e);
  2256. this.peerConnection.setRemoteDescription(new RTCSessionDescription({
  2257. sdp: t.sdp,
  2258. type: "answer"
  2259. })), this.onsignalingmessage && this.onsignalingmessage("")
  2260. }, e.prototype.close = function() {
  2261. this.peerConnection.close()
  2262. }, e.prototype.getStats = function(e, t) {
  2263. if (void 0 === t && (t = 500), t = t > 500 ? 500 : t, Date.now() - this.lastTimeGetStats < t) {
  2264. var n = [];
  2265. this.config.isSubscriber ? (n.push(this.receiveVideoStats), n.push(this.receiveAudioStats)) : (n.push(this.sendAudioStats), n.push(this.sendVideoStats)), n.push({
  2266. id: "time",
  2267. startTime: this.connectedTime,
  2268. timestamp: Date.now()
  2269. }), e && e(n)
  2270. } else this._getStats(e)
  2271. }, e.prototype._getStats = function(e) {
  2272. var t = this,
  2273. n = [];
  2274. this.peerConnection.getStats(null).then(function(i) {
  2275. t.lastTimeGetStats = Date.now(), Object.keys(i).map(function(e) {
  2276. var n = i[e];
  2277. 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 + "")
  2278. }), t.config.isSubscriber ? (n.push(t.receiveVideoStats), n.push(t.receiveAudioStats)) : (n.push(t.sendAudioStats), n.push(t.sendVideoStats)), n.push({
  2279. id: "time",
  2280. startTime: t.connectedTime,
  2281. timestamp: Date.now()
  2282. }), e && e(n)
  2283. })
  2284. }, e.prototype.getStatsRate = function(e) {
  2285. this.getStats(e)
  2286. }, e.prototype.initPeecConnection = function(e) {
  2287. var t = e.stunServerUrl,
  2288. n = e.turnServer,
  2289. i = e.iceServers;
  2290. return this.pcConfig = {
  2291. iceServers: [{
  2292. urls: "stun:webcs.agora.io:3478"
  2293. }]
  2294. }, i instanceof Array ? this.pcConfig.iceServers = e.iceServers : t && (t instanceof Array ? t.map(function(e) {
  2295. "string" == typeof e && "" !== e && this.pcConfig.iceServers.push({
  2296. urls: e
  2297. })
  2298. }) : "string" == typeof t && "" !== t && this.pcConfig.iceServers.push({
  2299. urls: t
  2300. })), n && (n instanceof Array ? n.map(function(e) {
  2301. "string" == typeof e.url && "" !== e.url && this.pcConfig.iceServers.push({
  2302. username: e.username,
  2303. credential: e.credential,
  2304. url: e.url
  2305. })
  2306. }) : "auto" !== n.mode && "manual" !== n.mode || (n.udpport && this.pcConfig.iceServers.push({
  2307. username: n.username,
  2308. credential: n.credential,
  2309. credentialType: "password",
  2310. urls: "turn:" + n.url + ":" + n.udpport + "?transport=udp"
  2311. }), "string" == typeof n.tcpport && "" !== n.tcpport && this.pcConfig.iceServers.push({
  2312. username: n.username,
  2313. credential: n.credential,
  2314. credentialType: "password",
  2315. urls: "turn:" + n.url + ":" + n.tcpport + "?transport=tcp"
  2316. }), !0 === n.forceturn && (this.pcConfig.iceTransportPolicy = "relay"))), new o.RTCPeerConnection(this.pcConfig)
  2317. }, e.prototype._ontrack = function(e) {
  2318. this.onaddstream && this.onaddstream(e, "ontrack")
  2319. }, e.prototype._onaddstream = function(e) {
  2320. this.onaddstream && this.onaddstream(e, "onaddstream")
  2321. }, e.prototype._oniceconnectionstatechange = function(e) {
  2322. "connected" === e.currentTarget.iceConnectionState && (this.state = a.ESTABLISHED, this.connectedTime = Date.now()), this.oniceconnectionstatechange && this.oniceconnectionstatechange(e.currentTarget.iceConnectionState)
  2323. }, e.prototype._onicecandidate = function(e) {
  2324. !this.candidate && e && (this.candidate = e.candidate, this.peerConnection.createOffer({
  2325. offerToReceiveAudio: !0,
  2326. offerToReceiveVideo: !0
  2327. }).then(this.editLocalSDP.bind(this)).then(this.setLocalSDP.bind(this)).then(this.sendOffer.bind(this)).
  2328. catch ())
  2329. }, e.prototype.setLocalSDP = function(e) {
  2330. return this.peerConnection.setLocalDescription(new RTCSessionDescription({
  2331. sdp: e.sdp,
  2332. type: "offer"
  2333. })), this.state = a.PREPARING_OFFER, e
  2334. }, e.prototype.editLocalSDP = function(e) {
  2335. return e.sdp = this.setBandWidth(e.sdp), e.sdp = this.reviseOpus(e.sdp), e.sdp = this.addCandidate(e.sdp), e
  2336. }, e.prototype.setSendRecv = function(e) {
  2337. 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")
  2338. }, e.prototype.setBandWidth = function(e) {
  2339. var t, n, i = this.config,
  2340. a = i.codec,
  2341. o = i.minVideoBW,
  2342. s = i.maxVideoBW,
  2343. c = i.maxAudioBW,
  2344. d = i.clientId;
  2345. if ((t = e.match(/m=video.*\r\n/)) && o && s) {
  2346. n = t[0] + "b=AS:" + s + "\r\n";
  2347. var u = 0,
  2348. l = 0;
  2349. "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.
  2350. default.debug("[" + d + "]Set Video Bitrate - min:" + o + " max:" + s)
  2351. }
  2352. return (t = e.match(/m=audio.*\r\n/)) && c && (n = t[0] + "b=AS:" + c + "\r\n", e = e.replace(t[0], n)), e
  2353. }, e.prototype.reviseOpus = function(e) {
  2354. 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")
  2355. }, e.prototype.addCandidate = function(e) {
  2356. return e += "a=candidate:2243255435 1 udp 2122194687 192.168.0.1 30000 typ host generation 0 network-id 1\r\n"
  2357. }, e.prototype.sendOffer = function(e) {
  2358. this.config.callback(JSON.stringify({
  2359. sdp: e.sdp,
  2360. messageType: "OFFER",
  2361. tiebreaker: Math.floor(429496723 * Math.random() + 1)
  2362. })), this.state = a.OFFER_SENT
  2363. }, e
  2364. }();
  2365. t.
  2366. default = s
  2367. }, function(e, t, n) {
  2368. var i = n(28),
  2369. a = n(29),
  2370. r = n(30);
  2371. e.exports = function(e, t) {
  2372. return i(e) || a(e, t) || r()
  2373. }
  2374. }, function(e, t, n) {
  2375. var i, a;
  2376. a = this, void 0 === (i = function() {
  2377. return function() {
  2378. "use strict";
  2379. var e, t = this;
  2380. function n(e) {
  2381. t.console && (t.console.error ? t.console.error(e) : t.console.log && t.console.log(e))
  2382. }
  2383. function i(e, t, i, a) {
  2384. var r = a || n,
  2385. o = e.createShader(i);
  2386. e.shaderSource(o, t), e.compileShader(o);
  2387. var s = e.getShaderParameter(o, e.COMPILE_STATUS);
  2388. if (!s) {
  2389. var c = e.getShaderInfoLog(o);
  2390. return r("*** Error compiling shader '" + o + "':" + c), e.deleteShader(o), null
  2391. }
  2392. return o
  2393. }
  2394. function a(e, t, i, a, r) {
  2395. var o = r || n,
  2396. s = e.createProgram();
  2397. t.forEach(function(t) {
  2398. e.attachShader(s, t)
  2399. }), i && i.forEach(function(t, n) {
  2400. e.bindAttribLocation(s, a ? a[n] : n, t)
  2401. }), e.linkProgram(s);
  2402. var c = e.getProgramParameter(s, e.LINK_STATUS);
  2403. if (!c) {
  2404. var d = e.getProgramInfoLog(s);
  2405. return o("Error in program linking:" + d), e.deleteProgram(s), null
  2406. }
  2407. return s
  2408. }(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"));
  2409. var r, o = ["VERTEX_SHADER", "FRAGMENT_SHADER"];
  2410. return !document.documentMode && window.StyleMedia && (HTMLCanvasElement.prototype.getContext = (r = HTMLCanvasElement.prototype.getContext, function() {
  2411. var e = arguments,
  2412. t = e[0];
  2413. return "webgl" === t && ((e = [].slice.call(arguments))[0] = "experimental-webgl"), r.apply(this, e)
  2414. })), {
  2415. createProgram: a,
  2416. createProgramFromSources: function(e, t, n, r, s) {
  2417. for (var c = [], d = 0; d < t.length; ++d) c.push(i(e, t[d], e[o[d]], s));
  2418. return a(e, c, n, r, s)
  2419. }
  2420. }
  2421. }.call(a)
  2422. }.apply(t, [])) || (e.exports = i)
  2423. }, function(e, t, n) {
  2424. "use strict";
  2425. var i = this && this.__awaiter ||
  2426. function(e, t, n, i) {
  2427. return new(n || (n = Promise))(function(a, r) {
  2428. function o(e) {
  2429. try {
  2430. c(i.next(e))
  2431. } catch (e) {
  2432. r(e)
  2433. }
  2434. }
  2435. function s(e) {
  2436. try {
  2437. c(i.
  2438. throw (e))
  2439. } catch (e) {
  2440. r(e)
  2441. }
  2442. }
  2443. function c(e) {
  2444. e.done ? a(e.value) : new n(function(t) {
  2445. t(e.value)
  2446. }).then(o, s)
  2447. }
  2448. c((i = i.apply(e, t || [])).next())
  2449. })
  2450. }, a = this && this.__generator ||
  2451. function(e, t) {
  2452. var n, i, a, r, o = {
  2453. label: 0,
  2454. sent: function() {
  2455. if (1 & a[0]) throw a[1];
  2456. return a[1]
  2457. },
  2458. trys: [],
  2459. ops: []
  2460. };
  2461. return r = {
  2462. next: s(0),
  2463. throw :s(1),
  2464. return :s(2)
  2465. }, "function" == typeof Symbol && (r[Symbol.iterator] = function() {
  2466. return this
  2467. }), r;
  2468. function s(r) {
  2469. return function(s) {
  2470. return function(r) {
  2471. if (n) throw new TypeError("Generator is already executing.");
  2472. for (; o;) try {
  2473. if (n = 1, i && (a = 2 & r[0] ? i.
  2474. return :r[0] ? i.
  2475. throw ||((a = i.
  2476. return) && a.call(i), 0) : i.next) && !(a = a.call(i, r[1])).done) return a;
  2477. switch (i = 0, a && (r = [2 & r[0], a.value]), r[0]) {
  2478. case 0:
  2479. case 1:
  2480. a = r;
  2481. break;
  2482. case 4:
  2483. return o.label++, {
  2484. value: r[1],
  2485. done: !1
  2486. };
  2487. case 5:
  2488. o.label++, i = r[1], r = [0];
  2489. continue;
  2490. case 7:
  2491. r = o.ops.pop(), o.trys.pop();
  2492. continue;
  2493. default:
  2494. if (!(a = (a = o.trys).length > 0 && a[a.length - 1]) && (6 === r[0] || 2 === r[0])) {
  2495. o = 0;
  2496. continue
  2497. }
  2498. if (3 === r[0] && (!a || r[1] > a[0] && r[1] < a[3])) {
  2499. o.label = r[1];
  2500. break
  2501. }
  2502. if (6 === r[0] && o.label < a[1]) {
  2503. o.label = a[1], a = r;
  2504. break
  2505. }
  2506. if (a && o.label < a[2]) {
  2507. o.label = a[2], o.ops.push(r);
  2508. break
  2509. }
  2510. a[2] && o.ops.pop(), o.trys.pop();
  2511. continue
  2512. }
  2513. r = t.call(e, o)
  2514. } catch (e) {
  2515. r = [6, e], i = 0
  2516. } finally {
  2517. n = a = 0
  2518. }
  2519. if (5 & r[0]) throw r[1];
  2520. return {
  2521. value: r[0] ? r[1] : void 0,
  2522. done: !0
  2523. }
  2524. }([r, s])
  2525. }
  2526. }
  2527. }, r = this && this.__importDefault ||
  2528. function(e) {
  2529. return e && e.__esModule ? e : {
  2530. default:
  2531. e
  2532. }
  2533. }, o = this;
  2534. Object.defineProperty(t, "__esModule", {
  2535. value: !0
  2536. });
  2537. var s = n(31),
  2538. c = n(5),
  2539. d = r(n(0));
  2540. t.getSupportedCodec = function(e) {
  2541. return i(o, void 0, void 0, function() {
  2542. var t, n, i, r, o;
  2543. return a(this, function(a) {
  2544. switch (a.label) {
  2545. case 0:
  2546. return t = {
  2547. video: [],
  2548. audio: []
  2549. }, "undefined" != typeof window ? [3, 1] : (d.
  2550. default.error("getSupportedCodec: NOT_BROWSER_ENV"), [2, Promise.reject("NOT_BROWSER_ENV")]);
  2551. case 1:
  2552. try {
  2553. n = s.createRTCPeerConnection({
  2554. iceServers: []
  2555. })
  2556. } catch (e) {
  2557. return d.
  2558. default.error("Failed to init RTCPeerConnection", e), [2, Promise.reject(e)]
  2559. }
  2560. return n ? [3, 2] : (d.
  2561. default.warning("getSupportedCodec: no RTCPeerConnection constructor is detected"), [2, Promise.resolve(t)]);
  2562. case 2:
  2563. return e && e.stream ? [3, 7] : (i = {
  2564. mandatory: {
  2565. OfferToReceiveAudio: !0,
  2566. OfferToReceiveVideo: !0
  2567. }
  2568. }, r = void 0, (c.isSafari() || c.isFireFox() || c.isWeChatBrowser()) && n.addTransceiver ? (n.addTransceiver("audio"), n.addTransceiver("video"), [4, n.createOffer()]) : [3, 4]);
  2569. case 3:
  2570. return r = a.sent(), [3, 6];
  2571. case 4:
  2572. return [4, new Promise(function(e, t) {
  2573. var a = setTimeout(function() {
  2574. t("CREATEOFFER_TIMEOUT")
  2575. }, 3e3);
  2576. n.createOffer(function(t) {
  2577. clearTimeout(a), e(t)
  2578. }, function(e) {
  2579. clearTimeout(a), t(e)
  2580. }, i)
  2581. })];
  2582. case 5:
  2583. r = a.sent(), a.label = 6;
  2584. case 6:
  2585. return n.close(), o = r.sdp, [2, u(o)];
  2586. case 7:
  2587. return e.stream.getTracks && n.addTrack ? e.stream.getTracks().forEach(function(t) {
  2588. n.addTrack(t, e.stream)
  2589. }) : n.addStream(e.stream), r = void 0, c.isSafari() || c.isFireFox() ? [4, n.createOffer()] : [3, 9];
  2590. case 8:
  2591. return r = a.sent(), [3, 11];
  2592. case 9:
  2593. return [4, new Promise(function(e, t) {
  2594. n.createOffer(e, t)
  2595. })];
  2596. case 10:
  2597. r = a.sent(), a.label = 11;
  2598. case 11:
  2599. return n.close(), o = r.sdp, [2, u(o)]
  2600. }
  2601. })
  2602. })
  2603. };
  2604. var u = function(e) {
  2605. var t = {
  2606. video: [],
  2607. audio: []
  2608. };
  2609. 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)
  2610. }
  2611. }, function(e, t, n) {
  2612. var i = n(33),
  2613. a = n(34),
  2614. r = n(35);
  2615. e.exports = function(e) {
  2616. return i(e) || a(e) || r()
  2617. }
  2618. }, function(e, t, n) {
  2619. "use strict";
  2620. var i = this && this.__importDefault ||
  2621. function(e) {
  2622. return e && e.__esModule ? e : {
  2623. default:
  2624. e
  2625. }
  2626. };
  2627. Object.defineProperty(t, "__esModule", {
  2628. value: !0
  2629. });
  2630. var a = i(n(4)),
  2631. r = i(n(0));
  2632. t.
  2633. default = function(e, t) {
  2634. void 0 === t && (t = {
  2635. width: 160,
  2636. height: 120,
  2637. framerate: 15
  2638. });
  2639. var n = t.width,
  2640. i = t.height,
  2641. o = t.framerate;
  2642. if (!e) throw a.
  2643. default.INVALID_LOCAL_STREAM;
  2644. if (!e.getVideoTracks()[0]) throw a.
  2645. default.HIGH_STREAM_NOT_VIDEO_TRACE;
  2646. r.
  2647. default.debug("Start getLowStream");
  2648. var s = document.createElement("video"),
  2649. c = document.createElement("canvas");
  2650. 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);
  2651. var d = c.getContext("2d");
  2652. s.srcObject = e, s.autoplay = !0, r.
  2653. default.debug("Start render lowStream");
  2654. var u = setInterval(function() {
  2655. d.drawImage(s, 0, 0, n, i)
  2656. }, Math.floor(1e3 / o)),
  2657. l = c.captureStream(o);
  2658. return l.clean = function() {
  2659. r.
  2660. 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.
  2661. default.debug("Clean lowStream")
  2662. }, l
  2663. }
  2664. }, function(e, t) {
  2665. var n = "undefined" != typeof crypto && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || "undefined" != typeof msCrypto && "function" == typeof window.msCrypto.getRandomValues && msCrypto.getRandomValues.bind(msCrypto);
  2666. if (n) {
  2667. var i = new Uint8Array(16);
  2668. e.exports = function() {
  2669. return n(i), i
  2670. }
  2671. } else {
  2672. var a = new Array(16);
  2673. e.exports = function() {
  2674. for (var e, t = 0; t < 16; t++) 0 == (3 & t) && (e = 4294967296 * Math.random()), a[t] = e >>> ((3 & t) << 3) & 255;
  2675. return a
  2676. }
  2677. }
  2678. }, function(e, t) {
  2679. for (var n = [], i = 0; i < 256; ++i) n[i] = (i + 256).toString(16).substr(1);
  2680. e.exports = function(e, t) {
  2681. var i = t || 0,
  2682. a = n;
  2683. 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("")
  2684. }
  2685. }, function(e, t) {
  2686. e.exports = function(e, t, n) {
  2687. return t in e ? Object.defineProperty(e, t, {
  2688. value: n,
  2689. enumerable: !0,
  2690. configurable: !0,
  2691. writable: !0
  2692. }) : e[t] = n, e
  2693. }
  2694. }, function(e, t, n) {
  2695. var i = function() {
  2696. return this || "object" == typeof self && self
  2697. }() || Function("return this")(),
  2698. a = i.regeneratorRuntime && Object.getOwnPropertyNames(i).indexOf("regeneratorRuntime") >= 0,
  2699. r = a && i.regeneratorRuntime;
  2700. if (i.regeneratorRuntime = void 0, e.exports = n(27), a) i.regeneratorRuntime = r;
  2701. else try {
  2702. delete i.regeneratorRuntime
  2703. } catch (e) {
  2704. i.regeneratorRuntime = void 0
  2705. }
  2706. }, function(e, t) {
  2707. !
  2708. function(t) {
  2709. "use strict";
  2710. var n, i = Object.prototype,
  2711. a = i.hasOwnProperty,
  2712. r = "function" == typeof Symbol ? Symbol : {},
  2713. o = r.iterator || "@@iterator",
  2714. s = r.asyncIterator || "@@asyncIterator",
  2715. c = r.toStringTag || "@@toStringTag",
  2716. d = "object" == typeof e,
  2717. u = t.regeneratorRuntime;
  2718. if (u) d && (e.exports = u);
  2719. else {
  2720. (u = t.regeneratorRuntime = d ? e.exports : {}).wrap = E;
  2721. var l = "suspendedStart",
  2722. f = "suspendedYield",
  2723. p = "executing",
  2724. m = "completed",
  2725. g = {},
  2726. v = {};
  2727. v[o] = function() {
  2728. return this
  2729. };
  2730. var S = Object.getPrototypeOf,
  2731. h = S && S(S(k([])));
  2732. h && h !== i && a.call(h, o) && (v = h);
  2733. var _ = b.prototype = T.prototype = Object.create(v);
  2734. y.prototype = _.constructor = b, b.constructor = y, b[c] = y.displayName = "GeneratorFunction", u.isGeneratorFunction = function(e) {
  2735. var t = "function" == typeof e && e.constructor;
  2736. return !!t && (t === y || "GeneratorFunction" === (t.displayName || t.name))
  2737. }, u.mark = function(e) {
  2738. return Object.setPrototypeOf ? Object.setPrototypeOf(e, b) : (e.__proto__ = b, c in e || (e[c] = "GeneratorFunction")), e.prototype = Object.create(_), e
  2739. }, u.awrap = function(e) {
  2740. return {
  2741. __await: e
  2742. }
  2743. }, R(A.prototype), A.prototype[s] = function() {
  2744. return this
  2745. }, u.AsyncIterator = A, u.async = function(e, t, n, i) {
  2746. var a = new A(E(e, t, n, i));
  2747. return u.isGeneratorFunction(t) ? a : a.next().then(function(e) {
  2748. return e.done ? e.value : a.next()
  2749. })
  2750. }, R(_), _[c] = "Generator", _[o] = function() {
  2751. return this
  2752. }, _.toString = function() {
  2753. return "[object Generator]"
  2754. }, u.keys = function(e) {
  2755. var t = [];
  2756. for (var n in e) t.push(n);
  2757. return t.reverse(), function n() {
  2758. for (; t.length;) {
  2759. var i = t.pop();
  2760. if (i in e) return n.value = i, n.done = !1, n
  2761. }
  2762. return n.done = !0, n
  2763. }
  2764. }, u.values = k, w.prototype = {
  2765. constructor: w,
  2766. reset: function(e) {
  2767. 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)
  2768. },
  2769. stop: function() {
  2770. this.done = !0;
  2771. var e = this.tryEntries[0].completion;
  2772. if ("throw" === e.type) throw e.arg;
  2773. return this.rval
  2774. },
  2775. dispatchException: function(e) {
  2776. if (this.done) throw e;
  2777. var t = this;
  2778. function i(i, a) {
  2779. return s.type = "throw", s.arg = e, t.next = i, a && (t.method = "next", t.arg = n), !! a
  2780. }
  2781. for (var r = this.tryEntries.length - 1; r >= 0; --r) {
  2782. var o = this.tryEntries[r],
  2783. s = o.completion;
  2784. if ("root" === o.tryLoc) return i("end");
  2785. if (o.tryLoc <= this.prev) {
  2786. var c = a.call(o, "catchLoc"),
  2787. d = a.call(o, "finallyLoc");
  2788. if (c && d) {
  2789. if (this.prev < o.catchLoc) return i(o.catchLoc, !0);
  2790. if (this.prev < o.finallyLoc) return i(o.finallyLoc)
  2791. } else if (c) {
  2792. if (this.prev < o.catchLoc) return i(o.catchLoc, !0)
  2793. } else {
  2794. if (!d) throw new Error("try statement without catch or finally");
  2795. if (this.prev < o.finallyLoc) return i(o.finallyLoc)
  2796. }
  2797. }
  2798. }
  2799. },
  2800. abrupt: function(e, t) {
  2801. for (var n = this.tryEntries.length - 1; n >= 0; --n) {
  2802. var i = this.tryEntries[n];
  2803. if (i.tryLoc <= this.prev && a.call(i, "finallyLoc") && this.prev < i.finallyLoc) {
  2804. var r = i;
  2805. break
  2806. }
  2807. }
  2808. r && ("break" === e || "continue" === e) && r.tryLoc <= t && t <= r.finallyLoc && (r = null);
  2809. var o = r ? r.completion : {};
  2810. return o.type = e, o.arg = t, r ? (this.method = "next", this.next = r.finallyLoc, g) : this.complete(o)
  2811. },
  2812. complete: function(e, t) {
  2813. if ("throw" === e.type) throw e.arg;
  2814. 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
  2815. },
  2816. finish: function(e) {
  2817. for (var t = this.tryEntries.length - 1; t >= 0; --t) {
  2818. var n = this.tryEntries[t];
  2819. if (n.finallyLoc === e) return this.complete(n.completion, n.afterLoc), N(n), g
  2820. }
  2821. },
  2822. catch: function(e) {
  2823. for (var t = this.tryEntries.length - 1; t >= 0; --t) {
  2824. var n = this.tryEntries[t];
  2825. if (n.tryLoc === e) {
  2826. var i = n.completion;
  2827. if ("throw" === i.type) {
  2828. var a = i.arg;
  2829. N(n)
  2830. }
  2831. return a
  2832. }
  2833. }
  2834. throw new Error("illegal catch attempt")
  2835. },
  2836. delegateYield: function(e, t, i) {
  2837. return this.delegate = {
  2838. iterator: k(e),
  2839. resultName: t,
  2840. nextLoc: i
  2841. }, "next" === this.method && (this.arg = n), g
  2842. }
  2843. }
  2844. }
  2845. function E(e, t, n, i) {
  2846. var a = t && t.prototype instanceof T ? t : T,
  2847. r = Object.create(a.prototype),
  2848. o = new w(i || []);
  2849. return r._invoke = function(e, t, n) {
  2850. var i = l;
  2851. return function(a, r) {
  2852. if (i === p) throw new Error("Generator is already running");
  2853. if (i === m) {
  2854. if ("throw" === a) throw r;
  2855. return D()
  2856. }
  2857. for (n.method = a, n.arg = r;;) {
  2858. var o = n.delegate;
  2859. if (o) {
  2860. var s = O(o, n);
  2861. if (s) {
  2862. if (s === g) continue;
  2863. return s
  2864. }
  2865. }
  2866. if ("next" === n.method) n.sent = n._sent = n.arg;
  2867. else if ("throw" === n.method) {
  2868. if (i === l) throw i = m, n.arg;
  2869. n.dispatchException(n.arg)
  2870. } else "return" === n.method && n.abrupt("return", n.arg);
  2871. i = p;
  2872. var c = I(e, t, n);
  2873. if ("normal" === c.type) {
  2874. if (i = n.done ? m : f, c.arg === g) continue;
  2875. return {
  2876. value: c.arg,
  2877. done: n.done
  2878. }
  2879. }
  2880. "throw" === c.type && (i = m, n.method = "throw", n.arg = c.arg)
  2881. }
  2882. }
  2883. }(e, n, o), r
  2884. }
  2885. function I(e, t, n) {
  2886. try {
  2887. return {
  2888. type: "normal",
  2889. arg: e.call(t, n)
  2890. }
  2891. } catch (e) {
  2892. return {
  2893. type: "throw",
  2894. arg: e
  2895. }
  2896. }
  2897. }
  2898. function T() {}
  2899. function y() {}
  2900. function b() {}
  2901. function R(e) {
  2902. ["next", "throw", "return"].forEach(function(t) {
  2903. e[t] = function(e) {
  2904. return this._invoke(t, e)
  2905. }
  2906. })
  2907. }
  2908. function A(e) {
  2909. var t;
  2910. this._invoke = function(n, i) {
  2911. function r() {
  2912. return new Promise(function(t, r) {
  2913. !
  2914. function t(n, i, r, o) {
  2915. var s = I(e[n], e, i);
  2916. if ("throw" !== s.type) {
  2917. var c = s.arg,
  2918. d = c.value;
  2919. return d && "object" == typeof d && a.call(d, "__await") ? Promise.resolve(d.__await).then(function(e) {
  2920. t("next", e, r, o)
  2921. }, function(e) {
  2922. t("throw", e, r, o)
  2923. }) : Promise.resolve(d).then(function(e) {
  2924. c.value = e, r(c)
  2925. }, function(e) {
  2926. return t("throw", e, r, o)
  2927. })
  2928. }
  2929. o(s.arg)
  2930. }(n, i, t, r)
  2931. })
  2932. }
  2933. return t = t ? t.then(r, r) : r()
  2934. }
  2935. }
  2936. function O(e, t) {
  2937. var i = e.iterator[t.method];
  2938. if (i === n) {
  2939. if (t.delegate = null, "throw" === t.method) {
  2940. if (e.iterator.
  2941. return &&(t.method = "return", t.arg = n, O(e, t), "throw" === t.method)) return g;
  2942. t.method = "throw", t.arg = new TypeError("The iterator does not provide a 'throw' method")
  2943. }
  2944. return g
  2945. }
  2946. var a = I(i, e.iterator, t.arg);
  2947. if ("throw" === a.type) return t.method = "throw", t.arg = a.arg, t.delegate = null, g;
  2948. var r = a.arg;
  2949. 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)
  2950. }
  2951. function C(e) {
  2952. var t = {
  2953. tryLoc: e[0]
  2954. };
  2955. 1 in e && (t.catchLoc = e[1]), 2 in e && (t.finallyLoc = e[2], t.afterLoc = e[3]), this.tryEntries.push(t)
  2956. }
  2957. function N(e) {
  2958. var t = e.completion || {};
  2959. t.type = "normal", delete t.arg, e.completion = t
  2960. }
  2961. function w(e) {
  2962. this.tryEntries = [{
  2963. tryLoc: "root"
  2964. }], e.forEach(C, this), this.reset(!0)
  2965. }
  2966. function k(e) {
  2967. if (e) {
  2968. var t = e[o];
  2969. if (t) return t.call(e);
  2970. if ("function" == typeof e.next) return e;
  2971. if (!isNaN(e.length)) {
  2972. var i = -1,
  2973. r = function t() {
  2974. for (; ++i < e.length;) if (a.call(e, i)) return t.value = e[i], t.done = !1, t;
  2975. return t.value = n, t.done = !0, t
  2976. };
  2977. return r.next = r
  2978. }
  2979. }
  2980. return {
  2981. next: D
  2982. }
  2983. }
  2984. function D() {
  2985. return {
  2986. value: n,
  2987. done: !0
  2988. }
  2989. }
  2990. }(function() {
  2991. return this || "object" == typeof self && self
  2992. }() || Function("return this")())
  2993. }, function(e, t) {
  2994. e.exports = function(e) {
  2995. if (Array.isArray(e)) return e
  2996. }
  2997. }, function(e, t) {
  2998. e.exports = function(e, t) {
  2999. var n = [],
  3000. i = !0,
  3001. a = !1,
  3002. r = void 0;
  3003. try {
  3004. for (var o, s = e[Symbol.iterator](); !(i = (o = s.next()).done) && (n.push(o.value), !t || n.length !== t); i = !0);
  3005. } catch (e) {
  3006. a = !0, r = e
  3007. } finally {
  3008. try {
  3009. i || null == s.
  3010. return ||s.
  3011. return ()
  3012. } finally {
  3013. if (a) throw r
  3014. }
  3015. }
  3016. return n
  3017. }
  3018. }, function(e, t) {
  3019. e.exports = function() {
  3020. throw new TypeError("Invalid attempt to destructure non-iterable instance")
  3021. }
  3022. }, function(e, t, n) {
  3023. "use strict";
  3024. Object.defineProperty(t, "__esModule", {
  3025. value: !0
  3026. });
  3027. var i = "object" == typeof window && window.RTCPeerConnection,
  3028. a = "object" == typeof window && window.webkitRTCPeerConnection,
  3029. r = "object" == typeof window && window.mozRTCPeerConnection;
  3030. t.createRTCPeerConnection = function(e) {
  3031. var t = i || a || r;
  3032. return t ? new t(e) : null
  3033. }
  3034. }, function(e, t, n) {
  3035. var i;
  3036. /*!
  3037. * EventEmitter v5.2.8 - git.io/ee
  3038. * Unlicense - http://unlicense.org/
  3039. * Oliver Caldwell - https://oli.me.uk/
  3040. * @preserve
  3041. */
  3042. !
  3043. function(t) {
  3044. "use strict";
  3045. function a() {}
  3046. var r = a.prototype,
  3047. o = t.EventEmitter;
  3048. function s(e, t) {
  3049. for (var n = e.length; n--;) if (e[n].listener === t) return n;
  3050. return -1
  3051. }
  3052. function c(e) {
  3053. return function() {
  3054. return this[e].apply(this, arguments)
  3055. }
  3056. }
  3057. r.getListeners = function(e) {
  3058. var t, n, i = this._getEvents();
  3059. if (e instanceof RegExp) for (n in t = {}, i) i.hasOwnProperty(n) && e.test(n) && (t[n] = i[n]);
  3060. else t = i[e] || (i[e] = []);
  3061. return t
  3062. }, r.flattenListeners = function(e) {
  3063. var t, n = [];
  3064. for (t = 0; t < e.length; t += 1) n.push(e[t].listener);
  3065. return n
  3066. }, r.getListenersAsObject = function(e) {
  3067. var t, n = this.getListeners(e);
  3068. return n instanceof Array && ((t = {})[e] = n), t || n
  3069. }, r.addListener = function(e, t) {
  3070. if (!
  3071. function e(t) {
  3072. return "function" == typeof t || t instanceof RegExp || !(!t || "object" != typeof t) && e(t.listener)
  3073. }(t)) throw new TypeError("listener must be a function");
  3074. var n, i = this.getListenersAsObject(e),
  3075. a = "object" == typeof t;
  3076. for (n in i) i.hasOwnProperty(n) && -1 === s(i[n], t) && i[n].push(a ? t : {
  3077. listener: t,
  3078. once: !1
  3079. });
  3080. return this
  3081. }, r.on = c("addListener"), r.addOnceListener = function(e, t) {
  3082. return this.addListener(e, {
  3083. listener: t,
  3084. once: !0
  3085. })
  3086. }, r.once = c("addOnceListener"), r.defineEvent = function(e) {
  3087. return this.getListeners(e), this
  3088. }, r.defineEvents = function(e) {
  3089. for (var t = 0; t < e.length; t += 1) this.defineEvent(e[t]);
  3090. return this
  3091. }, r.removeListener = function(e, t) {
  3092. var n, i, a = this.getListenersAsObject(e);
  3093. for (i in a) a.hasOwnProperty(i) && -1 !== (n = s(a[i], t)) && a[i].splice(n, 1);
  3094. return this
  3095. }, r.off = c("removeListener"), r.addListeners = function(e, t) {
  3096. return this.manipulateListeners(!1, e, t)
  3097. }, r.removeListeners = function(e, t) {
  3098. return this.manipulateListeners(!0, e, t)
  3099. }, r.manipulateListeners = function(e, t, n) {
  3100. var i, a, r = e ? this.removeListener : this.addListener,
  3101. o = e ? this.removeListeners : this.addListeners;
  3102. if ("object" != typeof t || t instanceof RegExp) for (i = n.length; i--;) r.call(this, t, n[i]);
  3103. else for (i in t) t.hasOwnProperty(i) && (a = t[i]) && ("function" == typeof a ? r.call(this, i, a) : o.call(this, i, a));
  3104. return this
  3105. }, r.removeEvent = function(e) {
  3106. var t, n = typeof e,
  3107. i = this._getEvents();
  3108. if ("string" === n) delete i[e];
  3109. else if (e instanceof RegExp) for (t in i) i.hasOwnProperty(t) && e.test(t) && delete i[t];
  3110. else delete this._events;
  3111. return this
  3112. }, r.removeAllListeners = c("removeEvent"), r.emitEvent = function(e, t) {
  3113. var n, i, a, r, o = this.getListenersAsObject(e);
  3114. 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);
  3115. return this
  3116. }, r.trigger = c("emitEvent"), r.emit = function(e) {
  3117. var t = Array.prototype.slice.call(arguments, 1);
  3118. return this.emitEvent(e, t)
  3119. }, r.setOnceReturnValue = function(e) {
  3120. return this._onceReturnValue = e, this
  3121. }, r._getOnceReturnValue = function() {
  3122. return !this.hasOwnProperty("_onceReturnValue") || this._onceReturnValue
  3123. }, r._getEvents = function() {
  3124. return this._events || (this._events = {})
  3125. }, a.noConflict = function() {
  3126. return t.EventEmitter = o, a
  3127. }, void 0 === (i = function() {
  3128. return a
  3129. }.call(t, n, t, e)) || (e.exports = i)
  3130. }("undefined" != typeof window ? window : this || {})
  3131. }, function(e, t) {
  3132. e.exports = function(e) {
  3133. if (Array.isArray(e)) {
  3134. for (var t = 0, n = new Array(e.length); t < e.length; t++) n[t] = e[t];
  3135. return n
  3136. }
  3137. }
  3138. }, function(e, t) {
  3139. e.exports = function(e) {
  3140. if (Symbol.iterator in Object(e) || "[object Arguments]" === Object.prototype.toString.call(e)) return Array.from(e)
  3141. }
  3142. }, function(e, t) {
  3143. e.exports = function() {
  3144. throw new TypeError("Invalid attempt to spread non-iterable instance")
  3145. }
  3146. }, function(t, n, a) {
  3147. "use strict";
  3148. a.r(n);
  3149. var r = a(3),
  3150. o = a(0),
  3151. s = a(2),
  3152. c = function() {
  3153. var e = {
  3154. dispatcher: {}
  3155. };
  3156. return e.dispatcher.eventListeners = {}, e.addEventListener = function(t, n) {
  3157. void 0 === e.dispatcher.eventListeners[t] && (e.dispatcher.eventListeners[t] = []), e.dispatcher.eventListeners[t].push(n)
  3158. }, e.hasListeners = function(t) {
  3159. return !(!e.dispatcher.eventListeners[t] || !e.dispatcher.eventListeners[t].length)
  3160. }, e.on = e.addEventListener, e.removeEventListener = function(t, n) {
  3161. var i;
  3162. e.dispatcher.eventListeners[t] && -1 !== (i = e.dispatcher.eventListeners[t].indexOf(n)) && e.dispatcher.eventListeners[t].splice(i, 1)
  3163. }, e.dispatchEvent = function(t, n) {
  3164. var i;
  3165. 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]))
  3166. }, e.dispatchSocketEvent = function(t) {
  3167. var n;
  3168. 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)
  3169. }, e
  3170. },
  3171. d = function(e) {
  3172. var t = {};
  3173. return t.type = e.type, t
  3174. },
  3175. u = function(e) {
  3176. var t = d(e);
  3177. return t.stream = e.stream, t.reason = e.reason, t.msg = e.msg, t
  3178. },
  3179. l = function(e) {
  3180. var t = d(e);
  3181. return t.uid = e.uid, t.attr = e.attr, t.stream = e.stream, t
  3182. },
  3183. f = function(e) {
  3184. var t = d(e);
  3185. return t.msg = e.msg, t
  3186. },
  3187. p = function(e) {
  3188. var t = d(e);
  3189. return t.url = e.url, t.uid = e.uid, t.status = e.status, t.reason = e.reason, t
  3190. },
  3191. m = a(5),
  3192. g = function() {};
  3193. g.prototype.set = function(e, t) {
  3194. ["BatteryLevel"].indexOf(e) > -1 && (this[e] = t)
  3195. };
  3196. var v = new function() {
  3197. var e = c();
  3198. return e.states = {
  3199. UNINIT: "UNINIT",
  3200. INITING: "INITING",
  3201. INITED: "INITED"
  3202. }, e.state = e.states.UNINIT, e.batteryManager = null, e._init = function(t, n) {
  3203. e.state = e.states.INITING, navigator.getBattery ? navigator.getBattery().then(function(n) {
  3204. e.batteryManager = n, t && setTimeout(function() {
  3205. t()
  3206. }, 0)
  3207. }).
  3208. catch (function(e) {
  3209. o.
  3210. default.debug("navigator.getBattery is disabled", e), t && t()
  3211. }) : (e.state = e.states.INITED, t && t())
  3212. }, e._getBatteryStats = function() {
  3213. var t = {};
  3214. return e.batteryManager && e.batteryManager.level ? t.BatteryLevel = Math.floor(100 * e.batteryManager.level) : t.BatteryLevel = "UNSUPPORTED", t
  3215. }, e.getStats = function(t, n) {
  3216. var i = new g,
  3217. a = e._getBatteryStats();
  3218. a && a.BatteryLevel && i.set("BatteryLevel", a.BatteryLevel), t && t(i)
  3219. }, e._init(), e
  3220. },
  3221. S = a(6),
  3222. h = a.n(S),
  3223. _ = function(e) {
  3224. var t = c(e);
  3225. return t.url = ".", t
  3226. },
  3227. E = a(13),
  3228. I = a(4),
  3229. T = 0,
  3230. y = function(e) {
  3231. var t = _({});
  3232. 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) {
  3233. var a = t.video || t.audio;
  3234. return a ? a.setSinkId ? void a.setSinkId(e).then(function() {
  3235. return o.
  3236. default.debug("[" + t.id + "] " + "video ".concat(t.id, " setAudioOutput ").concat(e, " SUCCESS")), a == t.video && t.audio ? t.audio.setSinkId(e):
  3237. Promise.resolve()
  3238. }).then(function() {
  3239. return o.
  3240. default.debug("[" + t.id + "] " + "audio ".concat(t.id, " setAudioOutput ").concat(e, " SUCCESS")), n && n()
  3241. }).
  3242. catch (function(e) {
  3243. return o.
  3244. default.error("[" + t.id + "] VideoPlayer.setAudioOutput", e), i && i(e)
  3245. }) : (o.
  3246. default.error("[" + t.id + "] ", I.
  3247. default.WEB_API_NOT_SUPPORTED), i && i(I.
  3248. default.WEB_API_NOT_SUPPORTED)) : (o.
  3249. default.error("[" + t.id + "] ", I.
  3250. default.PLAYER_NOT_FOUND), i && i(I.
  3251. default.PLAYER_NOT_FOUND))
  3252. }, t.destroy = function() {
  3253. o.
  3254. 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) {
  3255. t[n];
  3256. var i = a[n];
  3257. clearTimeout(i.playDeferTimeout), i.formerMediaState = null;
  3258. var r = {
  3259. playerId: t.playerId,
  3260. stateId: i.stateId + 1,
  3261. playDeferTimeout: null,
  3262. error: !1,
  3263. status: "aborted",
  3264. reason: "stop",
  3265. updatedAt: Date.now()
  3266. };
  3267. a[n] = r;
  3268. var c = {
  3269. type: "player-status-change",
  3270. playerId: t.playerId,
  3271. mediaType: n,
  3272. status: r.status,
  3273. reason: r.reason,
  3274. isErrorState: !1,
  3275. streamId: t.id
  3276. };
  3277. o.
  3278. default.debug("[".concat(t.id, "] Media Player Status Change Triggered by destroy()"), c), e.stream.dispatchEvent(c), s.b.reportApiInvoke(e.stream.sid, {
  3279. name: "Stream.playerStatusChange",
  3280. options: c,
  3281. tag: "tracer"
  3282. })()
  3283. })
  3284. }, 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"));
  3285. var n = {
  3286. autoplay: !0,
  3287. muted: !! e.stream.local || !(!m.isSafari() && "iOS" !== m.getBrowserOS()) && "video_element_muted",
  3288. playsinline: !0,
  3289. controls: !(!m.isSafari() && "iOS" !== m.getBrowserOS() || e.stream.local),
  3290. volume: null
  3291. },
  3292. i = h()({}, n, e.options);
  3293. !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).appendChild(t.div), t.container = document.getElementById(t.elementID)) : (document.body.appendChild(t.div), t.container = document.body), t.parentNode = t.div.parentNode;
  3294. var a = {
  3295. video: {
  3296. playerId: t.playerId,
  3297. stateId: 0,
  3298. playDeferTimeout: null,
  3299. error: !1,
  3300. status: "init",
  3301. reason: null,
  3302. updatedAt: Date.now()
  3303. },
  3304. audio: {
  3305. playerId: t.playerId,
  3306. stateId: 0,
  3307. playDeferTimeout: null,
  3308. error: !1,
  3309. status: "init",
  3310. reason: null,
  3311. updatedAt: Date.now()
  3312. }
  3313. };
  3314. t.mediaElemExists = function(e) {
  3315. for (var t = e, n = 0; n < Object(r.getParameter)("MEDIA_ELEMENT_EXISTS_DEPTH") && t; n++) t = t.parentNode;
  3316. return !!t
  3317. };
  3318. var c = function(e) {
  3319. return t.mediaElemExists(e) ? e.paused ? "paused" : "play" : "aborted"
  3320. },
  3321. d = function(e, t, n) {
  3322. var i = c(e),
  3323. a = !0;
  3324. 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
  3325. },
  3326. u = function(n) {
  3327. var u, l = this;
  3328. if (l === t.video ? u = "video" : l === t.audio && (u = "audio"), u) {
  3329. n.type || o.
  3330. default.error("[".concat(t.id, "] Unexpected evt"), n);
  3331. var f = c(l);
  3332. clearTimeout(a[u].playDeferTimeout), a[u].playDeferTimeout = setTimeout(function() {
  3333. a[u].playDeferTimeout = null;
  3334. var r = a[u],
  3335. p = c(l);
  3336. if (f === p) {
  3337. var m = {
  3338. playerId: t.playerId,
  3339. stateId: r.stateId + 1,
  3340. playDeferTimeout: null,
  3341. error: d(l, u, i),
  3342. status: c(l),
  3343. reason: n.type,
  3344. updatedAt: Date.now()
  3345. };
  3346. if (r.status !== m.status) {
  3347. a[u] = m;
  3348. var g = {
  3349. type: "player-status-change",
  3350. playerId: t.playerId,
  3351. mediaType: u,
  3352. status: m.status,
  3353. reason: m.reason,
  3354. isErrorState: m.error,
  3355. streamId: t.id
  3356. };
  3357. o.
  3358. default.debug("[".concat(t.id, "] Media Player Status Change"), g), e.stream.dispatchEvent(g), s.b.reportApiInvoke(e.stream.sid, {
  3359. name: "Stream.playerStatusChange",
  3360. options: g,
  3361. tag: "tracer"
  3362. })()
  3363. }
  3364. } else o.
  3365. default.debug("[".concat(t.id, "] Status Change after event Triggered.") + "Stream ".concat(t.id, " PlayerId ").concat(t.playerId, " mediaType ").concat(u, " Status ").concat(f, "=>").concat(p))
  3366. }, Object(r.getParameter)("PLAYER_STATE_DEFER"))
  3367. } else o.
  3368. default.error("[".concat(t.id, "] Unknown media element"), l)
  3369. };
  3370. if (t.mediaPlayerTimer = setInterval(function() {
  3371. ["video", "audio"].forEach(function(n) {
  3372. var r = t[n],
  3373. u = a[n];
  3374. if (!u.playDeferTimeout) {
  3375. var l = {
  3376. playerId: t.playerId,
  3377. stateId: u.stateId + 1,
  3378. playDeferTimeout: null,
  3379. error: d(r, n, i),
  3380. status: c(r),
  3381. reason: "timer",
  3382. updatedAt: Date.now()
  3383. };
  3384. if (u.status !== l.status) {
  3385. o.
  3386. 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;
  3387. var f = {
  3388. type: "player-status-change",
  3389. playerId: t.playerId,
  3390. mediaType: n,
  3391. status: l.status,
  3392. reason: l.reason,
  3393. isErrorState: l.error,
  3394. streamId: t.id
  3395. };
  3396. o.
  3397. default.debug("[".concat(t.id, "] Media Player Status Change"), f), e.stream.dispatchEvent(f), s.b.reportApiInvoke(e.stream.sid, {
  3398. name: "Stream.playerStatusChange",
  3399. options: f,
  3400. tag: "tracer"
  3401. })()
  3402. }
  3403. }
  3404. })
  3405. }, Object(r.getParameter)("PLAYER_STATE_DEFER")), t.video.addEventListener("playing", function(e) {
  3406. !
  3407. function e() {
  3408. t.video.videoWidth * t.video.videoHeight > 4 ? o.
  3409. default.debug("[" + t.id + "] video dimensions:", t.video.videoWidth, t.video.videoHeight):
  3410. setTimeout(e, 50)
  3411. }()
  3412. }), 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));
  3413. 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())) {
  3414. var l = new MediaStream(e.stream.stream.getAudioTracks());
  3415. Object(E.setSrcObject)(t.video, l)
  3416. } else Object(E.setSrcObject)(t.video, e.stream.stream);
  3417. return t.setAudioVolume = function(e) {
  3418. var n = parseInt(e) / 100;
  3419. isFinite(n) && (n < 0 ? n = 0 : n > 1 && (n = 1), t.video && (t.video.volume = n), t.audio && (t.audio.volume = n))
  3420. }, t
  3421. },
  3422. b = function(e) {
  3423. var t = {},
  3424. n = E.RTCPeerConnection;
  3425. 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 = {
  3426. iceServers: [{
  3427. url: "stun:webcs.agora.io:3478"
  3428. }]
  3429. };
  3430. var i = {
  3431. id: "outbound_audio_ssrc_send",
  3432. type: "ssrc",
  3433. mediaType: "",
  3434. googCodecName: "opus",
  3435. aecDivergentFilterFraction: "0",
  3436. audioInputLevel: "0",
  3437. bytesSent: "0",
  3438. packetsSent: "0",
  3439. googEchoCancellationReturnLoss: "0",
  3440. googEchoCancellationReturnLossEnhancement: "0"
  3441. },
  3442. a = {
  3443. id: "outbound_video_ssrc_send",
  3444. type: "ssrc",
  3445. mediaType: "",
  3446. googCodecName: "h264" === e.codec ? "H264" : "VP8",
  3447. bytesSent: "0",
  3448. packetsLost: "0",
  3449. packetsSent: "0",
  3450. googAdaptationChanges: "0",
  3451. googAvgEncodeMs: "0",
  3452. googEncodeUsagePercent: "0",
  3453. googFirsReceived: "0",
  3454. googFrameHeightSent: "0",
  3455. googFrameHeightInput: "0",
  3456. googFrameRateInput: "0",
  3457. googFrameRateSent: "0",
  3458. googFrameWidthSent: "0",
  3459. googFrameWidthInput: "0",
  3460. googNacksReceived: "0",
  3461. googPlisReceived: "0",
  3462. googRtt: "0"
  3463. },
  3464. s = {
  3465. id: "inbound_audio_ssrc_recv",
  3466. type: "ssrc",
  3467. mediaType: "",
  3468. googCodecName: "opus",
  3469. audioOutputLevel: "0",
  3470. bytesReceived: "0",
  3471. packetsLost: "0",
  3472. packetsReceived: "0",
  3473. googAccelerateRate: "0",
  3474. googCurrentDelayMs: "0",
  3475. googDecodingCNG: "0",
  3476. googDecodingCTN: "0",
  3477. googDecodingCTSG: "0",
  3478. googDecodingNormal: "0",
  3479. googDecodingPLC: "0",
  3480. googDecodingPLCCNG: "0",
  3481. googExpandRate: "0",
  3482. googJitterBufferMs: "0",
  3483. googJitterReceived: "0",
  3484. googPreemptiveExpandRate: "0",
  3485. googPreferredJitterBufferMs: "0",
  3486. googSecondaryDecodedRate: "0",
  3487. googSpeechExpandRate: "0"
  3488. },
  3489. c = {
  3490. id: "inbound_video_ssrc_recv",
  3491. type: "ssrc",
  3492. mediaType: "",
  3493. googTargetDelayMs: "0",
  3494. packetsLost: "0",
  3495. googDecodeMs: "0",
  3496. googMaxDecodeMs: "0",
  3497. googRenderDelayMs: "0",
  3498. googFrameWidthReceived: "0",
  3499. googFrameHeightReceived: "0",
  3500. googFrameRateReceived: "0",
  3501. googFrameRateDecoded: "0",
  3502. googFrameRateOutput: "0",
  3503. googJitterBufferMs: "0",
  3504. googCurrentDelayMs: "0",
  3505. googMinPlayoutDelayMs: "0",
  3506. googNacksSent: "0",
  3507. googPlisSent: "0",
  3508. googFirsSent: "0",
  3509. bytesReceived: "0",
  3510. packetsReceived: "0",
  3511. googFramesReceived: "0",
  3512. googFramesDecoded: "0"
  3513. },
  3514. d = {
  3515. id: "bweforvideo",
  3516. type: "VideoBwe",
  3517. googAvailableSendBandwidth: "0",
  3518. googAvailableReceiveBandwidth: "0",
  3519. googActualEncBitrate: "0",
  3520. googRetransmitBitrate: "0",
  3521. googTargetEncBitrate: "0",
  3522. googBucketDelay: "0",
  3523. googTransmitBitrate: "0"
  3524. };
  3525. t.con = {
  3526. optional: [{
  3527. DtlsSrtpKeyAgreement: !0
  3528. }]
  3529. }, e.iceServers instanceof Array ? t.pc_config.iceServers = e.iceServers : (e.stunServerUrl && (e.stunServerUrl instanceof Array ? e.stunServerUrl.map(function(e) {
  3530. "string" == typeof e && "" !== e && t.pc_config.iceServers.push({
  3531. url: e
  3532. })
  3533. }) : "string" == typeof e.stunServerUrl && "" !== e.stunServerUrl && t.pc_config.iceServers.push({
  3534. url: e.stunServerUrl
  3535. })), e.turnServer && (e.turnServer instanceof Array ? e.turnServer.map(function(e) {
  3536. "string" == typeof e.url && "" !== e.url && t.pc_config.iceServers.push({
  3537. username: e.username,
  3538. credential: e.credential,
  3539. url: e.url
  3540. })
  3541. }) : "auto" !== e.turnServer.mode && "manual" !== e.turnServer.mode || (e.turnServer.udpport && t.pc_config.iceServers.push({
  3542. username: e.turnServer.username,
  3543. credential: e.turnServer.credential,
  3544. credentialType: "password",
  3545. urls: "turn:" + e.turnServer.url + ":" + e.turnServer.udpport + "?transport=udp"
  3546. }), "string" == typeof e.turnServer.tcpport && "" !== e.turnServer.tcpport && t.pc_config.iceServers.push({
  3547. username: e.turnServer.username,
  3548. credential: e.turnServer.credential,
  3549. credentialType: "password",
  3550. urls: "turn:" + e.turnServer.url + ":" + e.turnServer.tcpport + "?transport=tcp"
  3551. }), !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 = {
  3552. mandatory: {
  3553. OfferToReceiveVideo: e.video,
  3554. OfferToReceiveAudio: e.audio
  3555. }
  3556. }, t.roapSessionId = 103;
  3557. try {
  3558. t.pc_config.sdpSemantics = "plan-b", t.peerConnection = new n(t.pc_config, t.con)
  3559. } catch (e) {
  3560. delete t.pc_config.sdpSemantics, t.peerConnection = new n(t.pc_config, t.con)
  3561. }
  3562. t.iceCandidateTimer = setTimeout(function() {
  3563. t.iceCandidateTimer = null, o.
  3564. default.debug("[".concat(t.clientId, "]Candidates collected: ").concat(t.iceCandidateCount)), t.moreIceComing && (t.moreIceComing = !1, t.markActionNeeded())
  3565. }, Object(r.getParameter)("CANDIDATE_TIMEOUT")), t.peerConnection.onicecandidate = function(e) {
  3566. var n, i, a, r;
  3567. 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.
  3568. 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
  3569. }, o.
  3570. default.debug("[" + t.clientId + ']Created webkitRTCPeerConnnection with config "' + JSON.stringify(t.pc_config) + '".');
  3571. var u = function(t) {
  3572. return e.screen && (t = t.replace("a=x-google-flag:conference\r\n", "")), t
  3573. },
  3574. l = function(n) {
  3575. var i, a;
  3576. if ((i = n.match(/m=video.*\r\n/)) && e.minVideoBW && e.maxVideoBW) {
  3577. a = i[0] + "b=AS:" + e.maxVideoBW + "\r\n";
  3578. var r = 0,
  3579. s = 0;
  3580. "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.
  3581. default.debug("[" + t.clientId + "]Set Video Bitrate - min:" + e.minVideoBW + " max:" + e.maxVideoBW)
  3582. }
  3583. 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
  3584. };
  3585. t.processSignalingMessage = function(e) {
  3586. var n, i = JSON.parse(e);
  3587. t.incomingMessage = i, "new" === t.state ? "OFFER" === i.messageType ? (n = {
  3588. sdp: i.sdp,
  3589. type: "offer"
  3590. }, t.peerConnection.setRemoteDescription(new RTCSessionDescription(n)).
  3591. 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 = {
  3592. sdp: i.sdp,
  3593. type: "answer"
  3594. }).sdp = u(n.sdp), n.sdp = l(n.sdp), t.peerConnection.setRemoteDescription(new RTCSessionDescription(n)).
  3595. catch (function(e) {}), t.state = "established") : "pr-answer" === i.messageType ? (n = {
  3596. sdp: i.sdp,
  3597. type: "pr-answer"
  3598. }, t.peerConnection.setRemoteDescription(new RTCSessionDescription(n)).
  3599. 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 = {
  3600. sdp: i.sdp,
  3601. type: "offer"
  3602. }, t.peerConnection.setRemoteDescription(new RTCSessionDescription(n)).
  3603. catch (function(e) {}), t.state = "offer-received", t.markActionNeeded()) : "ANSWER" === i.messageType ? ((n = {
  3604. sdp: i.sdp,
  3605. type: "answer"
  3606. }).sdp = u(n.sdp), n.sdp = l(n.sdp), t.peerConnection.setRemoteDescription(new RTCSessionDescription(n)).
  3607. catch (function(e) {})) : t.error("Illegal message for this state: " + i.messageType + " in state " + t.state))
  3608. };
  3609. var f = 0,
  3610. p = 0;
  3611. return t.getVideoRelatedStats = function(e) {
  3612. t.getStats(function(n) {
  3613. n.forEach(function(n) {
  3614. if (t.isSubscriber) {
  3615. if ("video" === n.mediaType && n.id && ~n.id.indexOf("recv")) {
  3616. if (m.isChromeKernel() && +m.getBrowserVersion() >= 76) {
  3617. var i = +n.googFramesReceived - f,
  3618. a = +n.googFramesDecoded - p;
  3619. t._setStat(c, "googFrameRateReceived", i), t._setStat(c, "googFrameRateDecoded", a), t._setStat(c, "googFrameRateOutput", a), f = +n.googFramesReceived, p = +n.googFramesDecoded
  3620. }
  3621. e && e({
  3622. mediaType: "video",
  3623. peerId: t.uid,
  3624. isVideoMute: t.isVideoMute,
  3625. frameRateReceived: n.googFrameRateReceived,
  3626. frameRateDecoded: n.googFrameRateDecoded,
  3627. bytesReceived: n.bytesReceived,
  3628. packetsReceived: n.packetsReceived,
  3629. packetsLost: n.packetsLost
  3630. })
  3631. }
  3632. } else "video" === n.mediaType && n.id && ~n.id.indexOf("send") && e && e({
  3633. mediaType: "video",
  3634. isVideoMute: t.isVideoMute,
  3635. frameRateInput: n.googFrameRateInput,
  3636. frameRateSent: n.googFrameRateSent,
  3637. googRtt: n.googRtt
  3638. })
  3639. })
  3640. })
  3641. }, t.getAudioRelatedStats = function(e) {
  3642. t.getStats(function(n) {
  3643. n.forEach(function(n) {
  3644. t.isSubscriber && "audio" === n.mediaType && n.id && ~n.id.indexOf("recv") && e && e({
  3645. mediaType: "audio",
  3646. peerId: t.uid,
  3647. isAudioMute: t.isAudioMute,
  3648. frameDropped: parseInt(n.googDecodingPLC) + parseInt(n.googDecodingPLCCNG) + "",
  3649. frameReceived: n.googDecodingCTN,
  3650. googJitterReceived: n.googJitterReceived,
  3651. bytesReceived: n.bytesReceived,
  3652. packetsReceived: n.packetsReceived,
  3653. packetsLost: n.packetsLost
  3654. })
  3655. })
  3656. })
  3657. }, t.getStatsRate = function(e) {
  3658. t.getStats(function(t) {
  3659. e(t)
  3660. })
  3661. }, t.getStats = function(e, n) {
  3662. 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) {
  3663. t.filterStatsCache = n, t.originStatsCache = i, e && e(n, i)
  3664. }))
  3665. }, t._setStat = function(e, t, n) {
  3666. e.hasOwnProperty(t) && (null != n && n !== 1 / 0 && n == n || (n = 0), e[t] = n + "")
  3667. }, t._processGetStatsAfterChrome76 = function(e) {
  3668. var n = this;
  3669. t.lastStats || (t.lastStats = new Map), t.peerConnection.getStats().then(function(r) {
  3670. var o = [],
  3671. u = [],
  3672. l = new Map,
  3673. f = new Date,
  3674. p = !0,
  3675. m = !1,
  3676. g = void 0;
  3677. try {
  3678. for (var v, S = r.values()[Symbol.iterator](); !(p = (v = S.next()).done); p = !0) {
  3679. var _ = v.value;
  3680. "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(_)
  3681. }
  3682. } catch (e) {
  3683. m = !0, g = e
  3684. } finally {
  3685. try {
  3686. p || null == S.
  3687. return ||S.
  3688. return ()
  3689. } finally {
  3690. if (m) throw g
  3691. }
  3692. }
  3693. l.set("codec", o), l.set("candidatePairs", u), l.set("timestamp", +f);
  3694. var E = null,
  3695. I = null;
  3696. if (c.timestamp = f, s.timestamp = f, i.timestamp = f, i.timestamp = f, d.timestamp = f, 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));
  3697. else {
  3698. var T = t.lastStats.get("timestamp"),
  3699. y = t.lastStats.get("outbound-video");
  3700. 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")) {
  3701. 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) {
  3702. var b = (E.totalEncodedBytesTarget - y.totalEncodedBytesTarget) / (+new Date - T);
  3703. t._setStat(d, "googTargetEncBitrate", Math.floor(8 * b * 1e3))
  3704. }
  3705. if (E.retransmittedBytesSent && y && y.retransmittedBytesSent) {
  3706. var R = (E.retransmittedBytesSent - y.retransmittedBytesSent) / (+new Date - T);
  3707. t._setStat(d, "googRetransmitBitrate", Math.floor(8 * R * 1e3))
  3708. }
  3709. if (E.bytesSent && y && y.bytesSent) {
  3710. var A = (E.bytesSent - y.bytesSent) / (+new Date - T);
  3711. t._setStat(d, "googTransmitBitrate", Math.floor(8 * A * 1e3)), t._setStat(d, "googActualEncBitrate", Math.floor(8 * A * 1e3))
  3712. }
  3713. if (E.totalPacketSendDelay && y && y.totalPacketSendDelay) {
  3714. var O = (E.totalPacketSendDelay - y.totalPacketSendDelay) / (+new Date - T);
  3715. t._setStat(d, "googBucketDelay", Math.floor(1e3 * O))
  3716. }
  3717. }
  3718. 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) {
  3719. I == e.transportId && t._setStat(d, "googAvailableSendBandwidth", e.availableOutgoingBitrate)
  3720. });
  3721. else {
  3722. var C = l.get("candidatePairs")[0];
  3723. C && t._setStat(d, "googAvailableSendBandwidth", C.availableOutgoingBitrate)
  3724. }
  3725. }
  3726. t.lastStats = l;
  3727. var N = [h()({}, a), h()({}, i), h()({}, c), h()({}, s), h()({}, d)];
  3728. N.push({
  3729. id: "time",
  3730. startTime: t.connectedTime,
  3731. timestamp: new Date
  3732. }), e(N)
  3733. })
  3734. }, t._processGetStatsBeforeChrome76 = function(e) {
  3735. t.peerConnection.getStats(function(n) {
  3736. var r = [],
  3737. o = [],
  3738. u = null;
  3739. Object.keys(n).forEach(function(e) {
  3740. var t = n[e];
  3741. 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))
  3742. }), (r = [h()({}, a), h()({}, i), h()({}, c), h()({}, s), h()({}, d)]).push({
  3743. id: "time",
  3744. startTime: t.connectedTime,
  3745. timestamp: u || new Date
  3746. }), e(r, o)
  3747. })
  3748. }, t._getStats = function(e) {
  3749. Object(r.getParameter)("CHROME_NEW_STATS") && m.isChromeKernel() && +m.getBrowserVersion() >= 76 ? t._processGetStatsAfterChrome76(e) : t._processGetStatsBeforeChrome76(e)
  3750. }, t.addTrack = function(e, n) {
  3751. t.peerConnection.addTrack(e, n)
  3752. }, t.removeTrack = function(e, n) {
  3753. t.peerConnection.removeTrack(t.peerConnection.getSenders().find(function(t) {
  3754. return t.track == e
  3755. }))
  3756. }, t.addStream = function(e) {
  3757. t.peerConnection.addStream(e), t.markActionNeeded()
  3758. }, t.removeStream = function() {
  3759. t.markActionNeeded()
  3760. }, t.close = function() {
  3761. t.state = "closed", t.peerConnection.close()
  3762. }, t.markActionNeeded = function() {
  3763. t.actionNeeded = !0, t.doLater(function() {
  3764. t.onstablestate()
  3765. })
  3766. }, t.doLater = function(e) {
  3767. window.setTimeout(e, 1)
  3768. }, t.onstablestate = function() {
  3769. var e;
  3770. if (t.actionNeeded) {
  3771. if ("new" === t.state || "established" === t.state) t.peerConnection.createOffer(function(e) {
  3772. if (e.sdp !== t.prevOffer) return t.peerConnection.setLocalDescription(e), t.state = "preparing-offer", void t.markActionNeeded();
  3773. o.
  3774. default.debug("[" + t.clientId + "]Not sending a new offer")
  3775. }, function(e) {
  3776. o.
  3777. default.debug("[" + t.clientId + "]peer connection create offer failed ", e)
  3778. }, t.mediaConstraints);
  3779. else if ("preparing-offer" === t.state) {
  3780. if (t.moreIceComing) return;
  3781. t.prevOffer = t.peerConnection.localDescription.sdp, t.offerCandidates = t.prevOffer.match(/a=candidate.+\r\n/g) || [], t.offerCandidates.length || (o.
  3782. default.warning("[".concat(t.clientId, "]No Ice Candidate generated")), Object(r.getParameter)("SHIM_CANDIDATE") ? (o.
  3783. 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"):
  3784. o.
  3785. 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"
  3786. } else if ("offer-received" === t.state) t.peerConnection.createAnswer(function(e) {
  3787. if (t.peerConnection.setLocalDescription(e), t.state = "offer-received-preparing-answer", t.iceStarted) t.markActionNeeded();
  3788. else {
  3789. var n = new Date;
  3790. o.
  3791. default.debug("[" + t.clientId + "]" + n.getTime() + ": Starting ICE in responder"), t.iceStarted = !0
  3792. }
  3793. }, function(e) {
  3794. o.
  3795. default.debug("[" + t.clientId + "]peer connection create answer failed ", e)
  3796. }, t.mediaConstraints);
  3797. else if ("offer-received-preparing-answer" === t.state) {
  3798. if (t.moreIceComing) return;
  3799. e = t.peerConnection.localDescription.sdp, t.sendMessage("ANSWER", e), t.state = "established"
  3800. } else t.debug("Dazed and confused in state " + t.state + ", stopping here");
  3801. t.actionNeeded = !1
  3802. }
  3803. }, t.sendMessage = function(e, n) {
  3804. var i = {};
  3805. 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))
  3806. }, t._getSender = function(e) {
  3807. if (t.peerConnection && t.peerConnection.getSenders) {
  3808. var n = t.peerConnection.getSenders().find(function(t) {
  3809. return t.track.kind == e
  3810. });
  3811. if (n) return n
  3812. }
  3813. return null
  3814. }, t.hasSender = function(e) {
  3815. return !!t._getSender(e)
  3816. }, t.replaceTrack = function(e, n, i) {
  3817. var a = t._getSender(e.kind);
  3818. if (!a) return i("NO_SENDER_FOUND");
  3819. try {
  3820. a.replaceTrack(e)
  3821. } catch (e) {
  3822. return i && i(e)
  3823. }
  3824. setTimeout(function() {
  3825. return n && n()
  3826. }, 50)
  3827. }, t.error = function(e) {
  3828. throw "Error in RoapOnJsep: " + e
  3829. }, 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) {
  3830. t.onaddstream && (t.onaddstream(e, "ontrack"), t.peerConnection.onaddstream = null)
  3831. }, t.peerConnection.onaddstream = function(e) {
  3832. t.onaddstream && (t.onaddstream(e, "onaddstream"), t.peerConnection.ontrack = null)
  3833. }, t.peerConnection.onremovestream = function(e) {
  3834. t.onremovestream && t.onremovestream(e)
  3835. }, t.peerConnection.oniceconnectionstatechange = function(e) {
  3836. "connected" === e.currentTarget.iceConnectionState && (t.connectedTime = new Date), t.oniceconnectionstatechange && t.oniceconnectionstatechange(e.currentTarget.iceConnectionState)
  3837. }, t.renegotiate = function() {
  3838. void 0 !== t.prevOffer && t.peerConnection.createOffer().then(function(e) {
  3839. 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)
  3840. }).then(function() {
  3841. t.onnegotiationneeded && t.onnegotiationneeded(t.peerConnection.localDescription.sdp)
  3842. }).
  3843. catch (function(e) {
  3844. console.log("createOffer error: ", e)
  3845. })
  3846. }, t.peerConnection.onnegotiationneeded = t.renegotiate, t.onaddstream = null, t.onremovestream = null, t.onnegotiationneeded = null, t.state = "new", t.markActionNeeded(), t
  3847. },
  3848. R = function(e) {
  3849. var t = {},
  3850. n = E.RTCPeerConnection;
  3851. 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 = {
  3852. iceServers: [{
  3853. urls: ["stun:webcs.agora.io:3478", "stun:stun.l.google.com:19302"]
  3854. }],
  3855. bundlePolicy: "max-bundle"
  3856. }, t.con = {
  3857. optional: [{
  3858. DtlsSrtpKeyAgreement: !0
  3859. }]
  3860. }, e.iceServers instanceof Array ? t.pc_config.iceServers = e.iceServers : (e.stunServerUrl && (e.stunServerUrl instanceof Array ? e.stunServerUrl.map(function(e) {
  3861. "string" == typeof e && "" !== e && t.pc_config.iceServers.push({
  3862. url: e
  3863. })
  3864. }) : "string" == typeof e.stunServerUrl && "" !== e.stunServerUrl && t.pc_config.iceServers.push({
  3865. url: e.stunServerUrl
  3866. })), e.turnServer && (e.turnServer instanceof Array ? e.turnServer.map(function(e) {
  3867. "string" == typeof e.url && "" !== e.url && t.pc_config.iceServers.push({
  3868. username: e.username,
  3869. credential: e.credential,
  3870. url: e.url
  3871. })
  3872. }) : "auto" !== e.turnServer.mode && "manual" !== e.turnServer.mode || (e.turnServer.udpport && t.pc_config.iceServers.push({
  3873. username: e.turnServer.username,
  3874. credential: e.turnServer.credential,
  3875. credentialType: "password",
  3876. urls: ["turn:" + e.turnServer.url + ":" + e.turnServer.udpport + "?transport=udp"]
  3877. }), "string" == typeof e.turnServer.tcpport && "" !== e.turnServer.tcpport && t.pc_config.iceServers.push({
  3878. username: e.turnServer.username,
  3879. credential: e.turnServer.credential,
  3880. credentialType: "password",
  3881. urls: ["turn:" + e.turnServer.url + ":" + e.turnServer.tcpport + "?transport=tcp"]
  3882. }), !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 = {
  3883. mandatory: {
  3884. OfferToReceiveVideo: e.video,
  3885. OfferToReceiveAudio: e.audio
  3886. }
  3887. }, t.roapSessionId = 103;
  3888. try {
  3889. t.pc_config.sdpSemantics = "plan-b", t.peerConnection = new n(t.pc_config, t.con)
  3890. } catch (e) {
  3891. delete t.pc_config.sdpSemantics, t.peerConnection = new n(t.pc_config, t.con)
  3892. }
  3893. o.
  3894. default.debug("[" + t.clientId + ']safari Created RTCPeerConnnection with config "' + JSON.stringify(t.pc_config) + '".'), t.iceCandidateTimer = setTimeout(function() {
  3895. t.iceCandidateTimer = null, o.
  3896. default.debug("[".concat(t.clientId, "]Candidates collected: ").concat(t.iceCandidateCount)), t.moreIceComing && (t.moreIceComing = !1, t.markActionNeeded())
  3897. }, Object(r.getParameter)("CANDIDATE_TIMEOUT")), t.peerConnection.onicecandidate = function(e) {
  3898. var n, i, a, r;
  3899. 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() {
  3900. t.moreIceComing && (t.moreIceComing = !1, t.markActionNeeded())
  3901. }, 1e3)), null === i && null === a && null === r || void 0 !== t.ice || !t.iceCandidateTimer || (o.
  3902. 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
  3903. };
  3904. var i = function(t) {
  3905. return e.screen && (t = t.replace("a=x-google-flag:conference\r\n", "")), t
  3906. },
  3907. a = function(n) {
  3908. var i, a;
  3909. 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.
  3910. 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
  3911. };
  3912. t.processSignalingMessage = function(e) {
  3913. var n, r = JSON.parse(e);
  3914. t.incomingMessage = r, "new" === t.state ? "OFFER" === r.messageType ? (n = {
  3915. sdp: r.sdp,
  3916. type: "offer"
  3917. }, 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 = {
  3918. sdp: r.sdp,
  3919. type: "answer"
  3920. }).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 = {
  3921. sdp: r.sdp,
  3922. type: "pr-answer"
  3923. }, 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 = {
  3924. sdp: r.sdp,
  3925. type: "offer"
  3926. }, t.peerConnection.setRemoteDescription(new RTCSessionDescription(n)), t.state = "offer-received", t.markActionNeeded()) : "ANSWER" === r.messageType ? ((n = {
  3927. sdp: r.sdp,
  3928. type: "answer"
  3929. }).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))
  3930. };
  3931. var s = {
  3932. id: "",
  3933. type: "",
  3934. mediaType: "",
  3935. googCodecName: "opus",
  3936. aecDivergentFilterFraction: "0",
  3937. audioInputLevel: "0",
  3938. bytesSent: "0",
  3939. packetsSent: "0",
  3940. googEchoCancellationReturnLoss: "0",
  3941. googEchoCancellationReturnLossEnhancement: "0"
  3942. },
  3943. c = {
  3944. id: "",
  3945. type: "",
  3946. mediaType: "",
  3947. googCodecName: "h264" === e.codec ? "H264" : "VP8",
  3948. bytesSent: "0",
  3949. packetsLost: "0",
  3950. packetsSent: "0",
  3951. googAdaptationChanges: "0",
  3952. googAvgEncodeMs: "0",
  3953. googEncodeUsagePercent: "0",
  3954. googFirsReceived: "0",
  3955. googFrameHeightSent: "0",
  3956. googFrameHeightInput: "0",
  3957. googFrameRateInput: "0",
  3958. googFrameRateSent: "0",
  3959. googFrameWidthSent: "0",
  3960. googFrameWidthInput: "0",
  3961. googNacksReceived: "0",
  3962. googPlisReceived: "0",
  3963. googRtt: "0",
  3964. googFramesEncoded: "0"
  3965. },
  3966. d = {
  3967. id: "",
  3968. type: "",
  3969. mediaType: "",
  3970. audioOutputLevel: "0",
  3971. bytesReceived: "0",
  3972. packetsLost: "0",
  3973. packetsReceived: "0",
  3974. googAccelerateRate: "0",
  3975. googCurrentDelayMs: "0",
  3976. googDecodingCNG: "0",
  3977. googDecodingCTN: "0",
  3978. googDecodingCTSG: "0",
  3979. googDecodingNormal: "0",
  3980. googDecodingPLC: "0",
  3981. googDecodingPLCCNG: "0",
  3982. googExpandRate: "0",
  3983. googJitterBufferMs: "0",
  3984. googJitterReceived: "0",
  3985. googPreemptiveExpandRate: "0",
  3986. googPreferredJitterBufferMs: "0",
  3987. googSecondaryDecodedRate: "0",
  3988. googSpeechExpandRate: "0"
  3989. },
  3990. u = {
  3991. id: "",
  3992. type: "",
  3993. mediaType: "",
  3994. googTargetDelayMs: "0",
  3995. packetsLost: "0",
  3996. googDecodeMs: "0",
  3997. googMaxDecodeMs: "0",
  3998. googRenderDelayMs: "0",
  3999. googFrameWidthReceived: "0",
  4000. googFrameHeightReceived: "0",
  4001. googFrameRateReceived: "0",
  4002. googFrameRateDecoded: "0",
  4003. googFrameRateOutput: "0",
  4004. googFramesDecoded: "0",
  4005. googFrameReceived: "0",
  4006. googJitterBufferMs: "0",
  4007. googCurrentDelayMs: "0",
  4008. googMinPlayoutDelayMs: "0",
  4009. googNacksSent: "0",
  4010. googPlisSent: "0",
  4011. googFirsSent: "0",
  4012. bytesReceived: "0",
  4013. packetsReceived: "0"
  4014. },
  4015. l = {
  4016. id: "bweforvideo",
  4017. type: "VideoBwe",
  4018. googAvailableSendBandwidth: "0",
  4019. googAvailableReceiveBandwidth: "0",
  4020. googActualEncBitrate: "0",
  4021. googRetransmitBitrate: "0",
  4022. googTargetEncBitrate: "0",
  4023. googBucketDelay: "0",
  4024. googTransmitBitrate: "0"
  4025. },
  4026. f = 0,
  4027. p = 0,
  4028. m = 0;
  4029. return t.getVideoRelatedStats = function(n) {
  4030. t.peerConnection.getStats().then(function(i) {
  4031. var a = {
  4032. peerId: t.uid,
  4033. mediaType: "video",
  4034. isVideoMute: t.isVideoMute
  4035. };
  4036. i.forEach(function(i) {
  4037. if (t.isSubscriber) {
  4038. if ("track" === i.type && (~i.id.indexOf("video") || ~i.trackIdentifier.indexOf("v"))) {
  4039. if (!t.lastReport) return void(t.lastReport = i);
  4040. a.frameRateReceived = i.framesReceived - t.lastReport.framesReceived + "", a.frameRateDecoded = i.framesDecoded - t.lastReport.framesDecoded + "", t.lastReport = i
  4041. }
  4042. "inbound-rtp" === i.type && ~i.id.indexOf("Video") && (a.bytesReceived = i.bytesReceived + "", a.packetsReceived = i.packetsReceived + "", a.packetsLost = i.packetsLost + "")
  4043. } else if ("outbound-rtp" === i.type && ~i.id.indexOf("Video")) {
  4044. if (!t.lastReport) return void(t.lastReport = i);
  4045. n && n({
  4046. mediaType: "video",
  4047. isVideoMute: t.isVideoMute,
  4048. frameRateInput: e.maxFrameRate + "",
  4049. frameRateSent: i.framesEncoded - t.lastReport.framesEncoded + ""
  4050. }), t.lastReport = i
  4051. }
  4052. }), n && n(a)
  4053. })
  4054. }, t.getAudioRelatedStats = function(e) {
  4055. t.peerConnection.getStats().then(function(n) {
  4056. n.forEach(function(n) {
  4057. t.isSubscriber && "inbound-rtp" === n.type && ~n.id.indexOf("Audio") && e && e({
  4058. peerId: t.uid,
  4059. mediaType: "audio",
  4060. isAudioMute: t.isAudioMute,
  4061. frameDropped: n.packetsLost + "",
  4062. frameReceived: n.packetsReceived + "",
  4063. googJitterReceived: n.jitter + "",
  4064. bytesReceived: n.bytesReceived + "",
  4065. packetsReceived: n.packetsReceived + "",
  4066. packetsLost: n.packetsLost + ""
  4067. })
  4068. })
  4069. })
  4070. }, t.getStatsRate = function(e) {
  4071. t.getStats(function(t) {
  4072. t.forEach(function(e) {
  4073. "outbound-rtp" === e.type && "video" === e.mediaType && e.googFramesEncoded && (e.googFrameRateSent = ((e.googFramesEncoded - f) / 3).toString(), f = 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 - p) / 3).toString(), p = e.googFramesDecoded))
  4074. }), e(t)
  4075. })
  4076. }, t.getStats = function(e, n) {
  4077. 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) {
  4078. t.filterStatsCache = n, t.originStatsCache = i, t.lastTimeGetStats = Date.now(), e && e(n, i)
  4079. })
  4080. }, t._getStats = function(e) {
  4081. var n = [];
  4082. t.peerConnection.getStats().then(function(i) {
  4083. i.forEach(function(e) {
  4084. 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 + "")
  4085. });
  4086. var a = [l, s, c, d, u];
  4087. a.push({
  4088. id: "time",
  4089. startTime: t.connectedTime,
  4090. timestamp: new Date
  4091. }), e(a, n)
  4092. }).
  4093. catch (function(e) {
  4094. console.error(e)
  4095. })
  4096. }, t.addTrack = function(e, n) {
  4097. t.peerConnection.addTrack(e, n)
  4098. }, t.removeTrack = function(e, n) {
  4099. var i = t.peerConnection.getSenders().find(function(t) {
  4100. return t.track == e
  4101. });
  4102. i.replaceTrack(null), t.peerConnection.removeTrack(i)
  4103. }, t.addStream = function(e) {
  4104. window.navigator.userAgent.indexOf("Safari") > -1 && -1 === navigator.userAgent.indexOf("Chrome") ? e.getTracks().forEach(function(n) {
  4105. return t.peerConnection.addTrack(n, e)
  4106. }) : t.peerConnection.addStream(e), t.markActionNeeded()
  4107. }, t.removeStream = function() {
  4108. t.markActionNeeded()
  4109. }, t.close = function() {
  4110. t.state = "closed", t.peerConnection.close()
  4111. }, t.markActionNeeded = function() {
  4112. t.actionNeeded = !0, t.doLater(function() {
  4113. t.onstablestate()
  4114. })
  4115. }, t.doLater = function(e) {
  4116. window.setTimeout(e, 1)
  4117. }, t.onstablestate = function() {
  4118. var n;
  4119. if (t.actionNeeded) {
  4120. if ("new" === t.state || "established" === t.state) e.isSubscriber && (t.peerConnection.addTransceiver("audio", {
  4121. direction: "recvonly"
  4122. }), t.peerConnection.addTransceiver("video", {
  4123. direction: "recvonly"
  4124. })), t.peerConnection.createOffer(t.mediaConstraints).then(function(n) {
  4125. 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();
  4126. o.
  4127. default.debug("[" + t.clientId + "]Not sending a new offer")
  4128. }).
  4129. catch (function(e) {
  4130. o.
  4131. default.debug("[" + t.clientId + "]peer connection create offer failed ", e)
  4132. });
  4133. else if ("preparing-offer" === t.state) {
  4134. if (t.moreIceComing) return;
  4135. t.prevOffer = t.peerConnection.localDescription.sdp, t.offerCandidates = t.prevOffer.match(/a=candidate.+\r\n/g) || [], t.offerCandidates.length || (o.
  4136. default.warning("[".concat(t.clientId, "]No Ice Candidate generated")), Object(r.getParameter)("SHIM_CANDIDATE") ? (o.
  4137. 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"):
  4138. o.
  4139. 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"
  4140. } else if ("offer-received" === t.state) t.peerConnection.createAnswer(function(e) {
  4141. if (t.peerConnection.setLocalDescription(e), t.state = "offer-received-preparing-answer", t.iceStarted) t.markActionNeeded();
  4142. else {
  4143. var n = new Date;
  4144. o.
  4145. default.debug("[" + t.clientId + "]" + n.getTime() + ": Starting ICE in responder"), t.iceStarted = !0
  4146. }
  4147. }, function(e) {
  4148. o.
  4149. default.debug("[" + t.clientId + "]peer connection create answer failed ", e)
  4150. }, t.mediaConstraints);
  4151. else if ("offer-received-preparing-answer" === t.state) {
  4152. if (t.moreIceComing) return;
  4153. n = t.peerConnection.localDescription.sdp, t.sendMessage("ANSWER", n), t.state = "established"
  4154. } else t.debug("Dazed and confused in state " + t.state + ", stopping here");
  4155. t.actionNeeded = !1
  4156. }
  4157. }, t.sendMessage = function(e, n) {
  4158. var i = {};
  4159. 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))
  4160. }, t._getSender = function(e) {
  4161. if (t.peerConnection && t.peerConnection.getSenders) {
  4162. var n = t.peerConnection.getSenders().find(function(t) {
  4163. return t.track.kind == e
  4164. });
  4165. if (n) return n
  4166. }
  4167. return null
  4168. }, t.hasSender = function(e) {
  4169. return !!t._getSender(e)
  4170. }, t.replaceTrack = function(e, n, i) {
  4171. var a = t._getSender(e.kind);
  4172. if (!a) return i("NO_SENDER_FOUND");
  4173. try {
  4174. a.replaceTrack(e)
  4175. } catch (e) {
  4176. return i && i(e)
  4177. }
  4178. setTimeout(function() {
  4179. return n && n()
  4180. }, 50)
  4181. }, t.error = function(e) {
  4182. throw "Error in RoapOnJsep: " + e
  4183. }, 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) {
  4184. console.log("!!! ontrack, ", e.track.kind, e.track), t.onaddstream && t.onaddstream(e, "ontrack")
  4185. }, t.peerConnection.onremovestream = function(e) {
  4186. t.onremovestream && t.onremovestream(e)
  4187. }, t.peerConnection.oniceconnectionstatechange = function(e) {
  4188. "connected" === e.currentTarget.iceConnectionState && (t.connectedTime = new Date), t.oniceconnectionstatechange && t.oniceconnectionstatechange(e.currentTarget.iceConnectionState)
  4189. }, t.renegotiate = function() {
  4190. void 0 !== t.prevOffer && t.peerConnection.createOffer().then(function(e) {
  4191. 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)
  4192. }).then(function() {
  4193. t.onnegotiationneeded && t.onnegotiationneeded(t.peerConnection.localDescription.sdp)
  4194. }).
  4195. catch (function(e) {
  4196. console.log("createOffer error: ", e)
  4197. })
  4198. }, t.peerConnection.onnegotiationneeded = t.renegotiate, t.onaddstream = null, t.onremovestream = null, t.state = "new", t.markActionNeeded(), t
  4199. },
  4200. A = function(e) {
  4201. var t = {},
  4202. n = (mozRTCPeerConnection, mozRTCSessionDescription),
  4203. i = !1;
  4204. 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 = {
  4205. iceServers: []
  4206. }, e.iceServers instanceof Array ? e.iceServers.map(function(e) {
  4207. 0 === e.url.indexOf("stun:") && t.pc_config.iceServers.push({
  4208. url: e.url
  4209. })
  4210. }) : (e.stunServerUrl && (e.stunServerUrl instanceof Array ? e.stunServerUrl.map(function(e) {
  4211. "string" == typeof e && "" !== e && t.pc_config.iceServers.push({
  4212. url: e
  4213. })
  4214. }) : "string" == typeof e.stunServerUrl && "" !== e.stunServerUrl && t.pc_config.iceServers.push({
  4215. url: e.stunServerUrl
  4216. })), e.turnServer && "string" == typeof e.turnServer.url && "" !== e.turnServer.url && (e.turnServer.udpport && t.pc_config.iceServers.push({
  4217. username: e.turnServer.username,
  4218. credential: e.turnServer.credential,
  4219. credentialType: "password",
  4220. urls: "turn:" + e.turnServer.url + ":" + e.turnServer.udpport + "?transport=udp"
  4221. }), "string" == typeof e.turnServer.tcpport && "" !== e.turnServer.tcpport && t.pc_config.iceServers.push({
  4222. username: e.turnServer.username,
  4223. credential: e.turnServer.credential,
  4224. credentialType: "password",
  4225. urls: "turn:" + e.turnServer.url + ":" + e.turnServer.tcpport + "?transport=tcp"
  4226. }), !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 = {
  4227. offerToReceiveAudio: e.audio,
  4228. offerToReceiveVideo: e.video,
  4229. mozDontOfferDataChannel: !0
  4230. }, t.roapSessionId = 103, t.peerConnection = new E.RTCPeerConnection(t.pc_config), o.
  4231. default.debug("[" + t.clientId + ']safari Created RTCPeerConnnection with config "' + JSON.stringify(t.pc_config) + '".'), t.iceCandidateTimer = setTimeout(function() {
  4232. t.iceCandidateTimer = null, o.
  4233. default.debug("[".concat(t.clientId, "]Candidates collected: ").concat(t.iceCandidateCount)), t.moreIceComing && (t.moreIceComing = !1, t.markActionNeeded())
  4234. }, Object(r.getParameter)("CANDIDATE_TIMEOUT")), t.peerConnection.onicecandidate = function(e) {
  4235. var n, i, a, r;
  4236. 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.
  4237. 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
  4238. }, t.checkMLineReverseInSDP = function(e) {
  4239. return !(!~e.indexOf("m=audio") || !~e.indexOf("m=video")) && e.indexOf("m=audio") > e.indexOf("m=video")
  4240. }, t.reverseMLineInSDP = function(e) {
  4241. var t = e.split("m=audio"),
  4242. n = t[1].split("m=video"),
  4243. i = "m=video" + n[1],
  4244. a = "m=audio" + n[0];
  4245. return e = t[0] + i + a
  4246. }, t.processSignalingMessage = function(e) {
  4247. var i, a = JSON.parse(e);
  4248. t.incomingMessage = a, "new" === t.state ? "OFFER" === a.messageType ? (a.sdp = l(a.sdp), i = {
  4249. sdp: a.sdp,
  4250. type: "offer"
  4251. }, t.peerConnection.setRemoteDescription(new n(i), function() {
  4252. o.
  4253. default.debug("[" + t.clientId + "]setRemoteDescription succeeded")
  4254. }, function(e) {
  4255. o.
  4256. default.info("[" + t.clientId + "]setRemoteDescription failed: " + e.name)
  4257. }), 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 = {
  4258. sdp: a.sdp,
  4259. type: "answer"
  4260. }, t.peerConnection.setRemoteDescription(new n(i), function() {
  4261. o.
  4262. default.debug("[" + t.clientId + "]setRemoteDescription succeeded")
  4263. }, function(e) {
  4264. o.
  4265. default.info("[" + t.clientId + "]setRemoteDescription failed: " + e)
  4266. }), t.state = "established") : "pr-answer" === a.messageType ? (i = {
  4267. sdp: a.sdp,
  4268. type: "pr-answer"
  4269. }, t.peerConnection.setRemoteDescription(new n(i), function() {
  4270. o.
  4271. default.debug("[" + t.clientId + "]setRemoteDescription succeeded")
  4272. }, function(e) {
  4273. o.
  4274. default.info("[" + t.clientId + "]setRemoteDescription failed: " + e.name)
  4275. })) : "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 = {
  4276. sdp: a.sdp,
  4277. type: "offer"
  4278. }, t.peerConnection.setRemoteDescription(new n(i), function() {
  4279. o.
  4280. default.debug("[" + t.clientId + "]setRemoteDescription succeeded")
  4281. }, function(e) {
  4282. o.
  4283. default.info("[" + t.clientId + "]setRemoteDescription failed: " + e.name)
  4284. }), t.state = "offer-received", t.markActionNeeded()) : t.error("Illegal message for this state: " + a.messageType + " in state " + t.state))
  4285. };
  4286. var a = {
  4287. id: "",
  4288. type: "",
  4289. mediaType: "opus",
  4290. googCodecName: "opus",
  4291. aecDivergentFilterFraction: "0",
  4292. audioInputLevel: "0",
  4293. bytesSent: "0",
  4294. packetsSent: "0",
  4295. googEchoCancellationReturnLoss: "0",
  4296. googEchoCancellationReturnLossEnhancement: "0"
  4297. },
  4298. s = {
  4299. id: "",
  4300. type: "",
  4301. mediaType: "",
  4302. googCodecName: "h264" === e.codec ? "H264" : "VP8",
  4303. bytesSent: "0",
  4304. packetsLost: "0",
  4305. packetsSent: "0",
  4306. googAdaptationChanges: "0",
  4307. googAvgEncodeMs: "0",
  4308. googEncodeUsagePercent: "0",
  4309. googFirsReceived: "0",
  4310. googFrameHeightSent: "0",
  4311. googFrameHeightInput: "0",
  4312. googFrameRateInput: "0",
  4313. googFrameRateSent: "0",
  4314. googFrameWidthSent: "0",
  4315. googFrameWidthInput: "0",
  4316. googNacksReceived: "0",
  4317. googPlisReceived: "0",
  4318. googRtt: "0"
  4319. },
  4320. c = {
  4321. id: "",
  4322. type: "",
  4323. mediaType: "",
  4324. audioOutputLevel: "0",
  4325. bytesReceived: "0",
  4326. packetsLost: "0",
  4327. packetsReceived: "0",
  4328. googAccelerateRate: "0",
  4329. googCurrentDelayMs: "0",
  4330. googDecodingCNG: "0",
  4331. googDecodingCTN: "0",
  4332. googDecodingCTSG: "0",
  4333. googDecodingNormal: "0",
  4334. googDecodingPLC: "0",
  4335. googDecodingPLCCNG: "0",
  4336. googExpandRate: "0",
  4337. googJitterBufferMs: "0",
  4338. googJitterReceived: "0",
  4339. googPreemptiveExpandRate: "0",
  4340. googPreferredJitterBufferMs: "0",
  4341. googSecondaryDecodedRate: "0",
  4342. googSpeechExpandRate: "0"
  4343. },
  4344. d = {
  4345. id: "",
  4346. type: "",
  4347. mediaType: "",
  4348. googTargetDelayMs: "0",
  4349. packetsLost: "0",
  4350. googDecodeMs: "0",
  4351. googMaxDecodeMs: "0",
  4352. googRenderDelayMs: "0",
  4353. googFrameWidthReceived: "0",
  4354. googFrameHeightReceived: "0",
  4355. googFrameRateReceived: "0",
  4356. googFrameRateDecoded: "0",
  4357. googFrameRateOutput: "0",
  4358. googJitterBufferMs: "0",
  4359. googCurrentDelayMs: "0",
  4360. googMinPlayoutDelayMs: "0",
  4361. googNacksSent: "0",
  4362. googPlisSent: "0",
  4363. googFirsSent: "0",
  4364. bytesReceived: "0",
  4365. packetsReceived: "0",
  4366. googFramesDecoded: "0"
  4367. },
  4368. u = 0;
  4369. t.getVideoRelatedStats = function(e) {
  4370. t.peerConnection.getStats().then(function(n) {
  4371. var i = !0,
  4372. a = !1,
  4373. r = void 0;
  4374. try {
  4375. for (var o, s = n.values()[Symbol.iterator](); !(i = (o = s.next()).done); i = !0) {
  4376. var c = o.value;
  4377. if (t.isSubscriber) {
  4378. if (("inbound-rtp" === c.type || "inboundrtp" === c.type) && "video" === c.mediaType) {
  4379. if (!t.lastReport) return void(t.lastReport = c);
  4380. e && e({
  4381. browser: "firefox",
  4382. mediaType: "video",
  4383. peerId: t.uid,
  4384. isVideoMute: t.isVideoMute,
  4385. frameRateReceived: c.framerateMean + "",
  4386. frameRateDecoded: c.framesDecoded - t.lastReport.framesDecoded + "",
  4387. bytesReceived: c.bytesReceived + "",
  4388. packetsReceived: c.packetsReceived + "",
  4389. packetsLost: c.packetsLost + ""
  4390. }), t.lastReport = c
  4391. }
  4392. } else if (("outbound-rtp" === c.type || "outboundrtp" === c.type) && "video" === c.mediaType) {
  4393. if (!t.lastReport) return void(t.lastReport = c);
  4394. e && e({
  4395. mediaType: "video",
  4396. isVideoMute: t.isVideoMute,
  4397. frameRateInput: c.framerateMean + "",
  4398. frameRateSent: c.framesEncoded - t.lastReport.framesEncoded + ""
  4399. }), t.lastReport = c
  4400. }
  4401. }
  4402. } catch (e) {
  4403. a = !0, r = e
  4404. } finally {
  4405. try {
  4406. i || null == s.
  4407. return ||s.
  4408. return ()
  4409. } finally {
  4410. if (a) throw r
  4411. }
  4412. }
  4413. })
  4414. }, t.getAudioRelatedStats = function(e) {
  4415. t.peerConnection.getStats().then(function(n) {
  4416. var i = !0,
  4417. a = !1,
  4418. r = void 0;
  4419. try {
  4420. for (var o, s = n.values()[Symbol.iterator](); !(i = (o = s.next()).done); i = !0) {
  4421. var c = o.value;
  4422. t.isSubscriber && ("inbound-rtp" !== c.type && "inboundrtp" !== c.type || "audio" !== c.mediaType || e && e({
  4423. browser: "firefox",
  4424. mediaType: "audio",
  4425. peerId: t.uid,
  4426. isAudioMute: t.isAudioMute,
  4427. frameDropped: c.packetsLost + "",
  4428. frameReceived: c.packetsReceived + "",
  4429. googJitterReceived: c.jitter + "",
  4430. bytesReceived: c.bytesReceived + "",
  4431. packetsReceived: c.packetsReceived + "",
  4432. packetsLost: c.packetsLost + ""
  4433. }))
  4434. }
  4435. } catch (e) {
  4436. a = !0, r = e
  4437. } finally {
  4438. try {
  4439. i || null == s.
  4440. return ||s.
  4441. return ()
  4442. } finally {
  4443. if (a) throw r
  4444. }
  4445. }
  4446. })
  4447. }, t.getStatsRate = function(e) {
  4448. t.getStats(function(t) {
  4449. t.forEach(function(e) {
  4450. "inbound-rtp" !== e.type && "inboundrtp" !== e.type || "video" !== e.mediaType || e.googFrameRateDecoded && (e.googFrameRateDecoded = ((e.googFramesDecoded - u) / 3).toString(), u = e.googFramesDecoded)
  4451. }), e(t)
  4452. })
  4453. }, t.getStats = function(e, n) {
  4454. 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) {
  4455. t.filterStatsCache = n, t.originStatsCache = i, t.lastTimeGetStats = Date.now(), e && e(n, i)
  4456. })
  4457. }, t._getStats = function(e) {
  4458. t.peerConnection.getStats().then(function(n) {
  4459. var i = [],
  4460. r = !0,
  4461. o = !1,
  4462. u = void 0;
  4463. try {
  4464. for (var l, f = n.values()[Symbol.iterator](); !(r = (l = f.next()).done); r = !0) {
  4465. var p = l.value;
  4466. i.push(p), "outbound-rtp" !== p.type && "outboundrtp" !== p.type || "video" !== p.mediaType || -1 !== p.id.indexOf("rtcp") || (s.id = p.id, s.type = p.type, s.mediaType = p.mediaType, s.bytesSent = p.bytesSent ? p.bytesSent + "" : "0", s.packetsSent = p.packetsSent ? p.packetsSent + "" : "0", s.googPlisReceived = p.pliCount ? p.pliCount + "" : "0", s.googNacksReceived = p.nackCount ? p.nackCount + "" : "0", s.googFirsReceived = p.firCount ? p.firCount + "" : "0", s.googFrameRateSent = p.framerateMean ? p.framerateMean + "" : "0"), "outbound-rtp" !== p.type && "outboundrtp" !== p.type || "audio" !== p.mediaType || -1 !== p.id.indexOf("rtcp") || (a.id = p.id, a.type = p.type, a.mediaType = p.mediaType, a.bytesSent = p.bytesSent ? p.bytesSent + "" : "0", a.packetsSent = p.packetsSent ? p.packetsSent + "" : "0"), "inbound-rtp" !== p.type && "inboundrtp" !== p.type || "audio" !== p.mediaType || p.isRemote || -1 !== p.id.indexOf("rtcp") || (c.id = p.id, c.type = p.type, c.mediaType = p.mediaType, c.bytesReceived = p.bytesReceived ? p.bytesReceived + "" : "0", c.packetsLost = p.packetsLost ? p.packetsLost + "" : "0", c.packetsReceived = p.packetsReceived ? p.packetsReceived + "" : "0", c.googJitterReceived = p.jitter ? p.jitter + "" : "0"), "inbound-rtp" !== p.type && "inboundrtp" !== p.type || "video" !== p.mediaType || p.isRemote || -1 !== p.id.indexOf("rtcp") || (d.id = p.id, d.type = p.type, d.mediaType = p.mediaType, d.bytesReceived = p.bytesReceived ? p.bytesReceived + "" : "0", d.googFrameRateReceived = p.framerateMean ? p.framerateMean + "" : "0", d.googFramesDecoded = p.framesDecoded ? p.framesDecoded + "" : "0", d.packetsLost = p.packetsLost ? p.packetsLost + "" : "0", d.packetsReceived = p.packetsReceived ? p.packetsReceived + "" : "0", d.googJitterBufferMs = p.jitter ? p.jitter + "" : "0", d.googNacksSent = p.nackCount ? p.nackCount + "" : "0", d.googPlisSent = p.pliCount ? p.pliCount + "" : "0", d.googFirsSent = p.firCount ? p.firCount + "" : "0"), -1 !== p.id.indexOf("outbound_rtcp_video") && (s.packetsLost = p.packetsLost ? p.packetsLost + "" : "0")
  4467. }
  4468. } catch (e) {
  4469. o = !0, u = e
  4470. } finally {
  4471. try {
  4472. r || null == f.
  4473. return ||f.
  4474. return ()
  4475. } finally {
  4476. if (o) throw u
  4477. }
  4478. }
  4479. var m = [s, a, c, d];
  4480. m.push({
  4481. id: "time",
  4482. startTime: t.connectedTime,
  4483. timestamp: new Date
  4484. }), e(m, i)
  4485. }, function(e) {
  4486. o.
  4487. default.error("[" + t.clientId + "]" + e)
  4488. })
  4489. }, t.addStream = function(e) {
  4490. i = !0, t.peerConnection.addStream(e), t.markActionNeeded()
  4491. }, t.removeStream = function() {
  4492. t.markActionNeeded()
  4493. }, t.close = function() {
  4494. t.state = "closed", t.peerConnection.close()
  4495. }, t.markActionNeeded = function() {
  4496. t.actionNeeded = !0, t.doLater(function() {
  4497. t.onstablestate()
  4498. })
  4499. }, t.doLater = function(e) {
  4500. window.setTimeout(e, 1)
  4501. }, t.onstablestate = function() {
  4502. if (t.actionNeeded) {
  4503. if ("new" === t.state || "established" === t.state) i && (t.mediaConstraints = void 0), t.peerConnection.createOffer(function(e) {
  4504. 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();
  4505. o.
  4506. default.debug("[" + t.clientId + "]Not sending a new offer")
  4507. }, function(e) {
  4508. o.
  4509. default.debug("[" + t.clientId + "]Ups! create offer failed ", e)
  4510. }, t.mediaConstraints);
  4511. else if ("preparing-offer" === t.state) {
  4512. if (t.moreIceComing) return;
  4513. t.prevOffer = t.peerConnection.localDescription.sdp, t.offerCandidates = t.prevOffer.match(/a=candidate.+\r\n/g) || [], t.offerCandidates.length || (o.
  4514. default.warning("[".concat(t.clientId, "]No Ice Candidate generated")), Object(r.getParameter)("SHIM_CANDIDATE") ? (o.
  4515. 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"):
  4516. o.
  4517. 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"
  4518. } else if ("offer-received" === t.state) t.peerConnection.createAnswer(function(e) {
  4519. if (t.peerConnection.setLocalDescription(e), t.state = "offer-received-preparing-answer", t.iceStarted) t.markActionNeeded();
  4520. else {
  4521. var n = new Date;
  4522. o.
  4523. default.debug("[" + t.clientId + "]" + n.getTime() + ": Starting ICE in responder"), t.iceStarted = !0
  4524. }
  4525. }, function() {
  4526. o.
  4527. default.debug("[" + t.clientId + "]Ups! Something went wrong")
  4528. });
  4529. else if ("offer-received-preparing-answer" === t.state) {
  4530. if (t.moreIceComing) return;
  4531. var e = t.peerConnection.localDescription.sdp;
  4532. t.sendMessage("ANSWER", e), t.state = "established"
  4533. } else t.debug("Dazed and confused in state " + t.state + ", stopping here");
  4534. t.actionNeeded = !1
  4535. }
  4536. }, t.sendMessage = function(e, n) {
  4537. var i = {};
  4538. 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))
  4539. }, t._getSender = function(e) {
  4540. if (t.peerConnection && t.peerConnection.getSenders) {
  4541. var n = t.peerConnection.getSenders().find(function(t) {
  4542. return t.track.kind == e
  4543. });
  4544. if (n) return n
  4545. }
  4546. return null
  4547. }, t.hasSender = function(e) {
  4548. return !!t._getSender(e)
  4549. }, t.replaceTrack = function(e, n, i) {
  4550. var a = t._getSender(e.kind);
  4551. if (!a) return i("NO_SENDER_FOUND");
  4552. try {
  4553. a.replaceTrack(e)
  4554. } catch (e) {
  4555. return i && i(e)
  4556. }
  4557. setTimeout(function() {
  4558. return n && n()
  4559. }, 50)
  4560. }, t.error = function(e) {
  4561. throw "Error in RoapOnJsep: " + e
  4562. }, 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) {
  4563. t.onaddstream && t.onaddstream(e, "ontrack")
  4564. }, t.peerConnection.onremovestream = function(e) {
  4565. t.onremovestream && t.onremovestream(e)
  4566. }, t.peerConnection.oniceconnectionstatechange = function(e) {
  4567. "connected" === e.currentTarget.iceConnectionState && (t.connectedTime = new Date), t.oniceconnectionstatechange && t.oniceconnectionstatechange(e.currentTarget.iceConnectionState)
  4568. };
  4569. var l = function(t) {
  4570. var n;
  4571. if (e.video && e.maxVideoBW && (null == (n = t.match(/m=video.*\r\n/)) && (n = t.match(/m=video.*\n/)), n && n.length > 0)) {
  4572. var i = n[0] + "b=TIAS:" + 1e3 * e.maxVideoBW + "\r\n";
  4573. t = t.replace(n[0], i)
  4574. }
  4575. 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
  4576. };
  4577. return t.onaddstream = null, t.onremovestream = null, t.state = "new", t.markActionNeeded(), t
  4578. },
  4579. O = a(17),
  4580. C = a.n(O),
  4581. N = null,
  4582. w = function() {
  4583. try {
  4584. N = window.require("electron")
  4585. } catch (e) {}
  4586. return N
  4587. },
  4588. k = function(e) {
  4589. var t = s.b.reportApiInvoke(null, {
  4590. callback: e,
  4591. name: "getScreenSources",
  4592. options: arguments,
  4593. tag: "tracer"
  4594. }),
  4595. n = w();
  4596. if (!n) return t && t("electron is null");
  4597. n.desktopCapturer.getSources({
  4598. types: ["window", "screen"]
  4599. }, function(e, n) {
  4600. if (e) return t && t(e);
  4601. t && t(null, n)
  4602. })
  4603. },
  4604. D = function(e, t, n) {
  4605. var i = t.width;
  4606. t = {
  4607. audio: !1,
  4608. video: {
  4609. mandatory: {
  4610. chromeMediaSource: "desktop",
  4611. chromeMediaSourceId: e,
  4612. maxHeight: t.height,
  4613. maxWidth: i,
  4614. maxFrameRate: t.frameRate && t.frameRate.max,
  4615. minFrameRate: t.frameRate && t.frameRate.min
  4616. }
  4617. }
  4618. };
  4619. navigator.webkitGetUserMedia(t, function(e) {
  4620. n && n(null, e)
  4621. }, function(e) {
  4622. n && n(e)
  4623. })
  4624. },
  4625. L = function() {
  4626. return !!w()
  4627. },
  4628. M = k,
  4629. P = D,
  4630. x = function(e, t) {
  4631. k(function(n, i) {
  4632. if (n) return t && t(n);
  4633. !
  4634. function(e, t) {
  4635. var n = document.createElement("div");
  4636. 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;");
  4637. var i = document.createElement("div");
  4638. i.setAttribute("style", "width: 100%; height: 500px; padding: 15px 25px ; box-sizing: border-box;");
  4639. var a = document.createElement("div");
  4640. 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%;");
  4641. var r = document.createElement("div");
  4642. 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;");
  4643. var o = document.createElement("div");
  4644. o.setAttribute("style", "text-align: right; padding: 16px 0;");
  4645. var s = document.createElement("button");
  4646. s.innerHTML = "cancel", s.setAttribute("style", "width: 85px;"), s.onclick = function() {
  4647. document.body.removeChild(c), t && t("NotAllowedError")
  4648. }, o.appendChild(s), i.appendChild(a), i.appendChild(r), i.appendChild(o);
  4649. var c = document.createElement("div");
  4650. 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) {
  4651. if (e.id) {
  4652. var n = document.createElement("div");
  4653. 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() {
  4654. document.body.removeChild(c), t && t(null, e.id)
  4655. }, r.appendChild(n)
  4656. }
  4657. })
  4658. }(i, function(n, i) {
  4659. if (n) return t && t(n);
  4660. D(i, e, t)
  4661. })
  4662. })
  4663. },
  4664. U = 103,
  4665. V = function(e) {
  4666. var t = {};
  4667. if (t.clientId = e.clientId, e.session_id = U += 1, "undefined" == typeof window || !window.navigator) throw o.
  4668. default.error("[" + t.streamId + "][" + t.clientId + "]Publish/subscribe video/audio streams not supported yet"), new Error("NON_BROWSER_ENV_DETECTED");
  4669. return null !== window.navigator.userAgent.match("Firefox") ? (t.browser = "mozilla", t = A(e)):
  4670. "iOS" === m.getBrowserOS() || m.isSafari() ? (o.
  4671. 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
  4672. },
  4673. j = function(e, t, n) {
  4674. var i = {};
  4675. i.config = e, i.streamId = e.streamId, delete e.streamId, navigator.getMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
  4676. var a = 0,
  4677. r = 1,
  4678. s = !1,
  4679. c = null,
  4680. d = function(e) {
  4681. if (a++, c) if (c === e) o.
  4682. default.debug("Using Video Source/ Audio Source");
  4683. else {
  4684. var n = c.getVideoTracks()[0],
  4685. i = c.getAudioTracks()[0],
  4686. d = e.getVideoTracks()[0],
  4687. u = e.getAudioTracks()[0];
  4688. d && (n && c.removeTrack(n), c.addTrack(d)), u && (i && c.removeTrack(i), c.addTrack(u))
  4689. } else c = e;
  4690. a !== r || s || (s = !0, setTimeout(function() {
  4691. t(c)
  4692. }, 0))
  4693. },
  4694. u = function(e) {
  4695. o.
  4696. default.error("Failed to GetUserMedia", e.name, e.code, e.message, e), a++, s || (s = !0, setTimeout(function() {
  4697. n && n(e)
  4698. }, 0))
  4699. },
  4700. l = function() {
  4701. var t = {
  4702. video: e.video,
  4703. audio: e.audio
  4704. };
  4705. if (o.
  4706. default.debug("GetUserMedia", JSON.stringify(t)), navigator.mediaDevices && navigator.mediaDevices.getUserMedia) navigator.mediaDevices.getUserMedia(t).then(d).
  4707. catch (u);
  4708. else if ("undefined" != typeof navigator && navigator.getMedia) navigator.getMedia(e, d, u);
  4709. else {
  4710. var a = {
  4711. name: "MEDIA_NOT_SUPPORT",
  4712. message: "Video/audio streams not supported yet"
  4713. };
  4714. o.
  4715. default.error("[" + i.streamId + "]" + a.message), n && n(a)
  4716. }
  4717. };
  4718. 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) {
  4719. if (!e.screen && e.screenAudio) return n && n({
  4720. code: "Set screen to true before sharing the audio"
  4721. });
  4722. if (e.screen) {
  4723. if (L()) return e.screen.sourceId ? P(e.screen.sourceId, e.screen, function(e, t) {
  4724. e ? u(e) : d(t)
  4725. }) : x(e.screen, function(e, t) {
  4726. e ? u(e) : d(t)
  4727. });
  4728. if (m.isFireFox()) {
  4729. o.
  4730. default.debug("[" + i.streamId + "]Screen access requested");
  4731. if (!~ ["screen", "window", "application"].indexOf(e.screen.mediaSource)) return n && n({
  4732. code: "Invalid mediaSource, mediaSource should be one of [screen, window, application]"
  4733. });
  4734. navigator.getMedia({
  4735. video: e.screen
  4736. }, function(t) {
  4737. e.audio && (r++, l()), d(t)
  4738. }, u)
  4739. } else if (m.isChromeKernel() && e.screen.extensionId) {
  4740. if (window.navigator.appVersion.match(/Chrome\/([\w\W]*?)\./)[1] < 34) return void n({
  4741. code: "This browser does not support screen sharing"
  4742. });
  4743. o.
  4744. default.debug("[" + i.streamId + "]Screen access on chrome stable, looking for extension");
  4745. try {
  4746. chrome.runtime.sendMessage(e.screen.extensionId, {
  4747. getStream: !0
  4748. }, function(t) {
  4749. if (void 0 === t) {
  4750. o.
  4751. default.error("[" + i.streamId + "]No response from Chrome Plugin. Plugin not installed properly");
  4752. u({
  4753. name: "PluginNotInstalledProperly",
  4754. message: "No response from Chrome Plugin. Plugin not installed properly."
  4755. })
  4756. } else e.screen.mandatory.chromeMediaSourceId = t.streamId, navigator.getMedia({
  4757. video: e.screen
  4758. }, function(t) {
  4759. e.audio && (r++, l()), d(t)
  4760. }, u)
  4761. })
  4762. } catch (e) {
  4763. o.
  4764. default.debug("[" + i.streamId + "]AgoraRTC screensharing plugin is not accessible");
  4765. return void n({
  4766. code: "no_plugin_present"
  4767. })
  4768. }
  4769. } else {
  4770. if (window.navigator.mediaDevices.getDisplayMedia) {
  4771. var f = {};
  4772. return "number" == typeof e.screen.width && "number" == typeof e.screen.height ? f.video = {
  4773. width: {
  4774. ideal: e.screen.width
  4775. },
  4776. height: {
  4777. ideal: e.screen.height
  4778. }
  4779. } : f.video = {
  4780. width: e.screen.width,
  4781. height: e.screen.height
  4782. }, e.screen.frameRate && e.screen.frameRate.min ? f.video.frameRate = {
  4783. ideal: e.screen.frameRate.max,
  4784. max: e.screen.frameRate.max
  4785. } : f.video.frameRate = e.screen.frameRate, e.screenAudio && (f.audio = e.screenAudio), o.
  4786. default.debug("use getDisplayMedia, constraints:", f), window.navigator.mediaDevices.getDisplayMedia(f).then(function(t) {
  4787. !e.screenAudio && e.audio && (r++, l()), d(t)
  4788. }).
  4789. catch (u)
  4790. }
  4791. o.
  4792. default.error("[" + i.streamId + "]This browser does not support screenSharing"), n({
  4793. code: "This browser does not support screen sharing"
  4794. })
  4795. }
  4796. } else l()
  4797. } else d(c)
  4798. },
  4799. F = a(11),
  4800. B = function(e, t, n) {
  4801. 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
  4802. },
  4803. H = new function() {
  4804. var e = c();
  4805. return e.devicesHistory = {}, e.states = {
  4806. UNINIT: "UNINIT",
  4807. INITING: "INITING",
  4808. INITED: "INITED"
  4809. }, e.state = e.states.UNINIT, e.deviceStates = {
  4810. ACTIVE: "ACTIVE",
  4811. INACTIVE: "INACTIVE"
  4812. }, e.deviceReloadTimer = null, e._init = function(t, n) {
  4813. e.state = e.states.INITING, e.devicesHistory = {}, e._reloadDevicesInfo(function() {
  4814. e.state = e.states.INITED, e.dispatchEvent({
  4815. type: "inited"
  4816. }), t && t()
  4817. }, function(t) {
  4818. o.
  4819. default.warning("Device Detection functionality cannot start properly."), e.state = e.states.UNINIT, n && n(t)
  4820. })
  4821. }, e._enumerateDevices = function(e, t) {
  4822. if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) return o.
  4823. default.warning("enumerateDevices() not supported."), t && t("enumerateDevices() not supported");
  4824. navigator.mediaDevices.enumerateDevices().then(function(t) {
  4825. e && setTimeout(function() {
  4826. e(t)
  4827. }, 0)
  4828. }).
  4829. catch (function(e) {
  4830. t && t(e)
  4831. })
  4832. }, e._reloadDevicesInfo = function(t, n) {
  4833. var i = [];
  4834. e._enumerateDevices(function(n) {
  4835. var a = Date.now();
  4836. for (var r in n.forEach(function(t) {
  4837. var n = e.devicesHistory[t.deviceId];
  4838. if ((n ? n.state : e.deviceStates.INACTIVE) != e.deviceStates.ACTIVE) {
  4839. var r = n || {
  4840. initAt: a
  4841. };
  4842. r.device = t, r.state = e.deviceStates.ACTIVE, i.push(r), e.devicesHistory[t.deviceId] = r
  4843. }
  4844. e.devicesHistory[t.deviceId].lastReloadAt = a
  4845. }), e.devicesHistory) {
  4846. var s = e.devicesHistory[r];
  4847. s && s.state == e.deviceStates.ACTIVE && s.lastReloadAt !== a && (s.state = e.deviceStates.INACTIVE, i.push(s)), s.lastReloadAt = a
  4848. }
  4849. e.state == e.states.INITED && i.forEach(function(t) {
  4850. var n = h()({}, t);
  4851. switch (t.device.kind) {
  4852. case "audioinput":
  4853. n.type = "recordingDeviceChanged";
  4854. break;
  4855. case "audiooutput":
  4856. n.type = "playoutDeviceChanged";
  4857. break;
  4858. case "videoinput":
  4859. n.type = "cameraChanged";
  4860. break;
  4861. default:
  4862. o.
  4863. default.warning("Unknown device change", n), n.type = "unknownDeviceChanged"
  4864. }
  4865. e.dispatchEvent(n)
  4866. }), t && t()
  4867. }, n)
  4868. }, e.getDeviceById = function(t, n, i) {
  4869. e.getDevices(function(e) {
  4870. for (var a = 0; a < e.length; a++) {
  4871. var r = e[a];
  4872. if (r && r.deviceId === t) return n && n(r)
  4873. }
  4874. return i && i()
  4875. })
  4876. }, e.searchDeviceNameById = function(t) {
  4877. var n = e.devicesHistory[t];
  4878. return n ? n.device.label || n.device.deviceId : null
  4879. }, e.getDevices = function(t, n) {
  4880. e._enumerateDevices(t, function(e) {
  4881. n && n(e.name + ": " + e.message)
  4882. })
  4883. }, e.getVideoCameraIdByLabel = function(t, n, i) {
  4884. e.getCameras(function(e) {
  4885. var a = !0,
  4886. r = !1,
  4887. o = void 0;
  4888. try {
  4889. for (var s, c = e[Symbol.iterator](); !(a = (s = c.next()).done); a = !0) {
  4890. var d = s.value;
  4891. if (d.label === t) return n && n(d.deviceId)
  4892. }
  4893. } catch (e) {
  4894. r = !0, o = e
  4895. } finally {
  4896. try {
  4897. a || null == c.
  4898. return ||c.
  4899. return ()
  4900. } finally {
  4901. if (r) throw o
  4902. }
  4903. }
  4904. return i && i(I.
  4905. default.NOT_FIND_DEVICE_BY_LABEL)
  4906. }, i)
  4907. }, e.getRecordingDevices = function(t, n) {
  4908. return e._enumerateDevices(function(e) {
  4909. var n = e.filter(function(e) {
  4910. return "audioinput" == e.kind
  4911. });
  4912. t && t(n)
  4913. }, function(e) {
  4914. n && n(e)
  4915. })
  4916. }, e.getPlayoutDevices = function(t, n) {
  4917. return e._enumerateDevices(function(e) {
  4918. var n = e.filter(function(e) {
  4919. return "audiooutput" == e.kind
  4920. });
  4921. t && t(n)
  4922. }, function(e) {
  4923. n && n(e)
  4924. })
  4925. }, e.getCameras = function(t, n) {
  4926. return e._enumerateDevices(function(e) {
  4927. var n = e.filter(function(e) {
  4928. return "videoinput" == e.kind
  4929. });
  4930. t && t(n)
  4931. }, function(e) {
  4932. n && n(e)
  4933. })
  4934. }, e._init(function() {
  4935. navigator.mediaDevices && navigator.mediaDevices.addEventListener && navigator.mediaDevices.addEventListener("devicechange", function() {
  4936. e._reloadDevicesInfo()
  4937. }), e.deviceReloadTimer = setInterval(e._reloadDevicesInfo, 5e3)
  4938. }), e
  4939. },
  4940. W = a(1),
  4941. G = a(15);
  4942. var q = a(7),
  4943. Y = a.n(q),
  4944. J = a(12),
  4945. K = a.n(J),
  4946. z = a(18),
  4947. X = a.n(z),
  4948. Q = a(19),
  4949. $ = a.n(Q),
  4950. Z = 5,
  4951. 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];
  4952. function te(e) {
  4953. 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;
  4954. for (var c = 0, d = 0; d < 256; d++) {
  4955. var u = [o[c = (c + o[d] + t[d % n]) % 256], o[d]];
  4956. o[d] = u[0], o[c] = u[1]
  4957. }
  4958. var l, f = 0;
  4959. c = 0;
  4960. for (var p = 0; p < 0 + a; p++) {
  4961. var m = [o[c = (c + o[f = (f + 1) % 256]) % 256], o[f]];
  4962. o[f] = m[0], o[c] = m[1], l = o[(o[f] + o[c]) % 256], p >= 0 && (r[p - 0] = i[p - 0] ^ l)
  4963. }
  4964. var g = String.fromCharCode.apply(null, r);
  4965. return Function("var winSize = " + Z + "; return `" + g + "`")()
  4966. }
  4967. function ne(e, t) {
  4968. var n = te(t),
  4969. i = $.a.createProgramFromSources(e, [te(ee), n]),
  4970. a = e.getAttribLocation(i, "a_position"),
  4971. r = e.createBuffer();
  4972. 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);
  4973. var o = 2,
  4974. s = e.FLOAT,
  4975. c = !1,
  4976. d = 0,
  4977. u = 0;
  4978. e.vertexAttribPointer(a, o, s, c, d, u);
  4979. var l = e.getAttribLocation(i, "a_texCoord"),
  4980. f = e.createBuffer();
  4981. e.bindBuffer(e.ARRAY_BUFFER, f), 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);
  4982. o = 2, s = e.FLOAT, c = !1, d = 0, u = 0;
  4983. return e.vertexAttribPointer(l, o, s, c, d, u), i
  4984. }
  4985. 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];
  4986. function ae(e, t, n) {
  4987. var i = e.gl;
  4988. this.program = ne(i, ie), this.setUniforms = function() {
  4989. i.getUniformLocation(this.program, "u_image");
  4990. var e = i.getUniformLocation(this.program, "u_flipY");
  4991. i.uniform1f(e, 1)
  4992. }
  4993. }
  4994. 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];
  4995. function oe(e, t, n) {
  4996. var i = e.gl,
  4997. a = 1 / t,
  4998. r = 1 / n,
  4999. o = 5;
  5000. this.program = ne(i, re), this.setUniforms = function() {
  5001. i.getUniformLocation(this.program, "u_image");
  5002. var e = i.getUniformLocation(this.program, "u_flipY"),
  5003. t = i.getUniformLocation(this.program, "u_singleStepOffset"),
  5004. n = i.getUniformLocation(this.program, "u_denoiseLevel");
  5005. i.uniform2f(t, a, r), i.uniform1f(n, o), i.uniform1f(e, 1)
  5006. }, this.setParameters = function(e) {
  5007. void 0 !== e.denoiseLevel && (o = e.denoiseLevel)
  5008. }, this.setSize = function(e, t) {
  5009. a = 1 / e, r = 1 / t
  5010. }
  5011. }
  5012. 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];
  5013. function ce(e, t, n) {
  5014. var i = e.gl,
  5015. a = 1 / t,
  5016. r = 1 / n,
  5017. o = 5;
  5018. this.program = ne(i, se), this.setUniforms = function() {
  5019. i.getUniformLocation(this.program, "u_image");
  5020. var e = i.getUniformLocation(this.program, "u_flipY"),
  5021. t = i.getUniformLocation(this.program, "u_singleStepOffset"),
  5022. n = i.getUniformLocation(this.program, "u_denoiseLevel");
  5023. i.uniform2f(t, a, r), i.uniform1f(n, o), i.uniform1f(e, 1)
  5024. }, this.setParameters = function(e) {
  5025. void 0 !== e.denoiseLevel && (o = e.denoiseLevel)
  5026. }, this.setSize = function(e, t) {
  5027. a = 1 / e, r = 1 / t
  5028. }
  5029. }
  5030. 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];
  5031. function ue(e, t, n) {
  5032. var i = e.gl,
  5033. a = 1 / t,
  5034. r = 1 / n,
  5035. o = 5;
  5036. this.program = ne(i, de), this.setUniforms = function() {
  5037. i.getUniformLocation(this.program, "u_image");
  5038. var e = i.getUniformLocation(this.program, "u_flipY"),
  5039. t = i.getUniformLocation(this.program, "u_singleStepOffset"),
  5040. n = i.getUniformLocation(this.program, "u_denoiseLevel");
  5041. i.uniform2f(t, a, r), i.uniform1f(n, o), i.uniform1f(e, 1)
  5042. }, this.setParameters = function(e) {
  5043. void 0 !== e.denoiseLevel && (o = e.denoiseLevel)
  5044. }, this.setSize = function(e, t) {
  5045. a = 1 / e, r = 1 / t
  5046. }
  5047. }
  5048. 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];
  5049. function fe(e, t, n) {
  5050. var i = e.gl,
  5051. a = 5,
  5052. r = .1,
  5053. o = .5,
  5054. s = 175 / 180 * 3.141593,
  5055. c = 115 / 180 * 3.141593,
  5056. d = 173 / 180 * 3.141593,
  5057. u = 116 / 180 * 3.141593,
  5058. l = 2.04203545,
  5059. f = 0,
  5060. p = 0,
  5061. m = 0,
  5062. g = [],
  5063. 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],
  5064. 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],
  5065. 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];
  5066. this.program = ne(i, le), this.setUniforms = function() {
  5067. var t = i.getUniformLocation(this.program, "u_flipY"),
  5068. n = i.getUniformLocation(this.program, "u_denoiseLevel");
  5069. i.uniform1f(n, a), i.uniform1f(t, 1);
  5070. var v = i.getUniformLocation(this.program, "light");
  5071. i.uniform1f(v, r);
  5072. var S = i.getUniformLocation(this.program, "redness");
  5073. i.uniform1f(S, o);
  5074. var h = i.getUniformLocation(this.program, "skin_he_max"),
  5075. _ = i.getUniformLocation(this.program, "skin_he_min"),
  5076. E = i.getUniformLocation(this.program, "skin_hc_max"),
  5077. I = i.getUniformLocation(this.program, "skin_hc_min"),
  5078. T = i.getUniformLocation(this.program, "skin_hc_axis"),
  5079. y = i.getUniformLocation(this.program, "facts_rotate_c"),
  5080. b = i.getUniformLocation(this.program, "facts_rotate_le"),
  5081. R = i.getUniformLocation(this.program, "facts_rotate_ge");
  5082. i.uniform1f(h, s), i.uniform1f(_, c), i.uniform1f(E, d), i.uniform1f(I, u), i.uniform1f(T, l), i.uniform1f(y, f), i.uniform1f(b, p), i.uniform1f(R, m);
  5083. var A = i.getUniformLocation(this.program, "u_originImage");
  5084. i.activeTexture(i.TEXTURE2), i.bindTexture(i.TEXTURE_2D, e.inputTexture), i.uniform1i(A, 2);
  5085. for (var O = ["lighten_lut"], C = [i.TEXTURE3], N = 0; N < O.length; N++) {
  5086. var w = i.getUniformLocation(this.program, O[N]);
  5087. i.activeTexture(C[N]), i.bindTexture(i.TEXTURE_2D, g[N]), i.uniform1i(w, N + 3)
  5088. }
  5089. }, this.setParameters = function(e) {
  5090. 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)
  5091. }, this._updateRedness = function(e) {
  5092. var t, n, i = 3.141593,
  5093. a = e,
  5094. r = a;
  5095. a > 1 && (a = 1), a < 0 && (a = 0), r > 1 && (r = 1), r < 0 && (r = 0), f = .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 ? f * n / t : f, n = l - u, p = (t = u - c) > .01 ? f * n / t : f
  5096. }, this._updateLut = function(e) {
  5097. var t = null;
  5098. 0 == e && (t = S), 1 == e && (t = h), 2 == e && (t = v);
  5099. 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])
  5100. }, this._init = function() {
  5101. var e = null;
  5102. e = S;
  5103. for (var t = [new Uint8Array(e)], n = [256], a = [1], r = 0; r < t.length; r++) {
  5104. var o = i.createTexture();
  5105. 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)
  5106. }
  5107. }, this._init()
  5108. }
  5109. var pe = !1;
  5110. function me() {
  5111. this.programs = [];
  5112. var e = this,
  5113. t = null,
  5114. n = null;
  5115. e.gl = null, e.inputTexture = null;
  5116. var i = [],
  5117. a = [],
  5118. r = 0,
  5119. o = 0;
  5120. e._initGl = function(n, s) {
  5121. 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);
  5122. for (var c = 0; c < 4; c++) {
  5123. var d = t.createTexture();
  5124. 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);
  5125. var u = t.createFramebuffer();
  5126. t.bindFramebuffer(t.FRAMEBUFFER, u), t.framebufferTexture2D(t.FRAMEBUFFER, t.COLOR_ATTACHMENT0, t.TEXTURE_2D, d, 0), i.push(d), a.push(u)
  5127. }
  5128. t.viewport(0, 0, n, s), r = n, o = s
  5129. }, e.render = function(s) {
  5130. if (t) {
  5131. var c = 0;
  5132. 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);
  5133. for (var d = pe ? e.programs.length - 1 : 0, u = 0; u <= d; u++) {
  5134. var l = e.programs[u].program;
  5135. t.useProgram(l);
  5136. var f = t.getUniformLocation(l, "u_image");
  5137. 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(f, 0)
  5138. }
  5139. t.useProgram(n);
  5140. var p = t.getUniformLocation(n, "u_flipY");
  5141. t.uniform1f(p, -1), t.bindFramebuffer(t.FRAMEBUFFER, null), t.clearColor(0, 0, 0, 1), t.clear(t.COLOR_BUFFER_BIT), t.drawArrays(t.TRIANGLES, 0, 6)
  5142. }
  5143. }, e.setEnableBeauty = function(e) {
  5144. pe = e
  5145. }, e.init = function(i, a, r) {
  5146. if ("undefined" == typeof WebGLRenderingContext) throw new Error("NOT_SUPPORT");
  5147. 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 fe(this, i, a)), n = e.programs[0].program
  5148. }, e.release = function() {
  5149. e.gl = null, t = null, n = null, e.inputTexture = null, e.programs = [], i = [], a = []
  5150. }, e.setDenoiseLevel = function(t) {
  5151. e.programs.forEach(function(e) {
  5152. e.setParameters && e.setParameters({
  5153. denoiseLevel: t
  5154. })
  5155. })
  5156. }, e.setLightLevel = function(t) {
  5157. e.programs.forEach(function(e) {
  5158. e.setParameters && e.setParameters({
  5159. lightLevel: t
  5160. })
  5161. })
  5162. }, e.setRednessLevel = function(t) {
  5163. e.programs.forEach(function(e) {
  5164. e.setParameters && e.setParameters({
  5165. rednessLevel: t
  5166. })
  5167. })
  5168. }, e.setContrastLevel = function(t) {
  5169. e.programs.forEach(function(e) {
  5170. e.setParameters && e.setParameters({
  5171. lighteningContrastLevel: t
  5172. })
  5173. })
  5174. }, e.setSize = function(t, n) {
  5175. e.programs.forEach(function(e) {
  5176. e.setSize && e.setSize(t, n)
  5177. })
  5178. }
  5179. }
  5180. me._instance = null, me.getInstance = function() {
  5181. return me._instance || (me._instance = new me), me._instance
  5182. };
  5183. var ge = {
  5184. addVideoEffectCapability: function(e) {
  5185. e.videoEffect = {
  5186. canvas: null,
  5187. video: null,
  5188. fps: 30,
  5189. stopChromeBackgroundLoop: null,
  5190. enableBeauty: !1,
  5191. denoiseLevel: 5,
  5192. lightLevel: .35,
  5193. rednessLevel: .5,
  5194. lighteningContrastLevel: 1,
  5195. videoContextInited: !1,
  5196. originVideoTrack: null,
  5197. canvasVideoTrack: null,
  5198. ctx: null
  5199. }, e._initVideoContext = function() {
  5200. if (e.videoEffect.videoContextInited) throw new Error("Failed to init video context. Already inited");
  5201. if (!e.stream) throw new Error("Failed to init video context. Local Stream not initialized");
  5202. e.videoEffect.originVideoTrack = e.stream.getVideoTracks()[0], e.attributes && e.attributes.maxFrameRate && (e.videoEffect.fps = e.attributes.maxFrameRate), e.videoEffect.videoContextInited = !0
  5203. }, e._renderWithWebGL = function(t) {
  5204. return new Promise(function(n) {
  5205. e.videoEffect.canvas || (e.videoEffect.canvas = document.createElement("canvas")), e.videoEffect.video || (e.videoEffect.video = document.createElement("video")), e.videoEffect.video.setAttribute("autoplay", ""), e.videoEffect.video.setAttribute("muted", ""), e.videoEffect.video.muted = !0, e.videoEffect.video.setAttribute("playsinline", ""), e.videoEffect.video.setAttribute("style", "display:none"), e.videoEffect.video.srcObject = t;
  5206. var i = t.getVideoTracks()[0].getSettings(),
  5207. a = i.width,
  5208. r = i.height;
  5209. console.log("Width: ".concat(a, ", Height: ").concat(r)), e.videoEffect.canvas.setAttribute("width", a), e.videoEffect.canvas.setAttribute("height", r), e.videoEffect.video.setAttribute("width", a), e.videoEffect.video.setAttribute("height", r);
  5210. var o = me.getInstance();
  5211. o.init(e.videoEffect.video.width, e.videoEffect.video.height, e.videoEffect.canvas), o.setDenoiseLevel(e.videoEffect.denoiseLevel), o.setLightLevel(e.videoEffect.lightLevel), o.setRednessLevel(e.videoEffect.rednessLevel), o.setContrastLevel(e.videoEffect.lighteningContrastLevel), e.videoEffect.video.addEventListener("playing", function t() {
  5212. var i = e.videoEffect.canvas.captureStream(e.videoEffect.fps);
  5213. e.videoEffect.video.removeEventListener("playing", t, !0), n([i.getVideoTracks()[0], e.videoEffect.video])
  5214. }, !0), e.videoEffect.video.play()
  5215. })
  5216. }, e._disableEffect = function() {
  5217. e.videoEffect.videoContextInited || e._initVideoContext();
  5218. var t = e.videoEffect.originVideoTrack;
  5219. if (!t) return o.
  5220. default.warning("Video track is null, fail to disable video effect!"), Promise.resolve();
  5221. if (e.pc && e.pc.peerConnection && e.pc.peerConnection) {
  5222. var n = (e.pc.peerConnection && e.pc.peerConnection.getSenders()).find(function(e) {
  5223. return e && e.track && "video" == e.track.kind
  5224. });
  5225. if (n && n.replaceTrack && t) return n.replaceTrack(t)
  5226. }
  5227. return Promise.resolve()
  5228. }, e._releaseEffect = function() {
  5229. var t;
  5230. return t = e.videoEffect.enableBeauty ? e._disableEffect() : Promise.resolve(), me.getInstance().release(), e.videoEffect.videoContextInited = !1, e.videoEffect.canvasVideoTrack = null, t
  5231. }, e._enableEffect = function() {
  5232. return e.videoEffect.videoContextInited || e._initVideoContext(), e.videoEffect.originVideoTrack ? (e.videoEffect.canvasVideoTrack ? (e._showEffectInLocalPlayer(), e._replaceWithCanvasTrack()) : e._renderWithWebGL(e.stream).then(function(t) {
  5233. var n = X()(t, 2),
  5234. i = n[0],
  5235. a = n[1];
  5236. e.videoEffect.canvasVideoTrack = i;
  5237. var r = me.getInstance();
  5238. requestAnimationFrame(function t() {
  5239. e.videoEffect.enableBeauty && r.render(a), e.videoEffect.videoContextInited && requestAnimationFrame(t)
  5240. }), m.isChrome() && document.addEventListener("visibilitychange", function() {
  5241. document.hidden, document.hidden ? e.videoEffect.stopChromeBackgroundLoop = function(e, t) {
  5242. var n = 1 / t,
  5243. i = new AudioContext,
  5244. a = i.createGain();
  5245. a.gain.value = 0, a.connect(i.destination), function t() {
  5246. var o = i.createOscillator();
  5247. o.onended = t, o.connect(a), o.start(0), o.stop(i.currentTime + n), e(i.currentTime), r && (o.onended = function() {
  5248. i.close()
  5249. })
  5250. }();
  5251. var r = !1;
  5252. return function() {
  5253. r = !0
  5254. }
  5255. }(function() {
  5256. e.videoEffect.enableBeauty && r.render(a)
  5257. }, e.videoEffect.fps) : e.videoEffect.stopChromeBackgroundLoop && (e.videoEffect.stopChromeBackgroundLoop(), e.videoEffect.stopChromeBackgroundLoop = null)
  5258. }, !1), e._showEffectInLocalPlayer(), e._replaceWithCanvasTrack()
  5259. }), Promise.resolve()) : (o.
  5260. default.warning("Video track is null, fail to enable video effect!"), Promise.resolve())
  5261. }, e._showEffectInLocalPlayer = function() {
  5262. if (e.player) {
  5263. var t = e.player.div.children[0];
  5264. if ("none" !== t.style.display && (e.player.div.appendChild(e.videoEffect.canvas), "video" === t.tagName.toLowerCase())) {
  5265. var n = t.getAttribute("style");
  5266. e.videoEffect.canvas.setAttribute("style", n), "none" !== t.style.display && (t.style.display = "none")
  5267. }
  5268. }
  5269. }, e._removeEffectFromLocalPlayer = function() {
  5270. if (e.player && e.player.div && e.videoEffect.enableBeauty && e.videoEffect.canvas) {
  5271. e.player.div.removeChild(e.videoEffect.canvas);
  5272. var t = e.player.div.children[0];
  5273. "video" === t.tagName.toLowerCase() && (e.videoEffect.canvas.style.display = "none", t.style.display = "block")
  5274. }
  5275. }, e._replaceWithCanvasTrack = function() {
  5276. var t = null;
  5277. e.pc && e.pc.peerConnection && e.pc.peerConnection && (t = (e.pc.peerConnection && e.pc.peerConnection.getSenders()).find(function(e) {
  5278. return e && e.track && "video" == e.track.kind
  5279. })), t && t.replaceTrack && e.videoEffect.canvasVideoTrack && t.replaceTrack(e.videoEffect.canvasVideoTrack)
  5280. }, e.setBeautyEffectOptions = (t = K()(Y.a.mark(function t(n, i) {
  5281. var a, r = arguments;
  5282. return Y.a.wrap(function(t) {
  5283. for (;;) switch (t.prev = t.next) {
  5284. case 0:
  5285. if (Object(W.checkValidBoolean)(n, "enabled"), a = me.getInstance(), e.videoEffect.enableBeauty == n) {
  5286. t.next = 14;
  5287. break
  5288. }
  5289. if (a.setEnableBeauty(n), !n) {
  5290. t.next = 9;
  5291. break
  5292. }
  5293. return t.next = 7, e._enableEffect();
  5294. case 7:
  5295. t.next = 12;
  5296. break;
  5297. case 9:
  5298. return e._removeEffectFromLocalPlayer(), t.next = 12, e._releaseEffect();
  5299. case 12:
  5300. e.videoEffect.enableBeauty = n, s.b.reportApiInvoke(e.sid, {
  5301. callback: null,
  5302. options: r,
  5303. name: "Stream.setBeautyEffectOptions",
  5304. tag: "tracer"
  5305. });
  5306. case 14:
  5307. if (n) {
  5308. t.next = 16;
  5309. break
  5310. }
  5311. return t.abrupt("return");
  5312. case 16:
  5313. if (!i) {
  5314. t.next = 20;
  5315. break
  5316. }
  5317. Object(W.checkValidObject)(i, "options"), t.next = 21;
  5318. break;
  5319. case 20:
  5320. return t.abrupt("return");
  5321. case 21:
  5322. if (void 0 !== i.smoothnessLevel && (Object(W.checkValidFloatNumber)(i.smoothnessLevel, "smoothnessLevel", 0, 1), e.videoEffect.denoiseLevel = 10 * i.smoothnessLevel, e.videoEffect.denoiseLevel < .1 && (e.videoEffect.denoiseLevel = .1), a.setDenoiseLevel(e.videoEffect.denoiseLevel)), void 0 !== i.lighteningLevel && (Object(W.checkValidFloatNumber)(i.lighteningLevel, "lighteningLevel", 0, 1), e.videoEffect.lightLevel = i.lighteningLevel / 2, e.videoEffect.lightLevel < .01 && (e.videoEffect.lightLevel = .01), a.setLightLevel(e.videoEffect.lightLevel)), void 0 !== i.rednessLevel && (Object(W.checkValidFloatNumber)(i.rednessLevel, "rednessLevel", 0, 1), e.videoEffect.rednessLevel = i.rednessLevel, e.videoEffect.rednessLevel < .01 && (e.videoEffect.rednessLevel = .01), a.setRednessLevel(e.videoEffect.rednessLevel)), void 0 === i.lighteningContrastLevel) {
  5323. t.next = 29;
  5324. break
  5325. }
  5326. if (0 === i.lighteningContrastLevel || 1 === i.lighteningContrastLevel || 2 === i.lighteningContrastLevel) {
  5327. t.next = 27;
  5328. break
  5329. }
  5330. throw new Error("Invalid lighteningContrastLevel: The value should be 0, 1 or 2.");
  5331. case 27:
  5332. e.videoEffect.lighteningContrastLevel = parseFloat(i.lighteningContrastLevel), a.setContrastLevel(e.videoEffect.lighteningContrastLevel);
  5333. case 29:
  5334. case "end":
  5335. return t.stop()
  5336. }
  5337. }, t, this)
  5338. })), function(e, n) {
  5339. return t.apply(this, arguments)
  5340. });
  5341. var t
  5342. },
  5343. restoreVideoEffect: function(e) {
  5344. return e.videoEffect.enableBeauty ? e._enableEffect() : Promise.resolve()
  5345. },
  5346. disableVideoEffect: function(e) {
  5347. return e._releaseEffect ? e._releaseEffect() : Promise.resolve()
  5348. },
  5349. applyEffectInPlayer: function(e) {
  5350. e.videoEffect.enableBeauty && e.videoEffect.canvas && e._showEffectInLocalPlayer()
  5351. },
  5352. removeEffectFromLocalPlayer: function(e) {
  5353. e._removeEffectFromLocalPlayer()
  5354. },
  5355. replaceWithCanvasTrack: function(e) {
  5356. e.videoEffect.enableBeauty && e._replaceWithCanvasTrack()
  5357. },
  5358. checkVideoEffectEnabled: function(e) {
  5359. if (e.videoEffect.enableBeauty && e.videoEffect && e.videoEffect.videoContextInited) return o.
  5360. default.error("Operation not permitted: ".concat("VIDEO_EFFECT_ENABLED")), "VIDEO_EFFECT_ENABLED";
  5361. return !1
  5362. }
  5363. },
  5364. ve = a(9),
  5365. Se = a.n(ve),
  5366. he = function(e) {
  5367. Object(W.checkValidString)(e, "profileName"), -1 === (e = e.toLowerCase()).indexOf("_") && (e += "_1"), Object(W.checkValidEnum)(e, "profileName", Object.keys(r.SUPPORT_RESOLUTION_LIST));
  5368. var t = r.SUPPORT_RESOLUTION_LIST[e];
  5369. t || (e = Object(r.getParameter)("DEFAULT_PROFILE"), t = r.SUPPORT_RESOLUTION_LIST[e]);
  5370. var n = {
  5371. profileName: e,
  5372. video: {
  5373. width: t[0],
  5374. height: t[1]
  5375. },
  5376. attributes: {
  5377. resolution: "".concat(t[0], "x").concat(t[1]),
  5378. minFrameRate: t[2],
  5379. maxFrameRate: t[3],
  5380. minVideoBW: t[4],
  5381. maxVideoBW: t[5]
  5382. }
  5383. };
  5384. return t[2] && t[3] && (n.video.frameRate = {
  5385. ideal: t[2],
  5386. max: t[3]
  5387. }), t[6] && t[7] && (n.screen = {
  5388. width: t[0],
  5389. height: t[1],
  5390. frameRate: {
  5391. min: t[6],
  5392. max: t[7]
  5393. }
  5394. }), n
  5395. },
  5396. _e = function(e) {
  5397. return Object.keys(r.SUPPORT_RESOLUTION_LIST).filter(function(t) {
  5398. var n = r.SUPPORT_RESOLUTION_LIST[t],
  5399. i = ["width", "height", "frameRate"];
  5400. for (var a in i) {
  5401. var o = i[a];
  5402. if (e[o] && n[a]) {
  5403. if ("number" == typeof e[o].max && e[o].max < n[a]) return !1;
  5404. if ("number" == typeof e[o].min && e[o].min > n[a]) return !1
  5405. }
  5406. }
  5407. return !0
  5408. }).reverse()
  5409. },
  5410. Ee = function(e) {
  5411. var t = r.AUDIO_PROFILE_SETTINGS[e] || r.AUDIO_PROFILE_SETTINGS.
  5412. default;
  5413. return {
  5414. highQuality: t[0],
  5415. stereo: t[1],
  5416. speech: t[2],
  5417. lowQuality: t[3]
  5418. }
  5419. };
  5420. var Ie = function(e) {
  5421. var t = c();
  5422. 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 = {
  5423. width: 1920,
  5424. height: 1080,
  5425. maxFr: 5,
  5426. minFr: 1
  5427. }, 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");
  5428. function n() {
  5429. var e = {};
  5430. t.getVideoTrack() === this ? (o.
  5431. default.debug("Video Track Ended"), e.type = "videoTrackEnded", e.track = this) : t.getAudioTrack() === this ? (o.
  5432. default.debug("Audio Track Ended"), e.type = "audioTrackEnded", e.track = this) : o.
  5433. default.debug("Detached Track ended", this.kind, this.label, this), e.type && t.dispatchEvent(e)
  5434. }
  5435. 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) {
  5436. e.audioMixing = {
  5437. audioContextInited: !1,
  5438. defaultVolume: 100,
  5439. inEarMonitoring: "FILE",
  5440. sounds: {},
  5441. states: {
  5442. IDLE: "IDLE",
  5443. STARTING: "STARTING",
  5444. BUSY: "BUSY",
  5445. PAUSED: "PAUSED"
  5446. },
  5447. inEarMonitoringModes: {
  5448. NONE: "NONE",
  5449. FILE: "FILE",
  5450. MICROPHONE: "MOCROPHONE",
  5451. ALL: "ALL"
  5452. },
  5453. ctx: null,
  5454. mediaStreamSource: null,
  5455. mediaStreamDest: null,
  5456. buffer: {}
  5457. }, e._initSoundIfNotExists = function(t, n) {
  5458. e.audioMixing.sounds[t] || (e.audioMixing.sounds[t] = {
  5459. soundId: t,
  5460. state: "IDLE",
  5461. muted: e.userMuteAudio,
  5462. filePath: n,
  5463. volume: e.audioMixing.defaultVolume,
  5464. startAt: null,
  5465. startOffset: null,
  5466. pauseAt: null,
  5467. pauseOffset: null,
  5468. resumeAt: null,
  5469. resumeOffset: null,
  5470. stopAt: null,
  5471. options: null,
  5472. source: null
  5473. })
  5474. }, e._initSoundIfNotExists(-1), e.loadAudioBuffer = function(t, n, i) {
  5475. var a = s.b.reportApiInvoke(e.sid, {
  5476. callback: i,
  5477. name: "Stream.loadAudioBuffer",
  5478. options: arguments,
  5479. tag: "tracer"
  5480. });
  5481. Object(W.checkValidString)(n, "url", 1, 1024, !1), Object(W.checkValidString)(t, "id", 1, 1024, !1);
  5482. var r = function(t) {
  5483. o.
  5484. default.error("[".concat(e.streamId, "] loadAudioBuffer Failed: ") + t), a(I.
  5485. default.LOAD_AUDIO_FAILED)
  5486. },
  5487. c = new XMLHttpRequest;
  5488. c.open("GET", n, !0), c.responseType = "arraybuffer", c.onload = function() {
  5489. if (c.status > 400) r("".concat(c.status, " ").concat(c.statusText));
  5490. else {
  5491. var n = c.response;
  5492. e.audioMixing.audioContextInited || e._initAudioContext(), e.audioMixing.ctx.decodeAudioData(n, function(n) {
  5493. e.audioMixing.buffer[t] = n, a(null)
  5494. }, function(t) {
  5495. o.
  5496. default.error("[".concat(e.streamId, "] decodeAudioData Failed: "), t), a(t)
  5497. })
  5498. }
  5499. }, c.onerror = function() {
  5500. return r("load error")
  5501. }, c.ontimeout = function() {
  5502. return r("timeout")
  5503. }, c.send()
  5504. }, e.createAudioBufferSource = function(t) {
  5505. var n = s.b.reportApiInvoke(e.sid, {
  5506. name: "Stream.createAudioBufferSource",
  5507. options: arguments,
  5508. tag: "tracer"
  5509. });
  5510. if (e.audioMixing.buffer[t.id]) {
  5511. var i = e.audioMixing.buffer[t.id],
  5512. a = e.audioMixing.ctx.createBufferSource();
  5513. a.buffer = i;
  5514. var r = e.audioMixing.ctx.createGain();
  5515. if (a.connect(r), r.connect(e.audioMixing.mediaStreamDest), a.gainNode = r, t.loop) a.loop = !0, a.start(0, t.playTime / 1e3);
  5516. else if (t.cycle > 1) if (Object(m.isChrome)()) {
  5517. a.loop = !0;
  5518. var c = t.cycle * i.duration * 1e3 - (t.playTime || 0);
  5519. a.start(0, t.playTime / 1e3, c / 1e3)
  5520. } else o.
  5521. default.warning("[".concat(e.streamId, "] Cycle Param is ignored by current browser")), a.start(0, t.playTime / 1e3);
  5522. else a.start(0, t.playTime / 1e3);
  5523. var d = e.audioMixing.sounds[t.soundId];
  5524. return d.source = a, e._flushAudioMixingMuteStatus(), a.addEventListener("ended", function() {
  5525. a === d.source && e.dispatchEvent({
  5526. type: "audioSourceEnded",
  5527. soundId: t.soundId,
  5528. source: a,
  5529. sound: d
  5530. })
  5531. }), n(), a
  5532. }
  5533. return o.
  5534. default.error("[".concat(e.streamId, "] "), "AUDIOBUFFER_NOT_FOUND", t.id), n(!1), !1
  5535. }, e.on("audioSourceEnded", function(t) {
  5536. var n = t.source,
  5537. i = t.sound;
  5538. 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))
  5539. }), e.clearAudioBufferSource = function() {
  5540. e.audioBufferSource.forEach(function(e) {
  5541. e.stop()
  5542. })
  5543. }, e._isSoundExists = function(t) {
  5544. return !!e.audioMixing.sounds[t.soundId] || (o.
  5545. default.error("SoundId not exists. #".concat(t.soundId)), !1)
  5546. }, e._initAudioContext = function() {
  5547. if (e.audioMixing.audioContextInited) throw new Error("Failed to init audio context. Already inited");
  5548. if (!e.stream) throw new Error("Failed to init audio context. Local Stream not initialized");
  5549. 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);
  5550. var t = e.stream.getVideoTracks()[0];
  5551. 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) {
  5552. var n = (e.pc.peerConnection && e.pc.peerConnection.getSenders()).find(function(e) {
  5553. return e && e.track && "audio" == e.track.kind
  5554. }),
  5555. i = e.audioMixing.mediaStreamDest.stream.getAudioTracks()[0];
  5556. n && n.replaceTrack && i && n.replaceTrack(i)
  5557. }
  5558. e.audioMixing.audioContextInited = !0
  5559. }, e._cleanupAudioMixing = function() {
  5560. if (e.audioMixing.audioContextInited) {
  5561. for (var t in e.audioMixing.sounds) {
  5562. var n = e.audioMixing.sounds[t];
  5563. n.state !== e.audioMixing.states.BUSY && n.state !== e.audioMixing.states.PAUSED || e._stopOneEffect({
  5564. soundId: t
  5565. })
  5566. }
  5567. e.audioLevelHelper = null, e.audioMixing.audioContextInited = !1
  5568. }
  5569. }, e._reloadInEarMonitoringMode = function(t) {
  5570. if (t) {
  5571. if (!e.audioMixing.inEarMonitoringModes[t]) return o.
  5572. default.error("[".concat(e.streamId, "] Invalid InEarMonitoringMode ").concat(t));
  5573. e.audioMixing.inEarMonitoring = t
  5574. }
  5575. switch (e.audioMixing.audioContextInited || e._initAudioContext(), e.audioMixing.inEarMonitoring) {
  5576. case e.audioMixing.inEarMonitoringModes.FILE:
  5577. e.audioMixing.mediaStreamSource.connectedToDestination && (e.audioMixing.mediaStreamSource.disconnect(e.audioMixing.ctx.destination), e.audioMixing.mediaStreamSource.connectedToDestination = !1);
  5578. case e.audioMixing.inEarMonitoringModes.ALL:
  5579. for (var n in e.audioMixing.sounds) {
  5580. var i = e.audioMixing.sounds[n];
  5581. i && i.source && !i.source.connectedToDestination && (i.source.gainNode.connect(e.audioMixing.ctx.destination), i.source.connectedToDestination = !0)
  5582. }
  5583. }
  5584. switch (e.audioMixing.inEarMonitoring) {
  5585. case e.audioMixing.inEarMonitoringModes.MICROPHONE:
  5586. e.audioMixing.source.forEach(function(t) {
  5587. t.connectedToDestination && (t.gainNode.disconnect(e.audioMixing.ctx.destination), t.connectedToDestination = !1)
  5588. });
  5589. case e.audioMixing.inEarMonitoringModes.ALL:
  5590. e.audioMixing.mediaStreamSource.connectedToDestination || (e.audioMixing.mediaStreamSource.connect(e.audioMixing.ctx.destination), e.audioMixing.mediaStreamSource.connectedToDestination = !0)
  5591. }
  5592. }, e._startAudioMixingBufferSource = function(t) {
  5593. e.audioMixing.audioContextInited || e._initAudioContext();
  5594. var n = {
  5595. soundId: t.soundId,
  5596. id: t.filePath,
  5597. loop: t.loop,
  5598. cycle: t.cycle,
  5599. playTime: t.playTime || 0
  5600. },
  5601. i = t.replace,
  5602. a = e.createAudioBufferSource(n);
  5603. return a.sound = e.audioMixing.sounds[t.soundId], a ? (a.addEventListener("ended", e._audioMixingFinishedListener, {
  5604. once: !0
  5605. }), e._reloadInEarMonitoringMode(), i && e.audioMixing.mediaStreamSource.disconnect(e.audioMixing.mediaStreamDest), a) : null
  5606. }, e._stopAudioMixingBufferSource = function(t) {
  5607. var n = e.audioMixing.sounds[t.soundId].source;
  5608. 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
  5609. }, e._flushAudioMixingMuteStatus = function(t) {
  5610. for (var n in e.audioMixing.sounds) {
  5611. var i = e.audioMixing.sounds[n];
  5612. 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))
  5613. }
  5614. }, e._handleAudioMixingInvalidStateError = function(t, n, i) {
  5615. var a = e.audioMixing.sounds[n.soundId],
  5616. r = -1 === n.soundId ? "INVALID_AUDIO_MIXING_STATE" : "INVALID_PLAY_EFFECT_STATE";
  5617. o.
  5618. default.error("[".concat(e.streamId, "] Cannot ").concat(t, ": ").concat(r, ", state is ").concat(a.state)), i && i(r)
  5619. }, e._handleAudioMixingNoSourceError = function(t, n, i) {
  5620. e.audioMixing.sounds[n.soundId].state = e.audioMixing.states.IDLE;
  5621. var a = -1 === n.soundId ? "NO_AUDIO_MIXING_SOURCE" : "NO_EFFECT_SOURCE";
  5622. o.
  5623. default.error("[".concat(e.streamId, "] Cannot ").concat(t, ": ").concat(a)), i && i(a)
  5624. }, e._getOneEffectStates = function(t) {
  5625. var n = e.audioMixing.sounds[t.soundId];
  5626. return function() {
  5627. return n ? {
  5628. state: n.state,
  5629. startAt: n.startAt,
  5630. resumeAt: n.resumeAt,
  5631. pauseOffset: n.pauseOffset,
  5632. pauseAt: n.pauseAt,
  5633. resumeOffset: n.resumeOffset,
  5634. stopAt: n.stopAt,
  5635. duration: e._getOneEffectDuration(t),
  5636. position: e._getOneEffectCurrentPosition(t)
  5637. } : {}
  5638. }
  5639. }, e._audioMixingFinishedListener = function() {
  5640. var t = this.sound;
  5641. t.state === e.audioMixing.states.IDLE && e.audioMixing.buffer[t.options.filePath] && !t.options.cacheResource && (o.
  5642. default.debug("Recycled buffer ".concat(t.options.filePath)), delete e.audioMixing.buffer[t.options.filePath]), -1 === t.soundId && e.dispatchEvent({
  5643. type: "audioMixingFinished"
  5644. })
  5645. }, e._playOneEffect = function(t, n) {
  5646. Object(W.checkValidObject)(t, "options");
  5647. var i = t.soundId,
  5648. a = (t.filePath, t.cacheResource);
  5649. if (t.cycle, t.loop, t.playTime, t.replace, Object(m.isSafari)() && Object(m.getBrowserVersion)() < 12) {
  5650. var r = "BROWSER_NOT_SUPPORT";
  5651. return o.
  5652. default.error("[".concat(e.streamId, "] Cannot _playOneEffect: "), r), n(r)
  5653. }
  5654. e.audioMixing.audioContextInited || e._initAudioContext(), e._initSoundIfNotExists(i);
  5655. var s = e.audioMixing.sounds[i];
  5656. if (s.state === e.audioMixing.states.IDLE) {
  5657. if (void 0 !== t.cycle && !t.cycle > 0) return r = "Invalid Parmeter cycle: " + t.cycle, o.
  5658. default.error("[".concat(e.streamId, "] ").concat(i), r), n(r);
  5659. if (Object(W.isEmpty)(a) && (t.cacheResource = !0), s.state = e.audioMixing.states.STARTING, s.options = t, e.audioMixing.buffer[t.filePath]) {
  5660. var c = e._startAudioMixingBufferSource(t);
  5661. 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);
  5662. s.state = e.audioMixing.states.IDLE;
  5663. var d = "CREATE_BUFFERSOURCE_FAILED";
  5664. if (n) return n(d);
  5665. o.
  5666. default.error("[".concat(e.streamId, "] "), d)
  5667. } else e.loadAudioBuffer(t.filePath, t.filePath, function(i) {
  5668. if (i) s.state = e.audioMixing.states.IDLE, n ? n(i) : o.
  5669. default.error("[".concat(e.streamId, "] "), i);
  5670. else {
  5671. var a = e._startAudioMixingBufferSource(t);
  5672. 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);
  5673. if (s.state = e.audioMixing.states.IDLE, i = "CREATE_BUFFERSOURCE_FAILED", n) return n(i);
  5674. o.
  5675. default.error("[".concat(e.streamId, "] "), i)
  5676. }
  5677. })
  5678. } else e._handleAudioMixingInvalidStateError("_playEffect", t, n)
  5679. }, e._stopOneEffect = function(t, n) {
  5680. var i = e.audioMixing.sounds[t.soundId];
  5681. 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.
  5682. 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")
  5683. }, e._pauseOneEffect = function(t, n) {
  5684. var i = e.audioMixing.sounds[t.soundId];
  5685. 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);
  5686. e._handleAudioMixingInvalidStateError("_pauseOneEffect", t, n)
  5687. }, e._resumeOneEffect = function(t, n) {
  5688. var i = e.audioMixing.sounds[t.soundId];
  5689. if (i.state === e.audioMixing.states.PAUSED) {
  5690. var a = {
  5691. soundId: t.soundId,
  5692. filePath: i.options.filePath,
  5693. cycle: i.options.cycle,
  5694. loop: i.options.loop,
  5695. playTime: i.pauseOffset,
  5696. replace: i.options.replace
  5697. },
  5698. r = e._startAudioMixingBufferSource(a);
  5699. if (!r) {
  5700. var s = "CREATE_BUFFERSOURCE_FAILED";
  5701. return n(s), void o.
  5702. default.error("[".concat(e.streamId, "] "), s)
  5703. }
  5704. 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)
  5705. } else e._handleAudioMixingInvalidStateError("_resumeOneEffect", t, n)
  5706. }, e._getOneEffectDuration = function(t) {
  5707. var n = e.audioMixing.sounds[t.soundId];
  5708. return n.options && n.options.filePath && e.audioMixing.buffer[n.options.filePath] ? 1e3 * e.audioMixing.buffer[n.options.filePath].duration : null
  5709. }, e._getOneEffectCurrentPosition = function(t, n) {
  5710. var i = e.audioMixing.sounds[t.soundId];
  5711. 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))
  5712. }, e._setOneEffectPosition = function(t, n, i) {
  5713. var a = e.audioMixing.sounds[t.soundId];
  5714. if (a.state === e.audioMixing.states.BUSY) {
  5715. if (!e._stopAudioMixingBufferSource(t)) return void e._handleAudioMixingNoSourceError("_setOneEffectPosition", t, i);
  5716. var r = {
  5717. soundId: t.soundId,
  5718. filePath: a.options.filePath,
  5719. loop: a.options.loop,
  5720. cycle: a.options.cycle,
  5721. playTime: n
  5722. },
  5723. s = e._startAudioMixingBufferSource(r);
  5724. if (!s) {
  5725. var c = "CREATE_BUFFERSOURCE_FAILED";
  5726. return i && i(c), void o.
  5727. default.error("[".concat(e.streamId, "] "), c)
  5728. }
  5729. a.source = s, a.startAt = Date.now(), a.startOffset = n, a.resumeAt = null, a.resumeOffset = null, a.pauseOffset = null, a.pauseAt = null
  5730. } else {
  5731. if (a.state !== e.audioMixing.states.PAUSED) return void e._handleAudioMixingInvalidStateError("_setOneEffectPosition", t, i);
  5732. a.pauseOffset = n
  5733. }
  5734. i && i(null)
  5735. }, e.startAudioMixing = function(t, n) {
  5736. var i = s.b.reportApiInvoke(e.sid, {
  5737. callback: function(t) {
  5738. if (t) return n && n(t);
  5739. e.dispatchEvent({
  5740. type: "audioMixingPlayed"
  5741. }), n && n(null)
  5742. },
  5743. getStates: e._getOneEffectStates({
  5744. soundId: -1
  5745. }),
  5746. name: "Stream.startAudioMixing",
  5747. options: t
  5748. });
  5749. Object(W.checkValidObject)(t, "options");
  5750. var a = t.filePath,
  5751. o = t.cacheResource,
  5752. c = t.cycle,
  5753. d = t.loop,
  5754. u = t.playTime,
  5755. l = t.replace;
  5756. 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");
  5757. var f = h()({
  5758. soundId: -1
  5759. }, t);
  5760. e._playOneEffect(f, i)
  5761. }, e.stopAudioMixing = function(t) {
  5762. var n = s.b.reportApiInvoke(e.sid, {
  5763. callback: t,
  5764. getStates: e._getOneEffectStates({
  5765. soundId: -1
  5766. }),
  5767. name: "Stream.stopAudioMixing"
  5768. });
  5769. e._stopOneEffect({
  5770. soundId: -1
  5771. }, n)
  5772. }, e.pauseAudioMixing = function(t) {
  5773. var n = s.b.reportApiInvoke(e.sid, {
  5774. callback: t,
  5775. getStates: e._getOneEffectStates({
  5776. soundId: -1
  5777. }),
  5778. name: "Stream.pauseAudioMixing"
  5779. });
  5780. return e._pauseOneEffect({
  5781. soundId: -1
  5782. }, n)
  5783. }, e.resumeAudioMixing = function(t) {
  5784. var n = s.b.reportApiInvoke(e.sid, {
  5785. callback: function(n, i) {
  5786. if (n) return t && t(n);
  5787. e.dispatchEvent({
  5788. type: "audioMixingPlayed"
  5789. }), t && t(null)
  5790. },
  5791. getStates: e._getOneEffectStates({
  5792. soundId: -1
  5793. }),
  5794. name: "Stream.resumeAudioMixing"
  5795. });
  5796. e._resumeOneEffect({
  5797. soundId: -1
  5798. }, n)
  5799. }, e.adjustAudioMixingVolume = function(t) {
  5800. var n = s.b.reportApiInvoke(e.sid, {
  5801. getStates: e._getOneEffectStates({
  5802. soundId: -1
  5803. }),
  5804. name: "Stream.adjustAudioMixingVolume",
  5805. options: arguments,
  5806. tag: "tracer"
  5807. });
  5808. Object(W.checkValidNumber)(t, "volume", 0, 100), e.audioMixing.sounds[-1].volume = t, e._flushAudioMixingMuteStatus(), n()
  5809. }, e.getAudioMixingDuration = function() {
  5810. var t = s.b.reportApiInvoke(e.sid, {
  5811. getStates: e._getOneEffectStates({
  5812. soundId: -1
  5813. }),
  5814. name: "Stream.getAudioMixingDuration"
  5815. }),
  5816. n = e._getOneEffectDuration({
  5817. soundId: -1
  5818. });
  5819. return t(null, n), n
  5820. }, e.getAudioMixingCurrentPosition = function() {
  5821. var t = s.b.reportApiInvoke(e.sid, {
  5822. getStates: e._getOneEffectStates({
  5823. soundId: -1
  5824. }),
  5825. name: "Stream.getAudioMixingCurrentPosition"
  5826. }),
  5827. n = e._getOneEffectCurrentPosition({
  5828. soundId: -1
  5829. }, !0);
  5830. return t(null, n), n
  5831. }, e.setAudioMixingPosition = function(t, n) {
  5832. var i = s.b.reportApiInvoke(e.sid, {
  5833. callback: n,
  5834. options: arguments,
  5835. tag: "tracer",
  5836. getStates: e._getOneEffectStates({
  5837. soundId: -1
  5838. }),
  5839. name: "Stream.setAudioMixingPosition"
  5840. });
  5841. Object(W.checkValidNumber)(t, "position", 0, 1e8), e._setOneEffectPosition({
  5842. soundId: -1
  5843. }, t, i)
  5844. }, e.playEffect = function(t, n) {
  5845. var i = s.b.reportApiInvoke(e.sid, {
  5846. callback: function(t) {
  5847. if (t) return n && n(t);
  5848. e.dispatchEvent({
  5849. type: "effectPlayed"
  5850. }), n && n(null)
  5851. },
  5852. name: "Stream.playEffect",
  5853. options: t
  5854. });
  5855. Object(W.checkValidObject)(t, "options");
  5856. var a = t.soundId,
  5857. o = t.filePath,
  5858. c = t.cycle;
  5859. 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)
  5860. }, e.stopEffect = function(t, n) {
  5861. var i = s.b.reportApiInvoke(e.sid, {
  5862. callback: n,
  5863. getStates: e._getOneEffectStates({
  5864. soundId: t
  5865. }),
  5866. name: "Stream.stopEffect"
  5867. });
  5868. Object(W.checkValidNumber)(t, "soundId", 1, 1e4), e._stopOneEffect({
  5869. soundId: t
  5870. }, i)
  5871. }, e.stopAllEffects = function(t) {
  5872. var n = s.b.reportApiInvoke(e.sid, {
  5873. callback: t,
  5874. name: "Stream.stopAllEffect"
  5875. }),
  5876. i = !1,
  5877. a = 0,
  5878. r = 0,
  5879. o = function(e) {
  5880. i || (e ? (n(e), i = !0) : a += 1, a === r && (n(null), i = !0))
  5881. };
  5882. for (var c in e.audioMixing.sounds) {
  5883. var d = e.audioMixing.sounds[c]; - 1 !== d.soundId && (d.state !== e.audioMixing.states.BUSY && d.state !== e.audioMixing.states.PAUSED || (r++, e._stopOneEffect({
  5884. soundId: c
  5885. }, o)))
  5886. }
  5887. r || n(null)
  5888. }, e.preloadEffect = function(t, n, i) {
  5889. var a = s.b.reportApiInvoke(e.sid, {
  5890. callback: i,
  5891. options: arguments,
  5892. tag: "tracer",
  5893. name: "Stream.preloadEffect"
  5894. });
  5895. 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)
  5896. }, e.unloadEffect = function(t, n) {
  5897. var i = s.b.reportApiInvoke(e.sid, {
  5898. callback: n,
  5899. options: arguments,
  5900. tag: "tracer",
  5901. name: "Stream.unloadEffect"
  5902. });
  5903. Object(W.checkValidNumber)(t, "soundId", 1, 1e4);
  5904. var a = e.audioMixing.sounds[t];
  5905. if (!a) {
  5906. var r = "SOUND_NOT_EXISTS";
  5907. return o.
  5908. default.error(r, t), void i(r)
  5909. }
  5910. var c = a.options ? a.options.filePath : a.filePath;
  5911. if (c) delete e.audioMixing.buffer[c], delete e.audioMixing.sounds[t], i(null);
  5912. else {
  5913. var d = "SOUND_BUFFER_NOT_FOUND";
  5914. o.
  5915. default.error(d, t), i(d)
  5916. }
  5917. }, e.pauseEffect = function(t, n) {
  5918. var i = s.b.reportApiInvoke(e.sid, {
  5919. callback: n,
  5920. options: arguments,
  5921. tag: "tracer",
  5922. name: "Stream.pauseEffect"
  5923. });
  5924. return e._pauseOneEffect({
  5925. soundId: t
  5926. }, i)
  5927. }, e.pauseAllEffects = function(t) {
  5928. var n = s.b.reportApiInvoke(e.sid, {
  5929. callback: t,
  5930. name: "Stream.pauseAllEffects"
  5931. }),
  5932. i = !1,
  5933. a = 0,
  5934. r = 0,
  5935. o = function(e) {
  5936. i || (e ? (n(e), i = !0) : a += 1, a === r && (n(null), i = !0))
  5937. };
  5938. for (var c in e.audioMixing.sounds)"-1" !== c && e.audioMixing.sounds[c].state === e.audioMixing.states.BUSY && (r++, e._pauseOneEffect({
  5939. soundId: c
  5940. }, o));
  5941. r || n(null)
  5942. }, e.resumeEffect = function(t, n) {
  5943. Object(W.checkValidNumber)(t, "soundId", 1, 1e4);
  5944. var i = s.b.reportApiInvoke(e.sid, {
  5945. callback: n,
  5946. options: arguments,
  5947. tag: "tracer",
  5948. name: "Stream.resumeEffect"
  5949. });
  5950. return e._resumeOneEffect({
  5951. soundId: t
  5952. }, i)
  5953. }, e.resumeAllEffects = function(t) {
  5954. var n = s.b.reportApiInvoke(e.sid, {
  5955. callback: t,
  5956. name: "Stream.resumeAllEffects"
  5957. }),
  5958. i = !1,
  5959. a = 0,
  5960. r = 0,
  5961. o = function(e) {
  5962. i || (e ? (n(e), i = !0) : a += 1, a === r && (n(null), i = !0))
  5963. };
  5964. for (var c in e.audioMixing.sounds)"-1" !== c && e.audioMixing.sounds[c].state === e.audioMixing.states.PAUSED && (r++, e._resumeOneEffect({
  5965. soundId: c
  5966. }, o));
  5967. r || n(null)
  5968. }, e.getEffectsVolume = function() {
  5969. var t = [];
  5970. for (var n in e.audioMixing.sounds) {
  5971. var i = e.audioMixing.sounds[n];
  5972. i && "-1" !== n && t.push({
  5973. soundId: parseInt(n),
  5974. volume: i.volume
  5975. })
  5976. }
  5977. return t
  5978. }, e.setEffectsVolume = function(t, n) {
  5979. var i = s.b.reportApiInvoke(e.sid, {
  5980. name: "Stream.setEffectsVolume",
  5981. options: arguments,
  5982. tag: "tracer",
  5983. callback: n
  5984. });
  5985. for (var a in Object(W.checkValidNumber)(t, "volume", 0, 100), e.audioMixing.defaultVolume = t, e.audioMixing.sounds) {
  5986. var r = e.audioMixing.sounds[a];
  5987. "-1" !== a && (r.volume = t)
  5988. }
  5989. e._flushAudioMixingMuteStatus(), i(null)
  5990. }, e.setVolumeOfEffect = function(t, n, i) {
  5991. var a = s.b.reportApiInvoke(e.sid, {
  5992. name: "Stream.setVolumeOfEffect",
  5993. options: arguments,
  5994. tag: "tracer",
  5995. callback: i
  5996. });
  5997. 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)
  5998. }
  5999. }(t), ge.addVideoEffectCapability(t), function(e, t) {
  6000. e.videoConstraint = {}, t.cameraId && (e.videoConstraint.deviceId = {
  6001. exact: t.cameraId
  6002. }), 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 = {
  6003. ideal: 30,
  6004. max: 30
  6005. }), e.audioConstraint = {}, t.microphoneId && (e.audioConstraint.deviceId = {
  6006. exact: t.microphoneId
  6007. }), 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 = {
  6008. chromeMediaSource: "desktop",
  6009. maxWidth: e.screenAttributes.width,
  6010. maxHeight: e.screenAttributes.height,
  6011. maxFrameRate: e.screenAttributes.maxFr,
  6012. minFrameRate: e.screenAttributes.minFr
  6013. }) : (e.screenConstraint.mediaSource = "screen", e.screenConstraint.width = e.screenAttributes.width, e.screenConstraint.height = e.screenAttributes.height, e.screenConstraint.frameRate = {
  6014. ideal: e.screenAttributes.maxFr,
  6015. max: e.screenAttributes.maxFr
  6016. }), t.mediaSource && (e.screenConstraint.mediaSource = t.mediaSource), e.setVideoResolution = function(n) {
  6017. var i = s.b.reportApiInvoke(e.sid, {
  6018. name: "Stream.setVideoResolution",
  6019. options: arguments,
  6020. tag: "tracer"
  6021. });
  6022. if (!(n instanceof Array)) {
  6023. var a = he(n += "");
  6024. return a && a.video ? (e.videoConstraint = h()(e.videoConstraint, {
  6025. width: {
  6026. ideal: a.video.width
  6027. },
  6028. height: {
  6029. ideal: a.video.height
  6030. }
  6031. }), t.attributes.resolution = a.attributes.resolution, (r = e.stream && e.stream.getVideoTracks && e.stream.getVideoTracks()[0]) && r.applyConstraints ? (o.
  6032. default.debug("setVideoResolution applyConstraints", e.videoConstraint), r.applyConstraints(e.videoConstraint).then(i).
  6033. catch (i)) : i(), !0) : (i("NO_PROFILE_".concat(n)), !1)
  6034. }
  6035. var r, c = n[0],
  6036. d = n[1];
  6037. e.videoConstraint = h()(e.videoConstraint, {
  6038. width: {
  6039. ideal: c
  6040. },
  6041. height: {
  6042. ideal: d
  6043. }
  6044. }), t.attributes.resolution = "".concat(c, "x").concat(d), (r = e.stream && e.stream.getVideoTracks && e.stream.getVideoTracks()[0]) && r.applyConstraints ? (o.
  6045. default.debug("setVideoResolution applyConstraints", e.videoConstraint), ge.disableVideoEffect(e).then(function() {
  6046. return r.applyConstraints(e.videoConstraint).then(i).
  6047. catch (i)
  6048. }).then(function() {
  6049. return ge.restoreVideoEffect(e)
  6050. })) : i()
  6051. }, e.setVideoFrameRate = function(n) {
  6052. var i = s.b.reportApiInvoke(e.sid, {
  6053. name: "Stream.setVideoFrameRate",
  6054. options: arguments,
  6055. tag: "tracer"
  6056. });
  6057. if (Object(m.isFireFox)()) return i("FIREFOX_NOT_SUPPORTED"), !1;
  6058. if ("object" === Se()(n) && n instanceof Array && n.length > 1) {
  6059. e.videoConstraint = h()(e.videoConstraint, {
  6060. frameRate: {
  6061. ideal: n[0],
  6062. max: n[1]
  6063. }
  6064. }), t.attributes.minFrameRate = n[0], t.attributes.maxFrameRate = n[1];
  6065. var a = e.stream && e.stream.getVideoTracks && e.stream.getVideoTracks()[0];
  6066. return a && a.applyConstraints ? (o.
  6067. default.debug("setVideoFrameRate applyConstraints", e.videoConstraint), a.applyConstraints(e.videoConstraint).then(i).
  6068. catch (i)) : i(), !0
  6069. }
  6070. return i("INVALID_PARAM_".concat(JSON.stringify(n))), !1
  6071. }, e.setVideoBitRate = function(n) {
  6072. var i = s.b.reportApiInvoke(e.sid, {
  6073. name: "Stream.setVideoBitRate",
  6074. options: arguments,
  6075. tag: "tracer"
  6076. });
  6077. return "object" === Se()(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)
  6078. }, e.setScreenBitRate = function(n) {
  6079. var i = s.b.reportApiInvoke(e.sid, {
  6080. name: "Stream.setScreenBitRate",
  6081. options: arguments,
  6082. tag: "tracer"
  6083. });
  6084. return "object" === Se()(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)
  6085. }, e.setScreenProfile = function(t) {
  6086. var n = s.b.reportApiInvoke(e.sid, {
  6087. name: "Stream.setScreenProfile",
  6088. options: arguments,
  6089. tag: "tracer"
  6090. });
  6091. Object(W.checkValidEnum)(t, "profile", ["480p_1", "480p_2", "720p_1", "720p_2", "1080p_1", "1080p_2"]);
  6092. var i = he(t);
  6093. 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)
  6094. }, e.setVideoProfileCustom = function(t) {
  6095. var n = s.b.reportApiInvoke(e.sid, {
  6096. name: "Stream.setVideoProfileCustom",
  6097. options: arguments,
  6098. tag: "tracer"
  6099. });
  6100. e.setVideoResolution(t[0]), e.setVideoFrameRate([t[1], t[1]]), e.setVideoBitRate([t[2], t[2]]), n()
  6101. }, e.setVideoProfileCustomPlus = function(n) {
  6102. var i = s.b.reportApiInvoke(e.sid, {
  6103. name: "Stream.setVideoProfileCustom",
  6104. options: arguments,
  6105. tag: "tracer"
  6106. });
  6107. 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()
  6108. }, e.setVideoProfile = function(n) {
  6109. var i = s.b.reportApiInvoke(e.sid, {
  6110. name: "Stream.setVideoProfile",
  6111. options: arguments,
  6112. tag: "tracer"
  6113. }),
  6114. a = he(n);
  6115. if (!a) {
  6116. var r = "Invalid Profile ".concat(n);
  6117. throw new Error(r)
  6118. }
  6119. if (e.profile = n, a && a.video) {
  6120. 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 = {
  6121. ideal: 30,
  6122. max: 30
  6123. }), t.attributes = h()(t.attributes, a.attributes), e.pc && e.pc.renegotiate && e.pc.renegotiate();
  6124. var c = e.stream && e.stream.getVideoTracks && e.stream.getVideoTracks()[0];
  6125. return c && c.applyConstraints ? (o.
  6126. default.debug("setVideoProfile applyConstraints", e.videoConstraint), ge.disableVideoEffect(e).then(function() {
  6127. return c.applyConstraints(e.videoConstraint)
  6128. }).then(function() {
  6129. return ge.restoreVideoEffect(e)
  6130. }).then(function(t) {
  6131. return new Promise(function(n, a) {
  6132. i(t), Object(F.vsResHack)(e.stream, function(t, i) {
  6133. e.videoWidth = t, e.videoHeight = i, n()
  6134. }, function(t) {
  6135. o.
  6136. default.warning("[".concat(e.streamId, "] vsResHack failed: "), t), a()
  6137. })
  6138. })
  6139. }).
  6140. catch (i)) : i(), !0
  6141. }
  6142. return i("INVALID_VIDEO_PROFILE_".concat(n)), !1
  6143. }, e.setAudioProfile = function(t) {
  6144. var n = s.b.reportApiInvoke(e.sid, {
  6145. name: "Stream.setAudioProfile",
  6146. options: arguments,
  6147. tag: "tracer"
  6148. });
  6149. Object(W.checkValidEnum)(t, "profile", ["speech_low_quality", "speech_standard", "music_standard", "standard_stereo", "high_quality", "high_quality_stereo"]), e.audioProfile = t;
  6150. var i = Ee(t);
  6151. 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
  6152. }, e.setVideoEncoderConfiguration = function(t) {
  6153. Object(W.checkValidObject)(t, "config");
  6154. var n = s.b.reportApiInvoke(e.sid, {
  6155. name: "Stream.setVideoEncoderConfiguration",
  6156. options: t,
  6157. tag: "tracer"
  6158. });
  6159. 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()
  6160. }, e.getSupportedProfile = function(t) {
  6161. var n = s.b.reportApiInvoke(e.sid, {
  6162. name: "Stream.getSupportedProfile",
  6163. options: arguments,
  6164. tag: "tracer",
  6165. callback: t
  6166. });
  6167. if (!e.local) {
  6168. var i = "ONLY_LOCAL_STREAM_SUPPORTED";
  6169. return o.
  6170. default.error(i), n(i)
  6171. }
  6172. if (!e.stream) return i = "STREAM_NOT_INIT", o.
  6173. default.error(i), n(i);
  6174. if (!e.stream.getVideoTracks) return i = "TRACK_NOT_SUPPORT", o.
  6175. default.error(i), n(i);
  6176. var a = e.stream.getVideoTracks()[0];
  6177. if (!a) return i = "NO_VIDEO_TRACK_FOUND", o.
  6178. default.error(i), n(i);
  6179. if (!a.getCapabilities) return i = "GETCAPABILITY_NOT_SUPPORT", o.
  6180. default.error(i), n(i);
  6181. var r = a.getCapabilities();
  6182. return n(null, _e(r))
  6183. }
  6184. }(t, e), t.getId = function() {
  6185. return t.streamId
  6186. }, t.getUserId = function() {
  6187. return t.userId
  6188. }, t.checkDualStreamEnabled = function() {
  6189. if (Object(r.getParameter)("DUALSTREAM_OPERATION_CHECK") && t.isDualStream) {
  6190. return o.
  6191. default.error("Operation not permitted: ".concat("DUAL_STREAM_ENABLED")), "DUAL_STREAM_ENABLED"
  6192. }
  6193. return !1
  6194. }, t.setUserId = function(e) {
  6195. var n = s.b.reportApiInvoke(t.sid, {
  6196. name: "Stream.setUserId",
  6197. options: arguments,
  6198. tag: "tracer"
  6199. });
  6200. t.userId && o.
  6201. default.warning("[".concat(t.streamId, "] Stream.userId ").concat(t.userId, " => ").concat(e)), t.userId = e, n()
  6202. }, t.getAttributes = function() {
  6203. return e.screen ? t.screenAttributes : e.attributes
  6204. }, t.hasAudio = function() {
  6205. return t.audio
  6206. }, t.hasVideo = function() {
  6207. return t.video
  6208. }, t.hasScreen = function() {
  6209. return t.screen
  6210. }, t.hasScreenAudio = function() {
  6211. return t.screenAudio
  6212. }, t.isVideoOn = function() {
  6213. return (t.hasVideo() || t.hasScreen()) && !t.userMuteVideo
  6214. }, t.isAudioOn = function() {
  6215. return t.hasAudio() && !t.userMuteAudio
  6216. }, t.init = function(i, a) {
  6217. var r = s.b.reportApiInvoke(t.sid, {
  6218. callback: function(e, t) {
  6219. if (e) return a && a(e);
  6220. i && i(t)
  6221. },
  6222. name: "Stream.init",
  6223. options: arguments,
  6224. tag: "tracer"
  6225. }),
  6226. c = ((new Date).getTime(), arguments[2]);
  6227. if (void 0 === c && (c = 2), !0 === t.initialized) return r({
  6228. type: "warning",
  6229. msg: "STREAM_ALREADY_INITIALIZED"
  6230. });
  6231. if (!0 !== t.local) return r({
  6232. type: "warning",
  6233. msg: "STREAM_NOT_LOCAL"
  6234. });
  6235. var d = Math.random().toString().slice(3);
  6236. 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");
  6237. try {
  6238. if (e.audio || e.video || e.screen || e.screenAudio || e.videoSource || e.audioSource) {
  6239. o.
  6240. default.debug("[".concat(t.streamId, "] Requested access to local media"));
  6241. var u = {
  6242. streamId: t.streamId
  6243. };
  6244. e.videoSource ? u.videoSource = e.videoSource:
  6245. 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) {
  6246. if (u.screenAudio && !i.getAudioTracks()[0] && o.
  6247. default.warning("[".concat(t.streamId, "] Audio sharing is not selected")), u.screen && o.
  6248. default.debug("[".concat(t.streamId, "] User has granted access to screen sharing")), (u.video || u.audio) && o.
  6249. default.debug("[".concat(t.streamId, "] User has granted access to local media")), null === t._streamInitID) {
  6250. i.getTracks().forEach(function(e) {
  6251. e.stop()
  6252. });
  6253. var a = {
  6254. type: "error",
  6255. msg: "STREAM_IS_CLOSED",
  6256. info: "stream is closed and cannot be initialized"
  6257. };
  6258. return o.
  6259. default.error(t.streamId, a.info), void r(a)
  6260. }
  6261. if (t._streamInitID !== d) {
  6262. i.getTracks().forEach(function(e) {
  6263. e.stop()
  6264. });
  6265. a = {
  6266. type: "error",
  6267. msg: "ABORT_OTHER_INIT",
  6268. info: "stream initialization is aborted because of another stream.init"
  6269. };
  6270. return o.
  6271. default.error(t.streamId, a.info), void r(a)
  6272. }
  6273. t.dispatchEvent({
  6274. type: "accessAllowed"
  6275. }), t.stream = i, t.initialized = !0, t.reloadDeviceName(), t.hasVideo() && Object(F.vsResHack)(i, function(e, n) {
  6276. t.videoWidth = e, t.videoHeight = n
  6277. }, function(e) {
  6278. o.
  6279. default.warning("[".concat(t.streamId, "] vsResHack failed: "), e)
  6280. }), e.screen && t.stream && t.stream.getVideoTracks()[0] && (t.stream.getVideoTracks()[0].onended = function() {
  6281. t.dispatchEvent({
  6282. type: "stopScreenSharing"
  6283. })
  6284. }), t.stream && t.stream.getTracks && t.stream.getTracks().forEach(function(e) {
  6285. e && !e.onended && (e.onended = n)
  6286. }), r()
  6287. }, function(e) {
  6288. var n = {
  6289. type: "error",
  6290. info: null
  6291. };
  6292. 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) {
  6293. case "Starting video failed":
  6294. case "TrackStartError":
  6295. if (t.videoConstraint && (delete t.videoConstraint.width, delete t.videoConstraint.height), c > 0) return void setTimeout(function() {
  6296. t.init(function(e) {
  6297. return r(e)
  6298. }, r, c - 1)
  6299. }, 1);
  6300. n.msg = "MEDIA_OPTION_INVALID";
  6301. break;
  6302. case "DevicesNotFoundError":
  6303. n.msg = "DEVICES_NOT_FOUND";
  6304. break;
  6305. case "NotSupportedError":
  6306. n.msg = "NOT_SUPPORTED";
  6307. break;
  6308. case "PermissionDeniedError":
  6309. case "InvalidStateError":
  6310. n.msg = "PERMISSION_DENIED", t.dispatchEvent({
  6311. type: "accessDenied"
  6312. });
  6313. break;
  6314. case "PERMISSION_DENIED":
  6315. case "NotAllowedError":
  6316. t.dispatchEvent({
  6317. type: "accessDenied"
  6318. });
  6319. break;
  6320. case "ConstraintNotSatisfiedError":
  6321. n.msg = "CONSTRAINT_NOT_SATISFIED";
  6322. break;
  6323. default:
  6324. n.msg || (n.msg = "UNDEFINED")
  6325. }
  6326. var i = "Media access ".concat(n.msg).concat(n.info ? ": " + n.info : "");
  6327. o.
  6328. default.error("[".concat(t.streamId, "] "), i), r(n)
  6329. })
  6330. } else r({
  6331. type: "warning",
  6332. msg: "STREAM_HAS_NO_MEDIA_ATTRIBUTES"
  6333. })
  6334. } catch (e) {
  6335. o.
  6336. default.error("[".concat(t.streamId, "] Stream init: "), e), r({
  6337. type: "error",
  6338. msg: e.message || e
  6339. })
  6340. }
  6341. }, t.reloadDeviceName = function() {
  6342. if (t.stream) {
  6343. if (t.stream.getVideoTracks) {
  6344. var e = t.stream.getVideoTracks()[0];
  6345. e && e.label && (t.videoName = e.label)
  6346. }
  6347. if (t.stream.getAudioTracks) {
  6348. var n = t.stream.getAudioTracks()[0];
  6349. n && n.label && (t.audioName = n.label)
  6350. }
  6351. }
  6352. }, t.close = function() {
  6353. var e = s.b.reportApiInvoke(null, {
  6354. name: "Stream.close",
  6355. options: arguments,
  6356. tag: "tracer"
  6357. });
  6358. if (o.
  6359. default.debug("[".concat(t.streamId, "] Close stream with id"), t.streamId), void 0 !== t.stream) {
  6360. var n = t.stream.getTracks();
  6361. for (var i in n) n.hasOwnProperty(i) && n[i].stop();
  6362. !t.isLowStream && t.local ? ge.disableVideoEffect(t).then(function() {
  6363. t.stream = void 0
  6364. }) : (t.stream && t.stream.clean && t.stream.clean(), t.stream = void 0)
  6365. }
  6366. Object(m.isSafari)() && t.pc && t.pc.peerConnection && t.pc.peerConnection.removeTrack && t.pc.peerConnection.getSenders && t.pc.peerConnection.getSenders().forEach(function(e) {
  6367. e && (o.
  6368. default.debug("[".concat(t.streamId, "] Remove Track"), e), t.pc.peerConnection.removeTrack(e))
  6369. });
  6370. 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()
  6371. }, t.enableAudio = function() {
  6372. var e, n = s.b.reportApiInvoke(t.sid, {
  6373. name: "Stream.enableAudio",
  6374. options: arguments,
  6375. tag: "tracer"
  6376. });
  6377. return o.
  6378. default.deprecate("[".concat(t.streamId, "] Stream.enableAudio is deprecated and will be removed in the future. Use Stream.unmuteAudio instead")), t.userMuteAudio || o.
  6379. default.warning("[".concat(t.streamId, "] User already enableAudio")), t.userMuteAudio = !1, n(null, e = !t.peerMuteAudio && t._unmuteAudio()), e
  6380. }, t.disableAudio = function() {
  6381. var e = s.b.reportApiInvoke(t.sid, {
  6382. name: "Stream.disableAudio",
  6383. options: arguments,
  6384. tag: "tracer"
  6385. });
  6386. o.
  6387. default.deprecate("[".concat(t.streamId, "] Stream.disableAudio is deprecated and will be removed in the future. Use Stream.muteAudio instead")), t.userMuteAudio && o.
  6388. default.warning("[".concat(t.streamId, "] User already disableAudio")), t.userMuteAudio = !0;
  6389. var n = t._muteAudio();
  6390. return e(null, n), n
  6391. }, t.enableVideo = function() {
  6392. var e, n = s.b.reportApiInvoke(t.sid, {
  6393. name: "Stream.enableVideo",
  6394. options: arguments,
  6395. tag: "tracer"
  6396. });
  6397. return o.
  6398. default.deprecate("[".concat(t.streamId, "] Stream.enableVideo is deprecated and will be removed in the future. Use Stream.unmuteVideo instead")), t.userMuteVideo || o.
  6399. 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
  6400. }, t.disableVideo = function() {
  6401. var e = s.b.reportApiInvoke(t.sid, {
  6402. name: "Stream.disableVideo",
  6403. options: arguments,
  6404. tag: "tracer"
  6405. });
  6406. o.
  6407. default.deprecate("[".concat(t.streamId, "] Stream.disableVideo is deprecated and will be removed in the future. Use Stream.muteVideo instead")), t.userMuteVideo && o.
  6408. default.warning("[".concat(t.streamId, "] User already disableVideo")), t.userMuteVideo = !0, t.lowStream && (t.lowStream.userMuteVideo = !0);
  6409. var n = t._muteVideo();
  6410. return e(null, n), n
  6411. }, t.unmuteAudio = function() {
  6412. var e, n = s.b.reportApiInvoke(t.sid, {
  6413. name: "Stream.unmuteAudio",
  6414. options: arguments,
  6415. tag: "tracer"
  6416. });
  6417. return t.userMuteAudio || o.
  6418. default.warning("[".concat(t.streamId, "] User already unmuteAudio")), t.userMuteAudio = !1, n(null, e = !t.peerMuteAudio && t._unmuteAudio()), e
  6419. }, t.muteAudio = function() {
  6420. var e = s.b.reportApiInvoke(t.sid, {
  6421. name: "Stream.muteAudio",
  6422. options: arguments,
  6423. tag: "tracer"
  6424. });
  6425. t.userMuteAudio && o.
  6426. default.warning("[".concat(t.streamId, "] User already muteAudio")), t.userMuteAudio = !0;
  6427. var n = t._muteAudio();
  6428. return e(null, n), n
  6429. }, t.unmuteVideo = function() {
  6430. var e, n = s.b.reportApiInvoke(t.sid, {
  6431. name: "Stream.unmuteVideo",
  6432. options: arguments,
  6433. tag: "tracer"
  6434. });
  6435. return t.userMuteVideo || o.
  6436. 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
  6437. }, t.muteVideo = function() {
  6438. var e = s.b.reportApiInvoke(t.sid, {
  6439. name: "Stream.muteVideo",
  6440. options: arguments,
  6441. tag: "tracer"
  6442. });
  6443. t.userMuteVideo && o.
  6444. default.warning("[".concat(t.streamId, "] User already muteVideo")), t.userMuteVideo = !0, t.lowStream && (t.lowStream.userMuteVideo = !0);
  6445. var n = t._muteVideo();
  6446. return e(null, n), n
  6447. }, t._unmuteAudio = function() {
  6448. return o.
  6449. 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)
  6450. }, t._isAudioMuted = function() {
  6451. if (t.stream && t.hasAudio()) {
  6452. var e = t.stream.getAudioTracks();
  6453. return e.length > 0 && !e[0].enabled
  6454. }
  6455. return !1
  6456. }, t._isVideoMuted = function() {
  6457. if (t.stream && t.hasVideo()) {
  6458. var e = t.stream.getVideoTracks();
  6459. return e.length > 0 && !e[0].enabled
  6460. }
  6461. return !1
  6462. }, t._muteAudio = function() {
  6463. return o.
  6464. 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, {
  6465. succ: !0,
  6466. reason: "muteAudio"
  6467. }), !0)
  6468. }, t._unmuteVideo = function() {
  6469. return o.
  6470. 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)
  6471. }, t._muteVideo = function() {
  6472. return o.
  6473. 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, {
  6474. succ: !0,
  6475. reason: "muteVideo"
  6476. }), !0)
  6477. }, t.addTrack = function(i) {
  6478. var a = s.b.reportApiInvoke(t.sid, {
  6479. name: "Stream.addTrack",
  6480. options: arguments,
  6481. tag: "tracer"
  6482. }),
  6483. r = t.checkDualStreamEnabled();
  6484. if (r) return a(r);
  6485. if (t.pc && t.pc.addTrack(i, t.stream), "audio" == i.kind) {
  6486. t._cleanupAudioMixing();
  6487. var o = new MediaStream;
  6488. t.userMuteAudio && (i.enabled = !1), o.addTrack(i);
  6489. var c = t.stream.getVideoTracks()[0];
  6490. 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)
  6491. } else t.userMuteVideo && (i.enabled = !1), t.stream.addTrack(i), t.video = !0, e.video = !0;
  6492. i.onended || (i.onended = n), a()
  6493. }, t.removeTrack = function(n) {
  6494. var i = s.b.reportApiInvoke(t.sid, {
  6495. name: "Stream.removeTrack",
  6496. options: arguments,
  6497. tag: "tracer"
  6498. }),
  6499. a = t.checkDualStreamEnabled(),
  6500. r = ge.checkVideoEffectEnabled(t);
  6501. if (a || r) return i(a);
  6502. 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.
  6503. default.debug("[".concat(t.streamId, "] Track ").concat(n.kind, " Stopped"))), i()
  6504. }, t.setAudioOutput = function(e, n, i) {
  6505. var a = s.b.reportApiInvoke(t.sid, {
  6506. callback: function(e, t) {
  6507. if (e) return i && i(e);
  6508. n && n(t)
  6509. },
  6510. name: "Stream.setAudioOutput",
  6511. options: arguments,
  6512. tag: "tracer"
  6513. });
  6514. return Object(W.isValidString)(e, 1, 255) ? (t.audioOutput = e, t.player ? void t.player.setAudioOutput(e, function() {
  6515. return a()
  6516. }, a) : a()) : (o.
  6517. default.error("[".concat(t.streamId, "] setAudioOutput Invalid Parameter"), e), a(I.
  6518. default.INVALID_PARAMETER))
  6519. }, t.play = function(e, n, i) {
  6520. "function" == typeof n && (i = n, n = null), o.
  6521. default.debug("[".concat(t.streamId, "] play()."), e, n);
  6522. var a = s.b.reportApiInvoke(t.sid, {
  6523. name: "Stream.play",
  6524. options: arguments,
  6525. tag: "tracer",
  6526. callback: i
  6527. });
  6528. 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.
  6529. default.warning("[".concat(t.streamId, "] Stream.play(): Stream is already playing. Fallback to resume stream")), t.resume().then(function() {
  6530. a(null)
  6531. }).
  6532. catch (a);
  6533. else {
  6534. t.elementID = e, t.playOptions = n, !t.local || t.video || t.screen ? (t.player = new y({
  6535. id: t.getId(),
  6536. stream: t,
  6537. elementID: e,
  6538. options: n
  6539. }), t.local && ge.applyEffectInPlayer(t)) : t.hasAudio() && (t.player = new y({
  6540. id: t.getId(),
  6541. stream: t,
  6542. elementID: e,
  6543. options: n
  6544. }));
  6545. var r = {
  6546. audio: null,
  6547. video: null
  6548. };
  6549. t.on("player-status-change", function e(n) {
  6550. if (r[n.mediaType] = n, r.audio && r.video) if (t.removeEventListener("player-status-change", e), r.video.isErrorState || r.audio.isErrorState) {
  6551. var i = r.video.isErrorState ? r.video : r.audio;
  6552. a({
  6553. isErrorState: !0,
  6554. status: i.status,
  6555. reason: i.reason,
  6556. video: r.video,
  6557. audio: r.audio
  6558. })
  6559. } else "aborted" === r.video.status && "aborted" === r.audio.status ? a({
  6560. status: "aborted",
  6561. reason: "stop",
  6562. video: r.video,
  6563. audio: r.audio
  6564. }) : a(null)
  6565. }), t.audioOutput && t.player.setAudioOutput(t.audioOutput), void 0 !== t.audioLevel && t.player.setAudioVolume(t.audioLevel), t._flushAudioMixingMuteStatus(!1)
  6566. }
  6567. }, t.stop = function() {
  6568. var e = s.b.reportApiInvoke(t.sid, {
  6569. name: "Stream.stop",
  6570. options: arguments,
  6571. tag: "tracer"
  6572. });
  6573. o.
  6574. default.debug("[".concat(t.streamId, "] Stop stream player with id "), t.streamId), t.player ? (ge.removeEffectFromLocalPlayer(t), t.player.destroy(), delete t.player):
  6575. o.
  6576. default.error("[".concat(t.streamId, "] Stream.stop(): Stream is not playing")), t._flushAudioMixingMuteStatus(!0), e()
  6577. }, t.isPlaying = function() {
  6578. return !!t.player
  6579. }, t.isPaused = function() {
  6580. 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)))
  6581. }, t.resume = function() {
  6582. var e, n;
  6583. 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")
  6584. }, t.getVideoTrack = function() {
  6585. var e = s.b.reportApiInvoke(t.sid, {
  6586. name: "Stream.getVideoTrack",
  6587. options: arguments,
  6588. tag: "tracer"
  6589. });
  6590. if (t.stream && t.stream.getVideoTracks) {
  6591. var n = t.stream.getVideoTracks()[0];
  6592. if (n) return o.
  6593. default.info("[".concat(t.streamId, "] getVideoTrack"), n), e(), n
  6594. }
  6595. o.
  6596. default.info("[".concat(t.streamId, "] getVideoTrack None")), e(null, "getVideoTrack None")
  6597. }, t.getAudioTrack = function() {
  6598. var e = s.b.reportApiInvoke(t.sid, {
  6599. name: "Stream.getAudioTrack",
  6600. options: arguments,
  6601. tag: "tracer"
  6602. });
  6603. if (t.stream && t.stream.getAudioTracks) {
  6604. var n = t.stream.getAudioTracks()[0];
  6605. if (n) return o.
  6606. default.info("[".concat(t.streamId, "] getAudioTracks"), n), e(), n
  6607. }
  6608. o.
  6609. default.info("[".concat(t.streamId, "] getAudioTracks None")), e(null, "getAudioTracks None")
  6610. }, t._hasVideoTracks = function() {
  6611. return !!(t.stream && t.stream.getVideoTracks && t.stream.getVideoTracks()[0])
  6612. }, t._hasAudioTracks = function() {
  6613. return !!(t.stream && t.stream.getAudioTracks && t.stream.getAudioTracks()[0])
  6614. }, t._replaceMediaStreamTrack = function(e, n, i) {
  6615. if (t.stream) {
  6616. if ("video" == e.kind) {
  6617. if (r = t.stream.getVideoTracks()[0]) return t.userMuteVideo && (e.enabled = !1), t.stream.removeTrack(r), t.stream.addTrack(e), o.
  6618. default.debug("[".concat(t.streamId, "] _replaceMediaStreamTrack ").concat(e.kind, " SUCCESS")), "live" == r.readyState && (r.stop(), o.
  6619. default.debug("[".concat(t.streamId, "] Track ").concat(r.kind, " Stopped"))), n && n();
  6620. var a = "MEDIASTREAM_TRACK_NOT_FOUND";
  6621. return o.
  6622. default.error("[".concat(t.streamId, "] MEDIASTREAM_TRACK_NOT_FOUND ").concat(e.kind)), i(a)
  6623. }
  6624. if ("audio" == e.kind) {
  6625. var r;
  6626. if (r = t.stream.getAudioTracks()[0]) {
  6627. t.userMuteAudio && (e.enabled = !1);
  6628. var s = new MediaStream;
  6629. s.addTrack(e);
  6630. var c = t.stream && t.stream.getVideoTracks()[0];
  6631. return c && s.addTrack(c), t.stream = s, t.audioLevelHelper = null, t.player && t.player.video && (t.player.video.srcObject = t.stream), o.
  6632. default.debug("[".concat(t.streamId, "] _replaceMediaStreamTrack SUCCESS")), "live" == r.readyState && (r.stop(), o.
  6633. default.debug("[".concat(t.streamId, "] Track ").concat(r.kind, " Stopped"))), n && n()
  6634. }
  6635. a = "MEDIASTREAM_TRACK_NOT_FOUND";
  6636. return o.
  6637. default.error("[".concat(t.streamId, "] MEDIASTREAM_TRACK_NOT_FOUND ").concat(e.kind)), i(a)
  6638. }
  6639. a = "INVALID_TRACK_TYPE";
  6640. return o.
  6641. default.error("[".concat(t.streamId, "] _replaceMediaStreamTrack ").concat(a, " ").concat(e.kind)), i && i(a)
  6642. }
  6643. a = "NO_STREAM_FOUND";
  6644. return o.
  6645. default.error("[".concat(t.streamId, "] _replaceMediaStreamTrack ").concat(a)), i && i(a)
  6646. }, t.replaceTrack = function(e, i, a) {
  6647. var r = s.b.reportApiInvoke(t.sid, {
  6648. callback: function(e, t) {
  6649. if (e) return a && a(e);
  6650. i && i(t)
  6651. },
  6652. name: "Stream.replaceTrack",
  6653. options: arguments,
  6654. tag: "tracer"
  6655. });
  6656. if (!e || !e.kind) return r("INVALID_TRACK");
  6657. var c = t.checkDualStreamEnabled();
  6658. 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() {
  6659. return o.
  6660. default.debug("[".concat(t.streamId, "] PeerConnection.replaceTrack ").concat(e.kind, " SUCCESS")), t._replaceMediaStreamTrack(e, function(e) {
  6661. return r(null, e)
  6662. }, r)
  6663. }, function(n) {
  6664. return o.
  6665. default.error("[".concat(t.streamId, "] PeerConnection.replaceTrack ").concat(e.kind, " Failed ").concat(n)), r(n)
  6666. }) : t._replaceMediaStreamTrack(e, function(e) {
  6667. return r(null, e)
  6668. }, r))
  6669. }, t.setAudioVolume = function(e) {
  6670. var n = s.b.reportApiInvoke(t.sid, {
  6671. name: "Stream.setAudioVolume",
  6672. options: arguments,
  6673. tag: "tracer"
  6674. });
  6675. Object(W.checkValidNumber)(e, "level", 0, 100), t.audioLevel = e, t.player && t.player.setAudioVolume(e), n()
  6676. }, t.getStats = function(e, n, i) {
  6677. var a = [];
  6678. a.push(t._getPCStats(i)), a.push(new Promise(function(e) {
  6679. var n = {};
  6680. 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)
  6681. })), a.push(new Promise(function(e) {
  6682. var n = {};
  6683. 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)
  6684. })), Promise.all(a).then(function(n) {
  6685. for (var i = {}, a = n.length - 1; a >= 0; a--) {
  6686. var r = n[a];
  6687. h()(i, r)
  6688. }
  6689. e && setTimeout(e.bind(t, i), 0)
  6690. }).
  6691. catch (function(e) {
  6692. n && setTimeout(n.bind(t, e), 0)
  6693. })
  6694. }, t._getPCStats = function(e) {
  6695. return new Promise(function(n, i) {
  6696. if (!t.pc || "established" !== t.pc.state || !t.pc.getStats) {
  6697. return i("PEER_CONNECTION_NOT_ESTABLISHED")
  6698. }
  6699. t.pc.getStats(function(e) {
  6700. if (!t.pc || "established" !== t.pc.state || !t.pc.getStats) {
  6701. return i("PEER_CONNECTION_STATE_CHANGE")
  6702. }
  6703. var a = t.pc.isSubscriber ?
  6704. function(e) {
  6705. var t = {};
  6706. return e.forEach(function(e) {
  6707. 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))))
  6708. }), t
  6709. }(e) : function(e) {
  6710. var t = {};
  6711. return e.forEach(function(e) {
  6712. 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))))
  6713. }), t
  6714. }(e);
  6715. return n(a)
  6716. }, e)
  6717. }).then(function(e) {
  6718. 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)
  6719. })
  6720. }, t.getAudioLevel = function() {
  6721. if (t.audioLevelHelper) return t.audioLevelHelper.getAudioLevel();
  6722. if (t.stream) {
  6723. if (0 !== t.stream.getAudioTracks().length) return t.audioLevelHelper = new F.audioLevelHelper(t.stream), t.audioLevelHelper.getAudioLevel();
  6724. o.
  6725. default.warning("[".concat(t.streamId, "] can't get audioLevel beacuse no audio trace in stream"))
  6726. } else o.
  6727. default.warning("[".concat(t.streamId, "] can't get audioLevel beacuse no stream exist"))
  6728. }, t.setVideoProfile("480P"), t._switchVideoDevice = function(e, n, i) {
  6729. if (e === t.cameraId) return n && n();
  6730. var a = {
  6731. video: h()({}, t.videoConstraint, {
  6732. deviceId: {
  6733. exact: e
  6734. }
  6735. }),
  6736. audio: !1
  6737. };
  6738. o.
  6739. default.debug("[".concat(t.streamId, "] ").concat(a)), j(a, function(a) {
  6740. try {
  6741. var r = function() {
  6742. t.isPlaying() && (t.stop(), t.elementID && t.play(t.elementID, t.playOptions)), t.cameraId = e, t.videoConstraint.deviceId = {
  6743. exact: e
  6744. }, t.userMuteVideo && (t.stream.getVideoTracks()[0].enabled = !1), ge.restoreVideoEffect(t), n && n()
  6745. };
  6746. ge.disableVideoEffect(t).then(function() {
  6747. Object(m.isSafari)() ? t.replaceTrack(a.getVideoTracks()[0], r, i) : (t.removeTrack(t.stream.getVideoTracks()[0]), t.addTrack(a.getVideoTracks()[0]), r())
  6748. })
  6749. } catch (e) {
  6750. return i && i(e)
  6751. }
  6752. }, function(e) {
  6753. return i && i(e)
  6754. })
  6755. }, t._switchAudioDevice = function(e, n, i) {
  6756. if (e === t.microphoneId) return n && n();
  6757. var a = {
  6758. video: !1,
  6759. audio: h()({}, t.audioConstraint, {
  6760. deviceId: {
  6761. exact: e
  6762. }
  6763. })
  6764. };
  6765. o.
  6766. default.debug("[".concat(t.streamId, "] "), a), j(a, function(a) {
  6767. var r = function() {
  6768. 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 = {
  6769. exact: e
  6770. }, n && n()
  6771. };
  6772. try {
  6773. Object(m.isSafari)() ? t.replaceTrack(a.getAudioTracks()[0], r, i) : (t.removeTrack(t.stream.getAudioTracks()[0]), t.addTrack(a.getAudioTracks()[0]), r())
  6774. } catch (e) {
  6775. return i && i(e)
  6776. }
  6777. }, function(e) {
  6778. return i && i(e)
  6779. })
  6780. }, t.switchDevice = function(e, n, i, a) {
  6781. var r = s.b.reportApiInvoke(t.sid, {
  6782. callback: function(e, t) {
  6783. if (e) return a && a(e);
  6784. i && i(t)
  6785. },
  6786. name: "Stream.switchDevice",
  6787. options: arguments,
  6788. tag: "tracer"
  6789. });
  6790. Object(W.checkValidString)(n, "deviceId");
  6791. var c = function() {
  6792. return t.inSwitchDevice = !1, r()
  6793. },
  6794. d = function(e) {
  6795. t.inSwitchDevice = !1, o.
  6796. default.error("[".concat(t.streamId, "] "), e), r(e)
  6797. };
  6798. if (t.inSwitchDevice) return r("Device switch is in process.");
  6799. if (t.inSwitchDevice = !0, !t.local) return d("Only the local stream can switch the device.");
  6800. if (t.screen && "video" === e) return d("The device cannot be switched during screen-sharing.");
  6801. if (t.videoSource || t.audioSource) return d("The device cannot be switched when using videoSource or audioSource.");
  6802. if (t.lowStream) return d("The device cannot be switched when using lowstream.");
  6803. var u = !1;
  6804. for (var l in t.audioMixing.sounds) {
  6805. if (t.audioMixing.sounds[l].state !== t.audioMixing.states.IDLE) {
  6806. u = !0;
  6807. break
  6808. }
  6809. }
  6810. if (t.audioMixing.audioContextInited && u) return d("The device cannot be switched when using audio Mixing.");
  6811. H.getDeviceById(n, function() {
  6812. if ("video" === e) t._switchVideoDevice(n, c, d);
  6813. else {
  6814. if ("audio" !== e) return d("Invalid type.");
  6815. t._switchAudioDevice(n, c, d)
  6816. }
  6817. }, function() {
  6818. return d("The device does not exist.")
  6819. })
  6820. }, t
  6821. },
  6822. Te = a(20),
  6823. ye = a(8),
  6824. be = a.n(ye),
  6825. Re = ["live", "rtc", "web", "interop", "h264_interop", "web-only"],
  6826. Ae = ["vp8", "h264"],
  6827. Oe = ["aes-128-xts", "aes-256-xts", "aes-128-ecb"],
  6828. Ce = a(21),
  6829. Ne = a.n(Ce),
  6830. we = function(e) {
  6831. e && e.apply(this, [].slice.call(arguments, 1))
  6832. },
  6833. ke = a(10),
  6834. De = function(e) {
  6835. var t = c(e);
  6836. 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() {
  6837. return t.sendbytes
  6838. }, t.getRecvBytes = function() {
  6839. return t.recvbytes
  6840. }, t.getDuration = function() {
  6841. return Math.ceil((Date.now() - t.startTime) / 1e3)
  6842. }, t.getURL = function() {
  6843. return t.connection.url
  6844. }, t.reconnect = function() {
  6845. t.isInit = !0, t.creatConnection()
  6846. }, t.connectNext = function() {
  6847. t.isInit = !0, ++t.hostIndex, o.
  6848. default.debug("[" + t.clientId + "] Gateway length:" + t.host.length + " current index:" + t.hostIndex), t.hostIndex >= t.host.length ? t.dispatchEvent(f({
  6849. type: "recover"
  6850. })):
  6851. t.creatConnection()
  6852. }, t.replaceHost = function(e) {
  6853. t.host = e || t.host, t.hostIndex = 0, t.creatConnection()
  6854. }, t.creatConnection = function() {
  6855. if (t.needReconnect = !0, o.
  6856. 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) {
  6857. var n = t.connection.url.match(/wss\:\/\/([^:]+):(\d+)/);
  6858. 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);
  6859. else {
  6860. var i = t.host[t.hostIndex].split(":");
  6861. 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)
  6862. }
  6863. }
  6864. t.connection.onopen = function(e) {
  6865. o.
  6866. 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(ke.resetHTTPByetsCount)(), clearTimeout(t.timeoutCheck), t.dispatchEvent(f({
  6867. type: "onopen",
  6868. event: e,
  6869. socket: t
  6870. }))
  6871. }, t.connection.onmessage = function(e) {
  6872. if (e.data instanceof ArrayBuffer) t.dispatchEvent({
  6873. type: "onBinaryData",
  6874. data: e.data
  6875. });
  6876. else {
  6877. t.recvbytes += Object(F.lengthInUtf8Bytes)(e.data);
  6878. var n = JSON.parse(e.data);
  6879. t.lastMsgTime = Date.now(), n.hasOwnProperty("_id") ? t.dispatchEvent(f({
  6880. type: n._id,
  6881. msg: n
  6882. })) : n.hasOwnProperty("_type") && t.dispatchSocketEvent(f({
  6883. type: n._type,
  6884. msg: n._message
  6885. }))
  6886. }
  6887. }, t.connection.onclose = function(n) {
  6888. t.needReconnect ? t.isTimeout || t.isInit ? (o.
  6889. default.debug("[" + t.clientId + "] websockect connect timeout"), s.b.joinGateway(e.sid, {
  6890. lts: t.lts,
  6891. succ: !1,
  6892. ec: "timeout",
  6893. addr: t.connection.url
  6894. }), t.connectNext()) : t.dispatchEvent(f({
  6895. type: "disconnect",
  6896. event: n
  6897. })) : (o.
  6898. default.debug("[" + t.clientId + "] websockect closeed"), we(e.onFailure, n), clearTimeout(t.timeoutCheck), t.dispatchEvent(f({
  6899. type: "close",
  6900. event: n
  6901. })), t.connection.onopen = void 0, t.connection.onclose = void 0, t.connection.onerror = void 0, t.connection.onmessage = void 0, t.connection = void 0)
  6902. }, t.connection.onerror = function(e) {}, setTimeout(function() {
  6903. t.connection && t.connection.readyState != WebSocket.OPEN && (t.isTimeout = !0, t.connection.close())
  6904. }, 5e3)
  6905. }, t.creatConnection(), t.sendMessage = function(e, n) {
  6906. if (t.connection && t.connection.readyState == WebSocket.OPEN) {
  6907. var i = JSON.stringify(e);
  6908. t.sendbytes += Object(F.lengthInUtf8Bytes)(i), t.connection.send(i)
  6909. } else n({
  6910. error: "Gateway not connected"
  6911. })
  6912. }, t.disconnect = function() {
  6913. t.needReconnect = !0, t.connection.close()
  6914. }, t.close = function() {
  6915. t.needReconnect = !1, t.connection.onclose = void 0, t.connection.close()
  6916. }, t.sendSignalCommand = function(e, n) {
  6917. 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) {
  6918. i.msg && n && n(i.msg._result, i.msg.message), delete t.dispatcher.eventListeners[e._id]
  6919. }), t.sendMessage(e, function(e) {
  6920. e.reason = "NOT_CONNECTED", n && n(e.reason, e)
  6921. })
  6922. }, t.requests = [];
  6923. var n = function(e) {
  6924. var n = t.requests.findIndex(function(t) {
  6925. return t.id === e.type
  6926. });
  6927. if (n >= 0) var i = t.requests.splice(n, 1)[0];
  6928. 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.
  6929. default.warning("Detached Response", e.type, e.msg)
  6930. };
  6931. return t.sendRequest = function(e, i) {
  6932. e = h()({
  6933. _id: "_request_" + t.requestID
  6934. }, e), t.requestID += 1;
  6935. var a = {
  6936. id: e._id,
  6937. timeoutCounter: 0,
  6938. stalledAt: Date.now(),
  6939. message: e,
  6940. callback: i
  6941. };
  6942. t.requests.push(a), t.addEventListener(e._id, n), t.sendMessage(e, function(e) {
  6943. var n = this,
  6944. i = t.requests.findIndex(function(e) {
  6945. return e.id === n.id
  6946. });
  6947. 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.
  6948. default.warning("handleSendError", n)
  6949. }.bind(a))
  6950. }, t.checkRequestTimeout = function() {
  6951. 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--) {
  6952. var i = t.requests[n];
  6953. i.timeoutCounter >= e ? (t.requests.splice(n, 1), o.
  6954. default.error("Request Timeout", i.timeoutCounter, i.message), i.callback && i.callback("TIMEOUT")) : i.timeoutCounter++
  6955. }
  6956. }, clearInterval(t.requestTimer), t.requestTimer = setInterval(t.checkRequestTimeout, Object(r.getParameter)("SIGNAL_REQUEST_WATCH_INTERVAL")), t.sendReport = function(e) {
  6957. t.sendMessage(e, function() {})
  6958. }, t
  6959. },
  6960. Le = function(e, t) {
  6961. var n = {
  6962. connect: function() {
  6963. t.host = e, n.signal = De(t), n.on = n.signal.on, n.dispatchEvent = n.signal.dispatchEvent, n.signal.on("onopen", function(e) {
  6964. n.signal.onEvent = function(e) {
  6965. n.dispatchEvent(f({
  6966. type: e.event,
  6967. msg: e
  6968. }))
  6969. }, n.dispatchEvent(f({
  6970. type: "connect",
  6971. msg: e
  6972. }))
  6973. }), n.signal.on("onError", function(e) {
  6974. var t = e.msg;
  6975. onError(t.code, "error")
  6976. })
  6977. },
  6978. getLastMsgTime: function() {
  6979. return n.signal && n.signal.lastMsgTime
  6980. },
  6981. getSendBytes: function() {
  6982. return n.signal.getSendBytes()
  6983. },
  6984. getRecvBytes: function() {
  6985. return n.signal.getRecvBytes()
  6986. },
  6987. getDuration: function() {
  6988. return n.signal.getDuration()
  6989. },
  6990. disconnect: function() {
  6991. n.signal.disconnect()
  6992. },
  6993. close: function() {
  6994. n.signal.close()
  6995. },
  6996. getURL: function() {
  6997. return n.signal.getURL()
  6998. },
  6999. reconnect: function() {
  7000. n.signal.reconnect()
  7001. },
  7002. connectNext: function() {
  7003. n.signal.connectNext()
  7004. },
  7005. replaceHost: function(e) {
  7006. n.signal.replaceHost(e)
  7007. },
  7008. emitSimpleMessage: function(e, t) {
  7009. n.signal.sendSignalCommand(e, t)
  7010. },
  7011. emitRequest: function(e, t) {
  7012. n.signal.sendRequest(e, t)
  7013. },
  7014. emitReport: function(e) {
  7015. n.signal.sendReport(e)
  7016. }
  7017. };
  7018. return n.connect(), n
  7019. },
  7020. Me = function(e, t) {
  7021. var n = !1,
  7022. i = 0,
  7023. a = {
  7024. command: "convergeAllocateEdge",
  7025. sid: e.sid,
  7026. appId: e.appId,
  7027. token: e.token,
  7028. uid: e.uid,
  7029. cname: e.cname,
  7030. ts: Math.floor(Date.now() / 1e3),
  7031. version: r.VERSION,
  7032. seq: 0,
  7033. requestId: 1
  7034. };
  7035. Object(r.getParameter)("PROXY_CS").map(function(c) {
  7036. var d = (new Date).getTime();
  7037. Pe("https://" + c + "/api/v1", a, function(a, u) {
  7038. if (a) return o.
  7039. default.debug("[" + e.clientId + "] Request proxy server failed: ", a), i++, s.b.requestProxyAppCenter(e.sid, {
  7040. lts: d,
  7041. succ: !1,
  7042. APAddr: c,
  7043. workerManagerList: null,
  7044. ec: JSON.stringify(a),
  7045. response: JSON.stringify({
  7046. err: a,
  7047. res: u
  7048. })
  7049. }), void(i >= Object(r.getParameter)("PROXY_CS").length && t && t("Get proxy server failed: request all failed"));
  7050. if (!n) if ((u = JSON.parse(u)).json_body) {
  7051. var l = JSON.parse(u.json_body);
  7052. if (o.
  7053. default.debug("[" + e.clientId + "] App return:", l.servers), 200 !== l.code) {
  7054. a = "Get proxy server failed: response code [" + l.code + "], reason [ " + l.reason + "]";
  7055. o.
  7056. default.debug("[" + e.clientId + "] " + a), s.b.requestProxyAppCenter(e.sid, {
  7057. lts: d,
  7058. succ: !1,
  7059. APAddr: c,
  7060. workerManagerList: null,
  7061. ec: a,
  7062. response: JSON.stringify({
  7063. err: a,
  7064. res: u
  7065. })
  7066. })
  7067. } else {
  7068. n = !0;
  7069. var f = Ue(l.servers);
  7070. s.b.requestProxyAppCenter(e.sid, {
  7071. lts: d,
  7072. succ: !0,
  7073. APAddr: c,
  7074. workerManagerList: JSON.stringify(f),
  7075. ec: null,
  7076. response: JSON.stringify({
  7077. res: u
  7078. })
  7079. }), t && t(null, f)
  7080. }
  7081. } else o.
  7082. default.debug("[" + e.clientId + "] Get proxy server failed: no json_body"), s.b.requestProxyAppCenter(e.sid, {
  7083. lts: d,
  7084. succ: !1,
  7085. APAddr: c,
  7086. workerManagerList: null,
  7087. ec: "Get proxy server failed: no json_body",
  7088. response: JSON.stringify({
  7089. res: u
  7090. })
  7091. })
  7092. })
  7093. })
  7094. },
  7095. Pe = function(e, t, n) {
  7096. var i = {
  7097. service_name: "webrtc_proxy",
  7098. json_body: JSON.stringify(t)
  7099. };
  7100. Object(ke.post)(e, i, function(e) {
  7101. n && n(null, e)
  7102. }, function(e) {
  7103. n && n(e)
  7104. }, {
  7105. "X-Packet-Service-Type": 0,
  7106. "X-Packet-URI": 61
  7107. })
  7108. },
  7109. xe = function(e, t, n) {
  7110. var i = !1,
  7111. a = 0,
  7112. r = {
  7113. command: "request",
  7114. gatewayType: "http",
  7115. appId: e.appId,
  7116. cname: e.cname,
  7117. uid: e.uid + "",
  7118. sdkVersion: "2.3.1",
  7119. sid: e.sid,
  7120. seq: 1,
  7121. ts: +new Date,
  7122. requestId: 3,
  7123. clientRequest: {
  7124. appId: e.appId,
  7125. cname: e.cname,
  7126. uid: e.uid + "",
  7127. sid: e.sid
  7128. }
  7129. };
  7130. t.map(function(c) {
  7131. var d = (new Date).getTime();
  7132. !
  7133. function(e, t, n) {
  7134. Object(ke.post)(e, t, function(e) {
  7135. n && n(null, e)
  7136. }, function(e) {
  7137. n && n(e)
  7138. })
  7139. }("https://" + c + ":4000/v2/machine", r, function(r, u) {
  7140. if (r) return o.
  7141. default.debug("[" + e.clientId + "] Request worker manager failed: ", r), a++, s.b.requestProxyWorkerManager(e.sid, {
  7142. lts: d,
  7143. succ: !1,
  7144. workerManagerAddr: c,
  7145. ec: JSON.stringify(r),
  7146. response: JSON.stringify({
  7147. res: u
  7148. })
  7149. }), void(a >= t.length && n && n("requeet worker manager server failed: request failed"));
  7150. if (!i) {
  7151. if (!(u = JSON.parse(u)).serverResponse) return n && n("requeet worker manager server failed: serverResponse is undefined");
  7152. i = !0, s.b.requestProxyWorkerManager(e.sid, {
  7153. lts: d,
  7154. succ: !0,
  7155. workerManagerAddr: c,
  7156. ec: JSON.stringify(r),
  7157. response: JSON.stringify({
  7158. res: u
  7159. })
  7160. }), n && n(null, {
  7161. address: c,
  7162. serverResponse: u.serverResponse
  7163. })
  7164. }
  7165. })
  7166. })
  7167. },
  7168. Ue = function(e) {
  7169. if (!e || [] instanceof Array == !1) return [];
  7170. var t = [];
  7171. return e.forEach(function(e) {
  7172. var n;
  7173. e.address && e.tcp ? (e.address.match(/^[\.\:\d]+$/) ? n = "".concat(e.address.replace(/[^\d]/g, "-"), ".edge.agora.io") : (o.
  7174. 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.
  7175. default.error("[" + joinInfo.clientId + "] Invalid address format ", e)
  7176. }), t
  7177. },
  7178. Ve = function(e, t) {
  7179. var n = h()({}, e),
  7180. i = Object(r.getParameter)("CDS_AP"),
  7181. a = [],
  7182. o = !1;
  7183. (i = i.map(function(e) {
  7184. return n.proxyServer ? "https://".concat(n.proxyServer, "/ap/?url=").concat(e + "/api/v1") : "https://".concat(e, "/api/v1?action=config")
  7185. })).map(function(e) {
  7186. !
  7187. function(e, t, n) {
  7188. var i = {
  7189. flag: 64,
  7190. cipher_method: 0,
  7191. timeout: 1e3,
  7192. features: t
  7193. };
  7194. Object(ke.post)(e, i, function(e) {
  7195. try {
  7196. var t = JSON.parse(e);
  7197. n && n(null, t)
  7198. } catch (e) {
  7199. n && n(e)
  7200. }
  7201. n && n(null, e)
  7202. }, function(e) {
  7203. n && n(e)
  7204. }, {
  7205. "X-Packet-Service-Type": 0,
  7206. "X-Packet-URI": 54
  7207. })
  7208. }(e, n, function(e, n) {
  7209. o || (e ? (a.push(e), a.length >= i.length && t && t("ALL_REQUEST_FAILED")) : (o = !0, t && t(null, n)))
  7210. })
  7211. })
  7212. },
  7213. je = {},
  7214. Fe = {},
  7215. Be = function(e, t, n, i) {
  7216. var a = (new Date).getTime(),
  7217. r = t,
  7218. c = "";
  7219. t.multiIP && t.multiIP.gateway_ip && (c = {
  7220. vocs_ip: [t.multiIP.uni_lbs_ip],
  7221. vos_ip: [t.multiIP.gateway_ip]
  7222. });
  7223. var d = {
  7224. opid: 133,
  7225. flag: 4096,
  7226. ts: +new Date,
  7227. key: t.token,
  7228. cname: t.cname,
  7229. sid: t.sid,
  7230. detail: {
  7231. 6: t.stringUid
  7232. },
  7233. uid: t.uid || 0
  7234. };
  7235. c && (d.detail[5] = JSON.stringify(c)), Object(ke.post)(e + "".concat(-1 === e.indexOf("?") ? "?" : "&", "action=wrtc_gateway"), d, function(c) {
  7236. try {
  7237. var d = JSON.parse(c);
  7238. d.res && (d = d.res);
  7239. var u = d.code
  7240. } catch (e) {
  7241. var l = "requestChooseServer failed with unexpected body " + c;
  7242. return o.
  7243. default.error("[" + r.clientId + "]", l), i(l)
  7244. }
  7245. if (u) {
  7246. var f = I.APErrorCode[d.code] || u;
  7247. return s.b.joinChooseServer(t.sid, {
  7248. lts: a,
  7249. succ: !1,
  7250. csAddr: e,
  7251. serverList: null,
  7252. ec: f
  7253. }), i("Get server node failed [" + f + "]", e, f)
  7254. }
  7255. var p = [],
  7256. m = [".agora.io", ".agoraio.cn"],
  7257. g = 0;
  7258. if (e.indexOf(m[1]) > -1 && (g = 1), d.addresses.forEach(function(e) {
  7259. var t;
  7260. 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.
  7261. default.info("[" + r.clientId + "] " + "Cannot recognized as IP address ".concat(e.ip, ". Used As Host instead")), t = "".concat(e.ip, ":").concat(e.port)), p.push(t)) : o.
  7262. default.error("[" + r.clientId + "] Invalid address format ", e)
  7263. }), !p.length) {
  7264. o.
  7265. default.error("[" + r.clientId + "] Empty Address response", d);
  7266. f = "EMPTY_ADDRESS_RESPONSE";
  7267. return s.b.joinChooseServer(t.sid, {
  7268. lts: a,
  7269. succ: !1,
  7270. csAddr: e,
  7271. serverList: null,
  7272. ec: f
  7273. }), i("Get server node failed [" + f + "]", e, f)
  7274. }
  7275. var v = {
  7276. gateway_addr: p,
  7277. uid: d.uid,
  7278. cid: d.cid,
  7279. vid: d.detail && d.detail[8],
  7280. res: d,
  7281. uni_lbs_ip: d.detail
  7282. };
  7283. return n(v, e)
  7284. }, function(e, n) {
  7285. "timeout" === e.type ? (s.b.joinChooseServer(t.sid, {
  7286. lts: a,
  7287. succ: !1,
  7288. csAddr: n,
  7289. serverList: null,
  7290. ec: "timeout"
  7291. }), i("Connect choose server timeout", n)) : s.b.joinChooseServer(t.sid, {
  7292. lts: a,
  7293. succ: !1,
  7294. csAddr: n,
  7295. serverList: null,
  7296. ec: "server_wrong"
  7297. })
  7298. }, {
  7299. "X-Packet-Service-Type": 0,
  7300. "X-Packet-URI": 69
  7301. })
  7302. },
  7303. He = function(e, t, n) {
  7304. var i = !1,
  7305. a = null,
  7306. c = 1,
  7307. d = 1,
  7308. u = null,
  7309. l = e.clientId,
  7310. f = function t(d, f) {
  7311. if (!i) {
  7312. var p = !1,
  7313. g = !1,
  7314. v = [],
  7315. S = m.getBrowserInfo() || {};
  7316. Ve({
  7317. device: S.name,
  7318. system: S.os,
  7319. vendor: e.appId,
  7320. version: r.VERSION,
  7321. cname: e.cname,
  7322. sid: e.sid,
  7323. session_id: Object(s.a)(),
  7324. detail: "",
  7325. proxyServer: d
  7326. }, function(t, n) {
  7327. g = !0;
  7328. try {
  7329. var i = Object.keys(n.test_tags)[0],
  7330. a = JSON.parse(n.test_tags[i]);
  7331. u = a[1]
  7332. } catch (e) {
  7333. u = null
  7334. }
  7335. s.b.reportApiInvoke(e.sid, {
  7336. name: "_config-distribute-request",
  7337. options: {
  7338. err: t,
  7339. res: n
  7340. }
  7341. })(), Fe[l] !== et.DISCONNECTED && Fe[l] !== et.DISCONNECTING ? p && f && f(v, u) : o.
  7342. default.debug("[".concat(e.clientId, "] Request config success when connection state is ").concat(Fe[l]))
  7343. }), function(e, t, n) {
  7344. for (var i = (new Date).getTime(), a = !1, c = !0, d = function(n, r) {
  7345. if (a) s.b.joinChooseServer(e.sid, {
  7346. lts: i,
  7347. succ: !0,
  7348. csAddr: r,
  7349. serverList: n.gateway_addr,
  7350. cid: n.cid + "",
  7351. uid: n.uid + "",
  7352. ec: null
  7353. }, !1);
  7354. else {
  7355. if (clearTimeout(g), a = !0, o.
  7356. default.debug("[" + e.clientId + "] Get gateway address:", n.gateway_addr), e.proxyServer) {
  7357. for (var c = n.gateway_addr, d = 0; d < c.length; d++) {
  7358. var u = c[d].split(":");
  7359. n.gateway_addr[d] = e.proxyServer + "/ws/?h=" + u[0] + "&p=" + u[1]
  7360. }
  7361. o.
  7362. default.debug("[" + e.clientId + "] Get gateway address:", n.gateway_addr)
  7363. }
  7364. t(n), s.b.joinChooseServer(e.sid, {
  7365. lts: i,
  7366. succ: !0,
  7367. csAddr: r,
  7368. serverList: n.gateway_addr,
  7369. cid: n.cid + "",
  7370. uid: n.uid + "",
  7371. ec: null
  7372. }, !0)
  7373. }
  7374. }, u = function(t, i, a) {
  7375. c && (o.
  7376. default.error("[" + e.clientId + "]", t, i, a), a && -1 === I.JOIN_CS_RETRY_LIST.indexOf(a) && (c = !1, n(a)))
  7377. }, l = Object(r.getParameter)("WEBCS_DOMAIN"), f = 0; f < l.length; ++f) {
  7378. var p;
  7379. if ("string" == typeof l[f]) {
  7380. var m = l[f];
  7381. p = e.proxyServer ? "https://".concat(e.proxyServer, "/ap/?url=").concat(m + "/api/v1") : "https://".concat(m, "/api/v1"), o.
  7382. default.debug("[" + e.clientId + "] " + "Connect to choose_server: ".concat(p)), Be(p, e, d, u)
  7383. } else o.
  7384. default.error("[" + e.clientId + "] Invalid Host", l[f])
  7385. }
  7386. var g = setTimeout(function() {
  7387. if (!a) for (var t = Object(r.getParameter)("WEBCS_DOMAIN_BACKUP_LIST"), n = 0; n < t.length; ++n) if ("string" == typeof t[n]) {
  7388. var i = t[n];
  7389. p = e.proxyServer ? "https://".concat(e.proxyServer, "/ap/?url=").concat(i + "/api/v1") : "https://".concat(i, "/api/v1"), o.
  7390. default.debug("[" + e.clientId + "] " + "Connect to backup_choose_server: ".concat(p)), Be(p, e, d, u)
  7391. } else o.
  7392. default.error("[" + e.clientId + "] Invalid Host", t[n])
  7393. }, 1e3);
  7394. setTimeout(function() {
  7395. !a && c && n()
  7396. }, Object(r.getParameter)("WEBCS_BACKUP_CONNECT_TIMEOUT"))
  7397. }(e, function(t) {
  7398. i = !0, p = !0, v = t, clearTimeout(a), Fe[l] !== et.DISCONNECTED && Fe[l] !== et.DISCONNECTING ? g && f && f(v, u) : o.
  7399. default.debug("[".concat(e.clientId, "] Request gateway list success when connection state is ").concat(Fe[l]))
  7400. }, function(i) {
  7401. if (i) return o.
  7402. default.info("[" + e.clientId + "] Join failed: " + i), void(n && n(i));
  7403. if (Fe[l] === et.DISCONNECTED || Fe[l] === et.DISCONNECTING) return o.
  7404. default.debug("[".concat(e.clientId, "] Request gateway list falied when connection state is ").concat(Fe[l])), void(n && n("OPERATION_ABORT"));
  7405. o.
  7406. default.debug("[" + e.clientId + "] Request gateway list will be restart in " + c + "s"), a = setTimeout(function() {
  7407. t(d, f)
  7408. }, 1e3 * c), je[l] = a;
  7409. var s = Object(r.getParameter)("AP_BACKOFF_MAX_TIME");
  7410. c = c >= s ? s:
  7411. 2 * c
  7412. })
  7413. }
  7414. };
  7415. e.useProxyServer ?
  7416. function n() {
  7417. !
  7418. function(e, t) {
  7419. Me(e, function(n, i) {
  7420. if (n) return t && t(n);
  7421. o.
  7422. default.debug("[" + e.clientId + "] getProxyServerList: ", i), xe(e, i, t)
  7423. })
  7424. }(e, function(i, c) {
  7425. if (i) {
  7426. o.
  7427. default.debug("[" + e.clientId + "]", i), o.
  7428. default.debug("[" + e.clientId + "] Request proxy will be restart in " + d + "s"), a = setTimeout(function() {
  7429. n()
  7430. }, 1e3 * d), je[l] = a;
  7431. var u = Object(r.getParameter)("AP_BACKOFF_MAX_TIME");
  7432. d = d >= u ? u:
  7433. 2 * d
  7434. } else {
  7435. clearTimeout(a);
  7436. var p = c.address;
  7437. e.proxyServer = p, e.turnServer = {
  7438. mode: "manual",
  7439. url: c.address,
  7440. tcpport: c.serverResponse.tcpport || "3433",
  7441. udpport: c.serverResponse.udpport || "3478",
  7442. username: c.serverResponse.username || "test",
  7443. credential: c.serverResponse.password || "111111",
  7444. forceturn: !0
  7445. }, e.turnServer.tcpport += "", e.turnServer.udpport += "", s.b.setProxyServer(p), o.
  7446. default.setProxyServer(p), f(p, t)
  7447. }
  7448. })
  7449. }() : f(null, t)
  7450. },
  7451. We = function(e, t, n, i) {
  7452. var a = Date.now();
  7453. i = i || t.stringUid;
  7454. var r = {
  7455. sid: t.sid,
  7456. opid: 10,
  7457. appid: t.appId,
  7458. string_uid: i
  7459. };
  7460. return new Promise(function(c, d) {
  7461. Object(ke.post)(e + "".concat(-1 === e.indexOf("?") ? "?" : "&", "action=stringuid"), r, function(u) {
  7462. try {
  7463. var l = JSON.parse(u),
  7464. f = l.code
  7465. } catch (c) {
  7466. var p = "requestUserAccount failed with unexpected body " + u;
  7467. return o.
  7468. default.error("[" + t.clientId + "]", p), d({
  7469. retryable: !0,
  7470. info: p,
  7471. url: e
  7472. }), n && n.dispatchEvent({
  7473. type: "error",
  7474. reason: "USER_ACCOUNT_BODY_NOT_JSON"
  7475. }), void s.b.reqUserAccount(r.sid, {
  7476. lts: a,
  7477. success: !1,
  7478. serverAddress: e,
  7479. stringUid: i,
  7480. uid: null,
  7481. extend: u,
  7482. errorCode: "USER_ACCOUNT_BODY_NOT_JSON"
  7483. })
  7484. }
  7485. if (f) {
  7486. var m = I.StringUidErrorCode[l.code % 1e4] || "REQ_ACCOUNT_ERR_".concat(f);
  7487. return n && n.dispatchEvent({
  7488. type: "error",
  7489. reason: m
  7490. }), s.b.reqUserAccount(r.sid, {
  7491. lts: a,
  7492. success: !1,
  7493. serverAddress: e,
  7494. stringUid: i,
  7495. uid: null,
  7496. errorCode: m,
  7497. extend: r
  7498. }), d({
  7499. retryable: !1,
  7500. info: p = "Get String Uid Failed [" + m + "]",
  7501. url: e,
  7502. error: m
  7503. })
  7504. }
  7505. var g = l.uid;
  7506. if (!(g > 0 && g < Math.pow(2, 32))) {
  7507. o.
  7508. default.error("[" + t.clientId + "] " + "Invalid Uint Uid ".concat(i, " => ").concat(g), l);
  7509. m = "INVALID_UINT_UID_".concat(g);
  7510. return n && n.dispatchEvent({
  7511. type: "error",
  7512. reason: m
  7513. }), s.b.reqUserAccount(r.sid, {
  7514. lts: a,
  7515. success: !1,
  7516. serverAddress: e,
  7517. stringUid: i,
  7518. uid: null,
  7519. errorCode: m,
  7520. extend: r
  7521. }), d({
  7522. retryable: !0,
  7523. error: m,
  7524. info: "Get String Uid failed [" + m + "]",
  7525. url: e
  7526. })
  7527. }
  7528. c({
  7529. uid: g,
  7530. url: e
  7531. }), s.b.reqUserAccount(r.sid, {
  7532. lts: a,
  7533. success: !0,
  7534. serverAddress: e,
  7535. stringUid: i,
  7536. uid: g,
  7537. errorCode: null,
  7538. extend: r
  7539. })
  7540. }, function(e, t) {
  7541. if ("timeout" === e.type) {
  7542. var o = "USER_ACCOUNT_TIMEOUT";
  7543. n && n.dispatchEvent({
  7544. type: "error",
  7545. reason: o
  7546. }), s.b.reqUserAccount(r.sid, {
  7547. lts: a,
  7548. success: !1,
  7549. serverAddress: t,
  7550. stringUid: i,
  7551. uid: null,
  7552. errorCode: o,
  7553. extend: r
  7554. }), d({
  7555. retryable: !0,
  7556. info: o,
  7557. url: t
  7558. })
  7559. } else {
  7560. var c = "USER_ACCOUNT_SERVER_WRONG_".concat(e.type);
  7561. n && n.dispatchEvent({
  7562. type: "error",
  7563. reason: c
  7564. }), s.b.reqUserAccount(r.sid, {
  7565. lts: a,
  7566. success: !1,
  7567. serverAddress: t,
  7568. stringUid: i,
  7569. uid: null,
  7570. errorCode: c,
  7571. extend: r
  7572. }), d({
  7573. retryable: !0,
  7574. info: c,
  7575. url: t
  7576. })
  7577. }
  7578. }, {
  7579. "X-Packet-Service-Type": 0,
  7580. "X-Packet-URI": 72
  7581. })
  7582. })
  7583. },
  7584. Ge = function(e, t, n) {
  7585. Date.now();
  7586. var a, s = Object(r.getParameter)("ACCOUNT_REGISTER"),
  7587. c = !1,
  7588. d = Object(r.getParameter)("ACCOUNT_REGISTER_RETRY_TIMEOUT"),
  7589. u = null,
  7590. l = null,
  7591. f = new Promise(function() {
  7592. var f = K()(Y.a.mark(function f(p, m) {
  7593. var g, v, S;
  7594. return Y.a.wrap(function(f) {
  7595. for (;;) switch (f.prev = f.next) {
  7596. case 0:
  7597. u = p, l = m, a = 0;
  7598. case 3:
  7599. if (!(a < Object(r.getParameter)("ACCOUNT_REGISTER_RETRY_COUNT_MAX"))) {
  7600. f.next = 33;
  7601. break
  7602. }
  7603. if (!c) {
  7604. f.next = 6;
  7605. break
  7606. }
  7607. return f.abrupt("return");
  7608. case 6:
  7609. 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"), f.prev = 8, f.delegateYield(Y.a.mark(function i() {
  7610. var a;
  7611. return Y.a.wrap(function(i) {
  7612. for (;;) switch (i.prev = i.next) {
  7613. case 0:
  7614. return i.next = 2, We(v, e, t, n);
  7615. case 2:
  7616. if (a = i.sent, !c) {
  7617. i.next = 5;
  7618. break
  7619. }
  7620. return i.abrupt("return", {
  7621. v: void 0
  7622. });
  7623. case 5:
  7624. c = !0, setTimeout(function() {
  7625. o.
  7626. default.debug("Get UserAccount Successfully", a), u(a)
  7627. }, 0);
  7628. case 7:
  7629. case "end":
  7630. return i.stop()
  7631. }
  7632. }, i, this)
  7633. })(), "t0", 10);
  7634. case 10:
  7635. if (S = f.t0, "object" !== Se()(S)) {
  7636. f.next = 13;
  7637. break
  7638. }
  7639. return f.abrupt("return", S.v);
  7640. case 13:
  7641. f.next = 30;
  7642. break;
  7643. case 15:
  7644. if (f.prev = 15, f.t1 = f.
  7645. catch (8), !c) {
  7646. f.next = 19;
  7647. break
  7648. }
  7649. return f.abrupt("return");
  7650. case 19:
  7651. if (!f.t1.retryable) {
  7652. f.next = 27;
  7653. break
  7654. }
  7655. 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.
  7656. default.error("".concat(f.t1.info, " ").concat(f.t1.url, " Will Fetch User Account in ").concat(d / 1e3, " seconds")), f.next = 25, new Promise(function(e) {
  7657. setTimeout(e, d)
  7658. });
  7659. case 25:
  7660. f.next = 30;
  7661. break;
  7662. case 27:
  7663. o.
  7664. default.error("Get UserAccount Error: ".concat(f.t1.info, " ").concat(f.t1.url), f.t1.error), c = !0, l(f.t1);
  7665. case 30:
  7666. a++, f.next = 3;
  7667. break;
  7668. case 33:
  7669. case "end":
  7670. return f.stop()
  7671. }
  7672. }, f, this, [
  7673. [8, 15]
  7674. ])
  7675. }));
  7676. return function(e, t) {
  7677. return f.apply(this, arguments)
  7678. }
  7679. }());
  7680. return f.cancel = function() {
  7681. c || (c = !0, l({
  7682. info: "Request Cancelled",
  7683. retryable: !1
  7684. }))
  7685. }, f.isFinished = function() {
  7686. return c
  7687. }, f
  7688. },
  7689. qe = {
  7690. ERR_NO_VOCS_AVAILABLE: "tryNext",
  7691. ERR_NO_VOS_AVAILABLE: "tryNext",
  7692. ERR_JOIN_CHANNEL_TIMEOUT: "tryNext",
  7693. WARN_REPEAT_JOIN: "quit",
  7694. ERR_JOIN_BY_MULTI_IP: "recover",
  7695. WARN_LOOKUP_CHANNEL_TIMEOUT: "tryNext",
  7696. WARN_OPEN_CHANNEL_TIMEOUT: "tryNext",
  7697. ERR_VOM_SERVICE_UNAVAILABLE: "tryNext",
  7698. ERR_TOO_MANY_USERS: "tryNext",
  7699. ERR_MASTER_VOCS_UNAVAILABLE: "tryNext",
  7700. ERR_INTERNAL_ERROR: "tryNext",
  7701. K_SERVICE_NOT_READY: "recover",
  7702. notification_test_recover: "recover",
  7703. notification_test_tryNext: "tryNext",
  7704. notification_test_retry: "retry"
  7705. },
  7706. Ye = {
  7707. googActualEncBitrate: "A_aeb",
  7708. googAvailableSendBandwidth: "A_asb",
  7709. googRetransmitBitrate: "A_rb",
  7710. googAvailableReceiveBandwidth: "A_arb",
  7711. googTargetEncBitrate: "A_teb",
  7712. googBucketDelay: "A_bd",
  7713. googTransmitBitrate: "A_tb",
  7714. googCodecName: "A_cn",
  7715. bytesSent: "bytesSent",
  7716. packetsLost: "packetsLost",
  7717. packetsSent: "packetsSent",
  7718. googAdaptationChanges: "A_ac",
  7719. googAvgEncodeMs: "A_aem",
  7720. googEncodeUsagePercent: "A_eup",
  7721. googFirsReceived: "A_fr",
  7722. googFrameHeightInput: "A_fhi",
  7723. googFrameHeightSent: "A_fhs",
  7724. googFrameRateInput: "A_fri",
  7725. googFrameRateSent: "A_frs",
  7726. googFrameWidthInput: "A_fwi",
  7727. googFrameWidthSent: "A_fws",
  7728. googNacksReceived: "A_nr",
  7729. googPlisReceived: "A_pr",
  7730. googRtt: "A_rtt",
  7731. aecDivergentFilterFraction: "A_adff",
  7732. audioInputLevel: "A_ail",
  7733. googEchoCancellationReturnLoss: "A_ecrl",
  7734. googEchoCancellationReturnLossEnhancement: "A_ecrle",
  7735. googResidualEchoLikelihood: "A_rel",
  7736. googResidualEchoLikelihoodRecentMax: "A_relrm",
  7737. googTargetDelayMs: "A_tdm",
  7738. bytesReceived: "bytesReceived",
  7739. packetsReceived: "packetsReceived",
  7740. googDecodeMs: "A_dm",
  7741. googMaxDecodeMs: "A_mdm",
  7742. googRenderDelayMs: "A_rdm",
  7743. googFrameWidthReceived: "A_fwr",
  7744. googFrameHeightReceived: "A_fhr",
  7745. googFrameRateReceived: "A_frr",
  7746. googFrameRateDecoded: "A_frd",
  7747. googFrameRateOutput: "A_fro",
  7748. googJitterBufferMs: "A_jbm",
  7749. googCurrentDelayMs: "A_cdm",
  7750. googMinPlayoutDelayMs: "A_mpdm",
  7751. googNacksSent: "A_ns",
  7752. googPlisSent: "A_ps",
  7753. googFirsSent: "A_fs",
  7754. audioOutputLevel: "A_aol",
  7755. googAccelerateRate: "A_ar",
  7756. googDecodingCNG: "A_dcng",
  7757. googDecodingCTN: "A_dctn",
  7758. googDecodingCTSG: "A_dctsg",
  7759. googDecodingNormal: "A_dn",
  7760. googDecodingPLC: "A_dplc",
  7761. googDecodingPLCCNG: "A_dplccng",
  7762. googExpandRate: "A_er",
  7763. googJitterReceived: "A_jr",
  7764. googPreemptiveExpandRate: "A_per",
  7765. googPreferredJitterBufferMs: "A_pjbm",
  7766. googSecondaryDecodedRate: "A_sdr",
  7767. googSpeechExpandRate: "A_ser",
  7768. uplink_fraction_lost: "B_ufl",
  7769. uplink_cumulative_lost: "B_ucl",
  7770. uplink_available_bandwidth: "B_uab",
  7771. period_fir: "B_fir",
  7772. access_delay: "B_acd",
  7773. uplink_network_quality: "B_unq",
  7774. downlink_network_quality: "B_dnq",
  7775. pub_audio_lost_ratio_400ms: "B_palr4",
  7776. pub_video_lost_ratio_400ms: "B_pvlr4",
  7777. e2e_delay: "B_ed",
  7778. audio_delay: "B_ad",
  7779. video_delay: "B_vd",
  7780. stream_type: "B_st",
  7781. e2e_audio_lost_ratio_400ms: "B_ealr4",
  7782. e2e_video_lost_ratio_400ms: "B_evlr4",
  7783. downlink_estimate_bandwidth: "B_deb"
  7784. },
  7785. Je = {};
  7786. for (var Ke in Ye) {
  7787. var ze = Ye[Ke];
  7788. Je[ze] && console.error("Key Conflict: ".concat(ze, ": ").concat(Ye[ze], "| ").concat(Ke)), Je[ze] = Ke
  7789. }
  7790. var Xe = function(e) {
  7791. return Ye[e] || e
  7792. },
  7793. Qe = function(e) {
  7794. return Je[e] || e
  7795. };
  7796. var $e = function t(n) {
  7797. var i = !1,
  7798. a = function(e) {
  7799. return {
  7800. _type: "control",
  7801. _message: e
  7802. }
  7803. },
  7804. d = function(e, t) {
  7805. var n = {};
  7806. return Object.keys(t).forEach(function(e) {
  7807. Object(r.getParameter)("STATS_FILTER")[e] || (n[Xe(e)] = t[e])
  7808. }), {
  7809. _type: "subscribe_related_stats",
  7810. _message: {
  7811. stream_type: "high",
  7812. stream_id: e,
  7813. stats: n
  7814. }
  7815. }
  7816. },
  7817. g = function(e) {
  7818. return {
  7819. _type: "publish",
  7820. _message: e
  7821. }
  7822. },
  7823. v = function(e, t) {
  7824. var n = {};
  7825. return Object.keys(t).forEach(function(e) {
  7826. Object(r.getParameter)("STATS_FILTER")[e] || (n[Xe(e)] = t[e])
  7827. }), {
  7828. _type: "subscribe_stats",
  7829. _message: {
  7830. stream_id: e,
  7831. stats: n
  7832. }
  7833. }
  7834. },
  7835. S = t.DISCONNECTED,
  7836. _ = t.CONNECTING,
  7837. E = t.CONNECTED,
  7838. T = t.DISCONNECTING,
  7839. y = S,
  7840. b = c(n);
  7841. Object.defineProperty(b, "state", {
  7842. set: function(e) {
  7843. var n = y;
  7844. y = e, function(e, t) {
  7845. Fe[e] = t
  7846. }(b.clientId, e), n !== e && b.dispatchEvent({
  7847. type: "connection-state-change",
  7848. prevState: t.connetionStateMap[n],
  7849. curState: t.connetionStateMap[e]
  7850. })
  7851. },
  7852. get: function() {
  7853. return y
  7854. }
  7855. }), 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) {
  7856. var t = we;
  7857. e.makeRequest = function(n, i, a) {
  7858. if (void 0 === e.socket) return o.
  7859. default.debug("[".concat(e.clientId, "] No socket available")), void t(a, I.
  7860. default.INVALID_OPERATION);
  7861. try {
  7862. e.socket.emitRequest(n, function(e, t) {
  7863. var n;
  7864. "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))
  7865. })
  7866. } catch (i) {
  7867. o.
  7868. default.debug("[".concat(e.clientId, "] Socket emit message failed ").concat(JSON.stringify(n))), o.
  7869. default.debug("[".concat(e.clientId, "] "), i), t(a, I.
  7870. default.SOCKET_ERROR)
  7871. }
  7872. }, e.makeReport = function(t) {
  7873. void 0 === e.socket && o.
  7874. default.debug("[".concat(e.clientId, "] No socket available"));
  7875. try {
  7876. e.socket.emitReport(t)
  7877. } catch (n) {
  7878. o.
  7879. default.debug("[".concat(e.clientId, "] Socket emit report failed ").concat(JSON.stringify(t)))
  7880. }
  7881. }
  7882. }(b), b.inChannelInfo = {
  7883. joinAt: null,
  7884. duration: 0
  7885. }, b._sendMessage = function(e, t) {
  7886. switch (e) {
  7887. case "SubscribeStats":
  7888. b.makeReport(v.apply(void 0, Ne()(t)))
  7889. }
  7890. };
  7891. var R = we;
  7892. b.p2pCounter = Object(F.random)(1e5), b.generateP2PId = function() {
  7893. return ++b.p2pCounter
  7894. }, b.audioVolumeIndication = {
  7895. enabled: !1,
  7896. sortedAudioVolumes: [],
  7897. smooth: 3,
  7898. interval: 2e3
  7899. }, b.remoteVideoStreamTypes = {
  7900. REMOTE_VIDEO_STREAM_HIGH: 0,
  7901. REMOTE_VIDEO_STREAM_LOW: 1,
  7902. REMOTE_VIDEO_STREAM_MEDIUM: 2
  7903. }, b.streamFallbackTypes = {
  7904. STREAM_FALLBACK_OPTION_DISABLED: 0,
  7905. STREAM_FALLBACK_OPTION_VIDEO_STREAM_LOW: 1,
  7906. STREAM_FALLBACK_OPTION_AUDIO_ONLY: 2
  7907. }, b.configPublisher = function(e) {
  7908. b.config = e
  7909. }, b.getGatewayInfo = function(e, t) {
  7910. b.makeRequest({
  7911. _type: "gateway_info"
  7912. }, e, t)
  7913. }, b.setClientRole = function(e, t) {
  7914. o.
  7915. default.debug("[".concat(b.clientId, "] setClientRole to ").concat(e));
  7916. var n = s.b.reportApiInvoke(b.joinInfo.sid, {
  7917. name: "_setClientRole",
  7918. callback: t
  7919. });
  7920. b.makeRequest({
  7921. _type: "set_client_role",
  7922. _message: {
  7923. role: e
  7924. }
  7925. }, function() {
  7926. b.role = e, b.dispatchEvent({
  7927. type: "client-role-changed",
  7928. role: e
  7929. }), n && n(null, {
  7930. role: e
  7931. })
  7932. }, function(t, i) {
  7933. 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);
  7934. o.
  7935. default.error("set Client role error to " + e + ": " + t), n && n(t)
  7936. })
  7937. }, b.join = function(e, t, i, a) {
  7938. e.useProxyServer && (b.hasChangeBGPAddress = !0);
  7939. var c = (new Date).getTime(),
  7940. d = e.uid;
  7941. if (b.inChannelInfo.joinAt && (b.inChannelInfo.duration += c - b.inChannelInfo.joinAt), b.inChannelInfo.joinAt = c, b.state !== _) return o.
  7942. default.error("[".concat(b.clientId, "] GatewayClient.join Failed: state "), b.state), a && a(I.
  7943. default.INVALID_OPERATION), void s.b.joinGateway(e.sid, {
  7944. lts: c,
  7945. succ: !1,
  7946. ec: I.
  7947. default.INVALID_OPERATION,
  7948. addr:
  7949. null
  7950. });
  7951. if (null != d && parseInt(d) !== d) return o.
  7952. default.error("[".concat(b.clientId, "] Input uid is invalid")), b.state = S, a && a(I.
  7953. default.INVALID_PARAMETER), void s.b.joinGateway(e.sid, {
  7954. lts: c,
  7955. succ: !1,
  7956. ec: I.
  7957. default.INVALID_PARAMETER,
  7958. addr:
  7959. null
  7960. });
  7961. var u = Ze.register(b, {
  7962. uid: d,
  7963. cname: e && e.cname
  7964. });
  7965. if (u) return b.state = S, a && a(u), void s.b.joinGateway(e.sid, {
  7966. lts: c,
  7967. succ: !1,
  7968. ec: u,
  7969. addr: null
  7970. });
  7971. b.joinInfo = h()({}, e), b.uid = d, b.key = t, b.pingpongCounter = 0, N(e, function(t) {
  7972. if (b.state === T || b.state === S) return a && a("LEAVE_BEFORE_JOIN_SUCCESS");
  7973. var u, l, p, m;
  7974. b.state = E, o.
  7975. default.debug("[".concat(b.clientId, "] Connected to gateway server")), clearInterval(b.pingTimer), b.pingTimer = setInterval(function() {
  7976. var e = Object(r.getParameter)("PING_PONG_TIME_OUT");
  7977. if (++b.pingpongCounter >= e) {
  7978. var t = Date.now();
  7979. b.socket && o.
  7980. 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(f({
  7981. type: "disconnect",
  7982. event: {
  7983. msg: "PING_PONG_TIME_OUT"
  7984. }
  7985. })))
  7986. }
  7987. var n = Date.now();
  7988. b.makeRequest({
  7989. _type: "ping"
  7990. }, function() {
  7991. b.pingpongCounter = 0;
  7992. var e = Date.now() - n;
  7993. setTimeout(function() {
  7994. Object(r.getParameter)("REPORT_STATS") && b.makeRequest({
  7995. _type: "ping_back",
  7996. _message: {
  7997. pingpongElapse: e
  7998. }
  7999. })
  8000. }, 1e3)
  8001. }, function(e, t) {
  8002. "TIMEOUT" !== e && (o.
  8003. 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.
  8004. default.info("Disconnecting websocket connection"), b.socket.signal.connection.close()))
  8005. })
  8006. }, 3e3), b.makeRequest((u = {
  8007. role: b.role
  8008. }, l = u.role, p = h()({}, b.joinInfo.apResponse), m = {
  8009. session_id: b.joinInfo.sid,
  8010. app_id: n.appId,
  8011. channel_key: b.key,
  8012. channel_name: b.joinInfo.cname,
  8013. sdk_version: r.VERSION,
  8014. browser: navigator.userAgent,
  8015. process_id: Object(s.a)(),
  8016. mode: b.mode,
  8017. codec: b.codec,
  8018. role: l,
  8019. has_changed_gateway: Object(r.getParameter)("FORCE_CHANGED_GATEWAY_FLAG") || b.hasChangeBGPAddress,
  8020. ap_response: p,
  8021. extend: Object(r.getParameter)("JOIN_EXTEND"),
  8022. details: {}
  8023. }, 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 && (p.addresses[b.socket.signal.hostIndex] && (m.ap_response.ticket = p.addresses[b.socket.signal.hostIndex].ticket, delete p.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.
  8024. default.debug("Turn config", b.joinInfo.turnServer)), b.dispatchEvent({
  8025. type: "join-message-hook",
  8026. joinMessage: m
  8027. }, !0), {
  8028. _type: "join",
  8029. _message: m
  8030. }), function(t) {
  8031. s.b.joinGateway(e.sid, {
  8032. lts: c,
  8033. succ: !0,
  8034. ec: null,
  8035. vid: e.vid,
  8036. addr: b.socket.getURL()
  8037. }), b.rejoinAttempt = 0, i && i(t.uid), b.dispatchEvent({
  8038. type: "join"
  8039. }), clearInterval(b.timers.trafficStats), b.timers.trafficStats = setInterval(function() {
  8040. b.makeRequest({
  8041. _type: "traffic_stats"
  8042. }, function(e) {
  8043. var t = {};
  8044. for (var n in e) t[Qe(n)] = e[n];
  8045. if (t.peer_delay && t.peer_delay.length) {
  8046. var i = [];
  8047. t.peer_delay.forEach(function(e) {
  8048. var t = {};
  8049. for (var n in e) t[Qe(n)] = e[n];
  8050. i.push(t)
  8051. }), t.peer_delay = i
  8052. }
  8053. b.traffic_stats = t;
  8054. var a = b.joinInfo.stringUid,
  8055. r = b.localStreams[d] || b.localStreams[a];
  8056. r && (r.traffic_stats = {
  8057. access_delay: t.access_delay
  8058. }), t.peer_delay && t.peer_delay.forEach(function(e) {
  8059. var n = b.remoteStreams[e.peer_uid];
  8060. n && (n.traffic_stats = {
  8061. access_delay: t.access_delay,
  8062. e2e_delay: e.e2e_delay,
  8063. audio_delay: e.audio_delay,
  8064. video_delay: e.video_delay
  8065. })
  8066. }), b.dispatchEvent({
  8067. type: "after-getTrafficStats",
  8068. trafficStats: t
  8069. })
  8070. })
  8071. }, 3e3)
  8072. }, function(t, n) {
  8073. if (o.
  8074. default.error("[".concat(b.clientId, "] User join failed [").concat(t, "]")), "ERR_JOIN_BY_MULTI_IP" === t) {
  8075. try {
  8076. s.b.joinGateway(e.sid, {
  8077. lts: c,
  8078. succ: !1,
  8079. ec: "ERR_JOIN_BY_MULTI_IP",
  8080. addr: b.socket.getURL()
  8081. })
  8082. } catch (e) {}
  8083. return b.dispatchEvent({
  8084. type: "onMultiIP",
  8085. option: n.option
  8086. }, !0)
  8087. }
  8088. qe[t] && b.rejoinAttempt < 4 ? b._doWithAction(qe[t], i, a) : a && a(t), s.b.joinGateway(e.sid, {
  8089. lts: c,
  8090. succ: !1,
  8091. ec: t,
  8092. addr: b.socket.getURL()
  8093. })
  8094. })
  8095. }, function(t) {
  8096. o.
  8097. default.error("[".concat(b.clientId, "] User join failed [").concat(t, "]")), a && a(t), s.b.joinGateway(e.sid, {
  8098. lts: c,
  8099. succ: !1,
  8100. ec: t,
  8101. addr: b.socket.getURL()
  8102. })
  8103. }), this.remoteMuteState = {}, b.resetAudioVolumeIndication()
  8104. }, b.leave = function(e, t) {
  8105. var n = Ze.unregister(b);
  8106. switch (n && o.
  8107. default.debug("[".concat(b.clientId, "] "), n), b.state) {
  8108. case S:
  8109. return o.
  8110. default.debug("[".concat(b.clientId, "] Client Already in DISCONNECTED status")), void R(e);
  8111. case T:
  8112. return o.
  8113. default.debug("[".concat(b.clientId, "] Client Already in DISCONNECTING status")), void R(t, I.
  8114. default.INVALID_OPERATION);
  8115. case _:
  8116. return 1 == b.reconnectingCS ? e && e() : (b.socket.close(), b.socket = void 0, o.
  8117. default.info("[".concat(b.clientId, "] Client connecting, Leave channel success")), b.state = S, e && e())
  8118. }
  8119. 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]);
  8120. for (var i in b.inChannelInfo.joinAt && (b.inChannelInfo.duration += Date.now() - b.inChannelInfo.joinAt, b.inChannelInfo.joinAt = null), b.makeRequest({
  8121. _type: "leave"
  8122. }, function(t) {
  8123. b.socket.close(), b.socket = void 0, o.
  8124. default.info("[".concat(b.clientId, "] Leave channel success")), b.state = S, e && e(t)
  8125. }, function(e) {
  8126. "TIMEOUT" !== e && (o.
  8127. default.error("[".concat(b.clientId, "] Leave Channel Failed"), e), b.state = E, t && t(e))
  8128. }), b.localStreams) if (b.localStreams.hasOwnProperty(i)) {
  8129. var a = b.localStreams[i];
  8130. delete b.localStreams[i], void 0 !== a.pc && (a.pc.close(), a.pc = void 0)
  8131. }
  8132. D()
  8133. }, b.publish = function(e, t, n, i) {
  8134. var c = (new Date).getTime(),
  8135. d = !1;
  8136. if (e.publishLTS = c, "object" !== Se()(e) || null === e) return o.
  8137. default.error("[".concat(b.clientId, "] Invalid local stream")), i && i(I.
  8138. default.INVALID_LOCAL_STREAM), void s.b.publish(b.joinInfo.sid, {
  8139. lts: c,
  8140. succ: !1,
  8141. audioName: e.hasAudio() && e.audioName,
  8142. videoName: e.hasVideo() && e.videoName,
  8143. screenName: e.hasScreen() && e.screenName,
  8144. ec: I.
  8145. default.INVALID_LOCAL_STREAM
  8146. });
  8147. if (!e.stream && void 0 === e.url) return o.
  8148. default.error("[".concat(b.clientId, "] Invalid local media stream")), i && i(I.
  8149. default.INVALID_LOCAL_STREAM), void s.b.publish(b.joinInfo.sid, {
  8150. lts: c,
  8151. succ: !1,
  8152. audioName: e.hasAudio() && e.audioName,
  8153. videoName: e.hasVideo() && e.videoName,
  8154. screenName: e.hasScreen() && e.screenName,
  8155. ec: I.
  8156. default.INVALID_LOCAL_STREAM
  8157. });
  8158. if (b.state !== E) return o.
  8159. default.error("[".concat(b.clientId, "] User is not in the session")), i && i(I.
  8160. default.INVALID_OPERATION), void s.b.publish(b.joinInfo.sid, {
  8161. lts: c,
  8162. succ: !1,
  8163. audioName: e.hasAudio() && e.audioName,
  8164. videoName: e.hasVideo() && e.videoName,
  8165. screenName: e.hasScreen() && e.screenName,
  8166. ec: I.
  8167. default.INVALID_OPERATION
  8168. });
  8169. var u = e.getAttributes() || {};
  8170. if (e.local && void 0 === b.localStreams[e.getId()] && (e.hasAudio() || e.hasVideo() || e.hasScreen())) {
  8171. var f = b.generateP2PId();
  8172. if (b.p2ps.set(f, e), e.p2pId = f, void 0 !== e.url) w(g({
  8173. state: "url",
  8174. audio: e.hasAudio(),
  8175. video: e.hasVideo(),
  8176. attributes: e.getAttributes()
  8177. }, e.url), function(t, n) {
  8178. "success" === t ? (e.getUserId() !== n && e.setUserId(n), b.localStreams[n] = e, e.onClose = function() {
  8179. b.unpublish(e)
  8180. }) : o.
  8181. default.error("[".concat(b.clientId, "] Publish local stream failed"), t)
  8182. });
  8183. else {
  8184. b.localStreams[e.getId()] = e, e.connectionSpec = {
  8185. callback: function(u) {
  8186. o.
  8187. default.debug("[".concat(b.clientId, "] SDP exchange in publish : send offer -- "), JSON.parse(u)), b.makeRequest(g({
  8188. state: "offer",
  8189. stream_type: 1 == t.streamType ? "low" : "high",
  8190. p2p_id: f,
  8191. sdp: u,
  8192. audio: e.audio || e.screenAudio,
  8193. video: e.screen || e.video,
  8194. screen: e.screen,
  8195. attributes: e.getAttributes(),
  8196. dtx: e.DTX,
  8197. hq: e.highQuality,
  8198. lq: e.lowQuality,
  8199. stereo: e.stereo,
  8200. speech: e.speech,
  8201. codec: b.codec,
  8202. extend: Object(r.getParameter)("PUB_EXTEND")
  8203. }), function(t) {
  8204. e.getUserId() !== t.uid && e.setUserId(t.uid), o.
  8205. default.info("[".concat(b.clientId, "] Local stream published with uid"), t.uid), e.onClose = function() {
  8206. b.unpublish(e)
  8207. }, e._onAudioUnmute = function() {
  8208. b.makeReport(a({
  8209. action: "unmute_local_audio",
  8210. stream_id: e.getId()
  8211. }))
  8212. }, e._onVideoUnmute = function() {
  8213. b.makeReport(a({
  8214. action: "unmute_local_video",
  8215. stream_id: e.getId()
  8216. }))
  8217. }, e._onAudioMute = function() {
  8218. b.makeReport(a({
  8219. action: "mute_local_audio",
  8220. stream_id: e.getId()
  8221. }))
  8222. }, e._onVideoMute = function() {
  8223. b.makeReport(a({
  8224. action: "mute_local_video",
  8225. stream_id: e.getId()
  8226. }))
  8227. }, e.getId() === e.getUserId() && (e.isAudioOn() || e.hasAudio() && (o.
  8228. default.debug("[".concat(b.clientId, "] local stream audio mute")), e._onAudioMute()), e.isVideoOn() || (e.hasVideo() || e.hasScreen()) && (o.
  8229. default.debug("[".concat(b.clientId, "] local stream video mute")), e._onVideoMute())), e.pc.oniceconnectionstatechange = function(t) {
  8230. if ("failed" === t) {
  8231. if (null != b.timers[e.getId()] && (clearInterval(b.timers[e.getId()]), clearInterval(b.timers[e.getId()] + "_RelatedStats")), o.
  8232. default.error("[".concat(b.clientId, "] Publisher connection is lost -- streamId: ").concat(e.getId(), ", p2pId: ").concat(f)), b.p2ps.delete(f), o.
  8233. default.debug("[".concat(b.clientId, "] publish p2p failed: "), b.p2ps), !d) return d = !0, s.b.publish(b.joinInfo.sid, {
  8234. lts: c,
  8235. succ: !1,
  8236. audioName: e.hasAudio() && e.audioName,
  8237. videoName: e.hasVideo() && e.videoName,
  8238. screenName: e.hasScreen() && e.screenName,
  8239. ec: I.
  8240. default.PEERCONNECTION_FAILED
  8241. }), b.dispatchEvent(l({
  8242. type: "pubP2PLost",
  8243. stream: e
  8244. })), i && i(I.
  8245. default.PEERCONNECTION_FAILED);
  8246. b.dispatchEvent(l({
  8247. type: "pubP2PLost",
  8248. stream: e
  8249. }))
  8250. } else if ("connected" === t && (o.
  8251. default.debug("[".concat(b.clientId, "] publish p2p connected: "), b.p2ps), e._isAudioMuted() ? b.makeReport(a({
  8252. action: "mute_local_audio",
  8253. stream_id: e.getId()
  8254. })):
  8255. b.makeReport(a({
  8256. action: "unmute_local_audio",
  8257. stream_id: e.getId()
  8258. })), e._isVideoMuted() ? b.makeReport(a({
  8259. action: "mute_local_video",
  8260. stream_id: e.getId()
  8261. })) : b.makeReport(a({
  8262. action: "unmute_local_video",
  8263. stream_id: e.getId()
  8264. })), !d)) return d = !0, s.b.publish(b.joinInfo.sid, {
  8265. lts: c,
  8266. succ: !0,
  8267. audioName: e.hasAudio() && e.audioName,
  8268. videoName: e.hasVideo() && e.videoName,
  8269. screenName: e.hasScreen() && e.screenName,
  8270. ec: null
  8271. }), n && n()
  8272. }, o.
  8273. default.debug("[".concat(b.clientId, "] SDP exchange in publish : receive answer -- "), JSON.parse(t.sdp)), e.pc.processSignalingMessage(t.sdp)
  8274. }, function(t, n) {
  8275. o.
  8276. default.error("Publish Failed: ".concat(t)), s.b.publish(b.joinInfo.sid, {
  8277. lts: c,
  8278. succ: !0,
  8279. audioName: e.hasAudio() && e.audioName,
  8280. videoName: e.hasVideo() && e.videoName,
  8281. screenName: e.hasScreen() && e.screenName,
  8282. ec: t
  8283. }), "TIMEOUT" != t && (b.processPublishFailure(e), i && i(t))
  8284. })
  8285. },
  8286. audio: e.hasAudio(),
  8287. video: e.hasVideo(),
  8288. screen: e.hasScreen(),
  8289. isSubscriber: !1,
  8290. stunServerUrl: b.stunServerUrl,
  8291. turnServer: b.joinInfo.turnServer,
  8292. maxAudioBW: u.maxAudioBW,
  8293. minVideoBW: u.minVideoBW,
  8294. maxVideoBW: u.maxVideoBW,
  8295. mode: b.mode,
  8296. codec: b.codec,
  8297. isVideoMute: e.userMuteVideo || e.peerMuteVideo,
  8298. isAudioMute: e.userMuteAudio || e.peerMuteAudio,
  8299. maxFrameRate: e.attributes.maxFrameRate,
  8300. clientId: b.clientId
  8301. }, e.pc = V(e.connectionSpec), e.pc.addStream(e.stream), o.
  8302. default.debug("[".concat(b.clientId, "] PeerConnection add stream :"), e.stream), e.pc.onnegotiationneeded = function(n) {
  8303. var i = {
  8304. state: "negotiation",
  8305. stream_type: 1 === t.streamType ? "low" : "high",
  8306. p2p_id: f,
  8307. sdp: n
  8308. };
  8309. b.makeRequest(g(i), function(t) {
  8310. o.
  8311. default.debug("Negotating Stream ".concat(e.getId())), e.pc.processSignalingMessage(t.sdp)
  8312. }, function(e, t) {
  8313. o.
  8314. default.error("Negotiation failed ".concat(e), t, i)
  8315. })
  8316. }, clearInterval(b.timers[e.getId()]), b.timers[e.getId()] = setInterval(function() {
  8317. if (Object(r.getParameter)("REPORT_STATS")) {
  8318. var t = 0;
  8319. e && e.pc && e.pc.getStats && e.pc.getStatsRate(function(n) {
  8320. n.forEach(function(n) {
  8321. if (n && n.id && !/_recv$/.test(n.id) && !/^time$/.test(n.id) && e.getUserId()) {
  8322. 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 {
  8323. var i = e.stream.getVideoTracks()[0];
  8324. n.A_vstd = i.enabled ? "0" : "1"
  8325. } catch (e) {}
  8326. if ("audio" === n.mediaType) try {
  8327. var a = e.stream.getAudioTracks()[0];
  8328. n.A_astd = a.enabled ? "0" : "1"
  8329. } catch (e) {}
  8330. if (e.getId() == e.getUserId()) {
  8331. var 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("PublishStats 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[Xe(n)] = e[n])
  8340. }), {
  8341. _type: "publish_stats",
  8342. _message: {
  8343. stream_type: "high",
  8344. stats: t
  8345. }
  8346. }
  8347. }(n))
  8348. }, s)
  8349. } else {
  8350. s = 200 * t;
  8351. t++, setTimeout(function() {
  8352. var e = b.socket && b.socket.getLastMsgTime() && Date.now() - b.socket.getLastMsgTime();
  8353. e > Object(r.getParameter)("REPORT_STATS_TIMEOUT") ? o.
  8354. default.debug("PublishStatsLow report blocked by REPORT_STATS_TIMEOUT ".concat(e)):
  8355. b.makeReport(function(e) {
  8356. var t = {};
  8357. return Object.keys(e).forEach(function(n) {
  8358. Object(r.getParameter)("STATS_FILTER")[n] || (t[Xe(n)] = e[n])
  8359. }), {
  8360. _type: "publish_stats",
  8361. _message: {
  8362. stream_type: "low",
  8363. stats: t
  8364. }
  8365. }
  8366. }(n))
  8367. }, s)
  8368. }
  8369. }
  8370. })
  8371. })
  8372. }
  8373. }, 3e3);
  8374. var p = function() {
  8375. Object(r.getParameter)("REPORT_STATS") && e && e.pc && e.pc.getVideoRelatedStats && e.pc.getVideoRelatedStats(function(t) {
  8376. var n, i, a = b.socket && b.socket.getLastMsgTime() && Date.now() - b.socket.getLastMsgTime();
  8377. a > Object(r.getParameter)("REPORT_STATS_TIMEOUT") ? o.
  8378. default.debug("PublishRelatedStats report blocked by REPORT_STATS_TIMEOUT ".concat(a)):
  8379. e.getId() === e.getUserId() ? b.makeReport((n = t, i = {}, Object.keys(n).forEach(function(e) {
  8380. Object(r.getParameter)("STATS_FILTER")[e] || (i[Xe(e)] = n[e])
  8381. }), {
  8382. _type: "publish_related_stats",
  8383. _message: {
  8384. stream_type: "high",
  8385. stats: i
  8386. }
  8387. })) : b.makeReport(function(e) {
  8388. var t = {};
  8389. return Object.keys(e).forEach(function(n) {
  8390. Object(r.getParameter)("STATS_FILTER")[n] || (t[Xe(n)] = e[n])
  8391. }), {
  8392. _type: "publish_related_stats",
  8393. _message: {
  8394. stream_type: "low",
  8395. stats: t
  8396. }
  8397. }
  8398. }(t))
  8399. })
  8400. };
  8401. p(), clearInterval(b.timers[e.getId() + "_RelatedStats"]), b.timers[e.getId() + "_RelatedStats"] = setInterval(p, 1e3)
  8402. }
  8403. }
  8404. }, b.unpublish = function(e, t, n, i) {
  8405. if ("object" !== Se()(e) || null === e) return o.
  8406. default.error("[".concat(b.clientId, "] Invalid local stream")), void R(i, I.
  8407. default.INVALID_LOCAL_STREAM);
  8408. if (b.state !== E) return o.
  8409. default.error("[".concat(b.clientId, "] User not in the session")), void R(i, I.
  8410. default.INVALID_OPERATION);
  8411. 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()]) {
  8412. delete b.localStreams[e.getId()];
  8413. var a = {
  8414. stream_id: e.getUserId(),
  8415. stream_type: 1 === t.streamType ? "low" : "high"
  8416. };
  8417. b.makeRequest({
  8418. _type: "unpublish",
  8419. _message: a
  8420. }), (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({
  8421. type: "stream-unpublished",
  8422. stream: e,
  8423. options: t
  8424. }), n && n()
  8425. } else o.
  8426. default.error("[".concat(b.clientId, "] Invalid local stream")), R(i, I.
  8427. default.INVALID_LOCAL_STREAM);
  8428. else o.
  8429. default.error("[".concat(b.clientId, "] User not in the session")), R(i, I.
  8430. default.INVALID_OPERATION)
  8431. }, b.subscribe = function(e, t, n) {
  8432. var i = (new Date).getTime();
  8433. e.subscribeLTS = i;
  8434. var c = !1;
  8435. if (o.
  8436. default.info("[".concat(b.clientId, "] Gatewayclient ").concat(b.uid, " Subscribe ").concat(e.getId(), ": ").concat(JSON.stringify(e.subscribeOptions))), "object" !== Se()(e) || null === e) return o.
  8437. default.error("[".concat(b.clientId, "] Invalid remote stream")), n && n(I.
  8438. default.INVALID_REMOTE_STREAM), void s.b.subscribe(b.joinInfo.sid, {
  8439. lts: i,
  8440. succ: !1,
  8441. video: e.subscribeOptions && e.subscribeOptions.video,
  8442. audio: e.subscribeOptions && e.subscribeOptions.audio,
  8443. peerid: e.getId(),
  8444. ec: I.
  8445. default.INVALID_REMOTE_STREAM
  8446. });
  8447. if (b.state !== E && (o.
  8448. default.error("[".concat(b.clientId, "] User is not in the session")), !c)) return c = !0, s.b.subscribe(b.joinInfo.sid, {
  8449. lts: i,
  8450. succ: !1,
  8451. video: e.subscribeOptions && e.subscribeOptions.video,
  8452. audio: e.subscribeOptions && e.subscribeOptions.audio,
  8453. peerid: e.getId(),
  8454. ec: I.
  8455. default.INVALID_OPERATION
  8456. }), n && n(I.
  8457. default.INVALID_OPERATION);
  8458. if (!e.local && b.remoteStreams.hasOwnProperty(e.getId())) if (e.hasAudio() || e.hasVideo() || e.hasScreen()) {
  8459. var f = b.generateP2PId();
  8460. b.p2ps.set(f, e), e.p2pId = f, e.pc = V({
  8461. callback: function(t) {
  8462. o.
  8463. default.debug("[".concat(b.clientId, "] SDP exchange in subscribe : send offer -- "), JSON.parse(t));
  8464. var a = {
  8465. stream_id: e.getId(),
  8466. audio: !e.subscribeOptions || e.subscribeOptions.audio,
  8467. video: !e.subscribeOptions || e.subscribeOptions.video,
  8468. codec: b.codec,
  8469. p2p_id: f,
  8470. sdp: t,
  8471. tcc: Object(r.getParameter)("SUBSCRIBE_TCC"),
  8472. extend: Object(r.getParameter)("SUB_EXTEND")
  8473. };
  8474. b.makeRequest({
  8475. _type: "subscribe",
  8476. _message: a
  8477. }, function(t) {
  8478. o.
  8479. default.debug("[".concat(b.clientId, "] SDP exchange in subscribe : receive answer -- "), JSON.parse(t.sdp)), e.pc.processSignalingMessage(t.sdp)
  8480. }, function(t, a) {
  8481. o.
  8482. default.error("[".concat(b.clientId, "] Subscribe remote stream Failed: ").concat(t, ", closing stream "), e.getId(), a), s.b.subscribe(b.joinInfo.sid, {
  8483. lts: i,
  8484. succ: !1,
  8485. video: e.subscribeOptions && e.subscribeOptions.video,
  8486. audio: e.subscribeOptions && e.subscribeOptions.audio,
  8487. peerid: e.getId(),
  8488. ec: t
  8489. }), "TIMEOUT" != t && (b.processSubscribeFailure(e), n && n(t))
  8490. })
  8491. },
  8492. nop2p: !0,
  8493. audio: !0,
  8494. video: !0,
  8495. screen: e.hasScreen(),
  8496. isSubscriber: !0,
  8497. stunServerUrl: b.stunServerUrl,
  8498. turnServer: b.joinInfo.turnServer,
  8499. isVideoMute: e.userMuteVideo,
  8500. isAudioMute: e.userMuteAudio,
  8501. uid: e.getId(),
  8502. clientId: b.clientId
  8503. }), e.pc.onaddstream = function(t, n) {
  8504. if (e._onAudioUnmute = function() {
  8505. b.makeReport(a({
  8506. action: "unmute_remote_audio",
  8507. stream_id: e.getId()
  8508. }), function() {}, function() {})
  8509. }, e._onAudioMute = function() {
  8510. b.makeReport(a({
  8511. action: "mute_remote_audio",
  8512. stream_id: e.getId()
  8513. }), function() {}, function() {})
  8514. }, e._onVideoUnmute = function() {
  8515. b.makeReport(a({
  8516. action: "unmute_remote_video",
  8517. stream_id: e.getId()
  8518. }), function() {}, function() {})
  8519. }, e._onVideoMute = function() {
  8520. b.makeReport(a({
  8521. action: "mute_remote_video",
  8522. stream_id: e.getId()
  8523. }), function() {}, function() {})
  8524. }, "ontrack" === n && "video" === t.track.kind || "onaddstream" === n) {
  8525. o.
  8526. default.info("[".concat(b.clientId, "] Remote stream subscribed with uid "), e.getId());
  8527. var i = b.remoteStreams[e.getId()];
  8528. if (b.remoteStreams[e.getId()].stream = "onaddstream" === n ? t.stream : t.streams[0], b.remoteStreams[e.getId()].hasVideo()) {
  8529. if (Object(m.isFireFox)() || Object(m.isSafari)()) {
  8530. var r = b.remoteStreams[e.getId()].stream;
  8531. Object(F.vsResHack)(r, function(t, n) {
  8532. e.videoWidth = t, e.videoHeight = n
  8533. }, function(e) {
  8534. return o.
  8535. default.warning("[".concat(b.clientId, "] vsResHack failed: ") + e)
  8536. })
  8537. }
  8538. } else {
  8539. var s = b.remoteStreams[e.getId()];
  8540. s.peerMuteVideo = !0, b._adjustPCMuteStatus(s)
  8541. }
  8542. i && i.isPlaying() && i.elementID && (o.
  8543. 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;
  8544. var c = u({
  8545. type: "stream-subscribed",
  8546. stream: b.remoteStreams[e.getId()]
  8547. });
  8548. b.dispatchEvent(c)
  8549. }
  8550. }, clearInterval(b.timers[e.getId()]), b.timers[e.getId()] = setInterval(function() {
  8551. if (Object(r.getParameter)("REPORT_STATS")) {
  8552. var t = 0;
  8553. e && e.pc && e.pc.getStats && e.pc.getStatsRate(function(n) {
  8554. n.forEach(function(n) {
  8555. if (n && n.id) {
  8556. 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 + "");
  8557. var i = 200 * t;
  8558. t++;
  8559. var a = e.getId();
  8560. setTimeout(function() {
  8561. var e = b.socket && b.socket.getLastMsgTime() && Date.now() - b.socket.getLastMsgTime();
  8562. e > Object(r.getParameter)("REPORT_STATS_TIMEOUT") ? o.
  8563. default.debug("SubscribeStats report blocked by REPORT_STATS_TIMEOUT ".concat(e)):
  8564. b.makeReport(v(a, n))
  8565. }, i)
  8566. } else;
  8567. })
  8568. })
  8569. }
  8570. }, 3e3), clearInterval(b.timers[e.getId() + "_RelatedStats"]), b.timers[e.getId() + "_RelatedStats"] = setInterval(function() {
  8571. if (Object(r.getParameter)("REPORT_STATS") && e && e.pc) {
  8572. var t = b.socket && b.socket.getLastMsgTime() && Date.now() - b.socket.getLastMsgTime();
  8573. if (t > Object(r.getParameter)("REPORT_STATS_TIMEOUT")) return void o.
  8574. default.debug("SubscribeRelatedStats report blocked by REPORT_STATS_TIMEOUT ".concat(t));
  8575. e.pc.getVideoRelatedStats && e.pc.getVideoRelatedStats(function(t) {
  8576. b.makeReport(d(e.getId(), t))
  8577. }), e.pc.getAudioRelatedStats && e.pc.getAudioRelatedStats(function(t) {
  8578. b.makeReport(d(e.getId(), t))
  8579. })
  8580. }
  8581. }, 1e3), b.audioLevel[e.getId()] = 0, clearInterval(b.timers[e.getId() + "audio"]), b.timers[e.getId() + "audio"] = setInterval(function() {
  8582. b.hasListeners("active-speaker") && e && e.pc && "established" === e.pc.state && e.pc.getStats && e.pc.getStats(function(t) {
  8583. t.forEach(function(t) {
  8584. if ("audio" === t.mediaType) {
  8585. 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);
  8586. var i = Object.keys(b.audioLevel).sort(function(e, t) {
  8587. return b.audioLevel[t] - b.audioLevel[e]
  8588. });
  8589. if (b.activeSpeaker !== i[0]) {
  8590. var a = l({
  8591. type: "active-speaker",
  8592. uid: i[0]
  8593. });
  8594. b.dispatchEvent(a), b.activeSpeaker = i[0], o.
  8595. default.debug("[".concat(b.clientId, "] Update active speaker: ").concat(b.activeSpeaker))
  8596. }
  8597. }
  8598. })
  8599. }, 50)
  8600. }, 50), e.pc.oniceconnectionstatechange = function(a) {
  8601. if ("failed" === a) null != b.timers[e.getId()] && (clearInterval(b.timers[e.getId()]), clearInterval(b.timers[e.getId()] + "audio")), o.
  8602. default.error("[".concat(b.clientId, "] Subscriber connection is lost -- streamId: ").concat(e.getId(), ", p2pId: ").concat(f)), o.
  8603. default.debug("[".concat(b.clientId, "] subscribe p2p failed: "), b.p2ps), c || (c = !0, n && n(I.
  8604. default.PEERCONNECTION_FAILED), s.b.subscribe(b.joinInfo.sid, {
  8605. lts: i,
  8606. succ: !1,
  8607. video: e.subscribeOptions && e.subscribeOptions.video,
  8608. audio: e.subscribeOptions && e.subscribeOptions.audio,
  8609. peerid: e.getId(),
  8610. ec: I.
  8611. default.PEERCONNECTION_FAILED
  8612. })), b.remoteStreams[e.getId()] && b.p2ps.has(f) && (b.p2ps.delete(f), b.dispatchEvent(l({
  8613. type: "subP2PLost",
  8614. stream: e
  8615. })));
  8616. else if ("connected" === a && (o.
  8617. default.debug("[".concat(b.clientId, "] subscribe p2p connected: "), b.p2ps), !c)) {
  8618. c = !0, s.b.subscribe(b.joinInfo.sid, {
  8619. lts: i,
  8620. succ: !0,
  8621. video: e.subscribeOptions && e.subscribeOptions.video,
  8622. audio: e.subscribeOptions && e.subscribeOptions.audio,
  8623. peerid: e.getId(),
  8624. ec: null
  8625. }), b._adjustPCMuteStatus(e);
  8626. var r = !1,
  8627. d = !1,
  8628. u = setInterval(function() {
  8629. r && d || (e.pc ? e.pc.getStats(function(t) {
  8630. t.forEach(function(t) {
  8631. -1 === t.id.indexOf("recv") && -1 === t.id.indexOf("inbound_rtp") && -1 === t.id.indexOf("inbound-rtp") && -1 === t.id.indexOf("InboundRTP") || "audio" === t.mediaType && ((t.googDecodingNormal > 0 || t.audioOutputLevel > 0) && (r || (r = !0, b.dispatchEvent({
  8632. type: "first-audio-frame-decode",
  8633. stream: e
  8634. }), r && d && clearInterval(u), s.b.reportApiInvoke(b.joinInfo.sid, {
  8635. name: "firstAudioDecode"
  8636. })(null, {
  8637. elapse: Date.now() - e.subscribeLTS
  8638. }))), parseInt(t.packetsReceived) > 0 && (d || (d = !0, b.dispatchEvent({
  8639. type: "first-audio-packet-received",
  8640. stream: e
  8641. }), r && d && clearInterval(u), s.b.reportApiInvoke(b.joinInfo.sid, {
  8642. name: "firstAudioReceived"
  8643. })(null, {
  8644. elapse: Date.now() - e.subscribeLTS
  8645. }))))
  8646. })
  8647. }, 100) : clearInterval(u))
  8648. }, 100),
  8649. p = !1,
  8650. m = !1,
  8651. g = setInterval(function() {
  8652. p && m || (e.pc ? e.pc.getStats(function(t) {
  8653. t.forEach(function(t) {
  8654. -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) && (p || (p = !0, b.dispatchEvent({
  8655. type: "first-video-frame-decode",
  8656. stream: e
  8657. }), p && m && clearInterval(g), e.firstFrameTime = (new Date).getTime() - e.subscribeLTS, s.b.firstRemoteFrame(b.joinInfo.sid, {
  8658. lts: (new Date).getTime(),
  8659. peerid: e.getId(),
  8660. succ: !0,
  8661. width: +t.googFrameWidthReceived,
  8662. height: +t.googFrameHeightReceived
  8663. }))), t.packetsReceived > 0 && (m || (m = !0, b.dispatchEvent({
  8664. type: "first-video-packet-received",
  8665. stream: e
  8666. }), p && m && clearInterval(g), s.b.reportApiInvoke(b.joinInfo.sid, {
  8667. name: "firstVideoReceived"
  8668. })(null, {
  8669. elapse: Date.now() - e.subscribeLTS
  8670. }))))
  8671. })
  8672. }, 100) : clearInterval(g))
  8673. }, 100);
  8674. return e.sid = b.joinInfo.sid, t && t()
  8675. }
  8676. }
  8677. } else o.
  8678. default.error("[".concat(b.clientId, "] Invalid remote stream")), c || (c = !0, n && n(I.
  8679. default.INVALID_REMOTE_STREAM), s.b.subscribe(b.joinInfo.sid, {
  8680. lts: i,
  8681. succ: !1,
  8682. video: e.subscribeOptions && e.subscribeOptions.video,
  8683. audio: e.subscribeOptions && e.subscribeOptions.audio,
  8684. peerid: e.getId(),
  8685. ec: I.
  8686. default.INVALID_REMOTE_STREAM
  8687. }));
  8688. else o.
  8689. default.error("[".concat(b.clientId, "] No such remote stream")), c || (c = !0, n && n(I.
  8690. default.NO_SUCH_REMOTE_STREAM), s.b.subscribe(b.joinInfo.sid, {
  8691. lts: i,
  8692. succ: !1,
  8693. video: e.subscribeOptions && e.subscribeOptions.video,
  8694. audio: e.subscribeOptions && e.subscribeOptions.audio,
  8695. peerid: e.getId(),
  8696. ec: I.
  8697. default.NO_SUCH_REMOTE_STREAM
  8698. }))
  8699. }, b.subscribeChange = function(e, t, n) {
  8700. var i = Date.now();
  8701. o.
  8702. default.info("[".concat(b.clientId, "] Gatewayclient ").concat(b.uid, " SubscribeChange ").concat(e.getId(), ": ").concat(JSON.stringify(e.subscribeOptions))), b._adjustPCMuteStatus(e);
  8703. var a = {
  8704. stream_id: e.getId(),
  8705. audio: e.subscribeOptions.audio,
  8706. video: e.subscribeOptions.video
  8707. };
  8708. b.makeRequest({
  8709. _type: "subscribe_change",
  8710. _message: a
  8711. }, function(n) {
  8712. var a = u({
  8713. type: "stream-subscribe-changed",
  8714. stream: b.remoteStreams[e.getId()]
  8715. });
  8716. s.b.subscribe(b.joinInfo.sid, {
  8717. lts: i,
  8718. succ: !0,
  8719. video: e.subscribeOptions && e.subscribeOptions.video,
  8720. audio: e.subscribeOptions && e.subscribeOptions.audio,
  8721. peerid: e.getId(),
  8722. ec: null
  8723. }), b.dispatchEvent(a), t && t()
  8724. }, function(t, i) {
  8725. o.
  8726. default.error("[".concat(b.clientId, "] Subscribe Change Failed ").concat(e.getId()), t, i), n && n(t, i)
  8727. })
  8728. }, b.processPublishFailure = function(e) {
  8729. 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
  8730. }, b.processSubscribeFailure = function(e) {
  8731. 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
  8732. }, b._adjustPCMuteStatus = function(e) {
  8733. !e.local && e.pc && e.pc.peerConnection.getReceivers && e.pc.peerConnection.getReceivers().forEach(function(t) {
  8734. if (t && t.track && "audio" === t.track.kind) {
  8735. var n = !e.userMuteAudio && !e.peerMuteAudio;
  8736. e.subscribeOptions && !e.subscribeOptions.audio && (n = !1), t.track.enabled = !! n
  8737. } else if (t && t.track && "video" === t.track.kind) {
  8738. var i = !e.userMuteVideo && !e.peerMuteVideo;
  8739. e.subscribeOptions && !e.subscribeOptions.video && (i = !1), t.track.enabled = !! i
  8740. }
  8741. })
  8742. }, b.unsubscribe = function(e, t, n) {
  8743. if ("object" !== Se()(e) || null === e) return o.
  8744. default.error("[".concat(b.clientId, "] Invalid remote stream")), void R(n, I.
  8745. default.INVALID_REMOTE_STREAM);
  8746. if (b.state !== E) return o.
  8747. default.error("[".concat(b.clientId, "] User is not in the session")), void R(n, I.
  8748. default.INVALID_OPERATION);
  8749. 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())) {
  8750. if (!b.socket) return o.
  8751. default.error("[".concat(b.clientId, "] User is not in the session")), void R(n, I.
  8752. default.INVALID_OPERATION);
  8753. if (e.local) return o.
  8754. default.error("[".concat(b.clientId, "] Invalid remote stream")), void R(n, I.
  8755. default.INVALID_REMOTE_STREAM);
  8756. e.close();
  8757. var i = {
  8758. stream_id: e.getId()
  8759. };
  8760. b.makeRequest({
  8761. _type: "unsubscribe",
  8762. _message: i
  8763. }), 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.
  8764. default.info("[".concat(b.clientId, "] Unsubscribe stream success")), t && t()
  8765. } else R(n, I.
  8766. default.NO_SUCH_REMOTE_STREAM)
  8767. }, b.setRemoteVideoStreamType = function(e, t) {
  8768. if (o.
  8769. default.debug("[".concat(b.clientId, "] Switching remote video stream ").concat(e.getId(), " to ").concat(t)), "object" === Se()(e) && null !== e) if (b.state === E) {
  8770. if (!e.local) {
  8771. switch (t) {
  8772. case b.remoteVideoStreamTypes.REMOTE_VIDEO_STREAM_HIGH:
  8773. case b.remoteVideoStreamTypes.REMOTE_VIDEO_STREAM_LOW:
  8774. case b.remoteVideoStreamTypes.REMOTE_VIDEO_STREAM_MEDIUM:
  8775. break;
  8776. default:
  8777. return
  8778. }
  8779. var n = {
  8780. stream_id: e.getId(),
  8781. stream_type: t
  8782. };
  8783. b.makeRequest({
  8784. _type: "switch_video_stream",
  8785. _message: n
  8786. }, function() {
  8787. o.
  8788. default.debug("SwitchVideoStream Success ".concat(n.stream_id, " ").concat(n.stream_type))
  8789. }, function(e, t) {
  8790. o.
  8791. default.error("SwitchVideoStream Error ".concat(e, " ").concat(n.stream_id, " ").concat(n.stream_type), t)
  8792. })
  8793. }
  8794. } else o.
  8795. default.error("[".concat(b.clientId, "] User is not in the session"));
  8796. else o.
  8797. default.error("[".concat(b.clientId, "] Invalid remote stream"))
  8798. }, b.renewToken = function(e, t, n) {
  8799. e ? b.key ? b.state !== E ? (o.
  8800. default.debug("[".concat(b.clientId, "] Client is not connected. Trying to rejoin")), b.key = e, b.rejoin(), t && t()) : (o.
  8801. default.debug("[".concat(b.clientId, "] renewToken from ").concat(b.key, " to ").concat(e)), b.makeRequest({
  8802. _type: "renew_token",
  8803. _message: {
  8804. token: e
  8805. }
  8806. }, t, n)) : (o.
  8807. default.error("[".concat(b.clientId, "] Client is previously joined without token")), n && n(I.
  8808. default.INVALID_PARAMETER)) : (o.
  8809. default.error("[".concat(b.clientId, "] Invalid Token ").concat(e)), n && n(I.
  8810. default.INVALID_PARAMETER))
  8811. }, b.setStreamFallbackOption = function(e, t) {
  8812. if (o.
  8813. default.debug("[".concat(b.clientId, "] Set stream fallback option ").concat(e.getId(), " to ").concat(t)), "object" === Se()(e) && null !== e) if (b.state === E) {
  8814. if (!e.local) {
  8815. switch (t) {
  8816. case b.streamFallbackTypes.STREAM_FALLBACK_OPTION_DISABLED:
  8817. case b.streamFallbackTypes.STREAM_FALLBACK_OPTION_VIDEO_STREAM_LOW:
  8818. case b.streamFallbackTypes.STREAM_FALLBACK_OPTION_AUDIO_ONLY:
  8819. break;
  8820. default:
  8821. return
  8822. }
  8823. var n = {
  8824. stream_id: e.getId(),
  8825. fallback_type: t
  8826. };
  8827. b.makeRequest({
  8828. _type: "set_fallback_option",
  8829. _message: n
  8830. }, function() {
  8831. o.
  8832. default.debug("SetStreamFallbackOption success ".concat(n.stream_id, " ").concat(t))
  8833. }, function(e, i) {
  8834. o.
  8835. default.error("Failed to SetStreamFallbackOption ".concat(n.stream_id, " ").concat(t, " ").concat(e), i)
  8836. })
  8837. }
  8838. } else o.
  8839. default.error("[".concat(b.clientId, "] User is not in the session"));
  8840. else o.
  8841. default.error("[".concat(b.clientId, "] Invalid remote stream"))
  8842. }, b.enableAudioVolumeIndicator = function(e, t) {
  8843. b.audioVolumeIndication.enabled = !0, b.audioVolumeIndication.interval = e, b.audioVolumeIndication.smooth = t, b.resetAudioVolumeIndication()
  8844. }, b.resetAudioVolumeIndication = function() {
  8845. if (clearInterval(b.timers.audioVolumeIndication), clearInterval(b.timers.audioVolumeSampling), b.audioVolumeIndication.enabled && b.audioVolumeIndication.interval) {
  8846. var e = Math.floor(1e3 * b.audioVolumeIndication.smooth / 100);
  8847. clearInterval(b.timers.audioVolumeSampling), b.timers.audioVolumeSampling = setInterval(function() {
  8848. b.audioVolumeSampling || (b.audioVolumeSampling = {});
  8849. var t = {};
  8850. for (var n in b.remoteStreams) {
  8851. var i = b.remoteStreams[n];
  8852. if (i.stream && i.hasAudio()) {
  8853. var a = i.getAudioLevel();
  8854. a > 0 && a < 1 && (a *= 100);
  8855. var r = b.audioVolumeSampling[n] || [];
  8856. for (r.push(a); r.length > e;) r.shift();
  8857. t[n] = r
  8858. }
  8859. }
  8860. b.audioVolumeSampling = t
  8861. }, 100), clearInterval(b.timers.audioVolumeIndication), b.timers.audioVolumeIndication = setInterval(function() {
  8862. if (b.socket && b.socket.signal && b.socket.signal.connection && b.socket.signal.connection.readyState === WebSocket.OPEN) {
  8863. var e = [];
  8864. for (var t in b.remoteStreams) if (b.audioVolumeSampling && b.audioVolumeSampling[t]) {
  8865. var n = b.audioVolumeSampling[t],
  8866. i = 0;
  8867. n.forEach(function(e) {
  8868. i += e
  8869. });
  8870. var a = {
  8871. uid: t,
  8872. level: Math.floor(i / n.length)
  8873. };
  8874. a.level && e.push(a)
  8875. }
  8876. var r = e.sort(function(e, t) {
  8877. return e.level - t.level
  8878. });
  8879. o.
  8880. default.debug("[".concat(b.clientId, "] volume-indicator "), JSON.stringify(r)), b.audioVolumeIndication.sortedAudioVolumes = r;
  8881. var s = l({
  8882. type: "volume-indicator",
  8883. attr: r
  8884. });
  8885. b.dispatchEvent(s)
  8886. }
  8887. }, b.audioVolumeIndication.interval)
  8888. }
  8889. }, b.closeGateway = function() {
  8890. o.
  8891. default.debug("[".concat(b.clientId, "] close gateway")), b.state = S, b.socket.close(), O()
  8892. }, b.startChannelMediaRelay = function() {
  8893. var e = K()(Y.a.mark(function e(t) {
  8894. var n, i, a, r;
  8895. return Y.a.wrap(function(e) {
  8896. for (;;) switch (e.prev = e.next) {
  8897. case 0:
  8898. if (!b.channelMediaRelayController) {
  8899. e.next = 2;
  8900. break
  8901. }
  8902. throw new ye.ChannelMediaError("RELAY_ALREADY_START", "", ye.CHANNEL_MEDIA_RELAY_ERROR.RELAY_ALREADY_START);
  8903. case 2:
  8904. return n = function(e) {
  8905. b.dispatchEvent({
  8906. type: "channel-media-relay-event",
  8907. code: e
  8908. })
  8909. }, i = function(e, t, n) {
  8910. e === ye.CHANNEL_MEDIA_RELAY_STATE.RELAY_STATE_FAILURE && t === ye.CHANNEL_MEDIA_RELAY_ERROR.SERVER_CONNECTION_LOST && (b.channelMediaRelayController.dispose(), b.channelMediaRelayController = null), b.dispatchEvent({
  8911. type: "channel-media-relay-state",
  8912. state: e,
  8913. code: t,
  8914. data: n
  8915. })
  8916. }, b.channelMediaRelayController = new be.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);
  8917. case 10:
  8918. e.next = 22;
  8919. break;
  8920. case 12:
  8921. throw e.prev = 12, e.t0 = e.
  8922. catch (7), o.
  8923. default.debug("[".concat(b.clientId, "] startChannelMediaRelay exception: ").concat(JSON.stringify(e.t0))), a = ye.CHANNEL_MEDIA_RELAY_STATE.RELAY_STATE_FAILURE, r = "", r = e.t0 instanceof ye.ChannelMediaError ? "SetSourceChannelStatus" === e.t0.data || e.t0.data && e.t0.data.serverResponse && "SetSourceChannel" === e.t0.data.serverResponse.command ? "FAILED_JOIN_SRC":
  8924. "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 === ye.CHANNEL_MEDIA_ERROR.REQUEST_TIMEOUT || e.t0.message === ye.CHANNEL_MEDIA_ERROR.WAIT_STATUS_TIMEOUT ? "SERVER_NO_RESPONSE" : e.t0.message === ye.CHANNEL_MEDIA_ERROR.REQUEST_FAILED || e.t0.message === ye.CHANNEL_MEDIA_ERROR.WAIT_STATUS_ERROR ? "SERVER_ERROR_RESPONSE" : e.t0.message === ye.CHANNEL_MEDIA_ERROR.AP_REQUEST_TIMEOUT ? "NO_RESOURCE_AVAILABLE" : e.t0.message === ye.CHANNEL_MEDIA_ERROR.WS_ABORT || e.t0.message === ye.CHANNEL_MEDIA_ERROR.AP_REQUEST_ABORT ? "OPERATION_ABORT" : "INTERNAL_ERROR" : "INTERNAL_ERROR", b.dispatchEvent({
  8925. type: "channel-media-relay-state",
  8926. state: a,
  8927. code: ye.CHANNEL_MEDIA_RELAY_ERROR[r]
  8928. }), b.channelMediaRelayController && (b.channelMediaRelayController.dispose(), b.channelMediaConfig = null, b.channelMediaRelayController = null), b.dispatchEvent({
  8929. type: "channel-media-relay-state",
  8930. state: ye.CHANNEL_MEDIA_RELAY_STATE.RELAY_STATE_IDLE
  8931. }), new ye.ChannelMediaError(r, null, ye.CHANNEL_MEDIA_RELAY_ERROR[r]);
  8932. case 22:
  8933. b.dispatchEvent({
  8934. type: "channel-media-relay-state",
  8935. state: ye.CHANNEL_MEDIA_RELAY_STATE.RELAY_STATE_RUNNING,
  8936. code: ye.CHANNEL_MEDIA_RELAY_ERROR.RELAY_OK
  8937. }), b.channelMediaConfig = t;
  8938. case 24:
  8939. case "end":
  8940. return e.stop()
  8941. }
  8942. }, e, this, [
  8943. [7, 12]
  8944. ])
  8945. }));
  8946. return function(t) {
  8947. return e.apply(this, arguments)
  8948. }
  8949. }(), b.updateChannelMediaRelay = function() {
  8950. var t = K()(Y.a.mark(function t(n) {
  8951. var i, a;
  8952. return Y.a.wrap(function(t) {
  8953. for (;;) switch (t.prev = t.next) {
  8954. case 0:
  8955. if (b.channelMediaRelayController) {
  8956. t.next = 2;
  8957. break
  8958. }
  8959. throw new ye.ChannelMediaError("RELAY_NOT_START", null, ye.CHANNEL_MEDIA_RELAY_ERROR.RELAY_NOT_START);
  8960. case 2:
  8961. return t.prev = 2, t.next = 5, b.channelMediaRelayController.updateChannelMediaRelay(n);
  8962. case 5:
  8963. t.next = 18;
  8964. break;
  8965. case 7:
  8966. throw t.prev = 7, t.t0 = t.
  8967. catch (2), o.
  8968. default.debug("[".concat(b.clientId, "] updateChannelMediaRelay exception: ").concat(JSON.stringify(e))), i = ye.CHANNEL_MEDIA_RELAY_STATE.RELAY_STATE_FAILURE, a = "", a = e instanceof ye.ChannelMediaError ? e.message === ye.CHANNEL_MEDIA_ERROR.REQUEST_TIMEOUT || e.message === ye.CHANNEL_MEDIA_ERROR.WAIT_STATUS_TIMEOUT ? "SERVER_NO_RESPONSE":
  8969. e.message === ye.CHANNEL_MEDIA_ERROR.REQUEST_FAILED || e.message === ye.CHANNEL_MEDIA_ERROR.WAIT_STATUS_ERROR ? "SERVER_ERROR_RESPONSE" : e.message === ye.CHANNEL_MEDIA_ERROR.WS_ABORT || e.message === ye.CHANNEL_MEDIA_ERROR.AP_REQUEST_ABORT ? "OPERATION_ABORT" : "INTERNAL_ERROR" : "INTERNAL_ERROR", b.dispatchEvent({
  8970. type: "channel-media-relay-event",
  8971. code: ye.CHANNEL_MEDIA_RELAY_EVENT.PACKET_UPDATE_DEST_CHANNEL_REFUSED
  8972. }), b.dispatchEvent({
  8973. type: "channel-media-relay-state",
  8974. state: i,
  8975. code: ye.CHANNEL_MEDIA_RELAY_ERROR[a]
  8976. }), b.channelMediaRelayController && (b.channelMediaRelayController.dispose(), b.channelMediaConfig = null, b.channelMediaRelayController = null), b.dispatchEvent({
  8977. type: "channel-media-relay-state",
  8978. state: ye.CHANNEL_MEDIA_RELAY_STATE.RELAY_STATE_IDLE
  8979. }), new ye.ChannelMediaError(a, null, ye.CHANNEL_MEDIA_RELAY_ERROR[a]);
  8980. case 18:
  8981. b.channelMediaConfig = n;
  8982. case 19:
  8983. case "end":
  8984. return t.stop()
  8985. }
  8986. }, t, this, [
  8987. [2, 7]
  8988. ])
  8989. }));
  8990. return function(e) {
  8991. return t.apply(this, arguments)
  8992. }
  8993. }(), b.stopChannelMediaRelay = K()(Y.a.mark(function t() {
  8994. var n, i;
  8995. return Y.a.wrap(function(t) {
  8996. for (;;) switch (t.prev = t.next) {
  8997. case 0:
  8998. if (b.channelMediaRelayController) {
  8999. t.next = 2;
  9000. break
  9001. }
  9002. throw new ye.ChannelMediaError("RELAY_NOT_START", null, ye.CHANNEL_MEDIA_RELAY_ERROR.RELAY_NOT_START);
  9003. case 2:
  9004. return t.prev = 2, t.next = 5, b.channelMediaRelayController.stopChannelMediaRelay();
  9005. case 5:
  9006. t.next = 17;
  9007. break;
  9008. case 7:
  9009. throw t.prev = 7, t.t0 = t.
  9010. catch (2), o.
  9011. default.debug("[".concat(b.clientId, "] stopChannelMediaRelay exception: ").concat(JSON.stringify(e))), n = ye.CHANNEL_MEDIA_RELAY_STATE.RELAY_STATE_FAILURE, i = "", i = e instanceof ye.ChannelMediaError ? e.message === ye.CHANNEL_MEDIA_ERROR.REQUEST_TIMEOUT || e.message === ye.CHANNEL_MEDIA_ERROR.WAIT_STATUS_TIMEOUT ? "SERVER_NO_RESPONSE":
  9012. e.message === ye.CHANNEL_MEDIA_ERROR.REQUEST_FAILED || e.message === ye.CHANNEL_MEDIA_ERROR.WAIT_STATUS_ERROR ? "SERVER_ERROR_RESPONSE" : "INTERNAL_ERROR" : "INTERNAL_ERROR", b.dispatchEvent({
  9013. type: "channel-media-relay-state",
  9014. state: n,
  9015. code: ye.CHANNEL_MEDIA_RELAY_ERROR[i]
  9016. }), b.channelMediaRelayController && (b.channelMediaRelayController.dispose(), b.channelMediaConfig = null, b.channelMediaRelayController = null), b.dispatchEvent({
  9017. type: "channel-media-relay-state",
  9018. state: ye.CHANNEL_MEDIA_RELAY_STATE.RELAY_STATE_IDLE
  9019. }), new ye.ChannelMediaError(i, null, ye.CHANNEL_MEDIA_RELAY_ERROR[i]);
  9020. case 17:
  9021. b.channelMediaConfig = null, b.channelMediaRelayController = null;
  9022. case 19:
  9023. case "end":
  9024. return t.stop()
  9025. }
  9026. }, t, this, [
  9027. [2, 7]
  9028. ])
  9029. }));
  9030. var A = function() {
  9031. o.
  9032. default.debug("[".concat(b.clientId, "] Reconnect gateway")), b.state = S, b.socket.close(), O(), b.reconnectMode = "recover", b.state = _, C()
  9033. };
  9034. b.recover = A;
  9035. var O = function() {
  9036. for (var e in b.dispatchEvent({
  9037. type: "before-clear-connection"
  9038. }), b.timers) b.timers.hasOwnProperty(e) && clearInterval(b.timers[e]);
  9039. for (var e in b.remoteStreams) if (b.remoteStreams.hasOwnProperty(e)) {
  9040. var t = b.remoteStreams[e],
  9041. n = l({
  9042. type: "stream-removed",
  9043. uid: t.getId(),
  9044. stream: t
  9045. });
  9046. b.dispatchEvent(n)
  9047. }
  9048. b.p2ps.clear(), D(), k(), clearInterval(b.pingTimer)
  9049. };
  9050. b.rejoin = function() {
  9051. b.socket && (clearInterval(b.pingTimer), b.socket.close(), b.socket = void 0), b.state = _, C()
  9052. };
  9053. var C = function(e, t) {
  9054. b.dispatchEvent(l({
  9055. type: "rejoin-start"
  9056. })), e = e ||
  9057. function(e) {
  9058. o.
  9059. default.info("[".concat(b.clientId, "] User ").concat(e, " is re-joined to ").concat(b.joinInfo.cname)), b.dispatchEvent(l({
  9060. type: "rejoin"
  9061. })), b.channelMediaConfig && b.startChannelMediaRelay(b.channelMediaConfig).then(function() {
  9062. o.
  9063. default.debug("[".concat(b.clientId, "] restartChannelMediaRelay success"))
  9064. }).
  9065. catch (function(e) {
  9066. o.
  9067. default.debug("[".concat(b.clientId, "] restartChannelMediaRelay failed: ").concat(JSON.stringify(e)))
  9068. }), b.liveStreams && b.liveStreams.size && b.liveStreams.forEach(function(e, t) {
  9069. e && b.setLiveTranscoding(b.transcoding), b.startLiveStreaming(t, e)
  9070. }), b.injectLiveStreams && b.injectLiveStreams.size && b.injectLiveStreams.forEach(function(e, t) {
  9071. b.addInjectStreamUrl(t, e)
  9072. })
  9073. }, t = t ||
  9074. function(e) {
  9075. o.
  9076. default.error("[".concat(b.clientId, "] Re-join to channel failed "), e), b.dispatchEvent(u({
  9077. type: "error",
  9078. reason: e
  9079. }))
  9080. }, b.key ? (++b.rejoinAttempt, b.join(b.joinInfo, b.key, e, t)) : o.
  9081. default.error("[".concat(b.clientId, "] Connection recover failed [Invalid channel key]"))
  9082. },
  9083. N = function(e, t, n) {
  9084. if (b.onConnect = t, b.socket) {
  9085. if (b.dispatchEvent({
  9086. type: "reconnect"
  9087. }), "retry" === b.reconnectMode) o.
  9088. default.debug("[".concat(b.clientId, "] Retry current gateway")), b.socket.reconnect();
  9089. else if ("tryNext" === b.reconnectMode) o.
  9090. default.debug("[".concat(b.clientId, "] Try next gateway")), b.socket.connectNext();
  9091. else if ("recover" === b.reconnectMode) {
  9092. o.
  9093. default.debug("[".concat(b.clientId, "] Recover gateway")), o.
  9094. default.debug("[".concat(b.clientId, "] Try to reconnect choose server and get gateway list again ")), b.reconnectingCS = !0;
  9095. var a = b.joinInfo && b.joinInfo.sid;
  9096. 0, He(b.joinInfo, function(e) {
  9097. o.
  9098. 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):
  9099. o.
  9100. default.debug("[".concat(b.clientId, "] session: ").concat(a, " already leave"))
  9101. })
  9102. }
  9103. } else c = e.gatewayAddr, b.socket = Le(c, {
  9104. sid: b.joinInfo.sid,
  9105. clientId: b.clientId
  9106. }), b.socket.on("start-connection", function(e) {
  9107. b.ticket = e && e.msg && e.msg.ticket
  9108. }), b.socket.on("on_uplink_stats", function(e) {
  9109. var t = {};
  9110. for (var n in e) t[Qe(n)] = e[n];
  9111. if (b.OutgoingAvailableBandwidth = t.uplink_available_bandwidth, b.localStreams[b.uid]) {
  9112. var i = b.localStreams[b.uid].uplinkStats;
  9113. i && i.period_fir === t.period_fir || o.
  9114. default.debug("[".concat(b.clientId, "]: Period fir change to: ").concat(t.period_fir)), b.localStreams[b.uid].uplinkStats = t
  9115. }
  9116. }), b.socket.on("connect", function() {
  9117. b.dispatchEvent({
  9118. type: "connected"
  9119. }), b.attemps = 1, b.onConnect()
  9120. }), b.socket.on("recover", function() {
  9121. b.state = _, o.
  9122. default.debug("[".concat(b.clientId, "] Try to reconnect choose server and get gateway list again ")), b.reconnectingCS = !0;
  9123. var e = b.joinInfo && b.joinInfo.sid;
  9124. He(b.joinInfo, function(t) {
  9125. o.
  9126. default.debug("[".concat(b.clientId, "] session: ").concat(e, " get gateway list success")), b.reconnectingCS ? b.socket.replaceHost(t.gateway_addr):
  9127. o.
  9128. default.debug("[".concat(b.clientId, "] session: ").concat(e, " already leave"))
  9129. })
  9130. }), b.socket.on("disconnect", function(e) {
  9131. if (o.
  9132. default.debug("[".concat(b.clientId, "] Receive disconnect message")), b.state !== S) {
  9133. b.state = S;
  9134. var t = u({
  9135. type: "error",
  9136. reason: I.
  9137. default.SOCKET_DISCONNECTED
  9138. });
  9139. try {
  9140. b.dispatchEvent(t, !0)
  9141. } catch (e) {
  9142. o.
  9143. default.debug("[".concat(b.clientId, "] Error in SOCKET_DISCONNECTED event"), e)
  9144. }
  9145. if (0 === b.p2ps.size ? b.reconnectMode = "tryNext" : b.reconnectMode = "retry", O(), b.channelMediaRelayController && b.channelMediaRelayController.dispose(), b.channelMediaRelayController = null, 1 != i) {
  9146. var n, a = (n = b.attemps, 1e3 * Math.min(30, Math.pow(2, n) - 1));
  9147. if (o.
  9148. 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.
  9149. default.debug("[".concat(b.clientId, "] No reconnection because Client.leave has been invoked")), void(b.hasInvokeLeave = !1);
  9150. setTimeout(function() {
  9151. b.attemps++, b.state = _, b.inChannelInfo && Date.now() - b.inChannelInfo.joinAt > Object(r.getParameter)("TICKET_RENEW_TIMEOUT") ? (o.
  9152. default.debug("Recovering to renew ticket"), A()) : C()
  9153. }, a)
  9154. }
  9155. }
  9156. }), b.socket.on("on_add_audio_stream", function(e) {
  9157. if (o.
  9158. default.info("[".concat(b.clientId, "] Newly added audio stream with uid ").concat(e.uid)), b.joinInfo.stringUid && "string" != typeof e.uid && o.
  9159. default.error("StringUID is Mixed with UintUID"), b.remoteStreamsInChannel.has(e.uid) || b.remoteStreamsInChannel.add(e.uid), void 0 === b.remoteStreams[e.uid]) {
  9160. var t = Ie({
  9161. streamID: e.uid,
  9162. local: !1,
  9163. audio: e.audio,
  9164. video: e.video
  9165. });
  9166. t.peerMuteVideo = !0, b.remoteStreams[e.uid] = t;
  9167. var n = u({
  9168. type: "stream-added",
  9169. stream: t
  9170. });
  9171. b.dispatchEvent(n);
  9172. var i = b.remoteMuteState[e.uid];
  9173. if (i && i.audio) {
  9174. n = l({
  9175. type: "mute-audio",
  9176. uid: e.uid
  9177. });
  9178. b.dispatchEvent(n)
  9179. }
  9180. if (i && i.video) {
  9181. n = l({
  9182. type: "mute-video",
  9183. uid: e.uid
  9184. });
  9185. b.dispatchEvent(n)
  9186. }
  9187. }
  9188. s.b.reportApiInvoke(b.joinInfo.sid, {
  9189. name: "on_add_audio_stream"
  9190. })()
  9191. }), b.socket.on("on_update_stream", function(e) {
  9192. var t = b.remoteStreams[e.uid];
  9193. if (b.joinInfo.stringUid && "string" != typeof e.uid && o.
  9194. default.error("StringUID is Mixed with UintUID"), t) {
  9195. t.audio = e.audio, t.video = e.video, t.screen = e.screen, t.pc && b._adjustPCMuteStatus(t);
  9196. var n = u({
  9197. type: "stream-updated",
  9198. stream: t
  9199. });
  9200. b.dispatchEvent(n)
  9201. } else o.
  9202. default.debug("[".concat(b.clientId, "] Ignoring onUpdateStream event before onAddStream for uid ").concat(e.uid))
  9203. }), b.socket.on("on_add_video_stream", function(e) {
  9204. if (o.
  9205. default.info("[".concat(b.clientId, "] Newly added remote stream with uid ").concat(e.uid, ".")), b.joinInfo.stringUid && "string" != typeof e.uid && o.
  9206. default.error("StringUID is Mixed with UintUID"), b.remoteStreamsInChannel.has(e.uid) || b.remoteStreamsInChannel.add(e.uid), void 0 === b.remoteStreams[e.uid]) {
  9207. var t = Ie({
  9208. streamID: e.uid,
  9209. local: !1,
  9210. audio: e.audio,
  9211. video: e.video
  9212. });
  9213. b.remoteStreams[e.uid] = t;
  9214. var n = u({
  9215. type: "stream-added",
  9216. stream: t
  9217. });
  9218. b.dispatchEvent(n);
  9219. var i = b.remoteMuteState[e.uid];
  9220. if (i && i.audio) {
  9221. n = l({
  9222. type: "mute-audio",
  9223. uid: e.uid
  9224. });
  9225. b.dispatchEvent(n)
  9226. }
  9227. if (i && i.video) {
  9228. n = l({
  9229. type: "mute-video",
  9230. uid: e.uid
  9231. });
  9232. b.dispatchEvent(n)
  9233. }
  9234. } else {
  9235. var a = b.remoteStreams[e.uid];
  9236. if (void 0 !== a.stream) {
  9237. if ((t = b.remoteStreams[e.uid]).video = !0, t.peerMuteVideo = !1, t.pc && b._adjustPCMuteStatus(t), o.
  9238. default.info("[".concat(b.clientId, "] Stream changed: enable video ").concat(e.uid)), t.isPlaying()) {
  9239. var r = t.player.elementID;
  9240. t.stop(), t.play(r, t.playOptions)
  9241. }
  9242. } else if (a.p2pId) b.remoteStreams[e.uid].video = !0;
  9243. else {
  9244. t = Ie({
  9245. streamID: e.uid,
  9246. local: !1,
  9247. audio: !0,
  9248. video: !0
  9249. });
  9250. b.remoteStreams[e.uid] = t, o.
  9251. default.info("[".concat(b.clientId, "] Stream changed: modify video ").concat(e.uid))
  9252. }
  9253. }
  9254. s.b.reportApiInvoke(b.joinInfo.sid, {
  9255. name: "on_add_video_stream"
  9256. })()
  9257. }), b.socket.on("on_remove_stream", function(e) {
  9258. b.remoteStreamsInChannel.has(e.uid) && b.remoteStreamsInChannel.delete(e.uid);
  9259. var t = b.remoteStreams[e.uid];
  9260. if (t) {
  9261. delete b.remoteStreams[e.uid], delete b.remoteMuteState[e.uid];
  9262. var n = u({
  9263. type: "stream-removed",
  9264. stream: t
  9265. });
  9266. b.dispatchEvent(n), t.close(), void 0 !== t.pc && (t.pc.close(), t.pc = void 0, b.p2ps.delete(t.p2pId)), s.b.reportApiInvoke(b.joinInfo.sid, {
  9267. name: "on_remove_stream"
  9268. })()
  9269. } else o.
  9270. default.error("ERROR stream ", e.uid, " not found onRemoveStream ", e)
  9271. }), b.socket.on("on_publish_stream", function(e) {
  9272. var t = b.localStreams[e.uid],
  9273. n = u({
  9274. type: "streamPublished",
  9275. stream: t
  9276. });
  9277. b.dispatchEvent(n)
  9278. }), b.socket.on("mute_audio", function(e) {
  9279. o.
  9280. default.info("[".concat(b.clientId, "] rcv peer mute audio: ").concat(e.uid)), b.remoteMuteState[e.uid] = b.remoteMuteState[e.uid] || {
  9281. audio: !1,
  9282. video: !1
  9283. }, b.remoteMuteState[e.uid].audio = !0;
  9284. var t = l({
  9285. type: "mute-audio",
  9286. uid: e.uid
  9287. }),
  9288. n = b.remoteStreams[e.uid];
  9289. n ? (n.peerMuteAudio = !0, n.pc && b._adjustPCMuteStatus(n), b.dispatchEvent(t)):
  9290. o.
  9291. default.debug("Ignoring event ".concat(e.type), e)
  9292. }), b.socket.on("unmute_audio", function(e) {
  9293. o.
  9294. default.info("[".concat(b.clientId, "] rcv peer unmute audio: ").concat(e.uid)), b.remoteMuteState[e.uid] = b.remoteMuteState[e.uid] || {
  9295. audio: !1,
  9296. video: !1
  9297. }, b.remoteMuteState[e.uid].audio = !1;
  9298. var t = l({
  9299. type: "unmute-audio",
  9300. uid: e.uid
  9301. }),
  9302. n = b.remoteStreams[e.uid];
  9303. n ? (n.peerMuteAudio = !1, n.pc && b._adjustPCMuteStatus(n), b.dispatchEvent(t)):
  9304. o.
  9305. default.debug("Ignoring event ".concat(e.type), e)
  9306. }), b.socket.on("mute_video", function(e) {
  9307. o.
  9308. default.info("[".concat(b.clientId, "] rcv peer mute video: ").concat(e.uid)), b.remoteMuteState[e.uid] = b.remoteMuteState[e.uid] || {
  9309. audio: !1,
  9310. video: !1
  9311. }, b.remoteMuteState[e.uid].video = !0;
  9312. var t = l({
  9313. type: "mute-video",
  9314. uid: e.uid
  9315. }),
  9316. n = b.remoteStreams[e.uid];
  9317. n ? (n.peerMuteVideo = !0, n.pc && b._adjustPCMuteStatus(n), b.dispatchEvent(t)):
  9318. o.
  9319. default.debug("Ignoring event ".concat(e.type), e)
  9320. }), b.socket.on("unmute_video", function(e) {
  9321. o.
  9322. default.info("[".concat(b.clientId, "] rcv peer unmute video: ").concat(e.uid)), b.remoteMuteState[e.uid] = b.remoteMuteState[e.uid] || {
  9323. audio: !1,
  9324. video: !1
  9325. }, b.remoteMuteState[e.uid].video = !1;
  9326. var t = l({
  9327. type: "unmute-video",
  9328. uid: e.uid
  9329. }),
  9330. n = b.remoteStreams[e.uid];
  9331. n ? (n.peerMuteVideo = !1, n.pc && b._adjustPCMuteStatus(n), b.dispatchEvent(t)):
  9332. o.
  9333. default.debug("Ignoring event ".concat(e.type), e)
  9334. }), b.socket.on("on_crypt_error", function(e) {
  9335. o.
  9336. default.warning("[".concat(b.clientId, "] stream crypt error"));
  9337. var t = l({
  9338. type: "crypt-error",
  9339. cryptType: e.crypt_type
  9340. });
  9341. b.dispatchEvent(t)
  9342. }), b.socket.on("on_user_banned", function(e) {
  9343. o.
  9344. default.info("[".concat(b.clientId, "] user banned uid: ").concat(e.uid, " error: ").concat(e.error_code));
  9345. var t = l({
  9346. type: "client-banned",
  9347. uid: e.uid,
  9348. attr: e.error_code
  9349. });
  9350. b.dispatchEvent(t), i = !0
  9351. }), b.socket.on("on_stream_fallback_update", function(e) {
  9352. o.
  9353. default.info("[".concat(b.clientId, "] stream fallback peerId: ").concat(e.stream_id, " type: ").concat(e.stream_type));
  9354. var t = l({
  9355. type: "stream-fallback",
  9356. uid: e.stream_id,
  9357. stream: e.stream_id,
  9358. attr: e.stream_type
  9359. });
  9360. b.dispatchEvent(t)
  9361. }), b.socket.on("stream_recover", function(e) {
  9362. o.
  9363. default.info("[".concat(b.clientId, "] stream recover uid: ").concat(e.id, " peerId: ").concat(e.peerid, " type: ").concat(e.type));
  9364. var t = l({
  9365. type: "stream-recover",
  9366. uid: e.id,
  9367. stream: e.peerid,
  9368. attr: e.type
  9369. });
  9370. b.dispatchEvent(t)
  9371. }), b.socket.on("on_p2p_lost", function(e) {
  9372. o.
  9373. default.debug("[".concat(b.clientId, "] p2plost: "), e, "p2ps:", b.p2ps);
  9374. var t, n = "DTLS failed";
  9375. (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, {
  9376. lts: t.publishLTS,
  9377. succ: !1,
  9378. audioName: t.hasAudio() && t.audioName,
  9379. videoName: t.hasVideo() && t.videoName,
  9380. screenName: t.hasScreen() && t.screenName,
  9381. ec: n
  9382. }), "subscribe" === e.event && s.b.subscribe(b.joinInfo.sid, {
  9383. lts: t.subscribeLTS,
  9384. succ: !1,
  9385. video: t.subscribeOptions && t.subscribeOptions.video,
  9386. audio: t.subscribeOptions && t.subscribeOptions.audio,
  9387. peerid: e.uid + "",
  9388. ec: n
  9389. })):
  9390. o.
  9391. default.warning("P2PLost Stream Not found", e), o.
  9392. default.debug("[".concat(b.clientId, "] p2plost:"), e.p2pid), (t = b.p2ps.get(e.p2pid)) && (b.p2ps.delete(e.p2pid), t.local ? b.dispatchEvent(l({
  9393. type: "pubP2PLost",
  9394. stream: t,
  9395. attr: n
  9396. })) : b.remoteStreams[t.getId()] && b.dispatchEvent(l({
  9397. type: "subP2PLost",
  9398. stream: t,
  9399. attr: n
  9400. })))
  9401. }), b.socket.on("on_token_privilege_will_expire", function(e) {
  9402. o.
  9403. default.debug("[".concat(b.clientId, "] Received Message onTokenPrivilegeWillExpire")), b.dispatchEvent(l({
  9404. type: "onTokenPrivilegeWillExpire"
  9405. }))
  9406. }), b.socket.on("on_token_privilege_did_expire", function() {
  9407. o.
  9408. default.warning("[".concat(b.clientId, "] Received Message onTokenPrivilegeDidExpire, please get new token and join again")), b.closeGateway(), b.dispatchEvent(l({
  9409. type: "onTokenPrivilegeDidExpire"
  9410. }))
  9411. }), b.socket.on("enable_local_video", function(e) {
  9412. b.dispatchEvent(l({
  9413. type: "enable-local-video",
  9414. uid: e.uid
  9415. }))
  9416. }), b.socket.on("disable_local_video", function(e) {
  9417. b.dispatchEvent(l({
  9418. type: "disable-local-video",
  9419. uid: e.uid
  9420. }))
  9421. }), b._doWithAction = function(e, t, n) {
  9422. "tryNext" === e ?
  9423. function(e, t) {
  9424. o.
  9425. default.debug("[".concat(b.clientId, "] Connect next gateway")), b.state = S, b.socket.close(), O(), b.reconnectMode = "tryNext", C(e, t)
  9426. }(t, n) : "retry" === e ?
  9427. function(e, t) {
  9428. o.
  9429. default.debug("[".concat(b.clientId, "] Reconnect gateway")), b.state = S, b.socket.close(), O(), b.reconnectMode = "retry", C(e, t)
  9430. }(t, n) : "quit" === e ? (o.
  9431. default.debug("[".concat(b.clientId, "] quit gateway")), b.state = S, b.socket.close(), O()) : "recover" === e && A()
  9432. }, b.socket.on("on_notification", function(e) {
  9433. if(e.detail === "ERR_REPEAT_JOIN") {
  9434. var t = l({
  9435. type: "client-banned",
  9436. uid: e.uid,
  9437. attr: "onMultiIP"
  9438. });
  9439. b.dispatchEvent(t)
  9440. }
  9441. if (o.
  9442. default.debug("[".concat(b.clientId, "] Receive notification: "), e), "ERR_JOIN_BY_MULTI_IP" === I.GatewayErrorCode[e.code]) return b.dispatchEvent({
  9443. type: "onMultiIP",
  9444. option: e.option
  9445. });
  9446. e.detail ? b._doWithAction(qe[I.GatewayErrorCode[e.code]]) : e.action && b._doWithAction(e.action)
  9447. }), b.socket.on("on_user_offline", function(e) {
  9448. var t = l({
  9449. type: "peer-leave",
  9450. uid: e.uid
  9451. });
  9452. 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)) {
  9453. o.
  9454. default.info("[".concat(b.clientId, "] closing stream on peer leave"), e.uid);
  9455. var n = b.remoteStreams[e.uid];
  9456. n.close(), delete b.remoteStreams[e.uid], void 0 !== n.pc && (n.pc.close(), n.pc = void 0, b.p2ps.delete(n.p2pId))
  9457. }
  9458. 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]
  9459. }), b.socket.on("onUplinkStats", function(e) {}), b.socket.on("liveStreamingStarted", function(e) {
  9460. var t = p({
  9461. type: "liveStreamingStarted",
  9462. url: e.url
  9463. });
  9464. b.dispatchEvent(t)
  9465. }), b.socket.on("liveStreamingFailed", function(e) {
  9466. var t = p({
  9467. type: "liveStreamingFailed",
  9468. url: e.url
  9469. });
  9470. b.dispatchEvent(t)
  9471. }), b.socket.on("liveStreamingStopped", function(e) {
  9472. var t = p({
  9473. type: "liveStreamingStopped",
  9474. url: e.url
  9475. });
  9476. b.dispatchEvent(t)
  9477. }), b.socket.on("liveTranscodingUpdated", function(e) {
  9478. var t = p({
  9479. type: "liveTranscodingUpdated",
  9480. reason: e.reason
  9481. });
  9482. b.dispatchEvent(t)
  9483. }), b.socket.on("streamInjectedStatus", function(e) {
  9484. var t = p({
  9485. type: "streamInjectedStatus",
  9486. url: e.url,
  9487. uid: e.uid,
  9488. status: e.status
  9489. });
  9490. b.dispatchEvent(t)
  9491. }), b.socket.on("on_user_online", function(e) {
  9492. b.joinInfo.stringUid && "string" != typeof e.uid && o.
  9493. default.error("StringUID is Mixed with UintUID"), b.dispatchEvent({
  9494. type: "peer-online",
  9495. uid: e.uid
  9496. })
  9497. });
  9498. var c
  9499. },
  9500. w = function(e, t) {
  9501. if (void 0 !== b.socket) try {
  9502. b.socket.emitSimpleMessage(e, function(e, n) {
  9503. t && t(e, n)
  9504. })
  9505. } catch (e) {
  9506. o.
  9507. default.error("[".concat(b.clientId, "] Error in sendSimpleSdp [").concat(e, "]"))
  9508. } else o.
  9509. default.error("[".concat(b.clientId, "] Error in sendSimpleSdp [socket not ready]"))
  9510. },
  9511. k = function() {
  9512. for (var e in b.localStreams) if (void 0 !== b.localStreams[e]) {
  9513. var t = b.localStreams[e];
  9514. delete b.localStreams[e], void 0 !== t.pc && (t.pc.close(), t.pc = void 0)
  9515. }
  9516. },
  9517. D = function() {
  9518. for (var e in b.remoteStreamsInChannel.clear(), b.remoteStreams) if (b.remoteStreams.hasOwnProperty(e)) {
  9519. var t = b.remoteStreams[e];
  9520. t.isPlaying() && t.stop(), t.close(), delete b.remoteStreams[e], void 0 !== t.pc && (t.pc.close(), t.pc = void 0)
  9521. }
  9522. };
  9523. return b
  9524. },
  9525. Ze = {
  9526. _gatewayClients: {},
  9527. register: function(e, t) {
  9528. if (!t.uid) {
  9529. var n = "NO_UID_PROVIDED";
  9530. return o.
  9531. default.error("[".concat(e.clientId, "] "), n, t), n
  9532. }
  9533. if (t.cname) {
  9534. if (this._gatewayClients[t.cname] && this._gatewayClients[t.cname][t.uid] && this._gatewayClients[t.cname][t.uid] !== e) {
  9535. n = "UID_CONFLICT";
  9536. return o.
  9537. default.error("[".concat(e.clientId, "] "), n, t), n
  9538. }
  9539. return o.
  9540. 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
  9541. }
  9542. var n = "NO_CHANNEL_PROVIDED";
  9543. return o.
  9544. default.error("[".concat(e.clientId, "] "), n, t), n
  9545. },
  9546. unregister: function(e) {
  9547. var t = e && e.uid,
  9548. n = e.joinInfo && e.joinInfo.cname;
  9549. if (!t || !n) {
  9550. var i = "INVALID_GATEWAYCLIENT";
  9551. return o.
  9552. default.error("[".concat(e.clientId, "] "), i), i
  9553. }
  9554. if (this._gatewayClients[n] && this._gatewayClients[n][t]) {
  9555. if (this._gatewayClients[n][t] !== e) {
  9556. i = "GATEWAYCLIENT_UID_CONFLICT";
  9557. return o.
  9558. default.error("[".concat(e.clientId, "] "), i), i
  9559. }
  9560. return o.
  9561. default.debug("[".concat(e.clientId, "] unregister client "), e.uid), delete this._gatewayClients[n][t], null
  9562. }
  9563. var i = "GATEWEAY_CLIENT_UNREGISTERED";
  9564. o.
  9565. default.error("[".concat(e.clientId, "] "), i)
  9566. }
  9567. };
  9568. $e.DISCONNECTED = 0, $e.CONNECTING = 1, $e.CONNECTED = 2, $e.DISCONNECTING = 3, $e.connetionStateMap = {
  9569. 0: "DISCONNECTED",
  9570. 1: "CONNECTING",
  9571. 2: "CONNECTED",
  9572. 3: "DISCONNECTING"
  9573. };
  9574. var et = $e,
  9575. tt = function(e) {
  9576. var t;
  9577. switch (e) {
  9578. case "120p":
  9579. case "120p_1":
  9580. t = ["120p_1", "120p_1", "120p_1"];
  9581. break;
  9582. case "120p_3":
  9583. t = ["120p_3", "120p_3", "120p_3"];
  9584. break;
  9585. case "180p":
  9586. case "180p_1":
  9587. t = ["90p_1", "90p_1", "180p_1"];
  9588. break;
  9589. case "180p_3":
  9590. t = ["120p_3", "120p_3", "180p_3"];
  9591. break;
  9592. case "180p_4":
  9593. t = ["120p_1", "120p_1", "180p_4"];
  9594. break;
  9595. case "240p":
  9596. case "240p_1":
  9597. t = ["120p_1", "120p_1", "240p_1"];
  9598. break;
  9599. case "240p_3":
  9600. t = ["120p_3", "120p_3", "240p_3"];
  9601. break;
  9602. case "240p_4":
  9603. t = ["120p_4", "120p_4", "240p_4"];
  9604. break;
  9605. case "360p":
  9606. case "360p_1":
  9607. case "360p_4":
  9608. case "360p_9":
  9609. case "360p_10":
  9610. case "360p_11":
  9611. t = ["90p_1", "90p_1", "360p_1"];
  9612. break;
  9613. case "360p_3":
  9614. case "360p_6":
  9615. t = ["120p_3", "120p_3", "360p_3"];
  9616. break;
  9617. case "360p_7":
  9618. case "360p_8":
  9619. t = ["120p_1", "120p_1", "360p_7"];
  9620. break;
  9621. case "480p":
  9622. case "480p_1":
  9623. case "480p_2":
  9624. case "480p_4":
  9625. case "480p_10":
  9626. t = ["120p_1", "120p_1", "480p_1"];
  9627. break;
  9628. case "480p_3":
  9629. case "480p_6":
  9630. t = ["120p_3", "120p_3", "480p_3"];
  9631. break;
  9632. case "480p_8":
  9633. case "480p_9":
  9634. t = ["120p_4", "120p_4", "480p_8"];
  9635. break;
  9636. case "720p":
  9637. case "720p_1":
  9638. case "720p_2":
  9639. case "720p_3":
  9640. t = ["90p_1", "90p_1", "720p_1"];
  9641. break;
  9642. case "720p_5":
  9643. case "720p_6":
  9644. t = ["120p_1", "120p_1", "720p_5"];
  9645. break;
  9646. case "1080p":
  9647. case "1080p_1":
  9648. case "1080p_2":
  9649. case "1080p_3":
  9650. case "1080p_5":
  9651. t = ["90p_1", "90p_1", "1080p_1"];
  9652. break;
  9653. case "1440p":
  9654. case "1440p_1":
  9655. case "1440p_2":
  9656. t = ["90p_1", "90p_1", "1440p_1"];
  9657. break;
  9658. case "4k":
  9659. case "4k_1":
  9660. case "4k_3":
  9661. t = ["90p_1", "90p_1", "4k_1"];
  9662. break;
  9663. default:
  9664. t = ["120p_1", "120p_1", "360p_7"]
  9665. }
  9666. 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]
  9667. },
  9668. nt = {
  9669. 1001: "FRAMERATE_INPUT_TOO_LOW",
  9670. 1002: "FRAMERATE_SENT_TOO_LOW",
  9671. 1003: "SEND_VIDEO_BITRATE_TOO_LOW",
  9672. 1005: "RECV_VIDEO_DECODE_FAILED",
  9673. 2001: "AUDIO_INPUT_LEVEL_TOO_LOW",
  9674. 2002: "AUDIO_OUTPUT_LEVEL_TOO_LOW",
  9675. 2003: "SEND_AUDIO_BITRATE_TOO_LOW",
  9676. 2005: "RECV_AUDIO_DECODE_FAILED",
  9677. 3001: "FRAMERATE_INPUT_TOO_LOW_RECOVER",
  9678. 3002: "FRAMERATE_SENT_TOO_LOW_RECOVER",
  9679. 3003: "SEND_VIDEO_BITRATE_TOO_LOW_RECOVER",
  9680. 3005: "RECV_VIDEO_DECODE_FAILED_RECOVER",
  9681. 4001: "AUDIO_INPUT_LEVEL_TOO_LOW_RECOVER",
  9682. 4002: "AUDIO_OUTPUT_LEVEL_TOO_LOW_RECOVER",
  9683. 4003: "SEND_AUDIO_BITRATE_TOO_LOW_RECOVER",
  9684. 4005: "RECV_AUDIO_DECODE_FAILED_RECOVER"
  9685. },
  9686. it = {
  9687. FramerateInput: 1001,
  9688. FramerateSent: 1002,
  9689. SendVideoBitrate: 1003,
  9690. VideoDecode: 1005,
  9691. AudioIntputLevel: 2001,
  9692. AudioOutputLevel: 2002,
  9693. SendAudioBitrate: 2003,
  9694. AudioDecode: 2005
  9695. },
  9696. at = function(e) {
  9697. var t = {
  9698. remoteStreamStorage: {},
  9699. localStreamStorage: {}
  9700. };
  9701. return t.gatewayClient = e, t.checkAudioOutputLevel = function(e) {
  9702. return !(e && parseInt(e.audioRecvBytesDelta) > 0 && parseInt(e.audioDecodingNormalDelta) > 0 && 0 === parseInt(e.audioOutputLevel))
  9703. }, t.checkAudioIntputLevel = function(e) {
  9704. return !e || 0 !== parseInt(e.audioInputLevel)
  9705. }, t.checkFramerateInput = function(e, t) {
  9706. if (!e || !t.attributes) return !0;
  9707. var n = parseInt(t.attributes.maxFrameRate),
  9708. i = parseInt(e.googFrameRateInput);
  9709. return !n || !i || !(n > 10 && i < 5 || n < 10 && n >= 5 && i <= 1)
  9710. }, t.checkFramerateSent = function(e) {
  9711. return !(e && parseInt(e.googFrameRateInput) > 5 && parseInt(e.googFrameRateSent) <= 1)
  9712. }, t.checkSendVideoBitrate = function(e) {
  9713. return !e || 0 !== parseInt(e.videoSendBytesDelta)
  9714. }, t.checkSendAudioBitrate = function(e) {
  9715. return !e || 0 !== parseInt(e.audioSendBytesDelta)
  9716. }, t.checkVideoDecode = function(e) {
  9717. return !e || 0 === parseInt(e.videoRecvBytesDelta) || 0 !== parseInt(e.googFrameRateDecoded)
  9718. }, t.checkAudioDecode = function(e) {
  9719. return !e || 0 === parseInt(e.audioRecvBytesDelta) || 0 !== parseInt(e.audioDecodingNormalDelta)
  9720. }, t.record = function(e, n, i, a, r) {
  9721. i[e] || (i[e] = {
  9722. isPrevNormal: !0,
  9723. record: []
  9724. });
  9725. var o = i[e],
  9726. s = t["check" + e](n, r);
  9727. if (o.record.push(s), o.record.length >= 5) {
  9728. o.isCurNormal = -1 !== o.record.indexOf(!0);
  9729. var c = it[e];
  9730. o.isPrevNormal && !o.isCurNormal && t.gatewayClient.dispatchEvent({
  9731. type: "exception",
  9732. code: c,
  9733. msg: nt[c],
  9734. uid: a
  9735. }), !o.isPrevNormal && o.isCurNormal && t.gatewayClient.dispatchEvent({
  9736. type: "exception",
  9737. code: c + 2e3,
  9738. msg: nt[c + 2e3],
  9739. uid: a
  9740. }), o.isPrevNormal = o.isCurNormal, o.record = []
  9741. }
  9742. }, t.setLocalStats = function(e) {
  9743. var n = {};
  9744. Object.keys(e).map(function(i) {
  9745. var a = e[i],
  9746. r = t.gatewayClient.localStreams[parseInt(i)],
  9747. o = t.localStreamStorage[i] || {};
  9748. 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
  9749. }), t.localStreamStorage = n
  9750. }, t.setRemoteStats = function(n) {
  9751. var i = {};
  9752. Object.keys(n).map(function(a) {
  9753. var r = n[a],
  9754. o = e.remoteStreams[a],
  9755. s = t.remoteStreamStorage[a] || {};
  9756. 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
  9757. }), t.remoteStreamStorage = i
  9758. }, t
  9759. },
  9760. rt = new function() {
  9761. var e = c();
  9762. return e.states = {
  9763. UNINIT: "UNINIT",
  9764. INITING: "INITING",
  9765. INITED: "INITED"
  9766. }, 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) {
  9767. if (e.state = e.states.INITING, navigator.connection && navigator.connection.addEventListener) {
  9768. var i = e._getNetworkInfo();
  9769. e.type = i && i.type, e.state = e.states.INITED, t && t()
  9770. } else e.state = e.states.UNINIT, n && n("DO_NOT_SUPPORT")
  9771. }, e._getNetworkInfo = function() {
  9772. return navigator.connection
  9773. }, e._reloadNetworkInfo = function() {
  9774. var t = e._getNetworkInfo(),
  9775. n = t && t.type || "UNSUPPORTED",
  9776. i = Date.now();
  9777. if (n !== e.type) {
  9778. e.lastTypeChangedAt = i, "none" == n ? e.lastDisconnectedAt = i : "none" == e.type && (e.lastConnectedAt = i), e.type = n;
  9779. var a = {
  9780. type: "networkTypeChanged",
  9781. networkType: n
  9782. };
  9783. e.dispatchEvent(a)
  9784. }
  9785. }, e.getStats = function(t, n) {
  9786. var i = {},
  9787. a = e._getNetworkInfo();
  9788. a && (i.NetworkType = a.type || "UNSUPPORTED"), setTimeout(function() {
  9789. t(i)
  9790. }, 0)
  9791. }, e._init(function() {
  9792. navigator.connection.addEventListener("change", function() {
  9793. e._reloadNetworkInfo()
  9794. }), e.networkChangeTimer = setInterval(function() {
  9795. e._reloadNetworkInfo()
  9796. }, 5e3)
  9797. }, function(e) {}), e
  9798. },
  9799. ot = "DISCONNECTING",
  9800. st = "DISCONNECTED",
  9801. ct = "CONNECTED",
  9802. dt = "INIT",
  9803. ut = [],
  9804. lt = (setInterval(function() {
  9805. Date.now();
  9806. ut.forEach(function(e) {
  9807. for (var t = e.requests.length - 1; t >= 0; t--) {
  9808. var n = e.requests[t];
  9809. n.timeoutCnt++, n.timeoutCnt >= 15 && (e.requests.splice(t, 1), n.promises.reject({
  9810. reason: "TIMEOUT",
  9811. code: 499
  9812. }))
  9813. }
  9814. })
  9815. }, 1e3), 1),
  9816. ft = 1,
  9817. pt = 1,
  9818. mt = function() {
  9819. var e = K()(Y.a.mark(function e(t) {
  9820. var n, i, a, s, c, d, u;
  9821. return Y.a.wrap(function(e) {
  9822. for (;;) switch (e.prev = e.next) {
  9823. case 0:
  9824. 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) {
  9825. var l = !1,
  9826. f = new XMLHttpRequest;
  9827. f.open("POST", i, !0), f.setRequestHeader("Content-Type", "application/json; charset=utf-8"), f.setRequestHeader("X-Packet-Service-Type", "0"), f.setRequestHeader("X-Packet-URI", "61"), f.onload = function() {
  9828. if (!l) {
  9829. var n = null,
  9830. i = null;
  9831. try {
  9832. n = JSON.parse(f.responseText)
  9833. } catch (e) {
  9834. var a = "Invalid text ".concat(f.responseText);
  9835. return o.
  9836. default.error(a), l = !0, t(a)
  9837. }
  9838. if (n.code) {
  9839. var r = "AP_ERR_".concat(n.code);
  9840. return o.
  9841. default.error(r, n), l = !0, t(r)
  9842. }
  9843. try {
  9844. i = JSON.parse(n.json_body || n.json)
  9845. } catch (e) {
  9846. var s = "Invalid json_body ".concat(f.responseText);
  9847. return o.
  9848. default.error(s), l = !0, t(s)
  9849. }
  9850. if (200 !== i.code) {
  9851. var c = "APPCENTER_CODE_".concat(i.code);
  9852. return o.
  9853. default.error(c, i), l = !0, t(c)
  9854. }
  9855. if (!(i.servers && i.servers.length > 0)) {
  9856. return o.
  9857. default.error("APPCENTER_EMPTY_SERVER", i), l = !0, t("APPCENTER_EMPTY_SERVER")
  9858. }
  9859. return l = !0, e(i)
  9860. }
  9861. }, f.onerror = function(e) {
  9862. var n = "AP_REUEST_".concat(e.type);
  9863. o.
  9864. default.error(n, i, e), l || (l = !0, t(n))
  9865. }, f.ontimeout = function(e) {
  9866. o.
  9867. default.error("AP_REUEST_TIMEOUT", i, e), l || (l = !0, t("AP_REUEST_TIMEOUT"))
  9868. }, u && (f.timeout = u), f.send(JSON.stringify({
  9869. service_name: a,
  9870. json_body: JSON.stringify({
  9871. command: "convergeAllocateEdge",
  9872. sid: s,
  9873. uid: n + "",
  9874. appId: c,
  9875. ts: Math.floor(Date.now() / 1e3),
  9876. seq: lt++,
  9877. cname: d,
  9878. version: r.VERSION,
  9879. requestId: ft++
  9880. })
  9881. }))
  9882. }));
  9883. case 2:
  9884. case "end":
  9885. return e.stop()
  9886. }
  9887. }, e, this)
  9888. }));
  9889. return function(t) {
  9890. return e.apply(this, arguments)
  9891. }
  9892. }(),
  9893. gt = function() {
  9894. var e = K()(Y.a.mark(function e(t) {
  9895. var n, i, a, s, c, d, u, l, f, p, m, g;
  9896. return Y.a.wrap(function(e) {
  9897. for (;;) switch (e.prev = e.next) {
  9898. case 0:
  9899. 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"));
  9900. case 3:
  9901. if ((e.t1 = e.t0()).done) {
  9902. e.next = 34;
  9903. break
  9904. }
  9905. return u = e.t1.value, l = "https://".concat(Object(r.getParameter)("UAP_AP")[u], "/api/v1?action=uap"), f = void 0, e.prev = 7, e.next = 10, mt({
  9906. uid: c,
  9907. url: l,
  9908. appId: a,
  9909. sid: i,
  9910. serviceName: n,
  9911. cname: s,
  9912. timeout: Object(r.getParameter)("HTTP_CONNECT_TIMEOUT")
  9913. });
  9914. case 10:
  9915. f = e.sent, e.next = 18;
  9916. break;
  9917. case 13:
  9918. return e.prev = 13, e.t2 = e.
  9919. catch (7), o.
  9920. default.error(e.t2), d = e.t2, e.abrupt("continue", 3);
  9921. case 18:
  9922. p = Y.a.mark(function e(t) {
  9923. var i, a, r;
  9924. return Y.a.wrap(function(e) {
  9925. for (;;) switch (e.prev = e.next) {
  9926. case 0:
  9927. if (i = f.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) {
  9928. e.next = 5;
  9929. break
  9930. }
  9931. return o.
  9932. default.error("Invalid server response", i), e.abrupt("return", "continue");
  9933. case 5:
  9934. return e.prev = 5, e.next = 8, new Promise(function(e, t) {
  9935. var n = new WebSocket(a),
  9936. i = !1;
  9937. n.addEventListener("open", function() {
  9938. i || (i = !0, e(n))
  9939. }), n.addEventListener("error", function(e) {
  9940. i || (i = !0, t(e))
  9941. })
  9942. });
  9943. case 8:
  9944. return (r = e.sent).workerToken = f.workerToken, e.abrupt("return", {
  9945. v: r
  9946. });
  9947. case 13:
  9948. e.prev = 13, e.t0 = e.
  9949. catch (5), o.
  9950. default.error(e.t0), d = e.t0;
  9951. case 17:
  9952. case "end":
  9953. return e.stop()
  9954. }
  9955. }, e, this, [
  9956. [5, 13]
  9957. ])
  9958. }), m = 0;
  9959. case 20:
  9960. if (!(m < f.servers.length)) {
  9961. e.next = 32;
  9962. break
  9963. }
  9964. return e.delegateYield(p(m), "t3", 22);
  9965. case 22:
  9966. g = e.t3, e.t4 = g, e.next = "continue" === e.t4 ? 26 : 27;
  9967. break;
  9968. case 26:
  9969. return e.abrupt("continue", 29);
  9970. case 27:
  9971. if ("object" !== Se()(g)) {
  9972. e.next = 29;
  9973. break
  9974. }
  9975. return e.abrupt("return", g.v);
  9976. case 29:
  9977. m++, e.next = 20;
  9978. break;
  9979. case 32:
  9980. e.next = 3;
  9981. break;
  9982. case 34:
  9983. throw d;
  9984. case 35:
  9985. case "end":
  9986. return e.stop()
  9987. }
  9988. }, e, this, [
  9989. [7, 13]
  9990. ])
  9991. }));
  9992. return function(t) {
  9993. return e.apply(this, arguments)
  9994. }
  9995. }(),
  9996. vt = {},
  9997. St = function(e) {
  9998. return vt[e] ? (vt[e] += 1, vt[e]) : (vt[e] = 1, vt[e])
  9999. },
  10000. ht = {},
  10001. _t = function(e) {
  10002. return ht[e] ? (ht[e] += 1, ht[e]) : (ht[e] = 1, ht[e])
  10003. },
  10004. Et = function(e) {
  10005. var t = e.appId,
  10006. n = e.cname,
  10007. i = e.uid,
  10008. a = e.sid,
  10009. s = c();
  10010. return s.status = dt, 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 = pt++, s.connect = function() {
  10011. var e = K()(Y.a.mark(function e(t) {
  10012. var n;
  10013. return Y.a.wrap(function(e) {
  10014. for (;;) switch (e.prev = e.next) {
  10015. case 0:
  10016. if (n = t.wsClient, s.status === dt) {
  10017. e.next = 4;
  10018. break
  10019. }
  10020. return o.
  10021. default.debug("Ignored UapConnection.connect: ".concat(s.status)), e.abrupt("return");
  10022. case 4:
  10023. s.connection = n, s.status = ct, s._flush(), s.startPingpong(), n.addEventListener("close", function(e) {
  10024. if (console.log("Weboskcet closed", e), n === s.connection) {
  10025. var t = {
  10026. type: "close",
  10027. evt: e
  10028. };
  10029. s.dispatchEvent(t)
  10030. }
  10031. }), n.addEventListener("message", function(e) {
  10032. if (e.data) {
  10033. var t = null;
  10034. try {
  10035. t = JSON.parse(e.data)
  10036. } catch (e) {
  10037. return void o.
  10038. default.error("Invalid data from worker manager", t)
  10039. }
  10040. if (t.requestId) for (var n = s.requests.length - 1; n >= 0; n--) {
  10041. var i = s.requests[n];
  10042. if (i.reqData.requestId === t.requestId) {
  10043. s.requests.splice(n, 1), t.code < 400 && t.code >= 200 ? i.promises.resolve(t) : i.promises.reject(t);
  10044. break
  10045. }
  10046. } else t.type = "notification", s.dispatchEvent(t)
  10047. }
  10048. });
  10049. case 10:
  10050. case "end":
  10051. return e.stop()
  10052. }
  10053. }, e, this)
  10054. }));
  10055. return function(t) {
  10056. return e.apply(this, arguments)
  10057. }
  10058. }(), s.disconnect = K()(Y.a.mark(function e() {
  10059. var t;
  10060. return Y.a.wrap(function(e) {
  10061. for (;;) switch (e.prev = e.next) {
  10062. case 0:
  10063. for (t in s.status = ot, clearInterval(s.pingpongTimer), s.pingpongTimer = null, s.requests) s.requests[t].promises.reject("DISCONNECTED");
  10064. return s.requests = [], null, s.connection && (s.connection.close(), s.connection = null), s.status = st, e.abrupt("return", null);
  10065. case 9:
  10066. case "end":
  10067. return e.stop()
  10068. }
  10069. }, e, this)
  10070. })), s.request = function() {
  10071. var e = K()(Y.a.mark(function e(t) {
  10072. var n, i, a, c;
  10073. return Y.a.wrap(function(e) {
  10074. for (;;) switch (e.prev = e.next) {
  10075. case 0:
  10076. if (n = h()({
  10077. command: "request",
  10078. sdkVersion: r.VERSION,
  10079. seq: _t(s.sid),
  10080. appId: s.appId,
  10081. cname: s.cname,
  10082. uid: "" + s.uid,
  10083. sid: s.sid,
  10084. requestId: St(s.sid),
  10085. ts: Math.floor(Date.now() / 1e3)
  10086. }, t), "INIT" !== s.status) {
  10087. e.next = 5;
  10088. break
  10089. }
  10090. return e.abrupt("return", new Promise(function(e, t) {
  10091. var i = {
  10092. reqData: n,
  10093. stalledTs: Date.now(),
  10094. timeoutCnt: 0,
  10095. promises: {
  10096. resolve: e,
  10097. reject: t
  10098. }
  10099. };
  10100. s.requests.push(i)
  10101. }));
  10102. case 5:
  10103. if (s.connection) {
  10104. e.next = 11;
  10105. break
  10106. }
  10107. throw i = "NO_WEBSOCKET_CONNECTION", o.
  10108. default.error(i), new Error(i);
  10109. case 11:
  10110. if (s.status !== ot || t.clientRequest && "DestroyWorker" === t.clientRequest.command) {
  10111. e.next = 17;
  10112. break
  10113. }
  10114. throw a = "WEBSOCKET_DISCONNECTING", o.
  10115. default.error(a), new Error(a);
  10116. case 17:
  10117. if ("DISCONNECTED" !== s.status) {
  10118. e.next = 23;
  10119. break
  10120. }
  10121. throw c = "WEBSOCKET_DISCONNECTED", o.
  10122. default.error(c), new Error(c);
  10123. case 23:
  10124. return e.abrupt("return", new Promise(function(e, t) {
  10125. var i = {
  10126. reqData: n,
  10127. stalledTs: Date.now(),
  10128. timeoutCnt: 0,
  10129. promises: {
  10130. resolve: e,
  10131. reject: t
  10132. }
  10133. };
  10134. s.requests.push(i), s._flush()
  10135. }));
  10136. case 24:
  10137. case "end":
  10138. return e.stop()
  10139. }
  10140. }, e, this)
  10141. }));
  10142. return function(t) {
  10143. return e.apply(this, arguments)
  10144. }
  10145. }(), s._flush = function() {
  10146. s.connection && s.status === ct && s.requests.forEach(function(e) {
  10147. e.sentTs || (e.sentTs = Date.now(), e.reqData.clientRequest && (e.reqData.clientRequest.workerToken = s.connection.workerToken), s.connection.send(JSON.stringify(e.reqData)))
  10148. })
  10149. }, s.startPingpong = function() {
  10150. clearInterval(s.pingpongTimer), s.pingpongTimer = setInterval(K()(Y.a.mark(function e() {
  10151. return Y.a.wrap(function(e) {
  10152. for (;;) switch (e.prev = e.next) {
  10153. case 0:
  10154. if (s.status !== ct || !s.connection || 1 !== s.connection.readyState) {
  10155. e.next = 9;
  10156. break
  10157. }
  10158. return e.prev = 1, e.next = 4, s.request({
  10159. command: "ping"
  10160. });
  10161. case 4:
  10162. e.next = 9;
  10163. break;
  10164. case 6:
  10165. e.prev = 6, e.t0 = e.
  10166. catch (1), console.error("pingpong", e.t0);
  10167. case 9:
  10168. case "end":
  10169. return e.stop()
  10170. }
  10171. }, e, this, [
  10172. [1, 6]
  10173. ])
  10174. })), 6e3)
  10175. }, s._flush(), s.startPingpong(), ut.push(s), s
  10176. },
  10177. It = function(e) {
  10178. e.disconnect();
  10179. var t = ut.find(function(t) {
  10180. return e.connectionId === t.connectionId
  10181. });
  10182. ut.splice(t, 1)
  10183. },
  10184. Tt = function(e) {
  10185. return "number" == typeof e && 0 <= e && e <= 4294967295
  10186. };
  10187. var yt = function(e) {
  10188. var t = e;
  10189. if (Object(r.getParameter)("LIVESTREAMING_ALIGN")) switch (e) {
  10190. case 200:
  10191. t = I.INJECT_STREAM_STATUS.INJECT_STREAM_STATUS_START_SUCCESS;
  10192. break;
  10193. case 451:
  10194. t = I.INJECT_STREAM_STATUS.INJECT_STREAM_STATUS_START_ALREADY_EXISTS;
  10195. break;
  10196. case 453:
  10197. t = I.INJECT_STREAM_STATUS.INJECT_STREAM_STATUS_START_UNAUTHORIZED;
  10198. break;
  10199. case 470:
  10200. t = I.INJECT_STREAM_STATUS.INJECT_STREAM_STATUS_BROKEN;
  10201. break;
  10202. case 499:
  10203. t = I.INJECT_STREAM_STATUS.INJECT_STREAM_STATUS_START_TIMEDOUT;
  10204. break;
  10205. default:
  10206. t = I.INJECT_STREAM_STATUS.INJECT_STREAM_STATUS_START_FAILED
  10207. }
  10208. return t
  10209. },
  10210. bt = function(e) {
  10211. var t = e;
  10212. if (Object(r.getParameter)("LIVESTREAMING_ALIGN")) switch (e) {
  10213. case 200:
  10214. t = I.INJECT_STREAM_STATUS.INJECT_STREAM_STATUS_STOP_SUCCESS;
  10215. break;
  10216. case 404:
  10217. case 452:
  10218. t = I.INJECT_STREAM_STATUS.INJECT_STREAM_STATUS_STOP_NOT_FOUND;
  10219. break;
  10220. case 453:
  10221. t = I.INJECT_STREAM_STATUS.INJECT_STREAM_STATUS_STOP_UNAUTHORIZED;
  10222. break;
  10223. case 499:
  10224. t = I.INJECT_STREAM_STATUS.INJECT_STREAM_STATUS_STOP_TIMEDOUT;
  10225. break;
  10226. default:
  10227. t = I.INJECT_STREAM_STATUS.INJECT_STREAM_STATUS_STOP_FAILED
  10228. }
  10229. return t
  10230. },
  10231. Rt = a(22),
  10232. At = a.n(Rt),
  10233. Ot = function(e) {
  10234. var t = {
  10235. key: void 0,
  10236. highStream: null,
  10237. lowStream: null,
  10238. lowStreamParameter: null,
  10239. isDualStream: !1,
  10240. highStreamState: 2,
  10241. lowStreamState: 2,
  10242. proxyServer: null
  10243. };
  10244. t.turnServer = {
  10245. mode: "auto",
  10246. username: "test",
  10247. credential: "111111",
  10248. forceturn: Object(r.getParameter)("FORCE_TURN")
  10249. }, t.useProxyServer = !1, t.mode = e.mode, t.codec = e.codec, t.clientId = Object(F.generateSessionId)().slice(0, 5), t.uintUid = null;
  10250. e = h()({}, e);
  10251. return t.aespassword = null, t.aesmode = "none", t.hasPublished = !1, t.getSessionId = function() {
  10252. return e.sessionId
  10253. }, t.startChannelMediaRelay = function(n, i) {
  10254. var a = s.b.reportApiInvoke(e.sessionId, {
  10255. callback: function(e) {
  10256. if (e) return i && i(e);
  10257. i && i()
  10258. },
  10259. name: "Client.startChannelMediaRelay",
  10260. options: arguments,
  10261. tag: "tracer"
  10262. });
  10263. if (!(n instanceof ye.ChannelMediaRelayConfiguration)) throw "Configration should be instance of [ChannelMediaRelayConfiguration]";
  10264. var r = n.getSrcChannelMediaInfo(),
  10265. o = n.getDestChannelMediaInfos();
  10266. if (Object(W.isEmpty)(r)) throw "srcChannelMediaInfo should not be empty";
  10267. if (Object(W.isEmpty)(o) || 0 === o.length) throw "destChannelMediaInfos should not be empty";
  10268. if (!Object(F.is32Uint)(r.uid)) throw "Invalid uid in srcChannelMediaInfo";
  10269. if (!Object(W.isValidChannelName)(r.channelName)) throw "Invalid channelName in srcChannelMediaInfo";
  10270. if (r.token && !Object(W.isValidToken)(r.token)) throw "Invalid token in srcChannelMediaInfo";
  10271. if (o.forEach(function(e) {
  10272. if (!Object(F.is32Uint)(e.uid)) throw "Invalid uid in destChannelMediaInfo";
  10273. if (!Object(W.isValidChannelName)(e.channelName)) throw "Invalid channelName in destChannelMediaInfo";
  10274. if (e.token && !Object(W.isValidToken)(e.token)) throw "Invalid token in destChannelMediaInfo"
  10275. }), t.gatewayClient.state !== et.CONNECTED) throw "startChannelMediaRelay should be used after join";
  10276. t.gatewayClient.startChannelMediaRelay(n).then(function() {
  10277. a && a()
  10278. }).
  10279. catch (function(e) {
  10280. a && a(e)
  10281. })
  10282. }, t.updateChannelMediaRelay = function(n, i) {
  10283. var a = s.b.reportApiInvoke(e.sessionId, {
  10284. callback: function(e) {
  10285. if (e) return i && i(e);
  10286. i && i()
  10287. },
  10288. name: "Client.updateChannelMediaRelay",
  10289. options: arguments,
  10290. tag: "tracer"
  10291. });
  10292. if (!(n instanceof ye.ChannelMediaRelayConfiguration)) throw "Configration should be instance of [ChannelMediaRelayConfiguration]";
  10293. var r = n.getSrcChannelMediaInfo(),
  10294. o = n.getDestChannelMediaInfos();
  10295. if (Object(W.isEmpty)(r)) throw "srcChannelMediaInfo should not be empty";
  10296. if (Object(W.isEmpty)(o) || 0 === o.length) throw "destChannelMediaInfos should not be empty";
  10297. if (!Object(F.is32Uint)(r.uid)) throw "Invalid uid in srcChannelMediaInfo";
  10298. if (!Object(W.isValidChannelName)(r.channelName)) throw "Invalid channelName in srcChannelMediaInfo";
  10299. if (r.token && !Object(W.isValidToken)(r.token)) throw "Invalid token in srcChannelMediaInfo";
  10300. if (o.forEach(function(e) {
  10301. if (!Object(F.is32Uint)(e.uid)) throw "Invalid uid in destChannelMediaInfo";
  10302. if (!Object(W.isValidChannelName)(e.channelName)) throw "Invalid channelName in destChannelMediaInfo";
  10303. if (e.token && !Object(W.isValidToken)(e.token)) throw "Invalid token in destChannelMediaInfo"
  10304. }), t.gatewayClient.state !== et.CONNECTED) throw "updateChannelMediaRelay should be used after join";
  10305. t.gatewayClient.updateChannelMediaRelay(n).then(function() {
  10306. a && a()
  10307. }).
  10308. catch (function(e) {
  10309. a && a(e)
  10310. })
  10311. }, t.stopChannelMediaRelay = function(n) {
  10312. var i = s.b.reportApiInvoke(e.sessionId, {
  10313. callback: function(e) {
  10314. if (e) return n && n(e);
  10315. n && n()
  10316. },
  10317. name: "Client.stopChannelMediaRelay",
  10318. options: arguments,
  10319. tag: "tracer"
  10320. });
  10321. t.gatewayClient.stopChannelMediaRelay().then(function() {
  10322. i && i()
  10323. }).
  10324. catch (function(e) {
  10325. i && i(e)
  10326. })
  10327. }, t.getConnectionState = function() {
  10328. var n = s.b.reportApiInvoke(e.sessionId, {
  10329. name: "Client.getConnectionState",
  10330. options: arguments,
  10331. tag: "tracer"
  10332. }),
  10333. i = et.connetionStateMap[t.gatewayClient.state];
  10334. return n(), i
  10335. }, t.setClientRole = function(n, i) {
  10336. var a = s.b.reportApiInvoke(e.sessionId, {
  10337. callback: i,
  10338. name: "Client.setClientRole",
  10339. options: arguments,
  10340. tag: "tracer"
  10341. });
  10342. if (Object(W.checkValidEnum)(n, "setClientRole", ["host", "audience"]), "rtc" === t.mode) {
  10343. var r = "RTC mode can not use setClientRole";
  10344. return o.
  10345. default.warning("[".concat(t.clientId, "] ").concat(r)), a && a(r)
  10346. }
  10347. t.gatewayClient && t.gatewayClient.state === et.CONNECTED ? ("audience" === n && (0 === this.highStreamState ? this._unpublish(this.highStream, function() {
  10348. a && a(null, {
  10349. role: n
  10350. })
  10351. }, function(e) {
  10352. a && a(e)
  10353. }) : t.gatewayClient.setClientRole("audience", a)), "host" === n && t.gatewayClient.setClientRole("host", a)) : (t.gatewayClient.role = n, a && a(null, {
  10354. role: n
  10355. }))
  10356. }, t.getGatewayInfo = function(e) {
  10357. if (t.gatewayClient.state !== et.CONNECTED) {
  10358. var n = "Client is not in connected state";
  10359. return o.
  10360. default.error("[".concat(t.clientId, "] ").concat(n)), void e(n)
  10361. }
  10362. t.gatewayClient.getGatewayInfo(function(t) {
  10363. e(null, t)
  10364. }, e)
  10365. }, t.renewToken = function(n, i, a) {
  10366. var r = s.b.reportApiInvoke(e.sessionId, {
  10367. callback: function(e, t) {
  10368. if (e) return o.
  10369. default.error("Failed to renew token ".concat(e), t), a && a(e);
  10370. i && i(t)
  10371. },
  10372. name: "Client.renewToken",
  10373. options: arguments,
  10374. tag: "tracer"
  10375. });
  10376. 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.");
  10377. return t.gatewayClient ? t.key ? (t.key = n, void t.gatewayClient.renewToken(n, function(e) {
  10378. return r(null, e)
  10379. }, r)) : (o.
  10380. default.error("[".concat(t.clientId, "] renewToken should not be called before user join")), r(I.
  10381. default.INVALID_OPERATION)) : (o.
  10382. default.error("[".concat(t.clientId, "] renewToken Failed. GatewayClient not Exist")), r(I.
  10383. default.INVALID_OPERATION))
  10384. }, t.setLowStreamParameter = function(n) {
  10385. var i = s.b.reportApiInvoke(e.sessionId, {
  10386. name: "Client.setLowStreamParameter",
  10387. options: arguments,
  10388. tag: "tracer"
  10389. });
  10390. Object(W.checkValidObject)(n, "param");
  10391. var a = n.width,
  10392. r = n.height,
  10393. c = n.framerate,
  10394. d = n.bitrate;
  10395. 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.
  10396. default.warning("[".concat(t.clientId, "] The width and height parameters take effect only when both are set")), t.lowStreamParameter = n, i()
  10397. }, t.init = function(n, i, a) {
  10398. var r = s.b.reportApiInvoke(e.sessionId, {
  10399. callback: function(e, t) {
  10400. if (e) return a && a(e);
  10401. i && i(t)
  10402. },
  10403. name: "Client.init",
  10404. options: arguments,
  10405. tag: "tracer"
  10406. });
  10407. Object(W.checkValidString)(n), Object(m.isChromeKernel)() && Object(m.getChromeKernelVersion)() <= 48 ? a ? r(I.
  10408. default.BAD_ENVIRONMENT) : Object(F.popBanTip)() : (o.
  10409. default.info("[".concat(t.clientId, "] Initializing AgoraRTC client, appId: ").concat(n, ".")), e.appId = n, e.sessionId = Object(F.generateSessionId)(), r())
  10410. }, t.setTurnServer = function(n) {
  10411. var i = s.b.reportApiInvoke(e.sessionId, {
  10412. name: "Client.setTurnServer",
  10413. options: arguments,
  10414. tag: "tracer"
  10415. });
  10416. if (t.gatewayClient && t.gatewayClient.state !== et.DISCONNECTED) throw new Error("Set turn server before join channel");
  10417. if (t.useProxyServer) throw new Error("You have already set the proxy");
  10418. Object(W.checkValidObject)(n, "turnServer");
  10419. var a = n.turnServerURL,
  10420. r = n.username,
  10421. c = n.password,
  10422. d = n.udpport,
  10423. u = n.forceturn,
  10424. l = n.tcpport;
  10425. 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.
  10426. default.info("[".concat(t.clientId, "] Set turnserver tcpurl. ").concat(t.turnServer.url, ":").concat(t.turnServer.tcpport))), o.
  10427. 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()
  10428. }, t.setProxyServer = function(n) {
  10429. var i = s.b.reportApiInvoke(e.sessionId, {
  10430. name: "Client.setProxyServer",
  10431. options: arguments,
  10432. tag: "tracer"
  10433. });
  10434. if (t.gatewayClient && t.gatewayClient.state !== et.DISCONNECTED) throw new Error("Set proxy server before join channel");
  10435. if (!n) throw new Error("Do not set the proxyServer parameter as empty");
  10436. if (t.useProxyServer) throw new Error("You have already set the proxy");
  10437. Object(W.checkValidString)(n, "proxyServer"), t.proxyServer = n, s.b.setProxyServer(n), o.
  10438. default.setProxyServer(n), i()
  10439. }, t.startProxyServer = function() {
  10440. var n = s.b.reportApiInvoke(e.sessionId, {
  10441. name: "Client.startProxyServer",
  10442. options: arguments,
  10443. tag: "tracer"
  10444. });
  10445. if (t.gatewayClient && t.gatewayClient.state !== et.DISCONNECTED) throw new Error("Start proxy server before join channel");
  10446. if (t.proxyServer || t.turnServer.url) throw new Error("You have already set the proxy");
  10447. t.useProxyServer = !0, n()
  10448. }, t.stopProxyServer = function() {
  10449. var n = s.b.reportApiInvoke(e.sessionId, {
  10450. name: "Client.stopProxyServer",
  10451. options: arguments,
  10452. tag: "tracer"
  10453. });
  10454. if (t.gatewayClient && t.gatewayClient.state !== et.DISCONNECTED) throw new Error("Stop proxy server after leave channel");
  10455. s.b.setProxyServer(), o.
  10456. default.setProxyServer(), t.turnServer = {}, t.proxyServer = null, t.useProxyServer = !1, n()
  10457. }, t.setEncryptionSecret = function(n) {
  10458. var i = s.b.reportApiInvoke(e.sessionId, {
  10459. name: "Client.setEncryptionSecret",
  10460. options: arguments,
  10461. tag: "tracer"
  10462. });
  10463. Object(W.checkValidString)(n, "password"), t.aespassword = n, i()
  10464. }, t.setEncryptionMode = function(n) {
  10465. var i = s.b.reportApiInvoke(e.sessionId, {
  10466. name: "Client.setEncryptionMode",
  10467. options: arguments,
  10468. tag: "tracer"
  10469. });
  10470. if (Object(W.checkValidString)(n, "encryptionMode"), -1 === Oe.indexOf(n)) throw new Error('Invalid encryptionMode: encryptionMode should be "aes-128-xts" | "aes-256-xts" | "aes-128-ecb"');
  10471. t.aesmode = n, i()
  10472. }, t.configPublisher = function(n) {
  10473. var i = s.b.reportApiInvoke(e.sessionId, {
  10474. name: "Client.configPublisher",
  10475. options: arguments,
  10476. tag: "tracer"
  10477. });
  10478. Object(W.checkValidObject)(n, "config");
  10479. var a = n.width,
  10480. r = n.height,
  10481. o = n.framerate,
  10482. c = n.bitrate,
  10483. d = n.publisherUrl;
  10484. 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()
  10485. }, t.enableDualStream = function(n, i) {
  10486. var a = s.b.reportApiInvoke(e.sessionId, {
  10487. callback: function(e, t) {
  10488. if (e) return i && i(e);
  10489. n && n(t)
  10490. },
  10491. name: "Client.enableDualStream",
  10492. options: arguments,
  10493. tag: "tracer"
  10494. });
  10495. return "iOS" === Object(m.getBrowserOS)() ? (s.b.streamSwitch(e.sessionId, {
  10496. lts: (new Date).getTime(),
  10497. isdual: !0,
  10498. succ: !1
  10499. }), a(I.
  10500. default.IOS_NOT_SUPPORT)) : Object(m.isWeChatBrowser)() ? (s.b.streamSwitch(e.sessionId, {
  10501. lts: (new Date).getTime(),
  10502. isdual: !0,
  10503. succ: !1
  10504. }), a(I.
  10505. default.WECHAT_NOT_SUPPORT)) : (s.b.streamSwitch(e.sessionId, {
  10506. lts: (new Date).getTime(),
  10507. isdual: !0,
  10508. succ: !0
  10509. }), t.isDualStream = !0, t.highStream && (t.highStream.isDualStream = !0), void(0 === t.highStreamState ? t._publishLowStream(function(e) {
  10510. return a(null, e)
  10511. }, function(e) {
  10512. o.
  10513. default.warning("[".concat(t.clientId, "]"), e), a(I.
  10514. default.ENABLE_DUALSTREAM_FAILED)
  10515. }) : 1 === t.highStreamState ? a(I.
  10516. default.STILL_ON_PUBLISHING) : a(null)))
  10517. }, t.disableDualStream = function(n, i) {
  10518. var a = s.b.reportApiInvoke(e.sessionId, {
  10519. callback: function(e, t) {
  10520. if (e) return i && i(e);
  10521. n && n(t)
  10522. },
  10523. name: "Client.disableDualStream",
  10524. options: arguments,
  10525. tag: "tracer"
  10526. });
  10527. s.b.streamSwitch(e.sessionId, {
  10528. lts: (new Date).getTime(),
  10529. isdual: !1,
  10530. succ: !0
  10531. }), t.isDualStream = !1, t.highStream && (t.highStream.isDualStream = !1), 0 === t.highStreamState ? t._unpublishLowStream(function() {
  10532. t.highStream.lowStream = null, a()
  10533. }, function(e) {
  10534. o.
  10535. default.warning("[".concat(t.clientId, "]"), e), a(I.
  10536. default.DISABLE_DUALSTREAM_FAILED)
  10537. }) : 1 === t.highStreamState ? a(I.
  10538. default.STILL_ON_PUBLISHING) : a()
  10539. }, t._createLowStream = function(e, n) {
  10540. if (t.highStream && t.highStream.stream) {
  10541. var i = h()({}, t.highStream.params);
  10542. if (i.streamID += 1, i.audio = !1, i.video) {
  10543. var a = t.highStream.stream.getVideoTracks()[0];
  10544. a ? H.getVideoCameraIdByLabel(a.label, function(a) {
  10545. i.cameraId = a;
  10546. var s = new Ie(i);
  10547. if (s.isLowStream = !0, s.streamId = t.highStream.getId() + 1, t.lowStreamParameter) {
  10548. var c = h()({}, t.lowStreamParameter);
  10549. if (!c.width || !c.height) {
  10550. var d = tt(t.highStream.profile),
  10551. u = r.SUPPORT_RESOLUTION_LIST[d[0]];
  10552. c.width = u[0], c.height = u[1]
  10553. }
  10554. if (c.framerate = c.framerate || 5, c.bitrate = c.bitrate || 50, Object(m.isSafari)() || Object(m.isOpera)()) {
  10555. o.
  10556. default.debug("[".concat(t.clientId, "] Shimming lowStreamParameter"));
  10557. u = r.SUPPORT_RESOLUTION_LIST[t.highStream.profile];
  10558. c.width = u[0], c.height = u[1]
  10559. }
  10560. s.setVideoProfileCustomPlus(c)
  10561. } else s.setVideoProfileCustom(tt(t.highStream.profile));
  10562. s.init(function() {
  10563. t.highStream.lowStream = s, t.highStream.userMuteVideo && s.muteVideo(), e && e(s)
  10564. }, n)
  10565. }, n) : n && n(I.
  10566. default.HIGH_STREAM_NOT_VIDEO_TRACE)
  10567. } else n && n(I.
  10568. default.HIGH_STREAM_NOT_VIDEO_TRACE)
  10569. } else n && n(I.
  10570. default.HIGH_STREAM_NOT_VIDEO_TRACE)
  10571. }, t._getLowStream = function(e, n) {
  10572. t.lowStream ? e(t.lowStream) : t.highStream.videoSource ? t._createSourceLowStream(function(n) {
  10573. t.lowStream = n, e(t.lowStream)
  10574. }, n) : t._createLowStream(function(n) {
  10575. t.lowStream = n, e(t.lowStream)
  10576. }, n)
  10577. }, t._createSourceLowStream = function(e, n) {
  10578. var i = h()({}, t.highStream.params);
  10579. i.streamID += 1, i.audio = !1;
  10580. var a = new Ie(i);
  10581. if (a.isLowStream = !0, a.streamId = t.highStream.getId() + 1, !t.lowStreamParameter) return o.
  10582. default.debug("NOT_SET_LOW_STREAM_PARAMETER"), n && n("NOT_SET_LOW_STREAM_PARAMETER");
  10583. var r = h()({}, t.lowStreamParameter);
  10584. r.width && r.height || (r.width = 320, r.height = 240), r.framerate = r.framerate || 15, r.bitrate = r.bitrate || 200, a.setVideoProfileCustomPlus(r);
  10585. try {
  10586. var s = At()(t.highStream.stream, {
  10587. width: r.width,
  10588. height: r.height,
  10589. framerate: r.framerate
  10590. });
  10591. return a.stream = s, t.highStream.lowStream = a, t.highStream.userMuteVideo && a.muteVideo(), e && e(a)
  10592. } catch (e) {
  10593. return n && n(e)
  10594. }
  10595. }, t._publishLowStream = function(e, n) {
  10596. return 2 !== t.lowStreamState ? n && n(I.
  10597. default.LOW_STREAM_ALREADY_PUBLISHED) : t.highStream && t.highStream.hasScreen() ? n && n(I.
  10598. default.SHARING_SCREEN_NOT_SUPPORT) : void t._getLowStream(function(i) {
  10599. t.lowStreamState = 1, t.gatewayClient.publish(i, {
  10600. streamType: 1
  10601. }, function() {
  10602. t.lowStreamState = 0, e && e()
  10603. }, function(e) {
  10604. 1 === t.lowStreamState && (t.lowStreamState = 2), o.
  10605. default.debug("[".concat(t.clientId, "] publish low stream failed")), n && n(e)
  10606. })
  10607. }, n)
  10608. }, t._unpublishLowStream = function(e, n) {
  10609. if (0 !== t.lowStreamState) return n && n(I.
  10610. default.LOW_STREAM_NOT_YET_PUBLISHED);
  10611. t.lowStream && (t.gatewayClient.unpublish(t.lowStream, {
  10612. streamType: 1
  10613. }, function() {}, function(e) {
  10614. o.
  10615. default.debug("[".concat(t.clientId, "] unpublish low stream failed")), n && n(e)
  10616. }), t.lowStream.close(), t.lowStream = null, t.lowStreamState = 2, e && e())
  10617. }, t.join = function(n, i, a, r, c) {
  10618. var d = s.b.reportApiInvoke(e.sessionId, {
  10619. callback: function(e, t) {
  10620. if (e) return c && c(e);
  10621. r && r(t)
  10622. },
  10623. name: "Client.join",
  10624. options: arguments,
  10625. tag: "tracer"
  10626. });
  10627. if (n && !Object(W.isValidToken)(n)) return o.
  10628. default.warning("[".concat(t.clientId, "] Param channelKey should be string")), d(I.
  10629. default.INVALID_PARAMETER);
  10630. if (!Object(W.isValidChannelName)(i)) return o.
  10631. default.error("Invalid Channel Name ".concat(i)), o.
  10632. default.warning("[".concat(t.clientId, "] The length must be within 64 bytes. The supported characters: a-z,A-Z,0-9,space,!, #, $, %, &, (, ), +, -, :, ;, <, =, ., >, ?, @, [, ], ^, _, {, }, |, ~, ,")), d(I.
  10633. default.INVALID_PARAMETER);
  10634. if ("string" == typeof i && "" === i) return o.
  10635. default.warning("[".concat(t.clientId, "] Param channel should not be empty")), d(I.
  10636. default.INVALID_PARAMETER);
  10637. if (a && !Object(F.is32Uint)(a) && !Object(W.isValidString)(a, 1, 255)) return o.
  10638. default.error("Invalid UID ".concat(a, " ").concat(Se()(a))), o.
  10639. 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.
  10640. default.INVALID_PARAMETER);
  10641. if ("string" == typeof a && 0 == a.length) return o.
  10642. default.warning("[".concat(t.clientId, "] String uid should not be empty")), d(I.
  10643. default.INVALID_PARAMETER);
  10644. if ("string" == typeof a && a.length > 256) return o.
  10645. default.warning("[".concat(t.clientId, "] Length of string uid should be less than 255")), d(I.
  10646. default.INVALID_PARAMETER);
  10647. t.highStream = null, t.lowStream = null, t.lowStreamParameter = null, t.isDualStream = !1, t.highStreamState = 2, t.lowStreamState = 2;
  10648. var u = {
  10649. clientId: t.clientId,
  10650. appId: e.appId,
  10651. sid: e.sessionId,
  10652. cname: i,
  10653. uid: a,
  10654. turnServer: t.turnServer,
  10655. proxyServer: t.proxyServer,
  10656. token: n || e.appId,
  10657. useProxyServer: t.useProxyServer
  10658. };
  10659. 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, {
  10660. aespassword: t.aespassword,
  10661. aesmode: t.aesmode
  10662. }), s.b.sessionInit(e.sessionId, {
  10663. lts: (new Date).getTime(),
  10664. cname: i,
  10665. appid: e.appId,
  10666. mode: e.mode,
  10667. succ: !0
  10668. }), t.onSuccess = function(e) {
  10669. t.rtcStatsCollector.startNetworkQualityTimer(), t.onSuccess = null, d(null, e)
  10670. }, t.onFailure = function(e) {
  10671. return d(e)
  10672. }, t.channel = i, t.gatewayClient.state !== et.DISCONNECTED) return o.
  10673. default.error("[".concat(t.clientId, "] Client already in connecting/connected state")), d(I.
  10674. default.INVALID_OPERATION), void s.b.joinGateway(e.sessionId, {
  10675. lts: Date.now(),
  10676. succ: !1,
  10677. ec: I.
  10678. default.INVALID_OPERATION,
  10679. addr:
  10680. null
  10681. });
  10682. t.gatewayClient.state = et.CONNECTING;
  10683. var l = function(a, r) {
  10684. o.
  10685. default.info("[".concat(t.clientId, "] Joining channel: ").concat(i)), t.gatewayClient.dispatchEvent({
  10686. type: "config-distribute",
  10687. config: r,
  10688. joinInfo: u
  10689. }), 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) {
  10690. o.
  10691. default.info("[".concat(t.clientId, "] Join channel ").concat(i, " success, join with uid: ").concat(e, ".")), t.onSuccess = null, t.rtcStatsCollector.startNetworkQualityTimer(), d(null, e)
  10692. }, function(e) {
  10693. return d(e)
  10694. })
  10695. };
  10696. u.stringUid && !u.uid ? (t.userAccountReq && !t.userAccountReq.isFinished() && t.userAccountReq.cancel(), t.userAccountReq = Ge(u, t.gatewayClient), t.userAccountReq.then(function(e) {
  10697. o.
  10698. default.debug("getUserAccount Success ".concat(e.url, " ").concat(u.stringUid, " => ").concat(e.uid)), u.uid = e.uid, He(u, l, function(e) {
  10699. return d(e)
  10700. })
  10701. }).
  10702. catch (function(e) {
  10703. o.
  10704. default.error("getUserAccount rejected", e), d(e)
  10705. })):
  10706. He(u, l, function(e) {
  10707. return d(e)
  10708. })
  10709. }, t.renewChannelKey = function(n, i, a) {
  10710. var r = s.b.reportApiInvoke(e.sessionId, {
  10711. callback: function(e, t) {
  10712. if (e) return a && a(e);
  10713. i && i(t)
  10714. },
  10715. name: "Client.renewChannelKey",
  10716. options: arguments,
  10717. tag: "tracer"
  10718. });
  10719. Object(W.checkValidString)(n, "key", 1, 2047), void 0 === t.key ? (o.
  10720. default.error("[".concat(t.clientId, "] renewChannelKey should not be called before user join")), r(I.
  10721. default.INVALID_OPERATION)) : (t.key = n, t.gatewayClient.joinInfo.token = n, t.gatewayClient.key = n, t.gatewayClient.recover(), r())
  10722. }, t.leave = function(n, i) {
  10723. t.gatewayClient.hasInvokeLeave = !0;
  10724. var a = !1,
  10725. c = s.b.reportApiInvoke(e.sessionId, {
  10726. callback: function(e, a) {
  10727. if (e) return i && i(e);
  10728. var r;
  10729. t.gatewayClient.reconnectingCS = !1, t.gatewayClient.state = et.DISCONNECTED, clearTimeout((r = t.clientId, je[r])), t._renewSession(), t.rtcStatsCollector.clearNetworkQualityTimer(), n && n(a)
  10730. },
  10731. name: "Client.leave",
  10732. options: arguments,
  10733. tag: "tracer"
  10734. });
  10735. o.
  10736. default.info("[".concat(t.clientId, "] Leaving channel")), t.userAccountReq && !t.userAccountReq.isFinished() && (t.userAccountReq.cancel(), t.gatewayClient.state === et.CONNECTING && (t.gatewayClient.state = et.DISCONNECTED)), t.gatewayClient.leave(function(e) {
  10737. a = !0, c(null, e)
  10738. }, c), setTimeout(function() {
  10739. a || (t.gatewayClient.socket && (t.gatewayClient.socket.close(), t.gatewayClient.socket = null), t.gatewayClient.state = et.DISCONNECTED, c(null, "LEAVE_MSG_TIMEOUT"))
  10740. }, Object(r.getParameter)("LEAVE_MSG_TIMEOUT"))
  10741. }, t._renewSession = function() {
  10742. var n = Object(F.generateSessionId)();
  10743. if (o.
  10744. 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) {
  10745. var a = t.gatewayClient.localStreams[i];
  10746. a && (a.sid = n)
  10747. }
  10748. }, t._publish = function(n, i, a, s) {
  10749. if (2 !== t.highStreamState) return o.
  10750. default.warning("[".concat(t.clientId, "] Can't publish stream when stream already publish ").concat(n.getId())), a && a(I.
  10751. default.STREAM_ALREADY_PUBLISHED);
  10752. 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");
  10753. o.
  10754. 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;
  10755. var c = function(n, i, a) {
  10756. t.gatewayClient.publish(n, {
  10757. streamType: 0
  10758. }, function() {
  10759. n.sid = e.sessionId, t.highStreamState = 0, o.
  10760. default.info("[".concat(t.clientId, "] Publish success, uid: ").concat(n.getId())), t.highStream && (t.highStream.isDualStream = t.isDualStream), t.isDualStream ? t._publishLowStream(function() {
  10761. i && i()
  10762. }, function(e) {
  10763. o.
  10764. default.warning("[".concat(t.clientId, "] "), e), ge.replaceWithCanvasTrack(n), i && i()
  10765. }):
  10766. (ge.replaceWithCanvasTrack(n), i && i())
  10767. }, a)
  10768. };
  10769. "audience" !== t.gatewayClient.role || "live" !== t.mode || s ? c(n, i, a):
  10770. t.gatewayClient.setClientRole("host", function(e) {
  10771. if (e) return a && a(e);
  10772. c(n, i, a)
  10773. })
  10774. }, t._unpublish = function(e, n, i, a) {
  10775. if (0 !== t.highStreamState) return o.
  10776. default.warning("[".concat(t.clientId, "] Can't unpublish stream when stream not publish")), i && i(I.
  10777. default.STREAM_NOT_YET_PUBLISHED);
  10778. o.
  10779. default.info("[".concat(t.clientId, "] Unpublish stream, uid ").concat(e.getId()));
  10780. var r = function(e, n, i) {
  10781. t.isDualStream && t.lowStream && t._unpublishLowStream(null, i), t.gatewayClient.unpublish(e, {
  10782. streamType: 0
  10783. }, function() {
  10784. t.highStreamState = 2, o.
  10785. default.info("[".concat(t.clientId, "] Unpublish stream success, uid: ").concat(e.getId())), n && n()
  10786. }, function(n) {
  10787. o.
  10788. default.info("[".concat(t.clientId, "] Unpublish stream fail, uid: ").concat(e.getId())), i && i(n)
  10789. })
  10790. };
  10791. "host" !== t.gatewayClient.role || "live" !== t.mode || a ? r(e, n, i):
  10792. t.gatewayClient.setClientRole("audience", function(t) {
  10793. if (t) return i && i(t);
  10794. r(e, n, i)
  10795. })
  10796. }, t.publish = function(n, i) {
  10797. var a = s.b.reportApiInvoke(e.sessionId, {
  10798. callback: function(e, n) {
  10799. if (e) return 1 === t.highStreamState && (t.highStreamState = 2), i && i(e)
  10800. },
  10801. name: "Client.publish",
  10802. tag: "tracer",
  10803. options: {
  10804. stream: "too long to show",
  10805. onFailure: !! i
  10806. }
  10807. });
  10808. 2 === t.highStreamState ? n._hasVideoTracks() || n._hasAudioTracks() ? t._publish(n, function(e) {
  10809. return a(null, e)
  10810. }, function(e) {
  10811. return a(e)
  10812. }) : a(I.
  10813. default.NO_TRACK_IN_STREAM) : a(I.
  10814. default.STREAM_ALREADY_PUBLISHED)
  10815. }, t.unpublish = function(n, i, a) {
  10816. var r = s.b.reportApiInvoke(e.sessionId, {
  10817. callback: function(e, t) {
  10818. if (e) return i && i(e);
  10819. a && a(t)
  10820. },
  10821. name: "Client.unpublish",
  10822. tag: "tracer",
  10823. options: {
  10824. stream: "too long to show",
  10825. onFailure: !! i
  10826. }
  10827. });
  10828. 0 === t.highStreamState ? t._unpublish(n, function(e) {
  10829. return r(null, e)
  10830. }, function(e) {
  10831. return r(e)
  10832. }) : r(I.
  10833. default.STREAM_NOT_YET_PUBLISHED)
  10834. }, t.subscribe = function(n, i, a) {
  10835. var r = s.b.reportApiInvoke(e.sessionId, {
  10836. callback: function(e, t) {
  10837. if (e) return a && a(e)
  10838. },
  10839. name: "Client.subscribe",
  10840. tag: "tracer",
  10841. options: {
  10842. stream: "too long to show",
  10843. options: i,
  10844. onFailure: !! a
  10845. }
  10846. });
  10847. "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"));
  10848. var c = {
  10849. video: !0,
  10850. audio: !0
  10851. };
  10852. if (!Object(W.isEmpty)(i)) {
  10853. if (Object(m.isSafari)() && (!i.video || !i.audio)) {
  10854. var d = "SAFARI_NOT_SUPPORTED_FOR_TRACK_SUBSCRIPTION";
  10855. return o.
  10856. default.error("[".concat(t.clientId, "] "), d), void r(d)
  10857. }
  10858. 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) {
  10859. d = "INVALID_PARAMETER ".concat(JSON.stringify(i));
  10860. return o.
  10861. default.error("[".concat(t.clientId, "] "), d), void r(d)
  10862. }
  10863. }
  10864. n.subscribeOptions ? (h()(n.subscribeOptions, c, i), t.gatewayClient.subscribeChange(n, function(e) {
  10865. return r(null, e)
  10866. }, r)) : (n.subscribeOptions = h()({}, c, i), t.gatewayClient.subscribe(n, function(e) {
  10867. return r(null, e)
  10868. }, r))
  10869. }, t.unsubscribe = function(n, i) {
  10870. var a = s.b.reportApiInvoke(e.sessionId, {
  10871. callback: function(e, t) {
  10872. if (e) return i && i(e)
  10873. },
  10874. name: "Client.unsubscribe",
  10875. tag: "tracer",
  10876. options: {
  10877. stream: "too long to show",
  10878. onFailure: !! i
  10879. }
  10880. });
  10881. o.
  10882. default.info("[".concat(t.clientId, "] Unsubscribe stream, uid: ").concat(n.getId())), t.gatewayClient.unsubscribe(n, function(e) {
  10883. return a(null, e)
  10884. }, a)
  10885. }, t.setRemoteVideoStreamType = function(n, i) {
  10886. var a = s.b.reportApiInvoke(e.sessionId, {
  10887. name: "Client.setRemoteVideoStreamType",
  10888. tag: "tracer",
  10889. options: {
  10890. stream: "too long to show",
  10891. streamType: i
  10892. }
  10893. });
  10894. Object(W.checkValidEnum)(i, "streamType", [0, 1]), t.gatewayClient.setRemoteVideoStreamType(n, i), a()
  10895. }, t.setStreamFallbackOption = function(n, i) {
  10896. var a = s.b.reportApiInvoke(e.sessionId, {
  10897. name: "Client.setStreamFallbackOption",
  10898. tag: "tracer",
  10899. options: {
  10900. stream: "too long to show",
  10901. fallbackType: i
  10902. }
  10903. });
  10904. Object(W.checkValidEnum)(i, "fallbackType", [0, 1, 2]), t.gatewayClient.setStreamFallbackOption(n, i), a()
  10905. }, t.enableAudioVolumeIndicator = function(n, i) {
  10906. var a = s.b.reportApiInvoke(e.sessionId, {
  10907. name: "Client.enableAudioVolumeIndicator",
  10908. options: arguments,
  10909. tag: "tracer"
  10910. });
  10911. n = n || 2e3, i = i || 3, Object(W.checkValidNumber)(i, "smooth", 1, 100), Object(W.checkValidNumber)(n, "interval", 50, 1e5), t.audioVolumeIndication = t.audioVolumeIndication || {
  10912. enabled: !0
  10913. }, t.audioVolumeIndication.interval = n, t.audioVolumeIndication.smooth = i, t.audioVolumeIndication = {
  10914. interval: n,
  10915. smooth: i
  10916. }, o.
  10917. default.info("[".concat(t.clientId, "] enableAudioVolumeIndicator interval ").concat(n, " smooth ").concat(i)), t.gatewayClient.enableAudioVolumeIndicator(n, i), a()
  10918. }, t.getNetworkStats = function(e, n) {
  10919. return o.
  10920. default.deprecate("[".concat(t.clientId, "] client.getNetworkStats is deprecated. Use client.getTransportStats instead.")), rt.getStats(e, n)
  10921. }, t.getSystemStats = function(e, t) {
  10922. return v.getStats(e, t)
  10923. }, t.getRecordingDevices = function(e, t) {
  10924. return H.getRecordingDevices(e, t)
  10925. }, t.getPlayoutDevices = function(e, t) {
  10926. return H.getPlayoutDevices(e, t)
  10927. }, t.getCameras = function(e, t) {
  10928. return H.getCameras(e, t)
  10929. }, t.getRemoteAudioStats = function(e, n) {
  10930. return t.rtcStatsCollector.getRemoteAudioStats(e, n)
  10931. }, t.getLocalAudioStats = function(e, n) {
  10932. return t.rtcStatsCollector.getLocalAudioStats(e, n)
  10933. }, t.getRemoteVideoStats = function(e, n) {
  10934. return t.rtcStatsCollector.getRemoteVideoStats(e, n)
  10935. }, t.getLocalVideoStats = function(e, n) {
  10936. return t.rtcStatsCollector.getLocalVideoStats(e, n)
  10937. }, t._getRemoteVideoQualityStats = function(e, n) {
  10938. return t.rtcStatsCollector.getRemoteVideoQualityStats(e, n)
  10939. }, t._getRemoteAudioQualityStats = function(e, n) {
  10940. return t.rtcStatsCollector.getRemoteAudioQualityStats(e, n)
  10941. }, t.getTransportStats = function(e, n) {
  10942. return t.rtcStatsCollector.getTransportStats(function(t) {
  10943. return rt.getStats(function(n) {
  10944. var i = h()({}, t, n);
  10945. e && e(i)
  10946. }, n)
  10947. }, n)
  10948. }, t.getSessionStats = function(e, n) {
  10949. return t.rtcStatsCollector.getSessionStats(e, n)
  10950. }, t.onNetworkQuality = function() {
  10951. return t.rtcStatsCollector.onNetworkQuality(onSuccess, onFailure)
  10952. }, e.clientId = t.clientId, t.gatewayClient = et(e), t.listenerLoggerTimer = null, t.listenerLoggerCache = [], t.on = function(e, n) {
  10953. t.gatewayClient.on(e, n), t.listenerLoggerCache.push("".concat(e).concat(n.name ? ":" + n.name : "")), t.listenerLoggerTimer ? clearTimeout(t.listenerLoggerTimer) : o.
  10954. default.info("[".concat(t.clientId, "] Adding event handler on ").concat(e)), t.listenerLoggerTimer = setTimeout(function() {
  10955. t.listenerLoggerCache.length && (t.listenerLoggerTimer = null, o.
  10956. default.info("[".concat(t.clientId, "] Added event handler on ").concat(t.listenerLoggerCache.join(", "))), t.listenerLoggerCache = [])
  10957. }, 0)
  10958. }, t.off = function(e, n) {
  10959. o.
  10960. default.info("remove event handler from [".concat(e, "]")), t.gatewayClient.removeEventListener(e, n)
  10961. }, t.rtcStatsCollector = function(e) {
  10962. var t = c();
  10963. return t.gatewayClient = e, t.exceptionMonitor = new at(e), t.localStats = {}, t.remoteStats = {}, t.session = {
  10964. sendBytes: 0,
  10965. recvBytes: 0,
  10966. WSSendBytes: 0,
  10967. WSSendBytesDelta: 0,
  10968. WSRecvBytes: 0,
  10969. WSRecvBytesDelta: 0,
  10970. HTTPSendBytes: 0,
  10971. HTTPSendBytesDelta: 0,
  10972. HTTPRecvBytes: 0,
  10973. HTTPRecvBytesDelta: 0
  10974. }, t.getRemoteAudioStats = function(e) {
  10975. var n = {};
  10976. for (var i in t.remoteStats) {
  10977. var a = {},
  10978. r = t.remoteStats[i];
  10979. 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
  10980. }
  10981. e && e(n)
  10982. }, t.getLocalAudioStats = function(e) {
  10983. var n = {};
  10984. for (var i in t.localStats) {
  10985. var a = {},
  10986. r = t.localStats[i];
  10987. 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);
  10988. var o = t.gatewayClient.localStreams[i];
  10989. o && o.isPlaying() && B(a, "MuteState", o.userMuteAudio ? "1" : "0"), n[i] = a
  10990. }
  10991. e && e(n)
  10992. }, t.getRemoteVideoStats = function(e) {
  10993. var n = {};
  10994. for (var i in t.remoteStats) {
  10995. var a = {},
  10996. r = t.remoteStats[i];
  10997. 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
  10998. }
  10999. e && e(n)
  11000. }, t.getLocalVideoStats = function(e) {
  11001. var n = {};
  11002. for (var i in t.localStats) {
  11003. var a = {},
  11004. r = t.localStats[i];
  11005. 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)
  11006. }
  11007. }, t.getRemoteVideoQualityStats = function(e) {
  11008. var n = {};
  11009. for (var i in t.remoteStats) {
  11010. var a = {},
  11011. r = t.remoteStats[i];
  11012. B(a, "videoReceiveDelay", r.videoStats && r.videoStats.googCurrentDelayMs), B(a, "VideoFreezeRate", r.videoStats && r.videoStats.videoFreezeRate), B(a, "FirstFrameTime", r.firstFrameTime), n[i] = a
  11013. }
  11014. e && e(n)
  11015. }, t.getRemoteAudioQualityStats = function(e) {
  11016. var n = {};
  11017. for (var i in t.remoteStats) {
  11018. var a = {},
  11019. r = t.remoteStats[i];
  11020. B(a, "audioReceiveDelay", r.audioStats && r.audioStats.googCurrentDelayMs), B(a, "AudioFreezeRate", r.videoStats && r.videoStats.videoFreezeRate), n[i] = a
  11021. }
  11022. e && e(n)
  11023. }, t.getTransportStats = function(e) {
  11024. var n = {},
  11025. i = {},
  11026. a = t.gatewayClient.traffic_stats,
  11027. r = a.peer_delay;
  11028. if (B(n, "OutgoingAvailableBandwidth", t.gatewayClient.OutgoingAvailableBandwidth / 1e3), B(n, "RTT", a && a.access_delay), r) {
  11029. var o = !0,
  11030. s = !1,
  11031. c = void 0;
  11032. try {
  11033. for (var d, u = r[Symbol.iterator](); !(o = (d = u.next()).done); o = !0) {
  11034. var l = d.value;
  11035. l.downlink_estimate_bandwidth && (i[l.peer_uid] = l.downlink_estimate_bandwidth / 1e3 + "")
  11036. }
  11037. } catch (e) {
  11038. s = !0, c = e
  11039. } finally {
  11040. try {
  11041. o || null == u.
  11042. return ||u.
  11043. return ()
  11044. } finally {
  11045. if (s) throw c
  11046. }
  11047. }
  11048. }
  11049. n.IncomingAvailableBandwidth = i, e && e(n)
  11050. }, t.getSessionStats = function(e) {
  11051. var n = {},
  11052. i = t.gatewayClient.traffic_stats,
  11053. a = t.gatewayClient.socket,
  11054. r = 0,
  11055. o = 0;
  11056. 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));
  11057. for (var s in t.localStats) {
  11058. var c;
  11059. (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))
  11060. }
  11061. var d = r + t.session.WSSendBytesDelta + t.session.HTTPSendBytesDelta,
  11062. u = o + t.session.WSRecvBytesDelta + t.session.HTTPRecvBytesDelta,
  11063. l = t.session.sendBytes + Object(ke.getHTTPSendBytes)(),
  11064. f = t.session.recvBytes + Object(ke.getHTTPRecvBytes)();
  11065. t.gatewayClient.socket && t.gatewayClient.socket.state === t.gatewayClient.CONNECTED && (l += a.getSendBytes(), f += a.getRecvBytes());
  11066. var p = 1;
  11067. i.peer_delay && (p = i.peer_delay.length, p += 1), B(n, "Duration", a.getDuration()), B(n, "UserCount", p), B(n, "SendBytes", l), B(n, "RecvBytes", f), B(n, "SendBitrate", 8 * d / 1e3), B(n, "RecvBitrate", 8 * u / 1e3), e && e(n)
  11068. }, t.isLocalVideoFreeze = function(e, t) {
  11069. var n = 0,
  11070. i = 0;
  11071. if (!e || !t) return !1;
  11072. if (Object(m.isChrome)() || Object(m.isOpera)()) n = e.googFrameRateInput, i = e.googFrameRateSent;
  11073. else if (Object(m.isSafari)()) n = parseInt(e.framerateMean), i = parseInt(e.framesEncoded) - parseInt(t.framesEncoded);
  11074. else {
  11075. if (!Object(m.isFireFox)()) return !1;
  11076. n = parseInt(e.framerateMean), i = parseInt(e.framesEncoded) - parseInt(t.framesEncoded)
  11077. }
  11078. return n > 5 && i < 3
  11079. }, t.isRemoteVideoFreeze = function(e, t) {
  11080. var n = 0,
  11081. i = 0;
  11082. if (!e || !t) return !1;
  11083. if (Object(m.isChrome)() || Object(m.isOpera)()) n = e.googFrameRateReceived, i = e.googFrameRateDecoded;
  11084. else if (Object(m.isSafari)()) n = e.framerateMean, i = parseInt(e.framesDecoded) - parseInt(t.framesDecoded);
  11085. else {
  11086. if (!Object(m.isFireFox)()) return !1;
  11087. n = parseInt(e.framesReceived) - parseInt(t.framesReceived), i = parseInt(e.framesDecoded) - parseInt(t.framesDecoded)
  11088. }
  11089. return n > 5 && n < 10 && i < 3 || n > 10 && n < 20 && i < 4 || n > 20 && i < 5
  11090. }, t.isAudioFreeze = function(e) {
  11091. if (Object(m.isChrome)() && e) {
  11092. if (e.googDecodingPLC && e.googDecodingPLCCNG && e.googDecodingCTN) return (parseInt(e.googDecodingPLC) + parseInt(e.googDecodingPLCCNG)) / parseInt(e.googDecodingCTN) > .2
  11093. } else if ((Object(m.isSafari)() || Object(m.isFireFox)()) && e.packetsLost && e.packetsReceived) return parseInt(e.packetsLost) / (parseInt(e.packetsLost) + parseInt(e.packetsReceived)) > .2;
  11094. return !1
  11095. }, t.isAudioDecodeFailed = function(e) {
  11096. return !!((Object(m.isChrome)() || Object(m.isOpera)()) && e && parseInt(e.bytesReceived) > 0 && 0 === parseInt(e.googDecodingNormal))
  11097. }, t.startNetworkQualityTimer = function() {
  11098. t.clearNetworkQualityTimer(), t.networkQualityTimer = setInterval(function() {
  11099. if (t.gatewayClient.state !== et.CONNECTED) t.gatewayClient.dispatchEvent({
  11100. type: "network-quality",
  11101. uplinkNetworkQuality: 0,
  11102. downlinkNetworkQuality: 0
  11103. });
  11104. else {
  11105. var e = t.gatewayClient.traffic_stats;
  11106. t.gatewayClient.dispatchEvent({
  11107. type: "network-quality",
  11108. uplinkNetworkQuality: t.networkQualityTrans(e.uplink_network_quality),
  11109. downlinkNetworkQuality: t.networkQualityTrans(e.downlink_network_quality)
  11110. })
  11111. }
  11112. }, 2e3)
  11113. }, t.clearNetworkQualityTimer = function() {
  11114. t.networkQualityTimer && clearInterval(t.networkQualityTimer)
  11115. }, t.networkQualityTrans = function(e) {
  11116. 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
  11117. }, t.getStatsTimer = setInterval(function() {
  11118. var e = t.gatewayClient.traffic_stats,
  11119. n = Date.now();
  11120. t.gatewayClient.dispatchEvent({
  11121. type: "_testException"
  11122. }), Object.keys(t.localStats).length && t.exceptionMonitor.setLocalStats(t.localStats), Object.keys(t.remoteStats).length && t.exceptionMonitor.setRemoteStats(t.remoteStats);
  11123. var i = {};
  11124. Object.keys(t.gatewayClient.remoteStreams).forEach(function(a) {
  11125. var r = t.gatewayClient.remoteStreams[a],
  11126. o = t.remoteStats[a],
  11127. s = {
  11128. id: a,
  11129. updatedAt: n
  11130. };
  11131. 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);
  11132. var c = e && e.peer_delay && e.peer_delay.find(function(e) {
  11133. return e.peer_uid == a
  11134. });
  11135. 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({
  11136. type: "streamTypeChange",
  11137. uid: a,
  11138. streamType: c.stream_type
  11139. }), r.pc && "established" == r.pc.state && r.pc.getStats(function(e) {
  11140. if (s.pcStats = e, s.audioStats = e.find(function(e) {
  11141. return "audio" == e.mediaType && (e.id.indexOf("_recv") > -1 || e.id.toLowerCase().indexOf("inbound") > -1)
  11142. }), s.videoStats = e.find(function(e) {
  11143. return "video" == e.mediaType && (e.id.indexOf("_recv") > -1 || e.id.toLowerCase().indexOf("inbound") > -1)
  11144. }), o && o.audioStats && s.audioStats) {
  11145. var n = parseInt(s.audioStats.bytesReceived) - parseInt(o.audioStats.bytesReceived),
  11146. i = parseInt(s.audioStats.googDecodingNormal) - parseInt(o.audioStats.googDecodingNormal);
  11147. if (s.audioStats.audioRecvBytesDelta = n, s.audioStats.audioDecodingNormalDelta = i, t.session.recvBytes += n, isFinite(n) && s.audioStats.timestamp) {
  11148. var a = s.audioStats.timestamp.getTime() - o.audioStats.timestamp.getTime();
  11149. s.audioRecvBitrate = Math.floor(8 * n / a)
  11150. }
  11151. 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)
  11152. }
  11153. if (o && o.videoStats && s.videoStats) {
  11154. var c = parseInt(s.videoStats.bytesReceived) - parseInt(o.videoStats.bytesReceived);
  11155. 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)
  11156. }
  11157. }))
  11158. }), t.remoteStats = i;
  11159. var a = {};
  11160. if (Object.keys(t.gatewayClient.localStreams).forEach(function(e) {
  11161. var i = t.gatewayClient.localStreams[e],
  11162. r = t.localStats[e],
  11163. o = {
  11164. id: e,
  11165. updatedAt: n
  11166. };
  11167. 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) {
  11168. if (o.pcStats = e.reverse(), o.audioStats = e.find(function(e) {
  11169. return "audio" == e.mediaType && (e.id.indexOf("_send") > -1 || e.id.toLowerCase().indexOf("outbound") > -1)
  11170. }), o.videoStats = e.find(function(e) {
  11171. return "video" == e.mediaType && (e.id.indexOf("_send") > -1 || e.id.toLowerCase().indexOf("outbound") > -1)
  11172. }), o.audioStats && r && r.audioStats) {
  11173. var n = parseInt(o.audioStats.bytesSent) - parseInt(r.audioStats.bytesSent);
  11174. if (o.audioStats.audioSendBytesDelta = n, t.session.sendBytes += n, isFinite(n) && o.audioStats.timestamp) {
  11175. var a = o.audioStats.timestamp.getTime() - r.audioStats.timestamp.getTime();
  11176. o.audioSendBitrate = Math.floor(8 * n / a)
  11177. }
  11178. }
  11179. if (o.videoStats && r && r.videoStats) {
  11180. var s = parseInt(o.videoStats.bytesSent) - parseInt(r.videoStats.bytesSent);
  11181. 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
  11182. }
  11183. }))
  11184. }), t.localStats = a, t.session.HTTPSendBytesDelta = Object(ke.getHTTPSendBytes)() - t.session.HTTPSendBytes, t.session.HTTPSendBytes = Object(ke.getHTTPSendBytes)(), t.session.HTTPRecvBytesDelta = Object(ke.getHTTPRecvBytes)() - t.session.HTTPRecvBytes, t.session.HTTPRecvBytes = Object(ke.getHTTPRecvBytes)(), t.gatewayClient.socket && t.gatewayClient.socket.state === t.gatewayClient.CONNECTED) {
  11185. var r = t.gatewayClient.socket;
  11186. 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()
  11187. }
  11188. }, 1e3), t.gatewayClient.on("join", function() {
  11189. t.session = {
  11190. sendBytes: 0,
  11191. recvBytes: 0,
  11192. WSSendBytes: 0,
  11193. WSSendBytesDelta: 0,
  11194. WSRecvBytes: 0,
  11195. WSRecvBytesDelta: 0,
  11196. HTTPSendBytes: 0,
  11197. HTTPSendBytesDelta: 0,
  11198. HTTPRecvBytes: 0,
  11199. HTTPRecvBytesDelta: 0
  11200. }
  11201. }), t
  11202. }(t.gatewayClient), t.configDistributManager = function(e) {
  11203. var t = {};
  11204. return t.client = e, t.client.gatewayClient && t.client.gatewayClient.on("config-distribute", function(n) {
  11205. var i = n.joinInfo,
  11206. a = n.config;
  11207. if (a) {
  11208. Object(W.isEmpty)(a.uploadLog) || (Object(r.setParameter)("UPLOAD_LOG", a.uploadLog), s.b.reportApiInvoke(i.sid, {
  11209. name: "_configDistribute",
  11210. options: {
  11211. feature: "uploadLog",
  11212. value: a.uploadLog
  11213. }
  11214. })()), Object(W.isEmpty)(a.dualStream) || (e.isDualStream = a.dualStream, s.b.reportApiInvoke(i.sid, {
  11215. name: "_configDistribute",
  11216. options: {
  11217. feature: "dualStream",
  11218. value: a.dualStream
  11219. }
  11220. })()), Object(W.isEmpty)(a.streamFallbackOption) || t.client.gatewayClient && t.client.gatewayClient.on("stream-subscribed", function(e) {
  11221. var n = e.stream;
  11222. n ? (t.client.gatewayClient.setStreamFallbackOption(n, a.streamFallbackOption), s.b.reportApiInvoke(i.sid, {
  11223. name: "_configDistribute",
  11224. options: {
  11225. feature: "streamFallbackOption",
  11226. value: a.streamFallbackOption,
  11227. streamId: n.getId()
  11228. }
  11229. })()) : s.b.reportApiInvoke(i.sid, {
  11230. name: "_configDistribute",
  11231. options: {
  11232. feature: "streamFallbackOption",
  11233. value: a.streamFallbackOption,
  11234. streamId: n.getId(),
  11235. err: "invalid stream"
  11236. }
  11237. })()
  11238. });
  11239. try {
  11240. o.
  11241. default.debug("[".concat(e.clientId, "] setParameter in distribution: ").concat(JSON.stringify(a))), Object.keys(a).map(function(e) {
  11242. return Object(r.setParameter)(e, a[e])
  11243. })
  11244. } catch (t) {
  11245. o.
  11246. default.debug("[".concat(e.clientId, "] setParameter in distribution failed: ").concat(JSON.stringify(a)))
  11247. }
  11248. }
  11249. }), t
  11250. }(t), function(e, t) {
  11251. var n = arguments;
  11252. e.liveStreaming = c(), e.liveStreaming.connections = {
  11253. inject_streaming: null,
  11254. mix_streaming: null,
  11255. raw_streaming: null
  11256. }, e.liveStreaming.connectionTypes = {
  11257. inject_streaming: "pull",
  11258. mix_streaming: "push",
  11259. raw_streaming: "push"
  11260. }, e.liveStreaming.pushStates = {}, e.liveStreaming.pullStates = {}, e.gatewayClient.addEventListener("join", function(t) {
  11261. e.liveStreaming.resumeStates("pull")
  11262. }), e.gatewayClient.addEventListener("stream-unpublished", function(t) {
  11263. if (t.options && 0 === t.options.streamType) for (var n in e.liveStreaming.pushStates) {
  11264. var i = e.liveStreaming.pushStates[n];
  11265. i.url && e._stopLiveStreaming(i.url, i.transcodingEnabled, !0)
  11266. }
  11267. }), e.gatewayClient.addEventListener("stream-published", function(t) {
  11268. e.liveStreaming.resumeStates("push")
  11269. }), e.liveStreaming.connect = (m = K()(Y.a.mark(function n(i) {
  11270. var a, r;
  11271. return Y.a.wrap(function(n) {
  11272. for (;;) switch (n.prev = n.next) {
  11273. case 0:
  11274. if (e.joinInfo && e.joinInfo.uid && parseInt(e.joinInfo.vid, 10)) {
  11275. n.next = 3;
  11276. break
  11277. }
  11278. throw new Error("CLIENT_NOT_JOINED");
  11279. case 3:
  11280. return a = new Et({
  11281. appId: t.appId,
  11282. cname: e.channel,
  11283. sid: t.sessionId,
  11284. uid: e.joinInfo.uid
  11285. }), e.liveStreaming.connections[i] = a, n.next = 7, gt({
  11286. appId: t.appId,
  11287. cname: e.channel,
  11288. serviceName: i,
  11289. sid: t.sessionId,
  11290. uid: e.joinInfo.uid
  11291. });
  11292. case 7:
  11293. return r = n.sent, n.next = 10, a.connect({
  11294. wsClient: r
  11295. });
  11296. case 10:
  11297. return a.on("notification", function(t) {
  11298. if (t.serviceName = i, e.liveStreaming.dispatchEvent(t), 503 === t.code);
  11299. else switch (t.serviceName) {
  11300. case "inject_streaming":
  11301. var n = {
  11302. reason: t && t.reason,
  11303. status: yt(t && t.code),
  11304. type: "streamInjectedStatus",
  11305. uid: t && t.serverStatus && t.serverStatus.inject_uid,
  11306. url: t && t.serverStatus && t.serverStatus.url
  11307. };
  11308. e.gatewayClient.dispatchEvent(n);
  11309. break;
  11310. case "raw_streaming":
  11311. case "mix_streaming":
  11312. var a = {
  11313. reason: t && t.reason,
  11314. status: t && t.code,
  11315. type: t && 200 === t.code ? "liveStreamingStarted" : "liveStreamingFailed",
  11316. uid: t && t.serverStatus && t.uid,
  11317. url: t && t.serverStatus && t.serverStatus.url
  11318. };
  11319. e.gatewayClient.dispatchEvent(a)
  11320. }
  11321. }), a.on("close", function(t) {
  11322. It(a), o.
  11323. default.debug("Reconnect ".concat(i)), e.liveStreaming.connect(i).
  11324. catch (function(t) {
  11325. e.liveStreaming.connections[i] = null, e.gatewayClient.dispatchEvent({
  11326. type: "".concat(i.replace("_", "-"), "-disconnected")
  11327. })
  11328. })
  11329. }), o.
  11330. default.debug("".concat(i, " connected")), n.abrupt("return", a);
  11331. case 14:
  11332. case "end":
  11333. return n.stop()
  11334. }
  11335. }, n, this)
  11336. })), function(e) {
  11337. return m.apply(this, arguments)
  11338. }), e.liveStreaming.disconnect = (p = K()(Y.a.mark(function t(n) {
  11339. var i, a;
  11340. return Y.a.wrap(function(t) {
  11341. for (;;) switch (t.prev = t.next) {
  11342. case 0:
  11343. t.t0 = Y.a.keys(e.liveStreaming.connections);
  11344. case 1:
  11345. if ((t.t1 = t.t0()).done) {
  11346. t.next = 13;
  11347. break
  11348. }
  11349. if (i = t.t1.value, !e.liveStreaming.connections.hasOwnProperty(i)) {
  11350. t.next = 11;
  11351. break
  11352. }
  11353. if (!(a = e.liveStreaming.connections[i]) || n && n !== i) {
  11354. t.next = 11;
  11355. break
  11356. }
  11357. return o.
  11358. default.info("Disconnecting liveStreaming ".concat(i)), t.next = 9, a.disconnect();
  11359. case 9:
  11360. t.sent, e.liveStreaming.connections[i] = null;
  11361. case 11:
  11362. t.next = 1;
  11363. break;
  11364. case 13:
  11365. case "end":
  11366. return t.stop()
  11367. }
  11368. }, t, this)
  11369. })), function(e) {
  11370. return p.apply(this, arguments)
  11371. }), e.liveStreaming.resumeStates = (f = K()(Y.a.mark(function t(n) {
  11372. var i, a, r, s, c, d, u, l;
  11373. return Y.a.wrap(function(t) {
  11374. for (;;) switch (t.prev = t.next) {
  11375. case 0:
  11376. t.t0 = Y.a.keys(e.liveStreaming.connections);
  11377. case 1:
  11378. if ((t.t1 = t.t0()).done) {
  11379. t.next = 8;
  11380. break
  11381. }
  11382. if (i = t.t1.value, !n || e.liveStreaming.connectionTypes[i] === n) {
  11383. t.next = 5;
  11384. break
  11385. }
  11386. return t.abrupt("continue", 1);
  11387. case 5:
  11388. e.liveStreaming.connections.hasOwnProperty(i) && (a = e.liveStreaming.connections[i]) && (o.
  11389. default.info("LiveStreaming closing connection ".concat(i)), a.disconnect(), e.liveStreaming.connections[i] = null), t.next = 1;
  11390. break;
  11391. case 8:
  11392. t.t2 = Y.a.keys(e.liveStreaming.pushStates);
  11393. case 9:
  11394. if ((t.t3 = t.t2()).done) {
  11395. t.next = 37;
  11396. break
  11397. }
  11398. if (r = t.t3.value, !n || "push" === n) {
  11399. t.next = 13;
  11400. break
  11401. }
  11402. return t.abrupt("continue", 9);
  11403. case 13:
  11404. if (!e.liveStreaming.pushStates.hasOwnProperty(r)) {
  11405. t.next = 35;
  11406. break
  11407. }
  11408. if (s = e.liveStreaming.pushStates[r], "audience" !== e.gatewayClient.role) {
  11409. t.next = 19;
  11410. break
  11411. }
  11412. o.
  11413. default.warning("Cannot resume LiveStreaming in audience mode. ".concat(s.url), s), t.next = 35;
  11414. break;
  11415. case 19:
  11416. if (!s) {
  11417. t.next = 35;
  11418. break
  11419. }
  11420. return o.
  11421. default.debug("Resuming LiveStreaming ".concat(s.url), s), t.prev = 21, t.next = 24, e._startLiveStreaming(s.url, s.transcodingEnabled);
  11422. case 24:
  11423. c = t.sent, o.
  11424. default.debug("Resumed LiveStreaming ".concat(s.url, ": ").concat(c.reason)), t.next = 35;
  11425. break;
  11426. case 28:
  11427. if (t.prev = 28, t.t4 = t.
  11428. catch (21), 454 !== t.t4.code) {
  11429. t.next = 34;
  11430. break
  11431. }
  11432. o.
  11433. default.debug("Resumed LiveStreaming ".concat(s.url, ": ").concat(t.t4.reason)), t.next = 35;
  11434. break;
  11435. case 34:
  11436. throw t.t4;
  11437. case 35:
  11438. t.next = 9;
  11439. break;
  11440. case 37:
  11441. t.t5 = Y.a.keys(e.liveStreaming.pullStates);
  11442. case 38:
  11443. if ((t.t6 = t.t5()).done) {
  11444. t.next = 62;
  11445. break
  11446. }
  11447. if (d = t.t6.value, !n || "pull" === n) {
  11448. t.next = 42;
  11449. break
  11450. }
  11451. return t.abrupt("continue", 38);
  11452. case 42:
  11453. if (!e.liveStreaming.pullStates.hasOwnProperty(d)) {
  11454. t.next = 60;
  11455. break
  11456. }
  11457. if (u = e.liveStreaming.pullStates[d], "audience" !== e.gatewayClient.role) {
  11458. t.next = 48;
  11459. break
  11460. }
  11461. o.
  11462. default.warning("Cannot resume addInjectStreamUrl in audience mode. ".concat(u.url), u), t.next = 60;
  11463. break;
  11464. case 48:
  11465. if (!u) {
  11466. t.next = 60;
  11467. break
  11468. }
  11469. return o.
  11470. default.debug("Resuming LiveStreaming pullStream ".concat(u.url), u), t.prev = 50, t.next = 53, e._addInjectStreamUrl(u.url, u.transcodingConfig);
  11471. case 53:
  11472. l = t.sent, o.
  11473. default.debug("Resumed LiveStreaming pullStream ".concat(u.url, ": ").concat(l.reason)), t.next = 60;
  11474. break;
  11475. case 57:
  11476. t.prev = 57, t.t7 = t.
  11477. catch (50), 451 === t.t7.code && o.
  11478. default.debug("Resumed LiveStreaming pullStream ".concat(u.url, ": ").concat(t.t7.reason));
  11479. case 60:
  11480. t.next = 38;
  11481. break;
  11482. case 62:
  11483. case "end":
  11484. return t.stop()
  11485. }
  11486. }, t, this, [
  11487. [21, 28],
  11488. [50, 57]
  11489. ])
  11490. })), function(e) {
  11491. return f.apply(this, arguments)
  11492. }), e.liveStreaming.startOptions = {
  11493. autoDestroyTime: 30
  11494. }, e.liveStreaming.transcodingConfig = {
  11495. audioBitrate: 48,
  11496. audioChannels: 1,
  11497. audioSampleRate: 48e3,
  11498. backgroundColor: 0,
  11499. height: 360,
  11500. images: [],
  11501. lowLatency: !1,
  11502. metadata: "",
  11503. userConfigExtraInfo: "",
  11504. userConfigs: [],
  11505. videoBitrate: 400,
  11506. videoCodecProfile: 100,
  11507. videoCodecType: 1,
  11508. videoFramerate: 15,
  11509. videoGop: 30,
  11510. width: 640
  11511. }, e.startLiveStreaming = function(n, i) {
  11512. Object(W.isEmpty)(i) || Object(W.checkValidBoolean)(i, "transcodingEnabled"), Object(W.checkValidString)(n, "url", 1, 1024);
  11513. var a = s.b.reportApiInvoke(t.sessionId, {
  11514. name: "Client.startLiveStreaming",
  11515. options: arguments,
  11516. tag: "tracer"
  11517. });
  11518. if (e.gatewayClient && "audience" === e.gatewayClient.role) {
  11519. var r = {
  11520. code: 403,
  11521. reason: "AUDIENCE_STREAMING_FORBIDDEN"
  11522. };
  11523. throw a(r), r
  11524. }
  11525. var o = e._startLiveStreaming(n, i);
  11526. return o.then(function(e) {
  11527. a(null, e)
  11528. }).
  11529. catch (function(e) {
  11530. a(e)
  11531. }), o
  11532. }, e._startLiveStreaming = (l = K()(Y.a.mark(function n(i, a) {
  11533. var r, s, c, d;
  11534. return Y.a.wrap(function(n) {
  11535. for (;;) switch (n.prev = n.next) {
  11536. case 0:
  11537. return r = h()({
  11538. allocate: !0,
  11539. clientRequest: {
  11540. command: "PublishStream"
  11541. },
  11542. command: "request"
  11543. }), o.
  11544. default.debug("startLiveStreaming ".concat(i, ", ").concat(a)), h()(r.clientRequest, e.liveStreaming.startOptions, {
  11545. ts: Date.now(),
  11546. url: i,
  11547. vid: parseInt(e.joinInfo.vid, 10)
  11548. }), 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):
  11549. ("vp8" === t.codec && o.
  11550. default.warning("VP8 is not supported by raw_streaming. Subscriber side will suffer"), "rtc" === t.mode && o.
  11551. 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);
  11552. case 10:
  11553. 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;
  11554. break;
  11555. case 18:
  11556. throw n.prev = 18, n.t0 = n.
  11557. 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;
  11558. case 26:
  11559. return e.liveStreaming.pushStates[i] = {
  11560. transcodingEnabled: a,
  11561. url: i
  11562. }, n.abrupt("return", c);
  11563. case 28:
  11564. case "end":
  11565. return n.stop()
  11566. }
  11567. }, n, this, [
  11568. [7, 18]
  11569. ])
  11570. })), function(e, t) {
  11571. return l.apply(this, arguments)
  11572. }), e.setLiveTranscoding = function(n, i) {
  11573. o.
  11574. default.debug("setLiveTranscoding: ".concat(JSON.stringify(n))), Object(W.checkValidObject)(n, "transcoding");
  11575. var a = n,
  11576. r = a.width,
  11577. c = a.height,
  11578. d = a.videoBitrate,
  11579. u = a.videoFramerate,
  11580. l = a.lowLatency,
  11581. f = a.audioSampleRate,
  11582. p = a.audioBitrate,
  11583. m = a.audioChannels,
  11584. g = a.videoGop,
  11585. v = a.images,
  11586. S = a.videoCodecProfile,
  11587. h = a.userCount,
  11588. _ = a.backgroundColor,
  11589. E = a.transcodingUsers;
  11590. 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)(f) || Object(W.checkValidEnum)(f, "audioSampleRate", [32e3, 44100, 48e3]), Object(W.isEmpty)(p) || Object(W.checkValidNumber)(p, "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)) {
  11591. if (!Object(W.isArray)(E)) throw new Error("[transcodingUsers]: transcodingUsers should be Array");
  11592. if (E.length > 17) throw new Error("The length of transcodingUsers cannot greater than 17");
  11593. E.map(function(e, t) {
  11594. if (!Object(W.isEmpty)(e.uid) && !Tt(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]");
  11595. 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]")
  11596. })
  11597. }
  11598. if (!Object(W.isEmpty)(v)) {
  11599. if (!Object(W.isArray)(v)) throw new Error("[images]: images should be Array");
  11600. v.map(function(e, t) {
  11601. 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;
  11602. 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]")
  11603. })
  11604. }
  11605. var I = s.b.reportApiInvoke(t.sessionId, {
  11606. name: "Client.setLiveTranscoding",
  11607. options: arguments,
  11608. tag: "tracer"
  11609. });
  11610. if ((n = JSON.parse(JSON.stringify(n))).transcodingUsers && (n.userConfigs = n.transcodingUsers, delete n.transcodingUsers), e.joinInfo.stringUid && n.userConfigs && n.userConfigs.length) {
  11611. var T = [];
  11612. n.userConfigs.forEach(function(t) {
  11613. T.push(Ge(e.joinInfo, e.gatewayClient, t.uid).then(function(e) {
  11614. t.uid = e.uid
  11615. }))
  11616. });
  11617. var y = Promise.all(T).then(function() {
  11618. return e._setLiveTranscoding(n, i)
  11619. });
  11620. return y.then(function(e) {
  11621. I(null, e)
  11622. }).
  11623. catch (function(e) {
  11624. I(e)
  11625. }), y
  11626. }
  11627. var b = e._setLiveTranscoding(n, i);
  11628. return b.then(function(e) {
  11629. I(null, e)
  11630. }).
  11631. catch (function(e) {
  11632. I(e)
  11633. }), b
  11634. }, e._setLiveTranscoding = (u = K()(Y.a.mark(function t(n, i) {
  11635. var a, r, o;
  11636. return Y.a.wrap(function(t) {
  11637. for (;;) switch (t.prev = t.next) {
  11638. case 0:
  11639. if (e.liveStreaming.transcodingConfig = h()(e.liveStreaming.transcodingConfig, n), "boolean" != typeof i && (i = !! e.liveStreaming.connections.mix_streaming), a = JSON.parse(JSON.stringify({
  11640. allocate: !1,
  11641. clientRequest: {
  11642. command: "UpdateTranscoding",
  11643. transcodingConfig: e.liveStreaming.transcodingConfig
  11644. },
  11645. command: "request"
  11646. })), r = {}, !i) {
  11647. t.next = 16;
  11648. break
  11649. }
  11650. return e.liveStreaming.connections.mix_streaming || e.liveStreaming.connect("mix_streaming"), t.next = 8, e.liveStreaming.connections.mix_streaming.request(a);
  11651. case 8:
  11652. return o = t.sent, r.type = "liveTranscodingUpdated", r.reason = o.reason, r.status = o.code, e.gatewayClient.dispatchEvent(r), t.abrupt("return", o);
  11653. case 16:
  11654. return t.abrupt("return", {
  11655. code: 200,
  11656. reason: "success"
  11657. });
  11658. case 17:
  11659. case "end":
  11660. return t.stop()
  11661. }
  11662. }, t, this)
  11663. })), function(e, t) {
  11664. return u.apply(this, arguments)
  11665. }), e.stopLiveStreaming = function(n, i) {
  11666. Object(W.checkValidString)(n, "url", 1, 1024);
  11667. var a = s.b.reportApiInvoke(t.sessionId, {
  11668. name: "Client.stopLiveStreaming",
  11669. options: arguments,
  11670. tag: "tracer"
  11671. }),
  11672. r = e._stopLiveStreaming(n, i);
  11673. return r.then(function(e) {
  11674. a(null, e)
  11675. }).
  11676. catch (function(e) {
  11677. a(e)
  11678. }), r
  11679. }, e._stopLiveStreaming = (d = K()(Y.a.mark(function t(n, i, a) {
  11680. var r, o, s, c, d, u;
  11681. return Y.a.wrap(function(t) {
  11682. for (;;) switch (t.prev = t.next) {
  11683. case 0:
  11684. return r = null, o = e.liveStreaming.pushStates[n], r = o ? o.transcodingEnabled ? "mix_streaming" : "raw_streaming" : i ? "mix_streaming" : "raw_streaming", s = {
  11685. allocate: !1,
  11686. clientRequest: {
  11687. command: "UnpublishStream",
  11688. url: n
  11689. },
  11690. command: "request"
  11691. }, e.liveStreaming.connections[r] || e.liveStreaming.connect(r), c = null, t.prev = 6, t.next = 9, e.liveStreaming.connections[r].request(s);
  11692. case 9:
  11693. 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;
  11694. break;
  11695. case 18:
  11696. throw t.prev = 18, t.t0 = t.
  11697. 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;
  11698. case 27:
  11699. return a || delete e.liveStreaming.pushStates[n], t.abrupt("return", c);
  11700. case 29:
  11701. case "end":
  11702. return t.stop()
  11703. }
  11704. }, t, this, [
  11705. [6, 18]
  11706. ])
  11707. })), function(e, t, n) {
  11708. return d.apply(this, arguments)
  11709. }), e.liveStreaming.injectStreamTranscodingConfig = {
  11710. autoDestroyTime: 30,
  11711. audioBitrate: 48,
  11712. audioChannels: 1,
  11713. audioSampleRate: 44100,
  11714. height: 0,
  11715. videoBitrate: 400,
  11716. videoFramerate: 15,
  11717. videoGop: 30,
  11718. width: 0
  11719. }, e.addInjectStreamUrl = function(i, a) {
  11720. 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);
  11721. var r = s.b.reportApiInvoke(t.sessionId, {
  11722. name: "Client.addInjectStreamUrl",
  11723. options: n,
  11724. tag: "tracer"
  11725. });
  11726. if ("audience" === e.gatewayClient.role) {
  11727. var o = {
  11728. code: 403,
  11729. reason: "AUDIENCE_INJECTING_FORBIDDEN"
  11730. };
  11731. throw r(o), o
  11732. }
  11733. var c = e._addInjectStreamUrl(i, a);
  11734. return c.then(function(e) {
  11735. r(null, e)
  11736. }).
  11737. catch (function(e) {
  11738. r(e)
  11739. }), c
  11740. }, e._addInjectStreamUrl = (r = K()(Y.a.mark(function n(i, a) {
  11741. var r, o, s, c, d;
  11742. return Y.a.wrap(function(n) {
  11743. for (;;) switch (n.prev = n.next) {
  11744. case 0:
  11745. return r = h()({}, e.liveStreaming.injectStreamTranscodingConfig, a), o = {
  11746. allocate: !0,
  11747. clientRequest: {
  11748. cname: e.channel,
  11749. command: "InjectStream",
  11750. sid: t.sessionId,
  11751. transcodingConfig: r,
  11752. ts: Date.now(),
  11753. url: i,
  11754. vid: parseInt(e.joinInfo.vid, 10)
  11755. },
  11756. command: "request"
  11757. }, 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);
  11758. case 7:
  11759. s = n.sent, c = {
  11760. reason: s && s.reason,
  11761. status: yt(s && s.code),
  11762. type: "streamInjectedStatus",
  11763. uid: s && s.serverResponse && s.serverResponse.inject_uid,
  11764. url: s && s.serverResponse && s.serverResponse.url
  11765. }, e.gatewayClient.dispatchEvent(c), n.next = 17;
  11766. break;
  11767. case 12:
  11768. throw n.prev = 12, n.t0 = n.
  11769. catch (4), d = {
  11770. reason: n.t0 && n.t0.reason,
  11771. status: yt(n.t0 && n.t0.code),
  11772. type: "streamInjectedStatus",
  11773. uid: n.t0 && n.t0.serverResponse && n.t0.serverResponse.inject_uid,
  11774. url: n.t0 && n.t0.serverResponse && n.t0.serverResponse.url
  11775. }, e.gatewayClient.dispatchEvent(d), n.t0;
  11776. case 17:
  11777. return e.liveStreaming.pullStates[i] = {
  11778. transcodingConfig: r,
  11779. url: i
  11780. }, n.abrupt("return", s);
  11781. case 19:
  11782. case "end":
  11783. return n.stop()
  11784. }
  11785. }, n, this, [
  11786. [4, 12]
  11787. ])
  11788. })), function(e, t) {
  11789. return r.apply(this, arguments)
  11790. }), e.removeInjectStreamUrl = (a = K()(Y.a.mark(function n(i) {
  11791. var a, r, o = arguments;
  11792. return Y.a.wrap(function(n) {
  11793. for (;;) switch (n.prev = n.next) {
  11794. case 0:
  11795. return Object(W.checkValidString)(i, "url", 1, 255), a = s.b.reportApiInvoke(t.sessionId, {
  11796. name: "Client.removeInjectStreamUrl",
  11797. options: o,
  11798. tag: "tracer"
  11799. }), (r = e._removeInjectStreamUrl(i)).then(function(e) {
  11800. a(null, e)
  11801. }).
  11802. catch (function(e) {
  11803. a(e)
  11804. }), n.abrupt("return", r);
  11805. case 5:
  11806. case "end":
  11807. return n.stop()
  11808. }
  11809. }, n, this)
  11810. })), function(e) {
  11811. return a.apply(this, arguments)
  11812. }), e._removeInjectStreamUrl = (i = K()(Y.a.mark(function t(n) {
  11813. var i, a, r, o;
  11814. return Y.a.wrap(function(t) {
  11815. for (;;) switch (t.prev = t.next) {
  11816. case 0:
  11817. return i = {
  11818. allocate: !1,
  11819. clientRequest: {
  11820. command: "UninjectStream",
  11821. url: n
  11822. },
  11823. command: "request"
  11824. }, 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);
  11825. case 6:
  11826. a = t.sent, r = {
  11827. reason: a && a.reason,
  11828. status: bt(a && a.code),
  11829. type: "streamInjectedStatus",
  11830. uid: a && a.serverResponse && a.serverResponse.inject_uid,
  11831. url: a && a.serverResponse && a.serverResponse.url
  11832. }, e.gatewayClient.dispatchEvent(r), t.next = 16;
  11833. break;
  11834. case 11:
  11835. throw t.prev = 11, t.t0 = t.
  11836. catch (3), o = {
  11837. reason: t.t0 && t.t0.reason,
  11838. status: bt(t.t0 && t.t0.code),
  11839. type: "streamInjectedStatus",
  11840. uid: t.t0 && t.t0.serverResponse && t.t0.serverResponse.inject_uid,
  11841. url: t.t0 && t.t0.serverResponse && t.t0.serverResponse.url
  11842. }, e.gatewayClient.dispatchEvent(o), t.t0;
  11843. case 16:
  11844. return delete e.liveStreaming.pullStates[n], t.abrupt("return", a);
  11845. case 18:
  11846. case "end":
  11847. return t.stop()
  11848. }
  11849. }, t, this, [
  11850. [3, 11]
  11851. ])
  11852. })), function(e) {
  11853. return i.apply(this, arguments)
  11854. });
  11855. var i;
  11856. var a;
  11857. var r;
  11858. var d;
  11859. var u;
  11860. var l;
  11861. var f;
  11862. var p;
  11863. var m
  11864. }(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) {
  11865. t.gatewayClient.closeGateway(), t.gatewayClient.socket = void 0, t.gatewayClient.hasChangeBGPAddress = !0, t.joinInfo.multiIP = e.option, t.gatewayClient.state = et.CONNECTING;
  11866. var n = function(e) {
  11867. o.
  11868. 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) {
  11869. o.
  11870. default.info("[".concat(t.clientId, "] Join channel ").concat(t.channel, " success"));
  11871. var n = t.onSuccess;
  11872. t.onSuccess = null, t.onFailure = null, n(e)
  11873. }, t.onFailure):
  11874. (t.gatewayClient.joinInfo = h()({}, t.joinInfo), t.gatewayClient.rejoin())
  11875. };
  11876. t.joinInfo.stringUid && !t.joinInfo.uid ? (t.userAccountReq && !t.userAccountReq.isFinished() && t.userAccountReq.cancel(), t.userAccountReq = Ge(joinInfo, t.gatewayClient), t.userAccountReq.then(function(e) {
  11877. o.
  11878. default.error("getUserAccount Success ".concat(e.url, " ").concat(joinInfo.stringUid, " => ").concat(e.uid)), t.joinInfo.uid = e.uid, He(t.joinInfo, n, t.onFailure)
  11879. }).
  11880. catch (function(e) {
  11881. o.
  11882. default.error("getUserAccount rejected", e), t.onFailure(e)
  11883. })) : He(t.joinInfo, n, t.onFailure)
  11884. }), t.gatewayClient.on("rejoin-start", function() {
  11885. t._renewSession(), s.b.sessionInit(e.sessionId, {
  11886. lts: (new Date).getTime(),
  11887. extend: {
  11888. rejoin: !0
  11889. },
  11890. cname: t.channel,
  11891. appid: e.appId,
  11892. mode: e.mode,
  11893. succ: !0
  11894. })
  11895. }), t.gatewayClient.on("recover", function() {
  11896. t._renewSession(), console.log("recover", e.sessionId), s.b.sessionInit(e.sessionId, {
  11897. lts: (new Date).getTime(),
  11898. extend: {
  11899. recover: !0
  11900. },
  11901. cname: t.channel,
  11902. appid: e.appId,
  11903. mode: e.mode,
  11904. succ: !0
  11905. })
  11906. }), t.gatewayClient.on("rejoin", function() {
  11907. var e = t.highStreamState;
  11908. if (o.
  11909. default.debug("[".concat(t.clientId, "] Client local stream preState: ").concat(e)), t.onSuccess) {
  11910. var n = t.onSuccess;
  11911. t.onSuccess = null, t.onFailure = null, n()
  11912. }!t.highStream || 0 !== e && 1 !== e || (o.
  11913. default.info("[".concat(t.clientId, "] publish after rejoin")), t.highStreamState = 2, t.lowStreamState = 2, t.publish(t.highStream, function(e) {
  11914. e && o.
  11915. default.info("[".concat(t.clientId, "] "), e)
  11916. }))
  11917. }), t.gatewayClient.on("streamPublished", function(e) {
  11918. t.hasPublished || (t.hasPublished = !0, t.gatewayClient.dispatchEvent(u({
  11919. type: "stream-published",
  11920. stream: e.stream
  11921. })))
  11922. }), t.gatewayClient.on("pubP2PLost", function(e) {
  11923. o.
  11924. default.debug("[".concat(t.clientId, "] Start reconnect local peerConnection: ").concat(t.highStream.getId())), t.gatewayClient.dispatchEvent({
  11925. type: "stream-reconnect-start",
  11926. uid: t.highStream.getId()
  11927. }), 1 === t.highStreamState && (t.highStreamState = 0, t.lowStreamState = 0), t._unpublish(t.highStream, function() {
  11928. t._publish(t.highStream, function() {
  11929. o.
  11930. default.debug("[".concat(t.clientId, "] Reconnect local peerConnection success: ").concat(t.highStream.getId())), t.gatewayClient.dispatchEvent({
  11931. type: "stream-reconnect-end",
  11932. uid: t.highStream.getId(),
  11933. success: !0,
  11934. reason: ""
  11935. })
  11936. }, function(e) {
  11937. o.
  11938. default.debug("[".concat(t.clientId, "] Reconnect local peerConnection failed: ").concat(e)), t.gatewayClient.dispatchEvent({
  11939. type: "stream-reconnect-end",
  11940. uid: t.highStream.getId(),
  11941. success: !1,
  11942. reason: e
  11943. })
  11944. }, !0)
  11945. }, function(e) {
  11946. o.
  11947. default.debug("[".concat(t.clientId, "] Reconnect local peerConnection failed: ").concat(e)), t.gatewayClient.dispatchEvent({
  11948. type: "stream-reconnect-end",
  11949. uid: t.highStream.getId(),
  11950. success: !1,
  11951. reason: e
  11952. })
  11953. }, !0)
  11954. }), t.gatewayClient.on("subP2PLost", function(e) {
  11955. o.
  11956. default.debug("[".concat(t.clientId, "] Start reconnect remote peerConnection: ").concat(e.stream.getId(), " ").concat(e.stream.subscribeOptions)), t.gatewayClient.dispatchEvent({
  11957. type: "stream-reconnect-start",
  11958. uid: e.stream.getId()
  11959. });
  11960. var n = e.stream.subscribeOptions;
  11961. console.log("Re-subscribe stream", n, e.stream), t.gatewayClient.unsubscribe(e.stream, function() {
  11962. e.stream.subscribeOptions = n, t.gatewayClient.subscribe(e.stream, function() {
  11963. o.
  11964. default.debug("[".concat(t.clientId, "] Reconnect remote peerConnection success: ").concat(e.stream.getId())), t.gatewayClient.dispatchEvent({
  11965. type: "stream-reconnect-end",
  11966. uid: e.stream.getId(),
  11967. success: !1,
  11968. reason: ""
  11969. })
  11970. }, function(n) {
  11971. o.
  11972. default.debug("[".concat(t.clientId, "] Reconnect remote peerConnection failed: "), n), t.gatewayClient.dispatchEvent({
  11973. type: "stream-reconnect-end",
  11974. uid: e.stream.getId(),
  11975. success: !1,
  11976. reason: n
  11977. })
  11978. })
  11979. }, function(n) {
  11980. o.
  11981. default.debug("[".concat(t.clientId, "] Reconnect remote peerConnection failed: "), n), t.gatewayClient.dispatchEvent({
  11982. type: "stream-reconnect-end",
  11983. uid: e.stream.getId(),
  11984. success: !1,
  11985. reason: n
  11986. })
  11987. })
  11988. }), rt.on("networkTypeChanged", function(e) {
  11989. t.gatewayClient && t.gatewayClient.dispatchEvent(e);
  11990. var n = h()({}, e, {
  11991. type: "network-type-changed"
  11992. });
  11993. t.gatewayClient.dispatchEvent(n)
  11994. }), H.on("recordingDeviceChanged", function(e) {
  11995. t.gatewayClient && t.gatewayClient.dispatchEvent(e);
  11996. var n = h()({}, e, {
  11997. type: "recording-device-changed"
  11998. });
  11999. t.gatewayClient.dispatchEvent(n)
  12000. }), H.on("playoutDeviceChanged", function(e) {
  12001. t.gatewayClient && t.gatewayClient.dispatchEvent(e);
  12002. var n = h()({}, e, {
  12003. type: "playout-device-changed"
  12004. });
  12005. t.gatewayClient.dispatchEvent(n)
  12006. }), H.on("cameraChanged", function(e) {
  12007. t.gatewayClient && t.gatewayClient.dispatchEvent(e);
  12008. var n = h()({}, e, {
  12009. type: "camera-changed"
  12010. });
  12011. t.gatewayClient.dispatchEvent(n)
  12012. }), t.gatewayClient.on("streamTypeChange", function(n) {
  12013. var i = h()({}, n, {
  12014. type: "stream-type-changed"
  12015. });
  12016. t.gatewayClient.dispatchEvent(i), s.b.reportApiInvoke(e.sessionId, {
  12017. name: "streamTypeChange"
  12018. })(null, JSON.stringify(n))
  12019. }), t
  12020. },
  12021. Ct = {
  12022. width: 640,
  12023. height: 360,
  12024. videoBitrate: 400,
  12025. videoFramerate: 15,
  12026. lowLatency: !1,
  12027. audioSampleRate: 48e3,
  12028. audioBitrate: 48,
  12029. audioChannels: 1,
  12030. videoGop: 30,
  12031. videoCodecProfile: 100,
  12032. userCount: 0,
  12033. userConfigExtraInfo: {},
  12034. backgroundColor: 0,
  12035. transcodingUsers: []
  12036. },
  12037. Nt = H.getDevices,
  12038. wt = M,
  12039. kt = JSON.parse(JSON.stringify(r.SUPPORT_RESOLUTION_LIST));
  12040. n.
  12041. default = {
  12042. TranscodingUser: {
  12043. uid: 0,
  12044. x: 0,
  12045. y: 0,
  12046. width: 0,
  12047. height: 0,
  12048. zOrder: 0,
  12049. alpha: 1
  12050. },
  12051. LiveTranscoding: Ct,
  12052. createClient: function(e) {
  12053. var t = s.b.reportApiInvoke(null, {
  12054. name: "createClient",
  12055. options: arguments,
  12056. tag: "tracer"
  12057. });
  12058. (e = h()({}, e || {})).codec || (e.codec = function(e) {
  12059. switch (e) {
  12060. case "h264_interop":
  12061. return "h264";
  12062. default:
  12063. return "vp8"
  12064. }
  12065. }(e.mode));
  12066. var n = function(e) {
  12067. return -1 === Re.indexOf(e.mode) ? I.
  12068. default.INVALID_CLIENT_MODE:
  12069. -1 === Ae.indexOf(e.codec) ? I.
  12070. default.INVALID_CLIENT_CODEC:
  12071. "h264_interop" == e.mode && "h264" !== e.codec && I.
  12072. default.CLIENT_MODE_CODEC_MISMATCH
  12073. }(e);
  12074. if (n) throw o.
  12075. default.error("Invalid parameter setting MODE: ".concat(e.mode, " CODEC: ").concat(e.codec, " ERROR ").concat(n)), t(n), new Error(n);
  12076. return o.
  12077. default.info("Creating client, MODE: ".concat(e.mode, " CODEC: ").concat(e.codec)), function(e) {
  12078. switch (e.mode) {
  12079. case "interop":
  12080. case "h264_interop":
  12081. e.mode = "live";
  12082. break;
  12083. case "web-only":
  12084. e.mode = "rtc"
  12085. }
  12086. }(e), t(null, e), Ot(e)
  12087. },
  12088. createStream: function(e) {
  12089. var t = s.b.reportApiInvoke(null, {
  12090. name: "createStream",
  12091. options: arguments,
  12092. tag: "tracer",
  12093. getStates: function() {
  12094. return {
  12095. audioTrackEnable: e && e.audioSource ? e.audioSource.enabled : null,
  12096. videoTrackEnable: e && e.videoSource ? e.videoSource.enabled : null
  12097. }
  12098. }
  12099. });
  12100. Object(W.checkValidObject)(e, "StreamSpec");
  12101. var n = e.streamID,
  12102. i = e.audio,
  12103. a = e.video,
  12104. r = e.screen,
  12105. c = e.screenAudio,
  12106. d = (e.audioSource, e.videoSource, e.cameraId),
  12107. u = e.facingMode,
  12108. l = e.microphoneId,
  12109. f = e.mirror,
  12110. p = e.extensionId,
  12111. m = e.mediaSource,
  12112. g = e.audioProcessing;
  12113. 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");
  12114. 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)(p) || Object(W.checkValidString)(p, "extensionId"), Object(W.isEmpty)(m) || Object(W.checkValidEnum)(m, "mediaSource", ["screen", "application", "window"]), Object(W.isEmpty)(f) || Object(W.checkValidBoolean)(f, "mirror"), !Object(W.isEmpty)(g)) {
  12115. var v = g.AGC,
  12116. S = g.AEC,
  12117. h = g.ANS;
  12118. 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")
  12119. }
  12120. o.
  12121. default.debug("Create stream"), !0 === c && !0 === i && o.
  12122. default.warning("Do not set both 'screenAudio' and 'audio' to true at the same time");
  12123. var _ = Ie(e);
  12124. return t(), _
  12125. },
  12126. Logger: o.
  12127. default,
  12128. report:
  12129. s.b,
  12130. getDevices: Nt,
  12131. getScreenSources: wt,
  12132. getParameter: r.getParameter,
  12133. setParameter: r.setParameter,
  12134. checkSystemRequirements: function() {
  12135. var e = s.b.reportApiInvoke(null, {
  12136. name: "checkSystemRequirements",
  12137. options: arguments,
  12138. tag: "tracer"
  12139. }),
  12140. t = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection,
  12141. n = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.msGetUserMedia || navigator.mozGetUserMedia || navigator.mediaDevices && navigator.mediaDevices.getUserMedia,
  12142. i = window.WebSocket,
  12143. a = !! t && !! n && !! i,
  12144. r = !1;
  12145. o.
  12146. 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);
  12147. var c = a && r;
  12148. return e(null, c), c
  12149. },
  12150. getSupportedCodec: Te.getSupportedCodec,
  12151. ChannelMediaRelayConfiguration: ye.ChannelMediaRelayConfiguration,
  12152. VERSION: r.VERSION,
  12153. BUILD: r.BUILD,
  12154. PROFILE_TABLE: kt,
  12155. AUDIO_SAMPLE_RATE_32000: 32e3,
  12156. AUDIO_SAMPLE_RATE_44100: 44100,
  12157. AUDIO_SAMPLE_RATE_48000: 48e3,
  12158. VIDEO_CODEC_PROFILE_BASELINE: 66,
  12159. VIDEO_CODEC_PROFILE_MAIN: 77,
  12160. VIDEO_CODEC_PROFILE_HIGH: 100,
  12161. REMOTE_VIDEO_STREAM_HIGH: 0,
  12162. REMOTE_VIDEO_STREAM_LOW: 1,
  12163. REMOTE_VIDEO_STREAM_MEDIUM: 2
  12164. }
  12165. }]).
  12166. default
  12167. });