当前位置: 首页 > 工具软件 > Garlic Player > 使用案例 >

GSYVideoPlayer视频播放器

公良高刚
2023-12-01

Git地址

播放UI的显示、控制层、手势处理等类
GSYVideoControlView
里面可以查询一些功能ID,后面View类型只做参考作用,非限制死的类型
        //播放按键  View
        mStartButton = findViewById(R.id.start);
        //title  TextView
        mTitleTextView = findViewById(R.id.title);
        //返回按键  ImageView
        mBackButton = findViewById(R.id.back);
        //全屏按键  ImageView
        mFullscreenButton = findViewById(R.id.fullscreen);
        //进度条  SeekBar
        mProgressBar = findViewById(R.id.progress);
        //当前进度时间显示  TextView
        mCurrentTimeTextView =findViewById(R.id.current);
        //总时长显示  TextView
        mTotalTimeTextView = findViewById(R.id.total);
        //底部区域显示  ViewGroup
        mBottomContainer = findViewById(R.id.layout_bottom);
        //顶部区域显示  ViewGroup
        mTopContainer =  findViewById(R.id.layout_top);
        //底部进度条   ProgressBar
        mBottomProgressBar =findViewById(R.id.bottom_progressbar);
        //封面父布局  RelativeLayout
        mThumbImageViewLayout = findViewById(R.id.thumb);
        //锁定图标   ImageView
        mLockScreen = findViewById(R.id.lock_screen);
        //加载中   View
        mLoadingProgressBar = findViewById(R.id.loading);
        //小窗口关闭按键 View
        mSmallClose = findViewById(R.id.small_close);

设置内置控件ID的样式:
//设置播放显示状态
setStateAndUi(CURRENT_STATE_PAUSE);


//全屏拉伸显示,使用这个属性时,surface_container建议使用FrameLayout
  <FrameLayout
        android:id="@+id/surface_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center" />

继承GSYVideoControlView后
可以用getGSYVideoManager().xxx 调用播放器功能,具体功能可以到GSYVideoViewBridge这个类中查看

回调方法参考类VideoAllCallBack:
    //开始加载,objects[0]是title,object[1]是当前所处播放器(全屏或非全屏)
    void onStartPrepared(String url, Object... objects);

    //加载成功,objects[0]是title,object[1]是当前所处播放器(全屏或非全屏)
    void onPrepared(String url, Object... objects);

    //点击了开始按键播放,objects[0]是title,object[1]是当前所处播放器(全屏或非全屏)
    void onClickStartIcon(String url, Object... objects);

    //点击了错误状态下的开始按键,objects[0]是title,object[1]是当前所处播放器(全屏或非全屏)
    void onClickStartError(String url, Object... objects);

    //点击了播放状态下的开始按键--->停止,objects[0]是title,object[1]是当前所处播放器(全屏或非全屏)
    void onClickStop(String url, Object... objects);

    //点击了全屏播放状态下的开始按键--->停止,objects[0]是title,object[1]是当前所处播放器(全屏或非全屏)
    void onClickStopFullscreen(String url, Object... objects);

    //点击了暂停状态下的开始按键--->播放,objects[0]是title,object[1]是当前所处播放器(全屏或非全屏)
    void onClickResume(String url, Object... objects);

    //点击了全屏暂停状态下的开始按键--->播放,objects[0]是title,object[1]是当前所处播放器(全屏或非全屏)
    void onClickResumeFullscreen(String url, Object... objects);

    //点击了空白弹出seekbar,objects[0]是title,object[1]是当前所处播放器(全屏或非全屏)
    void onClickSeekbar(String url, Object... objects);

    //点击了全屏的seekbar,objects[0]是title,object[1]是当前所处播放器(全屏或非全屏)
    void onClickSeekbarFullscreen(String url, Object... objects);

    //播放完了,objects[0]是title,object[1]是当前所处播放器(全屏或非全屏)
    void onAutoComplete(String url, Object... objects);

    //进去全屏,objects[0]是title,object[1]是当前所处播放器(全屏或非全屏)
    void onEnterFullscreen(String url, Object... objects);

    //退出全屏,objects[0]是title,object[1]是当前所处播放器(全屏或非全屏)
    void onQuitFullscreen(String url, Object... objects);

    //进入小窗口,objects[0]是title,object[1]是当前所处播放器(全屏或非全屏)
    void onQuitSmallWidget(String url, Object... objects);

    //退出小窗口,objects[0]是title,object[1]是当前所处播放器(全屏或非全屏)
    void onEnterSmallWidget(String url, Object... objects);

    //触摸调整声音,objects[0]是title,object[1]是当前所处播放器(全屏或非全屏)
    void onTouchScreenSeekVolume(String url, Object... objects);

    //触摸调整进度,objects[0]是title,object[1]是当前所处播放器(全屏或非全屏)
    void onTouchScreenSeekPosition(String url, Object... objects);

    //触摸调整亮度,objects[0]是title,object[1]是当前所处播放器(全屏或非全屏)
    void onTouchScreenSeekLight(String url, Object... objects);

    //播放错误,objects[0]是title,object[1]是当前所处播放器(全屏或非全屏)
    void onPlayError(String url, Object... objects);

    //点击了空白区域开始播放,objects[0]是title,object[1]是当前所处播放器(全屏或非全屏)
    void onClickStartThumb(String url, Object... objects);

    //点击了播放中的空白区域,objects[0]是title,object[1]是当前所处播放器(全屏或非全屏)
    void onClickBlank(String url, Object... objects);

    //点击了全屏播放中的空白区域,objects[0]是title,object[1]是当前所处播放器(全屏或非全屏)
    void onClickBlankFullscreen(String url, Object... objects);

在调用initVideoBuilderMode()初始化时,会自动注册一个回调为当前类,所以如果你不想在当前播放类里处理回调,而是继承了StandardGSYVideoPlayer类来处理的话,则需要在initVideoBuilderMode()之后再调用 detailPlayer.setVideoAllCallBack(new GSYSampleCallBack());GSYSampleCallBack这个类为你可以重写一些你需要的回调,而不需要所有回调都实现,VideoAllCallBack这个类则会实现所有回调
如果用自己的回调,需要在onQuitFullscreen里面处理退出全屏回调,否则退出全屏会有问题
    @Override
    public void onQuitFullscreen(String url, Object... objects) {
        if (orientationUtils != null) {
            orientationUtils.backToProtVideo();
        }
    }
    //源代码里会默认实现,自己可根据情况选择性需要实现
    @Override
    public void onPrepared(String url, Object... objects) {

        if (orientationUtils == null) {
            throw new NullPointerException("initVideo() or initVideoBuilderMode() first");
        }
        //开始播放了才能旋转和全屏
        orientationUtils.setEnable(getDetailOrientationRotateAuto() && !isAutoFullWithSize());
        isPlay = true;
    }

GSYVideoView类:
包含了播放器的各种状态记录

设置进度回调:
     setGSYVideoProgressListener(new GSYVideoProgressListener() {
            @Override
            public void onProgress(int progress, int secProgress, int currentPosition, int duration) {
                Log.i("onProgress", "progress:" + progress + "\tsecProgress:" + secProgress + "\tcurrentPosition:" + currentPosition);
            }
        });
该方法所在类:GSYVideoControlView

 

 类似资料: