由于專案中所使用的場景,除了直播和回放,還有一個就是簡單的課程資源播放器,然后取出整體的冗余,使用一個較為簡單播放器來進行播放操作,保利威直播的demo和開發檔案,在實際除錯程序中,讓人非常頭疼,在github(https://github.com/polyv)上進行查看整理后,才大致進行了抽取作業,
效果如下:


首先是布局代碼:
<RelativeLayout
android:id="@+id/question_answer_data_view_layout"
android:layout_width="match_parent"
android:layout_height="@dimen/top_center_player_height"
android:layout_marginTop="10dp"
android:background="@drawable/shape_bg_video_view"
android:visibility="gone">
<com.easefun.polyvsdk.video.PolyvVideoView
android:id="@+id/question_answer_data_video_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.easefun.polyvsdk.video.PolyvVideoView>
<com.easefun.polyvsdk.player.PolyvPlayerMediaController
android:id="@+id/question_answer_data_media_controller"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone" />
<com.easefun.polyvsdk.player.PolyvPlayerPreviewView
android:id="@+id/question_answer_data_first_start_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/shape_bg_video_view"
android:visibility="visible" />
</RelativeLayout>
代碼布局中比較簡單,主要包含一個PolyvVideoView組件,一個PolyvPlayerMediaController控制器組件,一個PolyvPlayerPreviewView默認圖組件,三個基礎的布局組合成一個基礎的播放表單,包含視頻縮略圖,視頻控制器,和視頻播放器,
對應的播放邏輯代碼如下:
/**
* 播放視頻
*/
fun play(
vid: String, //視瞥澩id
mediaController: PolyvPlayerMediaController, //控制器
videoView: PolyvVideoView,
viewLayout: RelativeLayout,
firstView: PolyvPlayerPreviewView //預覽圖
) {
val danmuFragment: PolyvPlayerDanmuFragment = PolyvPlayerDanmuFragment();
videoView.release();
firstView.hide()
videoView.setAutoPlay(true)
mediaController.setDanmuFragment(danmuFragment);
mediaController.initConfig(viewLayout)
mediaController.hindMenuView()
videoView.mediaController = mediaController
videoView.setVid(vid)
videoView.setOnPreparedListener(IPolyvOnPreparedListener2 {
mediaController.preparedView()
})
videoView.setOnVideoStatusListener { status ->
if (status < 60) {
// Toast.makeText(
// this,
// "狀態錯誤 $status",
// Toast.LENGTH_SHORT
// ).show()
} else {
Log.d(
"yxy",
String.format("狀態正常 %d", status)
)
}
}
//視頻不播放,先顯示一張縮略圖
firstView.setCallback(PolyvPlayerPreviewView.Callback { //在播放視頻時設定viewerId方法使用示例
videoView.setVid(vid)
})
firstView.show(vid)
videoView.setOnPlayPauseListener(object : IPolyvOnPlayPauseListener {
override fun onPause() {
mediaController.updatePictureInPictureActions(
R.drawable.polyv_btn_play_port,
"pause",
1,
1
)
}
override fun onPlay() {
mediaController.updatePictureInPictureActions(
R.drawable.polyv_btn_pause_port,
"start",
2,
2
)
}
override fun onCompletion() {
mediaController.updatePictureInPictureActions(
R.drawable.polyv_btn_play_port,
"pause",
1,
1
)
}
})
}
由于在控制器中進行了部分操作的封裝,所以此處屏蔽了一些非必要的操作, mediaController.hindMenuView()
至此一個基礎的保利威播放邏輯就算處理好了,僅參考了最基礎的播放和控制器的功能,其他的功能都沒用到,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/323472.html
標籤:其他
