保利威视频播放器功能抽取,仅作为播放课程资源使用,去除多余功能。
由于项目中所使用的场景,除了直播和回放,还有一个就是简单的课程资源播放器,然后取出整体的冗余,使用一个较为简单播放器来进行播放操作。保利威直播的demo和开发文档,在实际调试过程中,让人非常头疼,在github(https://github.com/polyv)上进行查看整理后,才大致进行了抽取工作。
效果如下:
首先是布局代码:
代码布局中比较简单,主要包含一个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()
至此一个基础的保利威播放逻辑就算处理好了,仅引用了最基础的播放和控制器的功能,其他的功能都没用到。