? ? 因為最近要做直播功能镀岛,故而花費了一些時間看了一下鼎鼎大名的B站開源視頻框架--------ijkplayer凉倚。這個框架已經(jīng)十分成熟,網(wǎng)上也能找到很多實例洞渔,查了兩天的資料套媚,對官方開源的demo也做了一些提取,主要是刪除一些并不常用的類磁椒,所以在這做一個小小的記錄堤瘤。
? ? 首先,先安利一下一個非常棒的開源代碼
? ? ?dueeeke/dkplayer
? ?這個demo幾乎包含了現(xiàn)在視頻軟件的所有功能浆熔,且注釋詳細本辐,基本可以對照著對自己所提取的代碼進行適當修改,實現(xiàn)部分功能医增。編譯的時候會出現(xiàn)一些資源缺失慎皱,自己替換一些即可。
? ? ? 進入正題叶骨,記錄提取的心酸歷程茫多。當下載完demo后,會發(fā)現(xiàn)有很多的類忽刽,截圖如下:
? 其中最為主要的類IjkVideoView天揖,就是播放器的主要實現(xiàn).打開這個類之后,會發(fā)現(xiàn)他繼承了MediaPlayerControl接口
? 這個接口是安卓sdk中MediaController里面的接口跪帝。從文字的意思不難得知今膊,其實這個MediaController就是為了實現(xiàn)對視頻的控制,比如快進伞剑,后退斑唬,里面的很多資源文件及布局都證明了這一點,實際是一個控制條纸泄。而在官方的demo中的VideoActivity中(該類是播放視頻的activity)也可以看見控制條的存在赖钞,截圖如下
所以,官方demo的AndroidMediaController就是用來控制視頻進度的聘裁,點進去返現(xiàn)他是繼承自sdk的MediaController雪营,另外一個接口是demo定義的,可適當進行修改及增加衡便。
其實當運行其demo后献起,會發(fā)現(xiàn)底下的控制條根本無法滿足實際要求洋访,但是由于是底層的代碼,所以又難以改動谴餐,所以提取的第一步驟姻政,就是修改AndroidMediaController,所以岂嗓,需要將SDK中mediController以及與他相關(guān)的布局文件的源碼提取汁展,再將官方的AndroidMediaControll糅合進去。這里需要注意的是厌殉,在提取style時候食绿,記得在item命名的前面加上android:,截圖如下
? ? 同時公罕,需要將報錯的相關(guān)定義一并從sdk中的源碼復制到工程中器紧。這些工作完成后,就可以隨意定義控制條并且隨意改變其中的資源文件了楼眷。而后繼續(xù)進行提取铲汪,最后提取的目錄應(yīng)該如下(即只有這些文件是必須)
? 其中video下面的是自己定義的主界面,布局文件如下:
Java文件如下罐柳,需要注意的是圖中紅框的代碼掌腰,這是初始化的代碼,必須要硝清,同事setOnPrepareListener監(jiān)聽也必須要
最后一點辅斟,有可能你復制過來的源碼,沒有PhoneWindow這個文件芦拿,即標紅報錯找不到士飒,在AndroidController的這個方法類初始化即可(利用反射),截圖如下:
同時蔗崎,widget里面刪除的文件用途備注如下:
TableLayoutBinder和InfoHudViewHolder:官方demo的視頻信息框
FileMediaDataSource:用于選擇本地視頻?
刪除這些文件的時候酵幕,將對應(yīng)的引用全部刪除即可。
最后送上初步成果的鏈接缓苛,后期會慢慢繼續(xù)研究芳撒,并繼續(xù)完善