美文网首页
Android开发StandardGSYVideoPlayer做

Android开发StandardGSYVideoPlayer做

作者: 你的益达233 | 来源:发表于2020-12-29 09:43 被阅读0次

    二、实现的功能

    1.左右切换

    用viewpager和fragment做,播放器放在fragment里面

    2.控制面板在Activity层,播放时间和播放状态用EventBus传输数据

    示例代码:

    .setGSYVideoProgressListener { progress, secProgress, currentPosition, duration ->
                    isPlay = true
                    isPlayComplete = false
                    currentPlayPosition = currentPosition
                    durationTotal = duration
                    this.progress = progress
                    //缓存进度条
                    this.secProgress = detailPlayer.gsyVideoManager.bufferedPercentage
                    LogUtil.i("isBuy2",isBuyTwo+"\t"+currentPosition.toString()+"\t"+secProgress.toString()+"\t"+detailPlayer.gsyVideoManager.bufferedPercentage)
                    if (isBuyTwo == "0") {
                        val lookTime = (courseShuBean?.looktime)!!.toLong()//视频可免费观看的时长
                        if (currentPosition/1000 > lookTime) {//超出试看时间
                            detailPlayer.onVideoPause()
                            isPlay = false
                            EventBus.getDefault().post(VideoPlayControlEvent(isPlaying = false))
                            if (trySeeDialog == null ){
                                trySeeDialog = DialogHelper.trySeeOverDialog(context!!)
                            } else if (!trySeeDialog!!.isShowing){
                                trySeeDialog!!.show()
                            }
    
                        }
                    }
    
                    EventBus.getDefault().post(VideoPlayInfoEvent(currentPosition, duration, this.progress, this.secProgress))
                }
    

    着重看EventBus的做的功能即可,其他有试看需求也可以参考下

    3.开始播放或者页面切回来重新播放

    要用detailPlayer?.startPlayLogic()
    示例代码:

    override fun setUserVisibleHint(isVisibleToUser: Boolean) {
        super.setUserVisibleHint(isVisibleToUser)
    
        if (isVisibleToUser) {
             
                if (isPlayComplete){
                    detailPlayer?.seekOnStart = 0
                    detailPlayer?.startPlayLogic()
                } else {
                    detailPlayer?.seekOnStart = currentPlayPosition.toLong()
                    detailPlayer?.startPlayLogic()
                }
            
    
    
        }
    }
    

    4.点击暂停,播放操作

    @Subscribe(threadMode = ThreadMode.MAIN)
    fun onVideoPlayToFragmentEvent(event: VideoPlayToFragmentEvent) {
        isPlay = event.isPlaying
        if (event.isPlaying) {
            //恢复播放
            //因为拖动进度条重新播放还是未拖动之前的,所以采用屏幕双击没问题的做法
            detailPlayer.touchDoubleUp()
            //detailPlayer.onVideoResume(true)
        } else {
            //停止播放
            detailPlayer.onVideoPause()
            detailPlayer.startDismissControlViewTimer()
        }
    }
    

    三、关键点

    1、用EventBus来传输数据

    2、如果找不到解决方案,看下它的demo,如它的SeekBar的id为progress,
    ProgressBar的id为bottom_progressbar去它的父类StandardGSYVideoPlayer再父类,一层层找,找到它原来是怎么引用,怎么赋值的,或许就能做出你要的功能了

    3、用EventBus传值到fragment时,记得带上视频id,避免发通知给了之前的fragment,这样会影响到Activity的,反正数据很可能会乱,不行你播放完一个小节,在下小节拖动进度条

    这里给出完整代码也很难,如果有同样需求和问题的,可私信,评论。我基本每天都看简书的

    相关文章

      网友评论

          本文标题:Android开发StandardGSYVideoPlayer做

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