作者簡介 原創微信公眾號郭霖 WeChat ID: guolin_blog
本篇是小河馬的第二篇投稿,分享了他學習開源播放器的過程。希望能對大家有所幫助。
小河馬的博客地址:
http://www.lxweimin.com/u/14354bcb0e09
介紹
現在有很多的開源播放器,首選肯定是B站的
ijkplayer
https://github.com/Bilibili/ijkplayer
本文所選的是基于?ijkplayer?封裝的開源播放器
JieCaoVideoPlayer
https://github.com/lipangit/JieCaoVideoPlayer
彈幕使用的也是B站的開源項目
https://github.com/Bilibili/DanmakuFlameMaster
JieCaoVideoPlayer默認提供了基本的UI界面,但是肯定滿足不了每個人的界面要求,所以我們就需要在?JieCaoVideoPlayer?上簡單的封裝一下。首先新建一個 HVideoPlayer類 繼承?JCVideoPlayerStandard:
JCVideoPlayerStandard?對一些基本的界面操作以及頁面邏輯做了封裝,我們只需要繼承這個類,然后自定義自己的布局。如果有你不需要的控件就隱藏,刪除可能會報錯。重寫?init方法 初始化一些你自定義的控件和按鈕的點擊事件。
JieCaoVideoPlayer?是通過 setUp方法 來初始化播放器參數,所以我們也需要來重寫這個方法來初始化我們自己的一些參數
需要注意一點的就是播放器器全屏,這里修改了?FULLSCREEN_ORIENTATION?參數為?ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE?使播放器點擊全屏后強制全屏并且是橫屏的,默認情況點擊全屏后是豎屏的,并且根據重力感應調整屏幕方向。需要注意的是使用播放器的Activity需要設置為豎屏
android:screenOrientation="portrait"
否則調用橫屏后整個?Activity?會整個橫屏。
需要注意播放器橫屏后會創建一個新的播放器實例和當前的播放器不是同一個實例,也就是說點擊全屏后會重新初始化當前類,并重新調用?setUp方法。那怎么拿到前面小屏模式下一些必須的參數呢?查看下JCVideoPlayer全屏的源碼:
可以看到在全屏的時候重新創建了?JCVideoPlayer?的實例,并且調用了?setUp方法 傳入了?url?以及全屏,后面這個?objects?是干嘛的呢?查看源碼:
可以看到這個?objects?是在父類的?setUp?中賦值的,說明我們在調?setUp?傳入的?objects?會相應的傳入全屏播放器實例中,這也就有了上面的代碼
默認的?objects?的第一個參數是標題,后面就可以傳遞自己的一些字段,比如我們在全屏實例中需要回調一些方法,就要將這些接口傳到全屏播放器示例中,否則在全屏中使用這些字段會報空指針。
在?setUp?中如果當前是全屏那么我們需要去加載彈幕,currentScreen?字段是當前的狀態,如果是全屏就顯示彈幕否則就隱藏彈幕相關的東西。關于彈幕庫的使用可以參考郭神的文章:
http://blog.csdn.net/guolin_blog/article/details/51933728
這里我就不再細講了。
在當直播流異常或者的或者網絡異常我們需要做一些操作,但?JCVideoPlayer?并沒有提供這方面的回調。又只有發揚我們的探索精神去探索源碼了。
在流異常或者網絡異常會打印?onError?日志,所以找到了這個方法,這下就簡單了重寫這個方法就行了
默認播放上下有一個工具欄,在3秒后會自動隱藏,可是我們不需要自動隱藏可以重寫這個方法
可以通過代碼的方式自動開始播放,如果在播放就暫停播放
jcVideoPlayer.startButton.performClick();
默認的 JieCaoVideoPlayer 還支持重力感應進入全屏,只需要在 Activity 中加入如下代碼:
JieCaoVideoPlayer?還支持浮層小窗播放,能在?ListView、ViewPager?和?Fragment?等多重嵌套模式下全屏工作,源碼的類大部分方法都是public需要什么重寫就行了。
使用
在Acitivity中生命周期中加入對播放器的管理:
還可以添加 UserAction 對播放器的各種狀態監聽
最后效果如下:
demo 中的直播流不太穩定大家可以替換成自己覺得穩定的直播流,或者換成一個視頻也可以。有什么問題歡迎交流!
本文項目地址:
https://github.com/Hemumu/HLiveDemo/tree/master
完。。。。。。。。。。。。。。。。。。。。。
文章原創作者GuoLin 書籍推薦
郭林大神原創android 書籍:《第一行代碼 android》