https://github.com/Hemumu/HLiveDemo/tree/master
http://www.10tiao.com/html/227/201702/2650238607/1.html
現(xiàn)在有很多的開源播放器,首選肯定是B站的
ijkplayer
https://github.com/Bilibili/ijkplayer
本文所選的是基于 ijkplayer 封裝的開源播放器
JieCaoVideoPlayer
https://github.com/lipangit/JieCaoVideoPlayer
彈幕使用的也是B站的開源項(xiàng)目
JieCaoVideoPlayer 默認(rèn)提供了基本的UI界面,但是肯定滿足不了每個(gè)人的界面要求,所以我們就需要在 JieCaoVideoPlayer 上簡(jiǎn)單的封裝一下。首先新建一個(gè) HVideoPlayer類 繼承 JCVideoPlayerStandard:
JCVideoPlayerStandard 對(duì)一些基本的界面操作以及頁(yè)面邏輯做了封裝,我們只需要繼承這個(gè)類,然后自定義自己的布局。如果有你不需要的控件就隱藏,刪除可能會(huì)報(bào)錯(cuò)。重寫 init方法 初始化一些你自定義的控件和按鈕的點(diǎn)擊事件。
JieCaoVideoPlayer 是通過(guò) setUp方法 來(lái)初始化播放器參數(shù),所以我們也需要來(lái)重寫這個(gè)方法來(lái)初始化我們自己的一些參數(shù)
需要注意一點(diǎn)的就是播放器器全屏,這里修改了 FULLSCREEN_ORIENTATION 參數(shù)為 ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE 使播放器點(diǎn)擊全屏后強(qiáng)制全屏并且是橫屏的,默認(rèn)情況點(diǎn)擊全屏后是豎屏的,并且根據(jù)重力感應(yīng)調(diào)整屏幕方向。需要注意的是使用播放器的Activity需要設(shè)置為豎屏
android:screenOrientation="portrait"
否則調(diào)用橫屏后整個(gè) Activity 會(huì)整個(gè)橫屏。
需要注意播放器橫屏后會(huì)創(chuàng)建一個(gè)新的播放器實(shí)例和當(dāng)前的播放器不是同一個(gè)實(shí)例,也就是說(shuō)點(diǎn)擊全屏后會(huì)重新初始化當(dāng)前類,并重新調(diào)用 setUp方法。那怎么拿到前面小屏模式下一些必須的參數(shù)呢?查看下 JCVideoPlayer 全屏的源碼
可以看到在全屏的時(shí)候重新創(chuàng)建了 JCVideoPlayer 的實(shí)例,并且調(diào)用了 setUp方法 傳入了 url 以及全屏,后面這個(gè) objects 是干嘛的呢?查看源碼:
默認(rèn)的 objects 的第一個(gè)參數(shù)是標(biāo)題,后面就可以傳遞自己的一些字段,比如我們?cè)谌翆?shí)例中需要回調(diào)一些方法,就要將這些接口傳到全屏播放器示例中,否則在全屏中使用這些字段會(huì)報(bào)空指針。
在 setUp 中如果當(dāng)前是全屏那么我們需要去加載彈幕,currentScreen 字段是當(dāng)前的狀態(tài),如果是全屏就顯示彈幕否則就隱藏彈幕相關(guān)的東西。關(guān)于彈幕庫(kù)的使用可以參考郭神的文章: