package Ġorg . sal ient . ar tp layer . exo Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . net . Uri Ċ import Ġcom . google . android . ex op layer 2 . C Ċ import Ġcom . google . android . ex op layer 2 . extractor . Default Extract ors Factory Ċ import Ġcom . google . android . ex op layer 2 . source . Loop ing Media Source Ċ import Ġcom . google . android . ex op layer 2 . source . Media Source Ċ import Ġcom . google . android . ex op layer 2 . source . Progress ive 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 . 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 . upstream . Default Bandwidth Meter Ċ import Ġcom . google . android . ex op layer 2 . upstream . Default DataSource Factory Ċ import Ġcom . google . android . ex op layer 2 . upstream . Transfer Listener Ċ import Ġjava . io . File Ċ Ċ /** Ċ Ġ* Ġdescription : Ġ æŀĦå»º Exo Player çļĦ Media Source Ċ Ġ* Ċ Ġ* Ġ@ author ĠM ai w ench ang Ċ Ġ* Ġemail : Ġcv . strong er @ gmail . com Ċ Ġ* Ġdate : Ġ 2 0 2 0 - 0 5 - 0 8 Ġ 3 : 0 5 ĠPM . Ċ Ġ*/ Ċ class ĠEx o Source Builder ( private Ġval Ġcontext : ĠContext , Ġprivate Ġval ĠdataSource : ĠString ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç¼ĵåŃĺ åľ°åĿĢ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġcache Dir : ĠFile ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġheader ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġheaders : ĠMap < String , ĠString >? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæĺ¯åĲ¦ ç¼ĵåŃĺ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġcache Enable : ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæĺ¯åĲ¦ å¾ªçİ¯ æĴŃæĶ¾ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġis Loop ing : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æľĢå¤§ ç¼ĵåŃĺ å¤§å°ı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġmax Cache Size : ĠLong Ġ= ĠEx o Source Manager . EX O _ CACHE _ DEFAULT _ MAX _ SIZE ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġlistener Ġof Ġdata Ġtransfer Ġevents . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġtransfer Listener : ĠTransfer Listener ? Ġ= ĠDefault Bandwidth Meter . Builder ( context ). build () ĊĊĠĠĠ Ġfun Ġbuild (): ĠMedia Source Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontent Uri Ġ= ĠUri . parse ( dataSource ) ĊĠĠĠĠĠĠĠ Ġval ĠcontentType Ġ= ĠEx o Source Manager . infer ContentType ( dataSource ) ĊĠĠĠĠĠĠĠ Ġval Ġmedia Source : ĠMedia Source ĊĠĠĠĠĠĠĠ Ġval Ġcache Ġ= ĠEx o Source Manager . getCache Instance ( context , Ġcache Dir , Ġmax Cache Size ) ĊĠĠĠĠĠĠĠ Ġval ĠdataSource Factory Cache Ġ= Ġcache ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEx o Source Manager . getCache DataSource Factory ( context , Ġheaders , Ġtransfer Listener , Ġcache ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: ĠEx o Source Manager . getDefault DataSource Factory ( context , Ġheaders , Ġtransfer Listener ) ĊĠĠĠĠĠĠĠ Ġmedia Source Ġ= Ġwhen Ġ( contentType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC . TYPE _ SS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhttp DataSource Factory Ġ= ĠEx o Source Manager . get Http DataSource Factory ( context , Ġheaders , Ġtransfer Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdefault DataSource Factory Ġ= ĠDefault DataSource Factory ( context , Ġtransfer Listener , Ġhttp DataSource Factory ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS s Media Source . Factory ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Ss Chunk Source . Factory ( dataSource Factory Cache ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault DataSource Factory ). create Media Source ( content Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC . TYPE _ DASH Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhttp DataSource Factory Ġ= ĠEx o Source Manager . get Http DataSource Factory ( context , Ġheaders , Ġtransfer Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdefault DataSource Factory Ġ= ĠDefault DataSource Factory ( context , Ġtransfer Listener , Ġhttp DataSource Factory ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDash Media Source . Factory ( Default Dash Chunk Source . Factory ( dataSource Factory Cache ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault DataSource Factory ). create Media Source ( content Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC . TYPE _ H LS Ġ-> ĠH ls Media Source . Factory ( dataSource Factory Cache ). create Media Source ( content Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC . TYPE _ OTHER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProgress ive Media Source . Factory ( dataSource Factory Cache , ĠDefault Extract ors Factory ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Media Source ( content Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProgress ive Media Source . Factory ( dataSource Factory Cache , ĠDefault Extract ors Factory ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Media Source ( content Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Loop ing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoop ing Media Source ( media Source ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġmedia Source ĊĠĠĠ Ġ} ĊĊ Ċ }