參考文檔:
github官網(wǎng)
github官網(wǎng)開發(fā)文檔
入門
媒體類型
高級(jí)主題
源碼分析:
exoplayer-core:核心功能(必需)召调。
exoplayer-dash:支持DASH內(nèi)容婉称。
exoplayer-hls:支持HLS內(nèi)容艰毒。
exoplayer-smoothstreaming:支持SmoothStreaming內(nèi)容回官。
exoplayer-ui:用于ExoPlayer的UI組件和資源进泼。
exoplayer的庫(kù)總共分上面5種包帚,我們先看exoplayer-ui绞呈,exoplayer-core
這兩個(gè)好理解一點(diǎn)俐东,很多人應(yīng)該和我一樣,不是很理解另外三個(gè)是干嘛的痘系;
三個(gè)比較關(guān)鍵的類:
三者之間的關(guān)系如上
從PlayerView出發(fā)來(lái)看菲嘴,下面舒PlayerView的代碼
PlayerView:用于關(guān)聯(lián)PlayerControlView,SurfaceView/TextureVIew, Player
PlayerControlView:exoplayer默認(rèn)的控制器汰翠,包含播放龄坪,暫停,進(jìn)度條展示
Player:播放器复唤,實(shí)際去解碼并播放視頻資源的
surfaceView:顯示器健田,可以是SurfaceView也可以是TextureView
surfaceView分析:
從上圖可以看出,默認(rèn)是創(chuàng)建一個(gè)SurfaceView佛纫,
surfaceType通過(guò)xml指定,如下:
最后在和player進(jìn)行綁定
PlayerView分析
從構(gòu)造方法可以看出妓局,默認(rèn)加載layout.exo_player_view這個(gè)布局,如果
在xml中指定了其他layout呈宇,則會(huì)加載指定的布局
exo默認(rèn)的布局exo_player_view中是沒有exo_control這個(gè)id的好爬,所以一般是需要new PlayerControlView布局的;
PlayerControlView分析:
PlayerControlView默認(rèn)使用exo_player_control_view布局甥啄;
從布局的id也大概能猜到她的作用是控制視頻翻頁(yè)存炮,循環(huán),隨機(jī)蜈漓,播放穆桂,暫停,再看代碼:
通過(guò)代碼可以看出融虽,每一個(gè)id都做了判空處理充尉,所以我們想自定義一個(gè)控制界面,只需要保持功能按鈕的id和exo_player_control_view一致衣形,ui切換即可驼侠,非常方便姿鸿;
player分析
SimpleExoPlayer繼承BasePlayer類實(shí)現(xiàn)Player接口,也是我們的主角;
播放器一般需要做的事情是對(duì)視頻資源進(jìn)行加載倒源,編解碼苛预,播放;
Player提供了對(duì)MediaItem的操作接口
ExoPlayer提供了對(duì)MediaSource的操作接口
SimpleExoPlayer即實(shí)現(xiàn)了對(duì)MediaItem也實(shí)現(xiàn)了對(duì)MediaSource的操作
MediaItem: 播放的單元笋熬,一般是一個(gè)文件或url
MediaSource: 代表可以被ExoPlayer播放的媒體热某,一般關(guān)聯(lián)TimeLine用于定義媒體的結(jié)構(gòu)
此處的解釋中,MediaSource多了一個(gè)媒體結(jié)構(gòu)胳螟,這個(gè)功能非常重要昔馋;