保利威视频播放器功能抽取,仅作为播放课程资源使用,去除多余功能。

2021-10-18  本文已影响0人  小样不一样

由于项目中所使用的场景,除了直播和回放,还有一个就是简单的课程资源播放器,然后取出整体的冗余,使用一个较为简单播放器来进行播放操作。保利威直播的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()

至此一个基础的保利威播放逻辑就算处理好了,仅引用了最基础的播放和控制器的功能,其他的功能都没用到。

出自CSDN(小样不一样)

上一篇下一篇

猜你喜欢

热点阅读