package Ġcom . plugin . dr m _ video Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . net . Uri Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġcom . google . android . ex op layer 2 .* Ċ import Ġcom . google . android . ex op layer 2 . Player . REPEAT _ MODE _ ALL Ċ import Ġcom . google . android . ex op layer 2 . Player . REPEAT _ MODE _ OFF Ċ Ċ import Ġcom . google . android . ex op layer 2 . C ; Ċ import Ġcom . google . android . ex op layer 2 . Exo Playback Exception ; Ċ import Ġcom . google . android . ex op layer 2 . Format ; Ċ import Ġcom . google . android . ex op layer 2 . Media Item ; Ċ import Ġcom . google . android . ex op layer 2 . Playback Parameters ; Ċ import Ġcom . google . android . ex op layer 2 . Player ; Ċ import Ġcom . google . android . ex op layer 2 . Player . EventListener ; Ċ import Ġcom . google . android . ex op layer 2 . Simple Exo Player ; Ċ import Ġcom . google . android . ex op layer 2 . audio . Audio Attributes ; Ċ import Ġcom . google . android . ex op layer 2 . source . Progress ive Media Source ; Ċ import Ġcom . google . android . ex op layer 2 . source . hls . H ls Media Source ; Ċ import Ġcom . google . android . ex op layer 2 . source . smooth streaming . Default Ss Chunk Source ; Ċ import Ġcom . google . android . ex op layer 2 . source . smooth streaming . Ss Media Source ; Ċ import Ġcom . google . android . ex op layer 2 . dr m . Default D rm Session Manager Ċ import Ġcom . google . android . ex op layer 2 . dr m . D rm Session Manager Ċ import Ġcom . google . android . ex op layer 2 . dr m . Http Media D rm Callback Ċ import Ġcom . google . android . ex op layer 2 . source . Media Source Ċ import Ġcom . google . android . ex op layer 2 . source . dash . Dash Media Source Ċ import Ġcom . google . android . ex op layer 2 . source . dash . Default Dash Chunk Source Ċ import Ġcom . google . android . ex op layer 2 . track selection . Default Track Selector Ċ import Ġcom . google . android . ex op layer 2 . ui . Styled Player View Ċ import Ġcom . google . android . ex op layer 2 . upstream . DataSource Ċ import Ġcom . google . android . ex op layer 2 . upstream . Default DataSource Factory Ċ import Ġcom . google . android . ex op layer 2 . upstream . Default Http DataSource Ċ import Ġcom . google . android . ex op layer 2 . util . Util Ċ import Ġio . flutter . plugin . common . Binary Messenger Ċ import Ġio . flutter . plugin . common . Event Channel Ċ import Ġio . flutter . plugin . common . Event Channel . Event Sink Ċ import Ġio . flutter . plugin . common . MethodCall Ċ import Ġio . flutter . plugin . common . Method Channel Ċ import Ġio . flutter . plugin . platform . Platform View Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . HashMap Ċ import Ġcom . google . android . ex op layer 2 . Renderer Capabilities Ċ Ċ import Ġcom . google . android . ex op layer 2 . ui . Default Track Name Provider Ċ Ċ import Ġcom . google . android . ex op layer 2 . ui . Track Name Provider Ċ Ċ import Ġcom . google . android . ex op layer 2 . source . Track Group Ċ Ċ import Ġcom . google . android . ex op layer 2 . source . Track Group Array Ċ import Ġcom . google . android . ex op layer 2 . track selection . Default Track Selector . Parameters Builder Ċ import Ġcom . google . android . ex op layer 2 . track selection . Default Track Selector . Selection Override Ċ Ċ import Ġjava . util . ArrayList Ċ Ċ import Ġcom . google . android . ex op layer 2 . track selection . Mapping Track Selector Ċ import Ġcom . google . android . ex op layer 2 . track selection . Mapping Track Selector . Mapped Track Info Ċ import Ġcom . google . android . ex op layer 2 . Default Render ers Factory Ċ import Ġcom . google . android . ex op layer 2 . ext . ffmpeg . Ff mpeg Library Ċ import Ġcom . google . android . ex op layer 2 . util . Log Ċ import Ġcom . google . android . ex op layer 2 . extractor . mp 3 . Mp 3 Extractor Ċ Ċ import Ġcom . google . android . ex op layer 2 . extractor . Default Extract ors Factory Ċ import Ġcom . google . android . ex op layer 2 . extractor . ts . Default Ts Payload Reader Factory . FLAG _ ALLOW _ NON _ IDR _ KEY FR AMES Ċ import Ġcom . google . android . ex op layer 2 . extractor . ts . Default Ts Payload Reader Factory . FLAG _ DETECT _ ACCESS _ UNITS Ċ import Ġcom . google . android . ex op layer 2 . source . hls . Default H ls Extractor Factory ĊĊ Ċ internal Ġclass ĠD rm Video Player ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmess enger : ĠBinary Messenger , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġid : ĠInt , ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġparams : ĠMap < String , ĠAny >) Ġ: ĠPlatform View , ĠMethod Channel . MethodCall Handler Ġ{ ĊĊĊĠĠĠ Ġprivate Ġval ĠFORMAT _ SS Ġ= Ġ" ss " ĊĠĠĠ Ġprivate Ġval ĠFORMAT _ DASH Ġ= Ġ" dash " ĊĠĠĠ Ġprivate Ġval ĠFORMAT _ H LS Ġ= Ġ" hls " ĊĠĠĠ Ġprivate Ġval ĠFORMAT _ OTHER Ġ= Ġ" other " ĊĠĠĠ Ġlateinit Ġvar Ġtrack Selector : ĠDefault Track Selector ĊĊĠĠĠ Ġprivate Ġvar Ġview : ĠView ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġmethod Channel : ĠMethod Channel ? ĊĊĠĠĠ Ġprivate Ġvar Ġis Initialized Ġ= Ġfalse ĊĊĊĠĠĠ Ġprivate Ġvar Ġplayer : ĠSimple Exo Player ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġplayer View : ĠStyled Player View ? ĊĊĠĠĠ Ġprivate Ġvar Ġevent Channel : ĠEvent Channel ? ĊĊĠĠĠ Ġprivate Ġval Ġevent Sink : ĠQue uing Event Sink Ġ= ĠQue uing Event Sink () ĊĊĊĠĠĠ Ġoverride Ġfun Ġget View (): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġview !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Ġ= ĠLayoutInflater . from ( context ). inflate ( R . layout . activity _ main , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġplayer View Ġ= Ġview !!. findViewById ( R . id . video _ view ) ĊĠĠĠĠĠĠĠ Ġevent Channel Ġ= ĠEvent Channel ( messenger , Ġ" dr m video _ events $ id ") ĊĠĠĠĠĠĠĠ Ġmethod Channel Ġ= ĠMethod Channel ( messenger , Ġ" dr m video _$ id ") ĊĠĠĠĠĠĠĠ Ġmethod Channel ?. set MethodCall Handler ( this ) ĊĊĠĠĠĠĠĠĠ Ġinitialize Player (); ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon MethodCall ( call : ĠMethod Call , Ġresult : ĠMethod Channel . Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( call . method ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" seek To " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseek To ( call , Ġresult ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" get Aud ios " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaud ios Ġ Ġ= Ġget Aud ios () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( aud ios ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" getSub titles " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub titles Ġ= Ġget Sub titles () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( subtitle s ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" change FontSize " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfontSize Ġ= Ġcall . arguments Ġas ĠDouble ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange FontSize ( fontSize ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" change Url " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġcall . arguments Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Params Ġ= ĠHashMap ( params ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Params [" video Url "] Ġ= Ġurl ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġnew Params ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Initialized Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Channel Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer ?. stop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer ?. release () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitialize Player () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" play " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay ( result ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" pause " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpause ( result ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" set Audio " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Audio ByIndex ( call . arguments Ġas ĠInt ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" set Subtitle " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Subtitle ByIndex ( call . arguments Ġas ĠInt ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" set Volume " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Volume ( call ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" set Loop ing " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Loop ing ( call ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" set Playback Speed " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Playback Speed ( call ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" getPosition " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Position ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" dispose " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispose (); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġset Subtitle ByIndex ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmapped Track Info Ġ= Ġtrack Selector . current Mapped Track Info ĊĠĠĠĠĠĠĠ Ġvar Ġtrack Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġif Ġ( mapped Track Info Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrack Count Ġ= Ġmapped Track Info . renderer Count ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġaudio Index Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġtrack Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mapped Track Info !!. get Renderer Type ( i ) Ġ!= ĠC . TRACK _ TYPE _ TEXT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrack Group Array Ġ= Ġmapped Track Info . get Track Groups ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġtrack Group Array . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgroup Ġ= Ġtrack Group Array [ j ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( k Ġin Ġ 0 Ġuntil Ġgroup . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( audio Index Ġ== Ġindex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġtrack Selector . parameters ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build Up on () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . clear Selection Overrides ( i ). set Renderer Disabled ( i , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtracks Ġ= Ġint ArrayOf ( k ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoverride Ġ= ĠSelection Override ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj , Ġ* tracks ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setSelection Override ( i , Ġmapped Track Info . get Track Groups ( i ), Ġoverride ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrack Selector . set Parameters ( builder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Index ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Sub titles (): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmapped Track Info : ĠM apped Track Info Ġ= Ġtrack Selector . current Mapped Track Info Ġ?: Ġreturn ĠArrayList () ĊĠĠĠĠĠĠĠ Ġval Ġaud ios Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġmapped Track Info . renderer Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mapped Track Info . get Renderer Type ( i ) Ġ!= ĠC . TRACK _ TYPE _ TEXT ) Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrack Group Array Ġ= Ġmapped Track Info . get Track Groups ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġtrack Group Array . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgroup Ġ= Ġtrack Group Array [ j ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprovider : ĠTrack Name Provider Ġ= ĠDefault Track Name Provider ( context . resources ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( k Ġin Ġ 0 Ġuntil Ġgroup . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mapped Track Info . get Track Support ( i , Ġj , Ġk ) Ġand Ġ 7 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ== ĠRenderer Capabilities . FORMAT _ HAND LED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// track Selector . set Parameters ( builder ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaud ios . add ( provider . get Track Name ( group . get Format ( k ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġaud ios ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Aud ios () Ġ: ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmapped Track Info : ĠM apped Track Info Ġ= Ġtrack Selector . current Mapped Track Info Ġ?: Ġreturn ĠArrayList () ĊĠĠĠĠĠĠĠ Ġval Ġaud ios Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġmapped Track Info . renderer Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mapped Track Info . get Renderer Type ( i ) Ġ!= ĠC . TRACK _ TYPE _ AUDIO ) Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrack Group Array Ġ= Ġmapped Track Info . get Track Groups ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġtrack Group Array . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgroup Ġ= Ġtrack Group Array [ j ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprovider : ĠTrack Name Provider Ġ= ĠDefault Track Name Provider ( context . resources ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( k Ġin Ġ 0 Ġuntil Ġgroup . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mapped Track Info . get Track Support ( i , Ġj , Ġk ) Ġand Ġ 7 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ== ĠRenderer Capabilities . FORMAT _ HAND LED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// track Selector . set Parameters ( builder ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaud ios . add ( provider . get Track Name ( group . get Format ( k ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġaud ios ĊĊĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġset Audio ByIndex ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmapped Track Info Ġ= Ġtrack Selector . current Mapped Track Info ĊĠĠĠĠĠĠĠ Ġvar Ġtrack Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġif Ġ( mapped Track Info Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrack Count Ġ= Ġmapped Track Info . renderer Count ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġaudio Index Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġtrack Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mapped Track Info !!. get Renderer Type ( i ) Ġ!= ĠC . TRACK _ TYPE _ AUDIO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrack Group Array Ġ= Ġmapped Track Info . get Track Groups ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġtrack Group Array . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgroup Ġ= Ġtrack Group Array [ j ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( k Ġin Ġ 0 Ġuntil Ġgroup . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( audio Index Ġ== Ġindex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġtrack Selector . parameters ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build Up on () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . clear Selection Overrides ( i ). set Renderer Disabled ( i , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtracks Ġ= Ġint ArrayOf ( k ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoverride Ġ= ĠSelection Override ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj , Ġ* tracks ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setSelection Override ( i , Ġmapped Track Info . get Track Groups ( i ), Ġoverride ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrack Selector . set Parameters ( builder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Index ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Position ( result : ĠMethod Channel . Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġresult . success ( player ?. current Position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Playback Speed ( call : ĠMethod Call ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġcall . arguments Ġas ĠDouble ĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġdo Ġnot Ġneed Ġto Ġconsider Ġpitch Ġand Ġskip Sil ence Ġfor Ġnow Ġas Ġwe Ġdo Ġnot Ġhandle Ġthem Ġand ĊĠĠĠĠĠĠĠ Ġ// Ġtherefore Ġnever Ġdiv erge Ġfrom Ġthe Ġdefault Ġvalues . ĊĠĠĠĠĠĠĠ Ġval Ġplayback Parameters Ġ= ĠPlay back Parameters ( value . toFloat ()) ĊĠĠĠĠĠĠĠ Ġplayer ?. set Playback Parameters ( playback Parameters ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Loop ing ( call : ĠMethod Call ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġcall . arguments Ġas ĠBoolean ĊĠĠĠĠĠĠĠ Ġplayer ?. repeat Mode Ġ= Ġif Ġ( value ) ĠRE PEAT _ MODE _ ALL Ġelse ĠRE PEAT _ MODE _ OFF ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġseek To ( call : ĠMethod Call , Ġresult : ĠMethod Channel . Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġcall . arguments Ġas ĠInteger ĊĠĠĠĠĠĠĠ Ġplayer ?. seek To ( position . to Long ()) ĊĠĠĠĠĠĠĠ Ġresult . success ( null ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġplay ( result : ĠMethod Channel . Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġplayer ?. play When Ready Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġplayer ?. play () ĊĠĠĠĠĠĠĠ Ġresult . success ( null ); ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġpause ( result : ĠMethod Channel . Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġplayer ?. play When Ready Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġplayer ?. pause () ĊĠĠĠĠĠĠĠ Ġresult . success ( null ); ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġset Volume ( call : ĠMethod Call ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvolume Ġ= Ġcall . arguments Ġas ĠDouble ĊĠĠĠĠĠĠĠ Ġval Ġbracket ed Value Ġ= ĠMath . max ( 0 . 0 , ĠMath . min ( 1 . 0 , Ġvolume )). toFloat () ĊĠĠĠĠĠĠĠ Ġplayer ?. volume Ġ= Ġbracket ed Value ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinitialize Player () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġvideo Url Ġ= Ġ""; ĊĠĠĠĠĠĠĠ Ġvar Ġdrm License Url Ġ= Ġ""; ĊĠĠĠĠĠĠĠ Ġvar Ġformat Hint : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar ĠfontSize Ġ: ĠDouble Ġ= Ġ 2 0 . 0 ĊĠĠĠĠĠĠĠ Ġif Ġ( params . containsKey (" video Url ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Url Ġ= Ġparams [" video Url "] Ġas ĠString ; ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif ( params . containsKey (" initial FontSize ")){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= Ġparams [" initial FontSize "] Ġas ĠDouble ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( params . containsKey (" dr m License Url ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrm License Url Ġ= Ġparams [" dr m License Url "] Ġas ĠString ; ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġif Ġ( params . containsKey (" format Hint ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformat Hint Ġ= Ġparams [" format Hint "] Ġas ĠString ; ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtrack Selector Ġ= ĠDefault Track Selector ( context ) ĊĠĠĠĠĠĠĠ Ġtrack Selector . set Parameters ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrack Selector . build Up on Parameters (). setMax Video Size Sd () ĊĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġdefault Render ers Factory Ġ= ĠDefault Render ers Factory ( context ) ĊĠĠĠĠĠĠĠ Ġdefault Render ers Factory ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Extension Renderer Mode ( Default Render ers Factory . EXTENSION _ RENDER ER _ MODE _ ON ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġdrm Session Manager : ĠD rm Session Manager ? Ġ= Ġnull ; ĊĊĊĠĠĠĠĠĠĠ Ġif Ġ( dr m License Url . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrm Callback Ġ= ĠHttp Media D rm Callback ( dr m License Url , ĠDefault Http DataSource . Factory ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrm Session Manager Ġ= ĠDefault D rm Session Manager . Builder (). build ( dr m Callback ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġffmpeg Available Ġ= ĠF f mpeg Library . is Available () ĊĠĠĠĠĠĠĠ ĠLog . i (" is Available ", Ġffmpeg Available . toString ()) ĊĠĠĠĠĠĠĠ Ġplayer Ġ= ĠSimple Exo Player . Builder ( context , default Render ers Factory ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Track Selector ( track Selector ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġval Ġuri : ĠUri Ġ= ĠUri . parse ( dr m License Url ); ĊĊĠĠĠĠĠĠĠ Ġval ĠdataSource Factory : ĠDataSource . Factory Ġ= Ġif Ġ( is HTTP ( uri )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Http DataSource . Factory (). set UserAgent (" Ex op layer ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDefault DataSource Factory ( context , Ġ" Exo Player ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġval Ġmedia Source : ĠMedia Source Ġ= Ġbuild Media Source ( Uri . parse ( video Url ), ĠdataSource Factory , Ġformat Hint , Ġcontext , Ġdrm Session Manager ) !! ĊĊĠĠĠĠĠĠĠ Ġplayer ?. set Media Source ( media Source ) ĊĠĠĠĠĠĠĠ Ġplayer View ?. player Ġ= Ġplayer Ċ Ċ // ĠĠĠĠĠĠĠ Ġplayer ?. play When Ready Ġ= Ġauto Play ĊĠĠĠĠĠĠĠ Ġplayer ?. prepare () ĊĠĠĠĠĠĠĠ Ġplayer View ?. subtitle View ?. set Apply Embedded Styles ( false ) ĊĠĠĠĠĠĠĠ Ġplayer View ?. subtitle View ?. set Fixed Text Size ( Typed Value . COMPLEX _ UNIT _ PX , fontSize . toFloat ()) ĊĠĠĠĠĠĠĠ ĠsetUp Video () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġchange FontSize ( fontSize Ġ: ĠDouble ){ ĊĠĠĠĠĠĠĠ Ġplayer View ?. subtitle View ?. set Fixed Text Size ( Typed Value . COMPLEX _ UNIT _ PX , fontSize . toFloat ()) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Media Source ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuri : ĠUri , Ġmedia DataSource Factory : ĠDataSource . Factory , Ġformat Hint : ĠString ?, Ġcontext : ĠContext , Ġdrm Session Manager : ĠD rm Session Manager ?): ĠMedia Source ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype : ĠInt Ġ= Ġif Ġ( format Hint Ġ== Ġnull Ġ|| Ġformat Hint . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUtil . infer ContentType ( uri . last Path Segment !! ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( format Hint ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFORMAT _ SS Ġ-> ĠC . TYPE _ SS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFORMAT _ DASH Ġ-> ĠC . TYPE _ DASH ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFORMAT _ H LS Ġ-> ĠC . TYPE _ H LS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFORMAT _ OTHER Ġ-> ĠC . TYPE _ OTHER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC . TYPE _ SS Ġ-> ĠS s Media Source . Factory ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Ss Chunk Source . Factory ( media DataSource Factory ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDefault DataSource Factory ( context , Ġnull , Ġmedia DataSource Factory )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Media Source ( Media Item . from Uri ( uri )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC . TYPE _ DASH Ġ-> ĠDash Media Source . Factory ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Dash Chunk Source . Factory ( media DataSource Factory ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDefault DataSource Factory ( context , Ġnull , Ġmedia DataSource Factory )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Media Source ( Media Item . from Uri ( uri )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC . TYPE _ H LS Ġ-> ĠH ls Media Source . Factory ( media DataSource Factory ). set Extractor Factory ( Default H ls Extractor Factory ( FLAG _ ALLOW _ NON _ IDR _ KEY FR AMES , true )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Media Source ( Media Item . from Uri ( uri )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC . TYPE _ OTHER Ġ-> ĠProgress ive Media Source . Factory ( media DataSource Factory ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Media Source ( Media Item . from Uri ( uri )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Unsupported Ġtype : Ġ$ type ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun ĠsetUp Video () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġevent Channel ?. set Stream Handler ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠEvent Channel . Stream Handler Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Listen ( args : ĠAny ?, Ġevents : ĠEvent Sink ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Sink . set Delegate ( events ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Cancel ( args : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Sink . set Delegate ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Listen ( o : ĠAny , Ġsink : ĠEvent Sink ) Ġ{ Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Sink . set Delegate ( sink ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Cancel ( o : ĠAny ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Sink . set Delegate ( null ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= Ġobject Ġ: ĠPlayer . Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Player Error ( error : ĠPlay back Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event Sink Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Sink . error (" Video Error ", Ġ" Video Ġplayer Ġhad Ġerror Ġ$ error ", Ġnull ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Playback StateChanged ( playback State : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( playback State Ġ== ĠPlayer . STATE _ BUFFER ING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Buffer ing Update () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( playback State Ġ== ĠPlayer . STATE _ READY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Initialized Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Initialized () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( playback State Ġ== ĠPlayer . STATE _ ENDED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent : ĠHashMap < String , ĠAny > Ġ= ĠHashMap () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent [" event "] Ġ= Ġ" completed " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Sink . success ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġplayer ?. addListener ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis HTTP ( uri : ĠUri ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( uri Ġ== Ġnull Ġ|| Ġuri . scheme Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġscheme Ġ= Ġuri . scheme ĊĠĠĠĠĠĠĠ Ġreturn Ġscheme Ġ== Ġ" http " Ġ|| Ġscheme Ġ== Ġ" https " ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġsend Buffer ing Update () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġevent : ĠHashMap < String , ĠAny > Ġ= ĠHashMap () ĊĠĠĠĠĠĠĠ Ġevent [" event "] Ġ= Ġ" buffer ing Update " ĊĠĠĠĠĠĠĠ Ġval Ġrange : ĠList < Number ?> Ġ= ĠlistOf ( 0 , Ġplayer ?. buffered Position ) ĊĠĠĠĠĠĠĠ Ġ// ĠiOS Ġsupports Ġa Ġlist Ġof Ġbuffered Ġranges , Ġso Ġhere Ġis Ġa Ġlist Ġwith Ġa Ġsingle Ġrange . ĊĠĠĠĠĠĠĠ Ġevent [" values "] Ġ= ĠCollections . singletonList ( range ) ĊĠĠĠĠĠĠĠ Ġevent Sink . success ( event ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer ?. stop () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġevent Channel ?. set Stream Handler ( null ) ĊĊĠĠĠĠĠĠĠ Ġplayer ?. release () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġsend Initialized () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent : ĠHashMap < String , ĠAny > Ġ= ĠHashMap () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent . put (" event ", Ġ" initialized ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent . put (" duration ", Ġplayer !!. duration ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent . put (" aud ios ", ( get Aud ios ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent . put (" subtitle s ", ( getSub titles ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( player ?. video Format Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvideo Format : ĠFormat ? Ġ= Ġplayer ?. video Format ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġwidth : ĠInt Ġ= Ġvideo Format !!. width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġheight : ĠInt Ġ= Ġvideo Format . height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrotation Degrees : ĠInt Ġ= Ġvideo Format . rotation Degrees ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSwitch Ġthe Ġwidth / height Ġif Ġvideo Ġwas Ġtaken Ġin Ġpor trait Ġmode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rotation Degrees Ġ== Ġ 9 0 Ġ|| Ġrotation Degrees Ġ== Ġ 2 7 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġplayer ?. video Format !!. height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġplayer ?. video Format !!. width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . put (" width ", Ġwidth ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . put (" height ", Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent Sink . success ( event ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }