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

Posted 小样不一样

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了保利威视频播放器功能抽取,仅作为播放课程资源使用,去除多余功能相关的知识,希望对你有一定的参考价值。

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

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

以上是关于保利威视频播放器功能抽取,仅作为播放课程资源使用,去除多余功能的主要内容,如果未能解决你的问题,请参考以下文章

保利威(polyv)加密视频的使用详解---python(基于drf/vue)

云视频服务的播放器域名限制(视频防盗链)使用方法

王道论坛_PC端播放和下载视频

我的 iPhone 视频仅在纵向模式下播放

HTML 视频问题

142期外卖必备工具《促销保利测试工具表》