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

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

作者: 小样不一样 | 来源:发表于2021-10-18 11:12 被阅读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(小样不一样)

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/txnvmttx.html