package Ġcom . abs int he . k age . media . video Ċ Ċ import Ġandroid . media . session . Playback State Ċ import Ġandroid . net . Uri Ċ import Ġcom . abs int he . k age . connect . proxy . Base Proxy Ċ import Ġcom . abs int he . k age . connect . proxy . MODE _ VIDEO Ċ import Ġcom . abs int he . k age . manager . Activity Stack Manager Ċ import Ġcom . abs int he . k age . media . Local Media Ċ import Ġcom . abs int he . k age . media . Playback Ċ import Ġcom . blank j . util code . util . Utils Ċ import Ġcom . google . android . ex op layer 2 . Exo Player Ċ import Ġcom . google . android . ex op layer 2 . Player Ċ import Ġcom . google . android . ex op layer 2 . Simple Exo Player Ċ import Ġcom . google . android . ex op layer 2 . source . Progress ive Media Source Ċ import Ġcom . google . android . ex op layer 2 . upstream . Default DataSource Factory Ċ import Ġcom . google . android . ex op layer 2 . util . Util Ċ import Ġtim ber . log . Tim ber Ċ Ċ class ĠLocal Video Playback ( private Ġval Ġex o Player : ĠSimple Exo Player ) Ġ: ĠPlay back Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġm Callback : ĠPlay back . Callback ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġshould Play Ġ= Ġtrue ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġex o Player . addListener ( object Ġ: ĠPlayer . EventListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Player StateChanged ( play When Ready : ĠBoolean , Ġplayback State : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( playback State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx o Player . STATE _ READY Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" STATE _ READY ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Play ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould Play Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx o Player . STATE _ ENDED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" Complete ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠPlay back State . STATE _ PA USED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Callback ?. on Completion () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould Play Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlayer . STATE _ BUFFER ING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Buffer ing ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlayer . STATE _ IDLE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Idle ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ ĠINSTANCE Ġ= Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġstate Ġ= ĠPlay back State . STATE _ NONE ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġoverride Ġval Ġduration : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġex o Player . duration . toInt () ĊĊĠĠĠ Ġoverride Ġval Ġbuffer Position : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġex o Player . buffered Position . toInt () ĊĊĠĠĠ Ġoverride Ġval Ġcurrent Position : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġex o Player . current Position . toInt () ĊĊĠĠĠ Ġoverride Ġfun Ġplay Media ( local Media : ĠLocal Media ) Ġ{ ĊĠĠĠĠĠĠĠ ĠBase Proxy . CURRENT _ MODE Ġ= ĠMODE _ VIDEO ĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠPlay back State . STATE _ BUFFER ING ĊĊĠĠĠĠĠĠĠ Ġset Video ( Uri . parse ( local Media . filePath )) ĊĊĠĠĠĠĠĠĠ Ġm Callback ?. on Media Metadata Changed ( local Media ) ĊĠĠĠĠĠĠĠ Ġm Callback ?. on Playback StateChanged ( state ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġplay () Ġ{ ĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠPlay back State . STATE _ PLAY ING ĊĠĠĠĠĠĠĠ Ġhandle Play State () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpause () Ġ{ ĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠPlay back State . STATE _ PA USED ĊĠĠĠĠĠĠĠ Ġhandle Play State () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġseek To ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġex o Player . seek To ( position . to Long ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Callback ( callback : ĠPlay back . Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Callback Ġ= Ġcallback ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstop ( is Stop : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Stop ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Callback ?. on Playback StateChanged ( state ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Play State () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ== ĠPlay back State . STATE _ PLAY ING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġex o Player . play When Ready Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( state Ġ== ĠPlay back State . STATE _ PA USED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġex o Player . play When Ready Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Callback ?. on Playback StateChanged ( state ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Video ( player Uri Ġ: ĠUri ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠçĶŁæĪĲ åĬłè½½ åªĴ ä½ĵ æķ°æį®çļĦ DataSource å®ŀä¾ĭ ãĢĤ ĊĠĠĠĠĠĠĠ Ġval ĠdataSource Factory Ġ= ĠDefault DataSource Factory ( Activity Stack Manager . top Activity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUtil . getUser Agent ( Utils . getApp (). application Context , Ġ" K age ")) ĊĊĠĠĠĠĠĠĠ Ġ// ĠMedia Source ä»£è¡¨ è¦ģ æĴŃæĶ¾ çļĦ åªĴ ä½ĵ ãĢĤ ĊĠĠĠĠĠĠĠ Ġval Ġvideo Source Ġ= ĠProgress ive Media Source . Factory ( dataSource Factory ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Media Source ( player Uri ) ĊĊĠĠĠĠĠĠĠ Ġ// Prepare Ġthe Ġplayer Ġwith Ġthe Ġsource . ĊĠĠĠĠĠĠĠ Ġex o Player . prepare ( video Source ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠINSTANCE Ġ: ĠLocal Video Playback ? Ġ= Ġnull ĊĠĠĠ Ġ} Ċ }