Skip to content

4 回放_播放器

杨诗昊 edited this page May 18, 2020 · 3 revisions

1 使用简介

保利威云课堂sdk支持回放功能,回放指的是播放从直播转存到回放列表中的视频。

播放回放视频需要的参数有:appId,appSecret,userId,channelId,vid。其中vid需要是直播转存到回放列表中的视频id。

回放功能现支持兼容播放点播列表的视频,需要满足以下条件:

  1. 非加密视频
  2. 非三分屏场景视频
  3. 开启点播列表开关

2 进入回放观看页

2.1 参数校验

建议进入观看页前,可以先检验一下传入的参数是否正确。参数校验使用以下方法:

PolyvLoginManager.checkLoginToken(String userId,String appSecret, String appId, String channelId, String vid, PolyvrResponseCallback callback);

该方法的用例在PolyvCloudClassLoginActivity类的checkToken方法中可以找到。

2.2 获取回放视频的类型

创建回放播放器需要传入视频的类型(三分屏/普通),如果您不知道vid的回放类型是什么,可以通过以下的方法获取:

PolyvLoginManager.getPlayBackType(String vid, PolyvrResponseCallback<PolyvPlayBackVO> polyvResponseCallback)

该方法的用例在PolyvCloudClassLoginActivity类的requestPlayBackStatus方法中可以找到。

2.3 进入回放观看页

云课堂demo已经封装好整个播放器的界面及相关业务的交互,由于业务涉及到的功能比较多,建议您直接使用,并在上面进行二次开发。

使用以下方法可以进入回放观看页。自0.12.0开始兼容了点播列表(直播后台视频库中的点播列表,并非是点播SDK下的视频),新增了videoListType字段。「videoListType : 0 回放列表 | videoListType : 1 点播列表 」

//先设置账号信息
PolyvLiveSDKClient.getInstance().setAppIdSecret(appId, appSecert);
PolyvVodSDKClient.getInstance().initConfig(appId, appSecert);
//进入回放观看页
PolyvCloudClassHomeActivity.startActivityForPlayBack(this, playbackVideoId, playbackChannelId, playbackUserId, isNormalLivePlayBack, videoListType);

该方法的用例在PolyvCloudClassLoginActivity类的startActivityForPlayback方法中可以找到。

3 回放核心类介绍

一个完整的回放业务,涉及到多个模块间的功能交互,对于功能差异的模块,可以抽离出不同的类来封装。

(1) PolyvPlaybackVideoView:该类是云课堂sdk中的回放播放器,提供播放视频的功能和播放控制方法。如playByMode,start,pause,stopPlay,release,destroy等方法。

(2) PolyvPlaybackMediaController:该类位于demo的app/src/main/java/com/easefun/polyv/cloudclassdemo/watch/player/playback/PolyvPlaybackMediaController,实现IPolyvMediaController接口,作用是控制控制栏的交互逻辑,例如显示、隐藏、播放、暂停、全屏切换、主副屏切换、倍速切换等。PolyvPlaybackVideoView提供setMediaController(IPolyvMediaController mediaController)方法,该方法可以把控制器和播放器关联起来。

(3) PolyvPPTView:该类位于demo的commonui/src/main/java/com/easefun/polyv/commonui/player/ppt/PolyvPPTView,实现IPolyvPPTView接口,作用是控制PPT的交互逻辑(PPT用于三分屏的回放场景),例如准备、播放、暂停、快进、销毁等。PolyvPlaybackVideoView提供bindPPTView(IPolyvPPTView polyvPPTView)方法,该方法可以把PPT和播放器关联起来。

(4) PolyvPlaybackItem:该类位于demo的app/src/main/java/com/easefun/polyv/cloudclassdemo/watch/player/playback/PolyvPlaybackVideoItem,该类负责整个播放界面(主屏)的交互,把播放器、控制栏、跑马灯、手势调节等业务关联在一起,播放器的初始化和配置也是在该类完成。

(5) PolyvPPTItem:该类位于demo的commonui/src/main/java/com/easefun/polyv/commonui/player/ppt/PolyvPPTItem,该类封装了整个副屏的布局,控制副屏的显示和隐藏。副屏初始是显示PPT的,当主副屏发生切换时,会把副屏里的PPT和主屏里的PolyvPlaybakVideoView里的playerView切换,详细切换逻辑可以看PolyvPlaybackVideoHelper父类中的changeView方法。

(6) PolyvPlaybackVideoHelper:该类位于demo的app/src/main/java/com/easefun/polyv/cloudclassdemo/watch/player/playback/PolyvPlaybackVideoHelper,继承于PolyvCommonVideoHelper,构造方法为public PolyvPlaybackVideoHelper(PolyvPlaybackVideoItem videoItem, PolyvPPTItem polyvPPTItem) 。由构造方法可以得知该类主要是负责主屏和副屏的业务交互,并且也提供封装了播放器的一些方法,例如暂停、播放、销毁等,供其他模块直接调用。

4 回放播放器方法的使用

4.1 播放视频

//params:回放必须的一些参数(vid,channeld,viewerId...),以及播放器的配置(viewerNmae,accurate_seek...)
 // TODO: 2018/9/12 videoId 为直播平台的 videopoolid为点播平台的视频id
 PolyvPlaybackVideoParams playbackVideoParams = new PolyvPlaybackVideoParams(videoId,
 channelId,userId, viewerId);
 playbackVideoParams.buildOptions(PolyvBaseVideoParams.WAIT_AD, true)
     .buildOptions(PolyvBaseVideoParams.MARQUEE, true)
     .buildOptions(PolyvBaseVideoParams.IS_PPT_PLAY, true)
     // TODO: 2019/3/25 请在此处填入用户的昵称
     .buildOptions(PolyvBaseVideoParams.PARAMS2, viewerName)
     .buildOptions(PolyvPlaybackVideoParams.ENABLE_ACCURATE_SEEK, true)
     .buildOptions(PolyvPlaybackVideoParams.VIDEO_LISTTYPE, videoListType);

//mode:回放的mode为PolyvPlayOption.PLAYMODE_VOD
//参数的配置在PolyvCloudClassHomeActivityd的playPlaybackVideo方法里可以找到
videoView.playByMode(@NonNull PolyvBaseVideoParams params, int mode)

调用该方法后,在视频准备完成后会自动开始播放。注意,当播放回放-回放列表视频时,参数userId传的是直播开发者账号的userid,而播放回放-点播列表视频时,传的是点播开发者账号的userId。

该方法的用例在PolyvCommonVideoHelper类的startPlay方法中可以找到。

4.2 播放控制

播放控制包括:开始、暂停、停止等,相关方法如下:

videoView.start();
videoView.pause();
videoView.stopPlay();

上述方法的用例在PolyvPlaybackMediaController类的playOrPause方法中可以找到。

4.3 快进/退

videoView.seekTo(int ms);//单位:毫秒

该方法的用例在PolyvPlaybackMediaController类的onStopTrackingTouch方法中可以找到。场景是拖动播放进度条松开后,改变视频的播放进度。

4.4 倍速播放

videoView.setSpeed(float speed);//播放速度,最好不要超过2

该方法的用例在PolyvPlaybackMediaController类的onClick(View v)方法中可以找到。场景是点击倍速切换按钮,改变视频的播放倍速。

4.5 获取视频时长/播放进度

videoView.getCurrentPosition();//获取当前的播放进度,单位:毫秒
videoView.getDuration();//获取视频的时长,单位:毫秒

该方法的用例在PolyvPlaybackMediaController类的showProgress方法中可以找到。场景是用于在控制栏中显示当前的播放进度和视频的总进度。

4.6 获取播放器的状态

videoView.isPreparingState();//准备中
videoView.isInPlaybackState();//准备完成
videoView.isInPlaybackStateEx();//准备完成||内部的子播放器准备完成
videoView.isCompletedState();//播放完成
videoView.isPlaying();//播放中
videoView.isPauseState();//暂停中
videoView.isBufferState();//缓冲中

部分方法的用例在PolyvPlaybackMediaController类中可以找到。

4.7 设置画面填充模式

PolyvPlaybackVideoView 提供了各种画面预览模式,包括:适应屏幕、全屏填充、全屏拉伸、16:9、4:3等,设置方法如下:

videoView.setAspectRatio(PolyvPlayerScreenRatio.AR_ASPECT_FIT_PARENT);//适应屏幕,默认的模式
videoView.setAspectRatio(PolyvPlayerScreenRatio.AR_MATCH_PARENT);//全屏填充,可能会与视频比例不一致
videoView.setAspectRatio(PolyvPlayerScreenRatio.AR_ASPECT_FILL_PARENT);//全屏拉伸,可能会裁剪画面
videoView.setAspectRatio(PolyvPlayerScreenRatio.AR_16_9_FIT_PARENT);//16:9
videoView.setAspectRatio(PolyvPlayerScreenRatio.AR_4_3_FIT_PARENT);//4:3

4.8 设置播放状态监听器

PolyvPlaybackVideoView 提供了丰富的播放状态信息回调,您可以通过 setXXXListener 接口实现各种信息状态的获取,示例如下:

videoView.setOnPreparedListener(listener);//准备中、准备完成(视频开始播放前回调)
videoView.setOnVideoPlayListener(listener);//对应播放器start()方法的回调
videoView.setOnVideoPauseListener(listener);//对应播放器pause()方法的回调
videoView.setOnInfoListener(listener);//缓冲开始、缓冲结束
videoView.setOnCompletionListener(listener);//播放完成
videoView.setOnErrorListener(listener);//播放失败
...

上述方法的用例在PolyvPlaybackVideoItem类的initVideoView方法中可以找到。

4.9 设置缓冲时/播放失败时显示的视图

//设置缓冲中显示的loading视图
videoView.setPlayerBufferingIndicator(loadingview);
//设置播放加载开始/失败时显示的视图
videoView.setNoStreamIndicator(noStreamView);

上述方法的用例在PolyvPlaybackVideoItem类中可以找到。

4.10 设置跑马灯

//跑马灯和播放器关联
videoView.setMarqueeView(marqueeView, marqueeItem);
//设置跑马灯数据的监听器,跑马灯数据由播放器获取回调给应用层,在应用层处理跑马灯的属性交互
videoView.setOnGetMarqueeVoListener(listener);

上述方法的用例在PolyvPlaybackVideoItem类的initVideoView方法中可以找到。

4.11 设置PPT

回放有三分屏类型和普通类型,而三分屏的回放类型需要将PPT和播放器关联起来。

//PPT和播放器关联
videoView.bindPPTView(PPTView);
//设置PPT应该显示/隐藏的监听器,是否应该显示PPT由播放器内部请求到的数据决定
videoView.setOnPPTShowListener(listener);

上述方法的用例在PolyvPlaybackVideoItem类中可以找到。

4.12 设置控制器

控制器和播放器关联,当播放器内部的状态发生变化时,可以调用控制器对应的方法,通知控制器应该执行那些操作,例如显示、隐藏等。

//控制器和播放器关联
videoView.setMediaController(IPolyvMediaController);

该方法的用例在PolyvPlaybackVideoItem类的initView方法中可以找到。

4.13 播放器手势

//开启手势功能
videoView.setNeedGestureDetector(true);
//开启手势功能后,可以添加监听器来监听是什么手势类型
//双击 -> 暂停/播放
videoView.setOnGestureDoubleClickListener(listener);
//左下滑 -> 减少亮度
videoView.setOnGestureLeftDownListener(listener);
//左上滑 -> 增加亮度
videoView.setOnGestureLeftUpListener(listener);
//右下滑 -> 减少音量
videoView.setOnGestureRightDownListener(listener);
//右上滑 -> 增加音量
videoView.setOnGestureRightUpListener(listener);
//左滑 -> 快退
videoView.setOnGestureSwipeLeftListener(listener);
//右滑 -> 快进
videoView.setOnGestureSwipeRightListener(listener);

手势对应的处理逻辑在监听器的回调方法中可以找到。

上述方法的用例在PolyvPlaybackVideoItem类的initVideoView方法中可以找到。

4.14 调节亮度/音量

//调节亮度
videoView.setBrightness(context, brightness);
//调节音量
videoView.setVolume(volume);

上述方法的用例在PolyvPlaybackVideoItem类的initVideoView方法中可以找到。

4.15 视频截图

可以通过 screenshot 方法进行视频截图,当截图成功时,会返回一个不为null的 Bitmap 对象。

videoView.screenshot();

4.16 销毁

当不在需要使用该播放器时,需要调用其销毁方法,注意播放器销毁后不可以再次使用,建议是放到Activity的onDestroy方法中执行。

videoView.destroy();

注意该方法只是销毁播放器,和播放器相关联的控件(例如PPT、控制、跑马灯)等不会在里面做销毁处理,需要另行销毁。

该方法的用例在PolyvCommonVideoHelper类的destory方法中可以找到。

Clone this wiki locally